Preskočiť navigáciu

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.

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa /  Zmeniť )

Google photo

Na komentovanie používate váš Google účet. Odhlásiť sa /  Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa /  Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa /  Zmeniť )

Connecting to %s

%d bloggers like this: