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?
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
[ROZWIĄZANE] Obrazenia w CoD | cod_inflict_damage() & 1/x broni & dodatkowe dmg
Najlepsza odpowiedź BlackPerfum, 29.06.2014 13:41
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)A czy nie powinno to byc DMG_CODSKILL ? Bo w codmod.inc jest cos takiego zdefiniowane.
Nie raz na parę razy wcześniej gracz umiera niż zostanie ustawione pdata dlatego samemu zacząłem je ustawiaćad 3. A nie wystarczy samo ExecuteHamB(Ham_Killed, vid, kid, 1) ?
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" O dziwo nie tylko w deathmsg jest takie samo classnameTak właściwie to dlaczego ta ikonka sie taka niepoprawna robi? Przeciez obrazenia zadaje gracz z jego broni. Wystarczy ustawic chyba damagebits..
Błędy np. takie że dostaniemy minimalnie więcej expa niż powinniśmy lub zabierze nam mniej wytrzymałości przedmiotu niż powinno Takiego typu błędyJakich błędów? Nie gram na CoD'ach ( chyba ze na swoim ). Powiedz jaka jest ta różnica.
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 dmgad 5. A nie mozna za pomoca cod_inflict_damage tego rozwiazac?
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łą6. Zmienna statyczna tez jest niszczona po wykonaniu funkcji? Jakie zastosowanie to ma praktyczne?
Ja zauważyłem tylko jedną (może być więcej):7. Jaka jest roznica miedzy const a new const?
• 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ć 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 Jest tam ich Przejdź do postu
#1
Napisano 28.06.2014 20:13
#2
Napisano 28.06.2014 20:56
1. dmg z rakiety/miny/dynamitu to jakie damagebits?
Takie jakie sobie ustawisz w ostatnim parametrze cod_inflict_damage/ExecuteHam/ExecuteHamB
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
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
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#3
Napisano 29.06.2014 06:58
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.
#4
Napisano 29.06.2014 13:41 Najlepsza odpowiedź
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)A czy nie powinno to byc DMG_CODSKILL ? Bo w codmod.inc jest cos takiego zdefiniowane.
Nie raz na parę razy wcześniej gracz umiera niż zostanie ustawione pdata dlatego samemu zacząłem je ustawiaćad 3. A nie wystarczy samo ExecuteHamB(Ham_Killed, vid, kid, 1) ?
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" O dziwo nie tylko w deathmsg jest takie samo classnameTak właściwie to dlaczego ta ikonka sie taka niepoprawna robi? Przeciez obrazenia zadaje gracz z jego broni. Wystarczy ustawic chyba damagebits..
Błędy np. takie że dostaniemy minimalnie więcej expa niż powinniśmy lub zabierze nam mniej wytrzymałości przedmiotu niż powinno Takiego typu błędyJakich błędów? Nie gram na CoD'ach ( chyba ze na swoim ). Powiedz jaka jest ta różnica.
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 dmgad 5. A nie mozna za pomoca cod_inflict_damage tego rozwiazac?
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łą6. Zmienna statyczna tez jest niszczona po wykonaniu funkcji? Jakie zastosowanie to ma praktyczne?
Ja zauważyłem tylko jedną (może być więcej):7. Jaka jest roznica miedzy const a new const?
• 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ć 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 Jest tam ich
Użytkownik BlackPerfum edytował ten post 29.06.2014 13:45
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#5
Napisano 29.06.2014 14:40
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
#6
Napisano 29.06.2014 15:23
Nie ma to najmniejszego znaczenia
Dlaczego tak? Nie mogło by być bez tego? Jak bullet to bullet a nie jeszcze dmgCoD
Musisz łapać
Wystarczy czy muszę DeathMsg łapać?
Nie da się naprawić da się to całkowicie przerobić ale takie przerabianie nie ma najmniejszego sensu
No mistrzuniu. Oto chodzi. Chodzi o naprawienie tego.
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#7
Napisano 29.06.2014 15:32
Nie ma to najmniejszego znaczenia
Dlaczego?
Nie da się naprawić da się to całkowicie przerobić ale takie przerabianie nie ma najmniejszego sensu
Nom dawaj pomysł
Musisz łapać
To ja podziękuje . Ustawie tylko damagebits
#8
Napisano 29.06.2014 15:44
Bo w uchwycie funkcji Ham_TakeDamage sprawdzasz rodzaj dmg tak:Dlaczego?
if(damagebits & DMG_BULLET)a nie tak:
if(damagebits == DMG_BULLET)
To sprawi iż w prawym górnym rogu nie będzie pokazywac broni a jedynie czaszkę przy zabiciu I dodam że damagebits się ustawia samo ale za wolno dlatego ja je ustawiam tu Tzn. jeśli usuniesz łapanie deathmsg to nie potrzebne ci jest ustawianie damagebitsUstawie tylko damagebits
Nie bo pisanie w ten sposób jest sprzeczne z założeniami tworzenia funkcji Przedstawię o co chodziNom dawaj pomysł
Mój kod:
new zmienna = 5 zmienna = zmienna + 1 zmienna = zmienna - 5Twó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
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#9
Napisano 29.06.2014 15:53
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ę )
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 )
#10
Napisano 29.06.2014 16:21
Na drugim(od prawej)... (bo pierwsze to liczba 1 (1<<0) a drugie 2 (1<<1)) Najpierw ci wytłumacze co robi operator &Nie rozumiem tego damagebits & DMG_BULLET. Czyli że na pierwszym bicie jest jedynka? (nie śmiej się )
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<<25W 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
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#11
Napisano 29.06.2014 17:29
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 operatoraNie sumę, absolutnie. Operator sumy bitowej to |
& to iloczyn bitowy (inaczej koniunkcja)! Ale poza tym nazewnictwem wszystko ok.
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#12
Napisano 29.06.2014 18:34
#13
Napisano 29.06.2014 18:44
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#14
Napisano 29.06.2014 20:11
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)
#15
Napisano 29.06.2014 20:48
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 Ale to jakieś przydatne wcale nie jest było by gdyby wszyscy tego używali
Czy damagebits moze zawierac kilka typow naraz? Np (1<<1) i (1<<24)
Tak
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#16
Napisano 30.06.2014 07:41
Ale jakim cudem? Naraz gracz dostanie z he i strzeli ktos w niego?
No bo dodac mozna. To wiem
#17
Napisano 30.06.2014 09:36
Normalnie się nieda ale możesz zrobic plugin który zadaje dmg tak:Ale jakim cudem? Naraz gracz dostanie z he i strzeli ktos w niego?
No bo dodac mozna. To wiem
ExecuteHamB(Ham_TakeDamage,id,attacker,attacker,Damage,DMG_BULLET|1<<24)Przez coś takiego nie da się rozróżnić (w pluginie w łatwy sposó czy ty naprawdę strzeliłeś czy jakiś inny plugin zadał komuś dmg
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#18
Napisano 30.06.2014 09:45
Odnosnie CoD - bedzie roznica jak usune damagebits z CoD?
#19
Napisano 30.06.2014 10:10
Nie chyba że jakiś plugin sprawdza to 1<<31 w damagebits a to już musisz sam sprawdzićOdnosnie CoD - bedzie roznica jak usune damagebits z CoD?
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
#20
Napisano 30.06.2014 10:23
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych