←  Nowości

AMXX.pl: Support AMX Mod X i SourceMod

»

GmAMXBans
[Fix] Funkcja Prebanned_check_

  • +
  • -
Hleb - zdjęcie Hleb 30.07.2012

Przedstawiam wam łatkę na funkcję prebanned_check_, jak dobrze wiemy, ta funkcja sypała errorami.

[AMXX] Displaying debug trace (plugin "amxbans_main.amxx")
[AMXX] Run time error 25: parameter error
[AMXX] [0] check_player.inl::prebanned_check_ (line ***)

Po wnikliwej obserwacji doszedłem do takiej sytuacji.


Linijka nr 67 przedstawia się w ten sposób

ColorChat(i, RED, "[AMXBans] ^x01%L",i, "PLAYER_BANNED_BEFORE", name, player_steamid, ban_count)


zaś linijka "PLAYER_BANNED_BEFORE" w pliku amxbans.txt przedstawia się w ten sposób

PLAYER_BANNED_BEFORE = [AMXBans]<%s> %s %s zostal wczesniej zbanowany %i razy.

Przyczyną tworzenia errorlogów z tej funkcji jest róźnica między wymaganą liczbą argumentów a oferowaną liczbą argumentów w funkcji ColorChat po "PLAYER_BANNED_BEFORE", tekst wymaga 4 argumentów, a funkcja oferuje 3 argumenty. Jak się później dowiedziałem, brakującym argumentem jest adres IP gracza

Rozwiązanie nr 1

Usunąc z linijki PLAYER_BANNED_BEFORE w pliku amxbans.txt (znajdziesz go w addons -> amxmodx -> data -> lang) "%s". Czyli ma wyglądać tak

PLAYER_BANNED_BEFORE = [AMXBans]<%s> %s zostal wczesniej zbanowany %i razy.

Rozwiązanie nr 2


funkcję prebanned_check_ zamienić na to

public prebanned_check_(failstate, Handle:query, error[], errnum, data[], size) {
new id = data[0]

if (failstate) {
new szQuery[256]
MySqlX_ThreadError( szQuery, error, errnum, failstate, 16 )
return PLUGIN_HANDLED
}

new ban_count=SQL_ReadResult(query, 0)

if(ban_count < get_pcvar_num(pcvar_show_prebanned_num))
return PLUGIN_HANDLED

new name[32], player_steamid[35], player_ip[20];
get_user_authid(id, player_steamid, 34)
get_user_name(id, name, 31)
get_user_ip(id, player_ip, 19, 1)

for(new i=1;i<=plnum;i++) {
if(is_user_bot(i) || is_user_hltv(i) || !is_user_connected(i) || i==id)
continue
if(get_user_flags(i) & ADMIN_CHAT) {
ColorChat(i, RED, "[AMXBans] ^x01%L",i, "PLAYER_BANNED_BEFORE", name, player_ip, player_steamid, ban_count)
}
}
log_amx("[AMXBans] %L",LANG_SERVER, "PLAYER_BANNED_BEFORE", name, player_ip, player_steamid, ban_count)

return PLUGIN_HANDLED
}


To, jakie rozwiązanie wybierzecie, to już jest od Was zależne.

Dziękuję
Odpowiedz

  • +
  • -
Kawon - zdjęcie Kawon 30.07.2012

Ładnie :D Podpinam :)
Odpowiedz

  • +
  • -
Szyfrant - zdjęcie Szyfrant 25.08.2012

1 Rozwiązanie radze usunąć.
Kiedy usuniemy trzecie "%s" pojawia sie błąd który w say ukazuje wiadomosc

Gracz X zostal wczesniej zbanowany 83 razy.
Odpowiedz

  • +
  • -
Supryk - zdjęcie Supryk 16.12.2012

Po zmianie funkcji nie mogę skopilowac amxbans_main poda ktos gotowca ??
Kawon (18.12.2012 00:05):
Napisz temat w odpowiednim dziale...
Odpowiedz

  • +
  • -
QuahodronN - zdjęcie QuahodronN 16.12.2012

Daj to co edytowałeś to Ci przekompiluje
Odpowiedz

Forever Killer - zdjęcie Forever Killer 18.02.2013

mógłby mi to ktoś zrobić ?? ... bo po 1. nie kompiluje sie po 2. nie ma nic związanego z public prebanned a w konsoli pisze mi ze error i sprawa związana z tym...

Załączone pliki

Odpowiedz