←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Obrazenia w CoD | cod_inflict...


Najlepsza odpowiedź BlackPerfum 29.06.2014 13:41

A czy nie powinno to byc DMG_CODSKILL ? Bo w codmod.inc jest cos takiego zdefiniowane.

Alez to nie ma różnicy czy to będzie DMG_CODSKILL czy coś innego ważne by nie posiadało dwóch bitów 1<<1(strzał) i 1<<24(he) (no najlepiej nie zadawać żadnego dotychczas zdefiniowanego)
 

ad 3. A nie wystarczy samo ExecuteHamB(Ham_Killed, vid, kid, 1) ?

Nie raz na parę razy wcześniej gracz umiera niż zostanie ustawione pdata dlatego samemu zacząłem je ustawiać biggrin.png

 

Tak właściwie to dlaczego ta ikonka sie taka niepoprawna robi? Przeciez obrazenia zadaje gracz z jego broni. Wystarczy ustawic chyba damagebits..

Bo nie informujemy ham'a o tym czym zabijamy gracza. Ta funkcja została stworzona z zmyślą o zabiajania go czymś innym niż normalnymi broniami dlatego classname byt'u zabijającego (którego właścicielem jest gracz który zabija) jest "world" sad.png O dziwo nie tylko w deathmsg jest takie samo classname
 

Jakich błędów? Nie gram na CoD'ach ( chyba ze na swoim ). Powiedz jaka jest ta różnica.

Błędy np. takie że dostaniemy minimalnie więcej expa niż powinniśmy lub zabierze nam mniej wytrzymałości przedmiotu niż powinno kwasny.gif Takiego typu błędy
 

ad 5. A nie mozna za pomoca cod_inflict_damage tego rozwiazac?

Rozwiązaniem by było przerobieniem całkowicie tej funkcji a wtedy rezultat będzie taki sam jak używanie: ExecuteHamB do zadawania dmg i SetHamParamFloat do modyfikowania dmg
 

6. Zmienna statyczna tez jest niszczona po wykonaniu funkcji? Jakie zastosowanie to ma praktyczne?

Nie ale być może wartość tej zmiennej zmiania adres ale nigdy tego nie sprawdzałem. Np. nie musisz co 1/x sec robić y zmiennych w think'ach wszystkich bytów nad którymi operujesz. Wystarczy że raz utworzysz stałą
 

7. Jaka jest roznica miedzy const a new const?

Ja zauważyłem tylko jedną (może być więcej):

• Jeśli użyjesz new const to nie musisz od razu przy tworzeniu nadawać zmiennej wartość to znaczy ta Stała tak naprawdę jest zmienną gdyż może (podczas wykonywania kodu) zawierać dwie różne wartości albo x albo 0. 0 to jej standardowa wartość a x to nadana przez ciebie. Jak już takiej stałej nadasz wartość to już nie możesz tej wartości zmienić sad.png Niestety nadać wartośc takiej zmiennej nie jest łatwo (podczas wykonywania kodu nie przy tworzeniu). Ngdy nie sprawdzałem jak ale wiem że się da ;d

• Jeśli użyjesz const to musisz od razu nadać swojej stałej wartość a zatem może miec ona zawsze tylko jedną wartość tą którą ty jej nadajesz
.

Przez ta różnicę stałą new const nie można użyć przy tworzeniu tablicy jako ilośc komórek sad.png Jest tam ich Przejdź do postu

  • +
  • -
Rivit - zdjęcie Rivit 28.06.2014

Witam.
Odnosnie tego tematu: http://amxx.pl/topic...-setparamfloat/
od 8 posta zaczalem sie pytac jak **** zamiast zalozyc wlasny temat. I prosilbym o przeczytanie od tamtego momentu.

1. dmg z rakiety/miny/dynamitu to jakie damagebits?
2. Czyli jak sobie dodam w silniku CoD to 'B' to będę mogl zadawac dmg (nie dodawac tylko zadawac)? Np z rakiety. Intuicja mowi mi ze tak.
3. W tym kodzie co podal BlackPerfum (2 post) to za poprawne wyswietlanie ikonki odpowiada funkcja KillPlayer czy to zlapane DeathMsg?
4. Czyli szanse na 1/x z broni/he mam umiescic w takedamage pre? Jakie parametry
ma ta funkcja (w naglowku)?
5. Czyli dodawac dmg mam za pomoca SetHamParamFloat?

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 28.06.2014

