Blokowanie wiadomości tylko dla flagi
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?
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

Zamień na coś takiego i będzie latać Pozdrawiam
if(!is_user_alive(id) || !(get_user_flags(id) & ADMIN_LEVEL_H)) return PLUGIN_CONTINUE;