←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

hitzone

  • +
  • -
Engi's Photo Engi 17.03.2013

Jeżeli dobrze zrobiłem to ten kod powinien powodować, że gracza można zabić tylko w głowę, teraz pytanie jak przerobić ten kod żeby pociski w głowę zawsze trafiały a w resztę ciała była szansa uniknięcia pocisku od 1/2 do 1/4 ?



public fw_traceline(Float:vecStart[3],Float:vecEnd[3],ignoreM,id,trace)
{
if(!is_user_connected(id))
return;

new hit = get_tr2(trace, TR_pHit);

if(!is_user_connected(hit))
return;

new hitzone = get_tr2(trace, TR_iHitgroup);
if(informacje_przedmiotu_gracza[hit][0] == 52 && hitzone != HIT_HEAD)
set_tr2(trace, TR_iHitgroup, 8);
}
Quote

Gość_21977_* 17.03.2013

Dla 1/3
#define IsPlayer(%1) (1<=%1<=maxPlayers)

new maxPlayers;

public plugin_cfg(){
maxPlayers=get_maxplayers();
}

public Ham_TraceAttack_playerPre(vid, id, Float:damage, Float:dir[3], tr, damagebits){
if(
informacje_przedmiotu_gracza[vid][0]==52
&& IsPlayer(id)
&& id!=vid
&& damagebits & DMG_BULLET
&& !random(3)
&& get_tr2(tr, TR_iHitgroup)!=HIT_HEAD
){
SetHamParamFloat(3, 0.0);
return HAM_HANDLED;
}
return HAM_IGNORED;
}
Quote

  • +
  • -
Engi's Photo Engi 17.03.2013

public Ham_TraceAttack_playerPre(vid, id, Float:damage, Float:dir[3], tr, damagebits){
if(
informacje_przedmiotu_gracza[vid][0]==52
&& IsPlayer(id)
&& id!=vid
&& damagebits & DMG_BULLET
&& !random_num(2,4 == 1)
&& get_tr2(tr, TR_iHitgroup)!=HIT_HEAD
){
SetHamParamFloat(3, 0.0);
return HAM_HANDLED;
}
return HAM_IGNORED;
}


Tak zrobiłem i wyświetla się zamiast np 1/2 to 1/0 + po dodaniu itemu żadna klasa nie dostaje zapasowej amunicji
Quote

Gość_21977_* 17.03.2013

!random_num(2,4 == 1)
Skąd w ogóle taki pomysł?

@edit. Ten kod nie powoduje wyświetlania niczego, nie wpływa też na dodawaną amunicję.
Quote

  • +
  • -
Engi's Photo Engi 17.03.2013

A stąd, że potrzebuje żeby losował od 1/2 do 1/4 a nie tylko 1/3, fakt amunicja to był inny problem który rozwiązałem
Quote

Gość_21977_* 17.03.2013

od 1/2 do 1/4

Możesz z polskiego na nasze?
Quote

  • +
  • -
Engi's Photo Engi 17.03.2013

Potrzebuje żeby było 1/LW z zakresu 1/2-1/4 czyli raz będzie 1/2, innym razem 1/4 a jeszcze innym 1/3
Quote

Gość_21977_* 17.03.2013

#define IsPlayer(%1) (1<=%1<=maxPlayers)

new maxPlayers;

public plugin_cfg(){
maxPlayers=get_maxplayers();
}

public Ham_TraceAttack_playerPre(vid, id, Float:damage, Float:dir[3], tr, damagebits){
if(
informacje_przedmiotu_gracza[vid][0]==52
&& IsPlayer(id)
&& id!=vid
&& damagebits & DMG_BULLET
&& random(8)<3
&& get_tr2(tr, TR_iHitgroup)!=HIT_HEAD
){
SetHamParamFloat(3, 0.0);
return HAM_HANDLED;
}
return HAM_IGNORED;
}
Quote

  • +
  • -
Engi's Photo Engi 17.03.2013

Wyświetla zawsze 1/0 i nie działa.
Quote

Gość_21977_* 17.03.2013

Przecież tutaj nic się nie wyświetla
Quote

  • +
  • -
Engi's Photo Engi 17.03.2013

Już sobie naprawiłem wyświetlanie, teraz tak: nie wiem jak to dokładnie opisać, zamiast mieć 1/LW szans na uniknięcie pocisku w ciało (oprócz głowy bo w głowe ma zawsze trafiać) to jest 1/LW szans na trafienie headshota kiedy strzela się w ciało
Quote

  • +
  • -
GwynBleidD's Photo GwynBleidD 18.03.2013

Hmm, czy mi się dobrze wydaje, że szansa 1/3 oznacza, że mamy 33% szans, że trafimy? Co oznacza losowość... Po co wprowadzać dodatkową losowość do losowości? To tak jakbym chciał wyrzucić jedynkę, ale przy każdym rzucie losowo zmieniał kostkę na jedną z tych trzech: 2 ścienna (moneta), 3 ścienna (załóżmy, że moneta, która ma 33% szans, że spadnie na kant) i 4 ścienna... Wynik prawdopodobieństwa będzie taki sam, jak dla rzucania non stop 3 ścienną kostką... No można, ale się pytam PO CO?

@playaz44, wstawiasz nam kod, w którym nie ma ani 1 linii dotyczącej wyświetlania i narzekasz, że Ci wyświetlanie nie działa? Co do Twojego ostatniego postu, chcesz teraz uzyskać odwrotność tego, o co wcześniej prosiłeś? Czy benio dał Ci kod działający odwrotnie niż chciałeś? bo nic z Twojego postu nie rozumiem..
Quote

  • +
  • -
K!113r's Photo K!113r 18.03.2013

Hmm, czy mi się dobrze wydaje, że szansa 1/3 oznacza, że mamy 33% szans, że trafimy? Co oznacza losowość... Po co wprowadzać dodatkową losowość do losowości? To tak jakbym chciał wyrzucić jedynkę, ale przy każdym rzucie losowo zmieniał kostkę na jedną z tych trzech: 2 ścienna (moneta), 3 ścienna (załóżmy, że moneta, która ma 33% szans, że spadnie na kant) i 4 ścienna... Wynik prawdopodobieństwa będzie taki sam, jak dla rzucania non stop 3 ścienną kostką... No można, ale się pytam PO CO?

@playaz44, wstawiasz nam kod, w którym nie ma ani 1 linii dotyczącej wyświetlania i narzekasz, że Ci wyświetlanie nie działa? Co do Twojego ostatniego postu, chcesz teraz uzyskać odwrotność tego, o co wcześniej prosiłeś? Czy benio dał Ci kod działający odwrotnie niż chciałeś? bo nic z Twojego postu nie rozumiem..


Zapewne jest to perk pod cod mod, przy losowaniu zdobytego perku losowana jest "losowość" :)
Teoretycznie takie perki mają w opisie szanse 1/lw, gdzie lw to losowana liczba, więc trochę ma sens bo perk z szansą 1/2 jest teoretycznie którzy od tego z szansą 1/6.
Quote

  • +
  • -
GwynBleidD's Photo GwynBleidD 18.03.2013

No rozumiem losowość w momencie zdobycia perku, ale przy każdym jego użyciu?
Quote

  • +
  • -
Engi's Photo Engi 18.03.2013

GwynBleidD, teraz to ja nie wiem o co ci chodzi


Item ma działać tak żeby obrażenia w głowę zawsze wchodziły a w reszte ciała szansa uniknięcie pocisku wynosiła 1/LW gdzie LW to wartość wybierana losowo od 1/2 do 1/4 czyli jak ktoś zdobędzie item to raz będzie miał 1/2 na uniknięcie pocisku, innego razu 1/4 a jeszcze innego 1/3, innego razu czyli jak wyrzuci item i zdobędzie go jeszcze raz, bardziej łopatologicznie nie umiem tego napisać.


