[HamSandwich] Ham_Killed a zabicie z granata
ogieR8
23.03.2017
Witam, wróciłem !
Analizując tematy:
https://amxx.pl/topi...na-obrażeniach/
oraz
https://amxx.pl/topi...brażenia/page-2
wiem jak działać w evencie ham_TakeDamage, ale naszło mnie coś kilka dni temu, wróciłem do Notepad'a i chciałbym to zrealizować - ale w kanapce. Załóżmy, że dla przykładu chciałbym zliczać zabójstwa z HE do zmiennej globalnej. Jak w evencie ham_Killed wykryć zabicie z granatu ? Nie ma tutaj parametru idinflictor etc. aby wykluczyć inne możliwości śmierci od podłączonego gracza.
Doszukałem się jedynie na allienach czegoś:
https://forums.allie...p/t-167351.html
ale rozwiązanie nawet ConnorMcLeod nie pomogły.
Jakieś sugestie ?
Pozdrawiam,
Mariusz K.
_McHappy
23.03.2017
Z fakemetą (ze wspomnianego postu z allied'ów):
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <fun> #define m_bitsDamageType 76 #define DMG_GRENADE (1<<24) #define DMG_BULLET (1<<1) public plugin_init() { register_plugin("HamKilled Test","1.0","..."); RegisterHam(Ham_Killed, "player", "HamKilled"); } public HamKilled(iVictim, iAttacker, shouldgib) { give_item(iAttacker, "weapon_hegrenade"); //W celu szybkich testow if ( get_pdata_int( iVictim , m_bitsDamageType ) & DMG_BULLET ) return HAM_IGNORED; if ( get_pdata_int( iVictim , m_bitsDamageType ) & DMG_GRENADE ) client_print(0, 3, "Zabicie z granata..."); return HAM_IGNORED; }
Jak wspomniał Bugsy, metoda powyżej działa, ale jak też wspomniał ( ) Connor, bity typów obrażeń się sumują.
Podczas testów, zauważyłem, iż sumują się tylko w sytuacji gdy następuje zabicie z broni palnej (gracz ma ustawione bity obrażeń DMG_GRENADE | DMG_BULLET).
W sytuacji śmierci od obrażeń granata, wszystko jest ustawione prawidłowo.
Nie wiem do końca, jak jest z innymi bitami obrażeń, musiałbyś sprawdzić, żeby uniknąć niespodzianek.
Potestuj powyższy kod i zobacz, czy o to Ci chodziło.
Użytkownik _McHappy edytował ten post 23.03.2017 11:18
rzeznik9871
23.03.2017
hmm ale czemu musi to byc w kanapce? przeciez duzo latwiej zrobic to w deathmsg
ogieR8
26.03.2017
I jeden i drugi ma rację, wiem.. niestety zależy mi na granacie co prawda, ale nie tylko, bity faktycznie sumuje i gdy strzelaliśmy do kolesia z kałasza i zabiliśmy go granatem, kod wrzuca zabójstwo i do tej.. i do tej broni
Poddając się skorzystałem z rady rzeznika, chociaż bardzo chciałem tego uniknąć i ostatecznie w client_death to puściłem. Temat można zamknąć, chyba że ktoś coś poczaruje jeszcze. + poleciały
_McHappy
26.03.2017
Mam coś takiego (w kanapce), ale tak jak wspomniałem, nie jestem pewien co do flag innych niż zabicie z broni palnej.
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <fun> #define m_bitsDamageType 76 #define DMG_BULLET (1<<1) #define DMG_GRENADE (1<<24) public plugin_init() { register_plugin("HamKilled Test", "1.0", "..."); RegisterHam(Ham_Killed, "player", "HamKilled"); } public HamKilled(iVictim, iAttacker, shouldgib) { give_item(iAttacker, "weapon_hegrenade"); //W celach szybkich testow if (!(get_pdata_int(iVictim , m_bitsDamageType) & DMG_BULLET) && get_pdata_int(iVictim , m_bitsDamageType) & DMG_GRENADE) { client_print(0, 3, "Zabicie z granata..."); } else { new weapon_name[16]; new wid = get_user_weapon(iAttacker); get_weaponname(wid, weapon_name, charsmax(weapon_name)); client_print(0, 3, "Zabicie z %s...", weapon_name); } return HAM_IGNORED; }