1. dmg z rakiety/miny/dynamitu to jakie damagebits?

Takie jakie sobie ustawisz w ostatnim parametrze cod_inflict_damage/ExecuteHam/ExecuteHamB biggrin.png
 

2. Czyli jak sobie dodam w silniku CoD to 'B' to będę mogl zadawac dmg (nie dodawac tylko zadawac)? Np z rakiety. Intuicja mowi mi ze tak.

Tak (bez tego B też możesz ale jest to sprzeczne z grą i nie kompatybilne z innymi pluginami)
 

3. W tym kodzie co podal BlackPerfum (2 post) to za poprawne wyswietlanie ikonki odpowiada funkcja KillPlayer czy to zlapane DeathMsg?

I to i to bo bez KillPlayer nie ustawisz poprawnego damagebits które jest potrzebne do poprawnego działania DeathMsg
 

4. Czyli szanse na 1/x z broni/he mam umiescic w takedamage pre?

Teoretycznie zapewni to większą optymalność + brak głupich błędów a praktycznie to prawie żadnej różnicy nie robi :( Różnice zobaczysz jeśli będziesz 2 lata expił z 1/x w pre i z 1/x w post :D
 

Jakie parametry
ma ta funkcja (w naglowku)?

Jaka funkcja?? Ham_Killed(tylko że to nagłówek nie jest)?
 

ExecuteHam/ExecuteHamB(Ham_Killed,x,y,z)

• x - osoba która ma zostać zabita (1~32)
• y - osoba która zabija osobe x (1~32)
• z - czy ciało osoby zabitej ma zostać pokażane


DeathMsg Ma trzy parametry:
1. - Id wiadomości (to samo co get_user_msg)
2. - Typ wiadomości. Dostępne typy:

#define MSG_BROADCAST		0 // Zawodne wysłanie do wszystkich
#define MSG_ONE			1 // Pewne wysłanie do jednego gracza
#define MSG_ALL			2 // Pewne do wszystkich graczy
#define MSG_INIT 		3 // Write to the init string
#define MSG_PVS 		4 // Ents in PVS of origin
#define MSG_PAS 		5 // Ents in PAS of origin
#define MSG_PVS_R 		6 // Reliable to PVS
#define MSG_PAS_R 		7 // Reliable to PAS
#define MSG_ONE_UNRELIABLE	8 // Zawodne wysłanie do 1 gracza
#define MSG_SPEC		9 // do wszystkich widzów

3. - Id odbiorcy (id osoby do której dochodzi wiadomość a nie jej wykonawcy)
 

(Bo takedamage to chyba wiesz)

 

5. Czyli dodawac dmg mam za pomoca SetHamParamFloat?

Tak

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014

ad 1.
A czy nie powinno to byc DMG_CODSKILL ? Bo w codmod.inc jest cos takiego zdefiniowane.

ad 2. rozumiem

ad 3. A nie wystarczy samo ExecuteHamB(Ham_Killed, vid, kid, 1) ?
Tak właściwie to dlaczego ta ikonka sie taka niepoprawna robi? Przeciez obrazenia zadaje gracz z jego broni. Wystarczy ustawic chyba damagebits...

ad 4. Jakich błędów? Nie gram na CoD'ach ( chyba ze na swoim ). Powiedz jaka jest ta różnica.
Parametry rozumiem.

ad 5. A nie mozna za pomoca cod_inflict_damage tego rozwiazac? Chodzi mi o jakas modyfikacje tej funkcji zeby mozna bylo dodawac i zadawac dmg. Zeby zwracala SetHamParamFloat i tu wartosci uwzglednic jakie sa przeslane do tej funkcji ?
Moze glupi pomysl ale zawsze warto spytac

6. Zmienna statyczna tez jest niszczona po wykonaniu funkcji? Jakie zastosowanie to ma praktyczne?

7. Jaka jest roznica miedzy const a new const?

Sorki ze dokladam ale to chyba ostatnie pytania. dzięki z odp.
Odpowiedz

  • +
  • -
Najlepsza odpowiedź BlackPerfum - zdjęcie BlackPerfum 29.06.2014

A czy nie powinno to byc DMG_CODSKILL ? Bo w codmod.inc jest cos takiego zdefiniowane.

Alez to nie ma różnicy czy to będzie DMG_CODSKILL czy coś innego ważne by nie posiadało dwóch bitów 1<<1(strzał) i 1<<24(he) (no najlepiej nie zadawać żadnego dotychczas zdefiniowanego)
 

ad 3. A nie wystarczy samo ExecuteHamB(Ham_Killed, vid, kid, 1) ?

Nie raz na parę razy wcześniej gracz umiera niż zostanie ustawione pdata dlatego samemu zacząłem je ustawiać biggrin.png

 

Tak właściwie to dlaczego ta ikonka sie taka niepoprawna robi? Przeciez obrazenia zadaje gracz z jego broni. Wystarczy ustawic chyba damagebits..

Bo nie informujemy ham'a o tym czym zabijamy gracza. Ta funkcja została stworzona z zmyślą o zabiajania go czymś innym niż normalnymi broniami dlatego classname byt'u zabijającego (którego właścicielem jest gracz który zabija) jest "world" sad.png O dziwo nie tylko w deathmsg jest takie samo classname
 

Jakich błędów? Nie gram na CoD'ach ( chyba ze na swoim ). Powiedz jaka jest ta różnica.

Błędy np. takie że dostaniemy minimalnie więcej expa niż powinniśmy lub zabierze nam mniej wytrzymałości przedmiotu niż powinno kwasny.gif Takiego typu błędy
 

ad 5. A nie mozna za pomoca cod_inflict_damage tego rozwiazac?

Rozwiązaniem by było przerobieniem całkowicie tej funkcji a wtedy rezultat będzie taki sam jak używanie: ExecuteHamB do zadawania dmg i SetHamParamFloat do modyfikowania dmg
 

6. Zmienna statyczna tez jest niszczona po wykonaniu funkcji? Jakie zastosowanie to ma praktyczne?

Nie ale być może wartość tej zmiennej zmiania adres ale nigdy tego nie sprawdzałem. Np. nie musisz co 1/x sec robić y zmiennych w think'ach wszystkich bytów nad którymi operujesz. Wystarczy że raz utworzysz stałą
 

7. Jaka jest roznica miedzy const a new const?

Ja zauważyłem tylko jedną (może być więcej):

• Jeśli użyjesz new const to nie musisz od razu przy tworzeniu nadawać zmiennej wartość to znaczy ta Stała tak naprawdę jest zmienną gdyż może (podczas wykonywania kodu) zawierać dwie różne wartości albo x albo 0. 0 to jej standardowa wartość a x to nadana przez ciebie. Jak już takiej stałej nadasz wartość to już nie możesz tej wartości zmienić sad.png Niestety nadać wartośc takiej zmiennej nie jest łatwo (podczas wykonywania kodu nie przy tworzeniu). Ngdy nie sprawdzałem jak ale wiem że się da ;d

• Jeśli użyjesz const to musisz od razu nadać swojej stałej wartość a zatem może miec ona zawsze tylko jedną wartość tą którą ty jej nadajesz
.

Przez ta różnicę stałą new const nie można użyć przy tworzeniu tablicy jako ilośc komórek sad.png Jest tam ich
Użytkownik BlackPerfum edytował ten post 29.06.2014 13:45
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014


TibacK, dnia 29 Cze 2014 - 07:58, napisał:

A czy nie powinno to byc DMG_CODSKILL ? Bo w codmod.inc jest cos takiego zdefiniowane.

Alez to nie ma różnicy czy to będzie DMG_CODSKILL czy coś innego ważne by nie posiadało dwóch bitów 1<<1(strzał) i 1<<24(he) (no najlepiej nie zadawać żadnego dotychczas zdefiniowanego)
public ZadajObrazenia(atakujacy, ofiara, Float:obrazenia, Float:czynnik_inteligencji, byt_uszkadzajacy, dodatkowe_flagi)
	ExecuteHamB(Ham_TakeDamage, ofiara, byt_uszkadzajacy, atakujacy, obrazenia+PobierzInteligencje(atakujacy, 1, 1, 1)*czynnik_inteligencji, (1<<31) | dodatkowe_flagi);

Na końcu i tak dodaje się damagebits DMG_CODSKILL (1<<31)

Dlaczego tak? Nie mogło by być bez tego? Jak bullet to bullet a nie jeszcze dmgCoD

 


TibacK, dnia 29 Cze 2014 - 07:58, napisał:

ad 3. A nie wystarczy samo ExecuteHamB(Ham_Killed, vid, kid, 1) ?

Nie raz na parę razy wcześniej gracz umiera niż zostanie ustawione pdata dlatego samemu zacząłem je ustawiać biggrin.png
KillPlayer(id,attacker,damagebits)
{
    set_pdata_int(id,m_bitsDamageType,damagebits)
    ExecuteHamB(Ham_Killed, id, attacker, 1)
}

Ustawianie damagebits + kill - Wystarczy czy muszę DeathMsg łapać?

 


TibacK, dnia 29 Cze 2014 - 07:58, napisał:

ad 5. A nie mozna za pomoca cod_inflict_damage tego rozwiazac?

Rozwiązaniem by było przerobieniem całkowicie tej funkcji a wtedy rezultat będzie taki sam jak używanie: ExecuteHamB do zadawania dmg i SetHamParamFloat do modyfikowania dmg

 

No mistrzuniu. Oto chodzi. Chodzi o naprawienie tego.

 

ad 6, 7  Rozumiem

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 29.06.2014


Dlaczego tak? Nie mogło by być bez tego? Jak bullet to bullet a nie jeszcze dmgCoD
Nie ma to najmniejszego znaczenia :D

 


Wystarczy czy muszę DeathMsg łapać?
Musisz łapać

 


No mistrzuniu. Oto chodzi. Chodzi o naprawienie tego.
Nie da się naprawić da się to całkowicie przerobić ale takie przerabianie nie ma najmniejszego sensu :D
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014


Nie ma to najmniejszego znaczenia :D

 

Dlaczego?

 


Nie da się naprawić da się to całkowicie przerobić ale takie przerabianie nie ma najmniejszego sensu :D

 

Nom dawaj pomysł :D

 


Musisz łapać

 

To ja podziękuje xD. Ustawie tylko damagebits :]

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 29.06.2014

