Cześć. Ogólnie wprowadzając, tworzę mod, który wyklucza użycie broni palnej. I staram się znaleźć jak najwięcej sposobów na rejestracje "zachowań" gracza gdy gracz trzyma nóż (min przeładowanie, drop broni, atak, IN_USE, włączenie latarki, szprej). Właściwie pisząc ten temat sprawdzam trochę więcej źródeł niż wcześniej, więc pewnie sam znajdę niektóre odpowiedzi.
Napisałem kod:
#include <amxmodx> #include <hamsandwich> #include <engine> public plugin_init(){ register_plugin("Sprawdzenie przyciskow na nozu", "1.0", "Vasto_Lorde"); RegisterHam(Ham_Weapon_Reload, "weapon_knife", "KnifeReload"); RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "KnifePrimaryAttack"); //Dziala RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "KnifeSecondaryAttack"); //Dziala register_clcmd("drop", "KnifeDrop"); //Dziala register_clcmd("reload", "KnifeReload1"); register_clcmd("+reload", "KnifeReload2"); register_impulse(201, "KnifeSpray"); //Dziala register_impulse(100, "KnifeFlashlight"); //Dziala } public KnifeReload(ent){ client_print(0, print_chat, "Weapon_Reload - %i", ent); } public KnifePrimaryAttack(ent){ client_print(0, print_chat, "KnifePrimaryAttack - %i", ent); } public KnifeSecondaryAttack(ent){ client_print(0, print_chat, "KnifeSecondaryAttack - %i", ent); } public KnifeDrop(id){ if(get_user_weapon(id)==CSW_KNIFE) client_print(0, print_chat, "KnifeDrop - %i", id); } public KnifeReload1(id){ if(get_user_weapon(id)==CSW_KNIFE) client_print(0, print_chat, "Weapon_Reload1 - %i", id); } public KnifeReload2(id){ if(get_user_weapon(id)==CSW_KNIFE) client_print(0, print_chat, "Weapon_Reload2 - %i", id); } public KnifeSpray(id){ if(get_user_weapon(id)==CSW_KNIFE) client_print(0, print_chat, "KnifeSpray - %i", id); } public KnifeFlashlight(id){ if(get_user_weapon(id)==CSW_KNIFE) client_print(0, print_chat, "Flashlight - %i", id); } public client_PreThink(id){ if(get_user_weapon(id)==CSW_KNIFE){ new button=get_user_button(id); if(button&IN_RELOAD) client_print(0, print_chat, "cmdStartReload - %i", id); if(button&IN_USE) client_print(0, print_chat, "cmdStartUse - %i", id); } }
Zaliczone mam przyciski: G(drop), F(latara), T(szprej). Ale nie podoba mi się moje rozwiązanie (innego nie znalazłem) z IN_USE i IN_RELOAD. Bo Ham_Weapon_Reload oraz register_clcmd nie działają. Think wykonuje się za dużo razy, gdy kliknę przycisk wiadomość pojawia się co najmniej dwukrotnie. Jest jakiś bardziej efektywny sposób na zarejestrowanie przeładowania na nożu i IN_USE(+use)?
PS. Jeśli ktoś byłby zainteresowany innymi przyciskami to kolejno Q, Z, X, C można zarejestrować przy użyciu register_clcmd dla komend: lastinv, radio1, radio2, radio3.