←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Blokowanie wiadomości tylko dla flagi

  • +
  • -
serp57 - zdjęcie serp57 25.07.2015

Witam.

Mam taki kod blokujący wiadomość:

register_message(get_user_msgid("TextMsg") , "block_message");


public block_message() 
{
    if(get_msg_argtype(2) == ARG_STRING)
    {
        new value[64];
        get_msg_arg_string(2 , value , 63);

        if(equali(value , "#Cannot_Carry_Anymore"))
            return PLUGIN_HANDLED;
    }
}

Chcę zablokować wiadomość tylko dla danej flagi. Zrobiłem coś takiego:

public block_message(id) 
{
    if(!(get_user_flags(id) & ADMIN_LEVEL_H))
        return PLUGIN_CONTINUE;
    
    if(get_msg_argtype(2) == ARG_STRING)
    {
        new value[64];
        get_msg_arg_string(2 , value , 63);

        if(equali(value , "#Cannot_Carry_Anymore"))
            return PLUGIN_HANDLED;
    }

    return PLUGIN_CONTINUE;
}

Niby działa, jednak powoduje to error:

L 07/25/2015 - 20:03:55: [AMXX] Displaying debug trace (plugin "test.amxx")
L 07/25/2015 - 20:03:55: [AMXX] Run time error 10: native error (native "get_user_flags")
L 07/25/2015 - 20:03:55: [AMXX]    [0] test.sma::block_message (line 193)
L 07/25/2015 - 20:07:52: Invalid player id 77

Kombinowałem też z tak, ale bez skutku:

if(!(get_user_flags(id) & ADMIN_LEVEL_H) && is_user_alive(id))
        return PLUGIN_CONTINUE;

Jakieś pomysły?

 

 

 

Odpowiedz

  • +
  • -
Ossal - zdjęcie Ossal 26.07.2015


Invalid player id 77

To oznacza, że nadawcą wiadomości był ent o numerze 77, a wywołanie funkcji get user_flags z parametrem większym niż get_maxplayers() (czyli w skrócie liczba slotów serwera) będzie powodować errory.
Kombinowałeś w dobry sposób, ale nie wziąłeś pod uwagę kolejności warunków ;)
Najpierw sprawdza flagi (i dla nie graczy sypie errorem), a dopiero potem sprawdza czy byt jest graczem :D

Zamień na coś takiego i będzie latać ;) Pozdrawiam

if(!is_user_alive(id) || !(get_user_flags(id) & ADMIN_LEVEL_H))
        return PLUGIN_CONTINUE;
Odpowiedz