Dlaczego?

Bo w uchwycie funkcji Ham_TakeDamage sprawdzasz rodzaj dmg tak:
if(damagebits & DMG_BULLET)
a nie tak:
if(damagebits == DMG_BULLET)

Ustawie tylko damagebits

To sprawi iż w prawym górnym rogu nie będzie pokazywac broni a jedynie czaszkę przy zabiciu sad.png I dodam że damagebits się ustawia samo ale za wolno dlatego ja je ustawiam tu biggrin.png Tzn. jeśli usuniesz łapanie deathmsg to nie potrzebne ci jest ustawianie damagebits
 

Nom dawaj pomysł

Nie bo pisanie w ten sposób jest sprzeczne z założeniami tworzenia funkcji biggrin.png Przedstawię o co chodzi

Mój kod:
new zmienna = 5
zmienna = zmienna + 1
zmienna = zmienna - 5
Twój kod:
new zmienna
Modyfikuj(zmienna,false,1)
Modyfikuj(zmienna,true,5)

Modyfikuj(&zmienna,bool:tryb,change)
{
	if(tryb) zmienna = zmienna + change
	else zmienna = zmienna - change
}
Efekt ten sam a różnice w kodzie widzisz
Użytkownik BlackPerfum edytował ten post 29.06.2014 15:44
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014


