Plugin umożliwia zapisywanie statystyk dowolnej broni w grze. Fragi są zliczane przy każdej wiadomości DeathMsg (lista zabójstw w prawym, górnym rogu). Aby to działało plugin musi mieć możliwość złapania tej wiadomości. Dobrym sposobem jest skompilowanie Challenge z wykorzystaniem modułu Orpheu, jednak wtedy musi on być zainstalowany na serwerze.
znajdź
//#define USING_ORPHEUzamień na
#define USING_ORPHEUi przekompiluj
Jeśli nie chcemy angażować orpheu równie skuteczne jest rozsyłanie wiadomości funkcją emessage_begin(), wtedy w naszym pluginie dodającym broń trzeba znaleźć fragment odpowiedzialny za DeathMsg. W przykładzie użyłem head_splash, a w nim znajduje się funkcja:
_make_deathmsg(pwnzor, pwned, hs, const szWeapon[]){ static msgDeathMsg=0; if(!msgDeathMsg) msgDeathMsg = get_user_msgid("DeathMsg"); message_begin(MSG_ALL, msgDeathMsg); write_byte(pwnzor); write_byte(pwned); write_byte(hs); write_string(szWeapon); message_end(); }zamiast tych funkcji trzeba użyć ich odpowiedników z e na początku, czyli to
_make_deathmsg(pwnzor, pwned, hs, const szWeapon[]){ static msgDeathMsg=0; if(!msgDeathMsg) msgDeathMsg = get_user_msgid("DeathMsg"); emessage_begin(MSG_ALL, msgDeathMsg); ewrite_byte(pwnzor); ewrite_byte(pwned); ewrite_byte(hs); ewrite_string(szWeapon); emessage_end(); }
Dzięki jednemu i drugiemu wyjściu możemy być pewni, że statystyki będą liczone.
Jak to wykorzystać w wyzwaniu? Wystarczy przypisać nowej broni numer do statystyk funkcją
challenge_custom_weapon("nazwa broni");to nam zwróci indeks, który potem używamy tak jak indeksy innych broni CSW_*; nazwa to parametr szWeapon[] z _make_deathmsg(), czyli to co się pokazuje w konsoli po zdobyciu fraga daną bronią
R3X killed SomeOne with <nazwa broni>
Zabójstwa z head_splasha mają nazwę broni "his/her feet

CSW_HEADSPLASH = challenge_custom_weapon("his/her feet <img src='http://img.amxx.pl/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />");
Całość od szkieletu różni się tym fragmentem:
new CSW_HEADSPLASH; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); chid = register_challenge("Zabij 100 graczy z HeadSplash", "to dostaniesz nagrodę"); CSW_HEADSPLASH = challenge_custom_weapon("his/her feet <img src='http://img.amxx.pl/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />"); challenge_uses_stats(CSW_HEADSPLASH); } //czy spełnia wymagania stock hasAccess(id){ return (ch_get_user_stats(id, CSW_HEADSPLASH) >= 100); }