←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

GmAMXBans
[ROZWIĄZANY] [] [0] color_chat.inl::ColorC...

Locked

MaxiKINGer's Photo MaxiKINGer 30.07.2012

[] [0] color_chat.inl::ColorChat (line 72)
[] [1] check_player.inl::prebanned_check_ (line 64)


Może nareszcie ktoś weźmie to na poważnie i zajmie się tym błędem proszę ...

Wgrałem to: http://amxx.pl/topic...guracja-dproto/ + "poprawiona" funkcja z tego tematu: http://amxx.pl/topic...rebanned-check/
Wszystkie pliki macie w obu tematach, więc nie bd tutaj podawał...

iii ...
L 07/30/2012 - 13:34:58: [] Displaying debug trace (plugin "amxbans_main.amxx")
L 07/30/2012 - 13:34:58: [] Run time error 25: parameter error
L 07/30/2012 - 13:34:58: [] [0] color_chat.inl::ColorChat (line 72)
L 07/30/2012 - 13:34:58: [] [1] check_player.inl::prebanned_check_ (line 64)
Wszystko sprowadza się do tego, że gdy ktoś wcześniej zbanowany (potem odbanowany) wbija na serwer sypią się te logi.
Przez to g...no raz przynajmniej w ciągu dnia pada serwer (pamięć ...)

@ pliczek podany w poprzednim temacie nie działa jbc (.inl)

Linia nr 72 w pliczku color_chat.inl:
    vformat(message[1], 191, msg, 4);
Cała funkcja z tą linią:
public ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
    new message[ 192 ];

    switch(type)
    {
        case YELLOW: // Yellow
        {
            message[0] = 0x01;
        }
        case GREEN: // Green
        {
            message[0] = 0x04;
        }
        default: // White, Red, Blue
        {
            message[0] = 0x03;
        }
    }

    vformat(message[1], 191, msg, 4);

    // Make sure message is not longer than 192 character. Will crash the server.
    message[189] = '^0';

    new team, ColorChange, index, MSG_Type;
    
    if(!id)
    {
        index = FindPlayer();
        MSG_Type = MSG_ALL;
    
    } else {
        MSG_Type = MSG_ONE;
        index = id;
    }
    
    team = get_user_team(index);    
    ColorChange = ColorSelection(index, MSG_Type, type);

    ShowColorMessage(index, MSG_Type, message);
        
    if(ColorChange)
    {
        Team_Info(index, MSG_Type, TeamName[team]);
    }
}

Edited by MaxiKINGer, 30.07.2012 13:06.
Quote

  • +
  • -
Hleb's Photo Hleb 30.07.2012

poproszę o linijkę nr 64 z funkcji prebanned_check
Quote

MaxiKINGer's Photo MaxiKINGer 30.07.2012

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]
    get_user_authid(id, player_steamid, 34)
    get_user_name(id, name, 31)
    
    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_steamid, ban_count)
        }
    }
    log_amx("[AMXBans] %L",LANG_SERVER, "PLAYER_BANNED_BEFORE", name, player_steamid, ban_count)
    
    return PLUGIN_HANDLED
}

Dokładnie:
ColorChat(i, RED, "[AMXBans] ^x01%L",i, "PLAYER_BANNED_BEFORE", name, player_steamid, ban_count)
Quote

  • +
  • -
Hleb's Photo Hleb 30.07.2012

Zobacz do czego doszedłem

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


funkcja ta ma 3 argumenty, licząc po "PLAYER_BANNED_BEFORE".

Zobaczyłem plik tekstowy z tłumaczeniem dla amxbansa

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

tekst wymaga 4 argumentów: 3 na znaki, 1 na liczbę całkowitą. Prościej pisząc, brakuje 1 argumentu.
Jak później się dowiedziałem, chodzi o 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 wybierzesz, to już tylko od Ciebie zależne

Dziękuję.
Kawon (30.07.2012 14:52):
Hah, że nikt na to wcześniej nie wpadł ;P
Quote

MaxiKINGer's Photo MaxiKINGer 30.07.2012

Oczywiście zmieniłem lang (bo to szybsze ... ) ;>

Działa kochanie Ty moje najdroższe! ^D^ ^D^ ^D^
Dziękuję, wielkie dzięki....
Logi czyste, crash`y już nie będzie, jeszcze raz wielkie dzięki...

Moderator czy inny ktoś niech to przypnie, bo takie błędy się ludziom zdarzają.
Do zamknięcia
Edited by MaxiKINGer, 30.07.2012 14:47.
Quote

  • +
  • -
Kawon's Photo Kawon 30.07.2012

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Posted Image raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Quote
Locked