Bo w uchwycie funkcji Ham_TakeDamage sprawdzasz rodzaj dmg tak:

if(damagebits & DMG_BULLET)

a nie tak:

if(damagebits == DMG_BULLET)

 

No ale jak jest 1<<24 to też jest 1<<1

Nie rozumiem tego damagebits & DMG_BULLET. Czyli że na pierwszym bicie jest jedynka? (nie śmiej się xD :) )

 


To sprawi iż w prawym górnym rogu nie będzie pokazywac broni a jedynie czaszkę przy zabiciu sad.png I dodam że damagebits się ustawia samo ale za wolno dlatego ja je ustawiam tu biggrin.png Tzn. jeśli usuniesz łapanie deathmsg to nie potrzebne ci jest ustawianie damagebits

 

Odpuszczę sobie to już :)

 


Efekt ten sam a różnice w kodzie widzisz

 

Aha. Czyli nie ma sensu przez natyw bo i tak by to dało ten sam efekt. Okej to mamy z głowy (wybiłeś mi naprawe z głowy xD )

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 29.06.2014

Nie rozumiem tego damagebits & DMG_BULLET. Czyli że na pierwszym bicie jest jedynka? (nie śmiej się )

Na drugim(od prawej)... (bo pierwsze to liczba 1 (1<<0) a drugie 2 (1<<1)) Najpierw ci wytłumacze co robi operator &

A zatem operator & porównuje bity w liczbach i zwraca ich sumę. Pokaże na przykładzie:
new zmienna
zmienna = 1<<2|1<<4|1<<0|1<<9 & 1<<4|1<<2|1<<25
W takim wypadku zmienna równa się liczbie 20 (1<<4 + 1<<2) Dlaczego? Przypatrz się. W liczbach po obu stronach tylko te bity są takie same ;D

Wynika z tego że nie przyszkadzają nam inne bity przy sprawdzaniu :D
GwynBleidD (29.06.2014 17:06):
Nie sumę, absolutnie. Operator sumy bitowej to |

& to iloczyn bitowy (inaczej koniunkcja)! Ale poza tym nazewnictwem wszystko ok.
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 29.06.2014

Nie sumę, absolutnie. Operator sumy bitowej to |

& to iloczyn bitowy (inaczej koniunkcja)! Ale poza tym nazewnictwem wszystko ok.

Bardzo przepraszam nienawidze uczyć się terminów na pamięć bo to strata czasu/wolnej przestrzeni w mózgu (której i tak mam już pewnie mało)/sił Ważne że moja teoria pokrywa się z teorią tego operatora xD
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014

Czyli to po prostu sprawdza czy jedno 'powtarza sie' w drugim? Mam z tym problemy jak cholera.
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 29.06.2014

Mniej więcej tak ale pamiętaj że to nie daje nam logicznych wartości prawda/fałsz
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014

Dobra.
To po co jest w cod_inflict_damage() dodawane to damagebits (1<<31) ? Po co to komu?

Czy damagebits moze zawierac kilka typow naraz? Np (1<<1) i (1<<24)
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 29.06.2014

To po co jest w cod_inflict_damage() dodawane to damagebits (1<<31) ? Po co to komu?

Pewnie autor tej funkcji spodziewał się że tak będzie sprawdzane czy dmg zostało zadane za pomoca funkcji z cod'a xD Ale to jakieś przydatne wcale nie jest było by gdyby wszyscy tego używali xD
 

Czy damagebits moze zawierac kilka typow naraz? Np (1<<1) i (1<<24)

Tak

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 30.06.2014

Dobra to usune te nie potrzebne damagebits

Ale jakim cudem? Naraz gracz dostanie z he i strzeli ktos w niego?

No bo dodac mozna. To wiem :)
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 30.06.2014

Ale jakim cudem? Naraz gracz dostanie z he i strzeli ktos w niego?

No bo dodac mozna. To wiem

Normalnie się nieda ale możesz zrobic plugin który zadaje dmg tak:
ExecuteHamB(Ham_TakeDamage,id,attacker,attacker,Damage,DMG_BULLET|1<<24)
Przez coś takiego nie da się rozróżnić (w pluginie w łatwy sposó B) czy ty naprawdę strzeliłeś czy jakiś inny plugin zadał komuś dmg :D
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 30.06.2014

Super. dzięki Ci wielkie.

Odnosnie CoD - bedzie roznica jak usune damagebits z CoD?
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 30.06.2014

Odnosnie CoD - bedzie roznica jak usune damagebits z CoD?

Nie chyba że jakiś plugin sprawdza to 1<<31 w damagebits a to już musisz sam sprawdzić xD
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 30.06.2014

Dobra. A czy jak mam perk na rakiety i ustawiam rakiecie damagebits (1<<31) to złapie to w TakeDamage? Bo to by sie przydalo do perku na odpornosc na rakiety czy cos :)
Odpowiedz