A ten kod co podał benio działa tak, że kiedy strzela się w ciało to jest 1/LW szans na trafienie headshota czyli to samo co item "1/10 na headshota z AWP" który ma taki kod:

public fw_traceline(Float:vecStart[3],Float:vecEnd[3],ignoreM,id,trace)
{
if(!is_user_connected(id))
return;

new hit = get_tr2(trace, TR_pHit);

if(!is_user_connected(hit))
return;

new hitzone = get_tr2(trace, TR_iHitgroup);
if(informacje_przedmiotu_gracza[id][0] == 69 && !random(10) && get_user_weapon(id) == CSW_AWP)
set_tr2(trace, TR_iHitgroup, HIT_HEAD);
}

Edited by playaz44, 18.03.2013 15:44.
Quote

Gość_21977_* 18.03.2013

Widzę, że początkowo zrozumiałem Ciebie podobnie, jak GwynBleidD, widząc losową wartość od 1/4 do 1/2, dałem Ci kod z szansą 1/3 (ten w pierwszym moim poście w tym temacie), gdyż 3 jest pomiędzy 2 a 4, a losowanie losowej liczby mija się z celem.
Następnie jednak pomyślałem, że chcesz średnią arytmetyczną 1/4 i 1/2, co daje 37,5%, nie 33,(3), stąd random(8)<3.

Teraz jednak dopiero widzę (bo chyba dopiero teraz to napisałeś), że kod ma losować wartość przy każdym evencie, którego kodu nam jednak nie podałeś, więc nie oczekuj gotowca, skoro nie wiemy, gdzie ten kod podać.
Pomijając to jednak, kod, który Ci podałem ma, odpowiednio w pierwszym poście 33,(3)%, a w drugim 37,5% szansy na uniknięcie pocisku, o ile nie został on wycelowany w głowę, a nie, jak napisałeś w poście wyżej, zmiany hitzone na głowę.
Nie wiem, skąd ten pomysł, gdyż nawet nie zmieniam w podanym przeze mnie kodzie, hitzone, tym bardziej, nie rozumiem Twojej odpowiedzi, zwłaszcza porównania tego kanapkowego kodu z podanym przez ciebie tracelinem fakemetowym.

Podsumowując, nie wiem już, o co ci chodzi, jeśli wyraziłeś się jasno, a nie zrozumiałem, to najmocniej przepraszam.
Quote

  • +
  • -
GwynBleidD's Photo GwynBleidD 18.03.2013

Kod benia daje Ci 1/3 na hit w inne części ciała, niż głowa. W głowę zawsze. Jeśli chcesz sobie przerobić, wstaw zamiast
random(8)<3

kod:
random(zmienna)

Gdzie zmienna, to LW wylosowane przy podnoszeniu itemu. Prorokami nie jesteśmy i na podstawie tego, co nam dałeś tylko tyle jesteśmy w stanie Ci podpowiedzieć. Reszta już należy do Ciebie, chyba że dasz coś więcej nam.
Quote

  • +
  • -
Engi's Photo Engi 18.03.2013

Kod benia daje Ci 1/3 na hit w inne części ciała, niż głowa. W głowę zawsze


Właśnie to nie działa*, z tym "od 1/2 do 1/4" to fakt, mój błąd bo mogłem od razu to określić


Nie wiem, skąd ten pomysł, gdyż nawet nie zmieniam w podanym przeze mnie kodzie, hitzone, tym bardziej, nie rozumiem Twojej odpowiedzi, zwłaszcza porównania tego kanapkowego kodu z podanym przez ciebie tracelinem fakemetowym.


*Tak jak wyżej napisałem, item nie działa tak jak powinien, niby jak wpisuje /item to wyświetla się 1/2 ale każdy pocisk trafia i zabiera hp niezależnie gdzie się strzeli i kiedy strzela się w inną część ciała niż głowa to wchodzą headshoot'y a nie powinny. W porównaniu chodziło mi o to, że ten kanapkowy kod zachowuje się jak ten fakemetowy
Edited by playaz44, 18.03.2013 22:44.
Quote