Vzhľadom k tomu, že chôdza je prevádzaná čisto na strane klienta, neexistuje žiadny jednoduchý spôsob ako zistit kedy hráč práve stlačil tlačítko. Klient posiela určité informácie na server, ktoré sa dajú detekovať, ide napríklad o pohyby vred a vzad. Tieto hodnoty sa nachádzajú v triede UserCmd.
Použitím modulu FAKEMETA si vytovríme novú funkciu s názvom USRCmdStart pomocou ktorej zachytíme hodnoty pohybu vpred a vzad (UC_ForwardMove a UC_SideMove). Pohyb dopredu sme zistili pomocou vypočítania hodnoty konštanty MAXSPEED, ktorú vynásobíme 0.52 (táto číslica je hodnota ktorá je premenlívá – nachádza sa medzi hodnotami cvar a jej názov je cl_movespeedkey).
zdrojový kód:
plugin_init() register_forward(FM_CmdStart, "FMCmdStart"); public FMCmdStart(id, uc_handle, randseed){ new Float:fmove, Float:smove; get_uc(uc_handle, UC_ForwardMove, fmove); get_uc(uc_handle, UC_SideMove, smove); new Float:maxspeed; pev(id, pev_maxspeed, maxspeed); new Float:walkspeed = (maxspeed * 0.52); fmove = floatabs(fmove); smove = floatabs(smove); if(fmove <= walkspeed && smove <= walkspeed && !(fmove == 0.0 && smove == 0.0)){ client_print(id, print_center, "Ticha chodza"); }else{ client_print(id, print_center, "Rychla chodza"); } }
vysvetlenie jednotlivých častí zdrojového kódu:
plugin_init(){ register_forward(USR_CmdStart, "USRCmdStart"); }
Príkazom plugin_init() si sinicializujeme získavanie hodnoty pohybu do predu pomocou funkcie register_forward().
public USRCmdStart(id, uc_handle, randseed){ new Float:fmove, Float:smove; get_uc(uc_handle, UC_ForwardMove, fmove); get_uc(uc_handle, UC_SideMove, smove);
Vytvoríme si novú funkciu s názvom USRCmdStart, ktorá bude mať tri argumenty. Vytvoríme si premenné typu float a to fmove a smove. V ďaľšom kroku naplníme premenné fmove a smove hodnotami konštánt UC_ForwardMove pre pohyb dopredu a UC_SideMove pre pohyb do strán.
new Float:maxspeed; pev(id, pev_maxspeed, maxspeed); new Float:walkspeed = (maxspeed * 0.52); fmove = floatabs(fmove); smove = floatabs(smove);
Vytvoríme si pomocné premenné maxspeed (pre získanie rýchlosti behu) a walkspeed (pre získanie hodnoty tichého pohybu). Pri inicializácii premennej walkspeed sme si ju rovno naplnili hodnotou násobku premennej maxspeed a 0.52. Pomocou funkcie pev() si nastavíme predvolené rýchlosť behu (pohybu užívateľa-hráča) na hodnotu maxspeed (čiže rýchlosť behu). Premenným fmove a smove priradíme absolutné hodnoty s typu premennej float.
if(fmove <= walkspeed && smove <= walkspeed && !(fmove == 0.0 && smove == 0.0)){ client_print(id, print_center, "Ticha chodza"); }else{ client_print(id, print_center, "Rychla chodza"); } }
V poslednom kroku nám len stačí porovnať hodnoty fmove a zároven smove s hodnotami walkspeed a zároven ak hodnoty premenných fmove a smove sú rôzne od 0.0 tak sa nám vykoná funkcia, ktorá vypíše danému klientovi správu Ticha chodza. Ak podmienka nieje splnená vypíše sa správa Rychla chodza.