SA-MP Forums Archive
[Ajuda] Se apertar TAB, o servidor fecha! - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Se apertar TAB, o servidor fecha! (/showthread.php?tid=430455)



Se apertar TAB, o servidor fecha! - Dsv - 13.04.2013

Nгo tenho muito sobre o que falar desse crash maldito e misterioso...
Se alguйm aperta TAB o servidor fecha na hora!

Ele comeзou depois dessas alteraзхes no OnPlayerConnect, veja:

Код:
public OnPlayerConnect(playerid)
{
new VerificarNome[24];
new VerificarLista = -1;
GetPlayerName(playerid, VerificarNome, sizeof(VerificarNome));
while(++ VerificarLista != sizeof(NomesProibidos))
{
if(!strcmp(VerificarNome, NomesProibidos[VerificarLista], true))
{
print("[SISTEMA]: Um usuбrio se logou com 'BAD NICK' e foi interceptado!");
format(String, sizeof(String), "%d1", playerid);
SetPlayerName(playerid, String);
GameTextForPlayer(playerid, "~k~~INVALID_KEY~", 100, 5);
if(IsPlayerConnected(playerid))
{
return OnPlayerConnect(playerid);
}
}
else
{
LimparChatLogin(playerid);
TextDrawShowForPlayer(playerid, CriarImagemLogin);
new RandonMusicasL = random(sizeof(MusicasLogin));
TocarMusica(playerid, MusicasLogin[RandonMusicasL]);
LimparChatLogin(playerid);
return true;
}
}
return true;
}
Antes, quando nгo existia esse problema, a public era assim:

Код:
public OnPlayerConnect(playerid)
{
LimparChatLogin(playerid);
TextDrawShowForPlayer(playerid, CriarImagemLogin);
new RandonMusicasL = random(sizeof(MusicasLogin));
TocarMusica(playerid, MusicasLogin[RandonMusicasL]);
LimparChatLogin(playerid);

return true;
}
Entгo decidi tentar fazer o sisteminha para bloquear os nicks que dгo crash no servidor ... ele funciona perfeitamente...
Nгo sei se tudo isso tem alguma coisa a ver com o crash em relaзгo ao TAB. Nem adianta pedir o server_log.txt pois ele nгo consta nada. Me ajude? :/


Re: Se apertar TAB, o servidor fecha! - feliphemort - 13.04.2013

pawn Код:
public OnPlayerConnect(playerid)
{
new VerificarNome[24];
new VerificarLista = -1;
GetPlayerName(playerid, VerificarNome, sizeof(VerificarNome));
while(++ VerificarLista != sizeof(NomesProibidos))
{
if(!strcmp(VerificarNome, NomesProibidos[VerificarLista], true))
{
print("[SISTEMA]: Um usuбrio se logou com 'BAD NICK' e foi interceptado!");
format(String, sizeof(String), "%d1", playerid);
SetPlayerName(playerid, String);
if(IsPlayerConnected(playerid))
{
return OnPlayerConnect(playerid);
}
}
else
{
LimparChatLogin(playerid);
TextDrawShowForPlayer(playerid, CriarImagemLogin);
new RandonMusicasL = random(sizeof(MusicasLogin));
TocarMusica(playerid, MusicasLogin[RandonMusicasL]);
LimparChatLogin(playerid);
return true;
}
}
return true;
}



Re: Se apertar TAB, o servidor fecha! - Dsv - 13.04.2013

Quote:
Originally Posted by feliphemort
Посмотреть сообщение
pawn Код:
public OnPlayerConnect(playerid)
{
new VerificarNome[24];
new VerificarLista = -1;
GetPlayerName(playerid, VerificarNome, sizeof(VerificarNome));
while(++ VerificarLista != sizeof(NomesProibidos))
{
if(!strcmp(VerificarNome, NomesProibidos[VerificarLista], true))
{
print("[SISTEMA]: Um usuбrio se logou com 'BAD NICK' e foi interceptado!");
format(String, sizeof(String), "%d1", playerid);
SetPlayerName(playerid, String);
if(IsPlayerConnected(playerid))
{
return OnPlayerConnect(playerid);
}
}
else
{
LimparChatLogin(playerid);
TextDrawShowForPlayer(playerid, CriarImagemLogin);
new RandonMusicasL = random(sizeof(MusicasLogin));
TocarMusica(playerid, MusicasLogin[RandonMusicasL]);
LimparChatLogin(playerid);
return true;
}
}
return true;
}
Olб amigo, poderia me dizer as alteraзхes que vocк fez no cуdigo?
Eu testei ele aqui, e o problema ainda continua.


Re: Se apertar TAB, o servidor fecha! - StringBR - 13.04.2013

Essa linha aqui que o felipe retirou

pawn Код:
GameTextForPlayer(playerid, "~k~~INVALID_KEY~", 100, 5);
Crasha.

Mais nгo й isso, deve ser esse debug ai.


Re: Se apertar TAB, o servidor fecha! - Dsv - 13.04.2013

Quote:
Originally Posted by StringBR
Посмотреть сообщение
Essa linha aqui que o felipe retirou

pawn Код:
GameTextForPlayer(playerid, "~k~~INVALID_KEY~", 100, 5);
Crasha.

Mais nгo й isso, deve ser esse debug ai.
Sim nгo й isso, pois ela sу й utilizada quando o player tem um bad nick.


Re: Se apertar TAB, o servidor fecha! - Dsv - 13.04.2013

feliphemort e StringBR, descobri que esse Crash sу ocorre quando o jogador nгo estб Spawnado (seleзгo de skins)... se ele jб ter dado spawn, pode apertar tab normalmente sem problemas... O problema seria na imagem de fundo do login, criado em TextDrawShowForPlayer(playerid, CriarImagemLogin); ?


Re: Se apertar TAB, o servidor fecha! - StringBR - 13.04.2013

Nгo, nгo seria nada sobre text draws.

'Pelo menos eu acho'


Re: Se apertar TAB, o servidor fecha! - DartakousLien - 14.04.2013

pawn Код:
public OnPlayerConnect(playerid)
{
    new VerificarNome[24];
    new VerificarLista = -1;
    GetPlayerName(playerid, VerificarNome, sizeof(VerificarNome));
    while(++ VerificarLista != sizeof(NomesProibidos))
    {
        if(!strcmp(VerificarNome, NomesProibidos[VerificarLista], true))
        {
            print("[SISTEMA]: Um usuбrio se logou com 'BAD NICK' e foi interceptado!");
            format(String, sizeof(String), "%d1", playerid);
            SetPlayerName(playerid, String);
            if(IsPlayerConnected(playerid))//segundos, eu acho que o seu problema tem haver com isto pq o facto de nao ter spawnado como diz faz com que o pawn nao considere conectado! eu acho
            {//terceiro, acho que isso fica meio rasca neh, voce vai executar o OnPlayerConnect novamente desnecessariamente
                return OnPlayerConnect(playerid);
            }
        }
        else//primeiro, isso aqui tб mal, resumindo, faz o loop (while) e cada vez que verificar o seu nome com um nome da lista "nomespoibidos" e o nome nao for proibido, vem para aqui! mas afinal quantas vazes executa isto?
        {
            LimparChatLogin(playerid);//quarto, uma vez que executou OnPlayerConnect novamente, imagine que verifica 20 nomes na lista, passa a executar esta parte do codigo 40x quando podia ser apenas 1
            TextDrawShowForPlayer(playerid, CriarImagemLogin);
            new RandonMusicasL = random(sizeof(MusicasLogin));
            TocarMusica(playerid, MusicasLogin[RandonMusicasL]);
            LimparChatLogin(playerid);
            return true;
        }
    }
    return true;
}
OPTIMIZACAO
pawn Код:
public OnPlayerConnect(playerid)
{
    new VerificarNome[24];
    new VerificarLista = -1;
    GetPlayerName(playerid, VerificarNome, sizeof(VerificarNome));
    //vamos fazer while na mesma e verificar se o nome ta na lista
    while(++ VerificarLista != sizeof(NomesProibidos))
    {
        if(!strcmp(VerificarNome, NomesProibidos[VerificarLista], true))
        {
            print("[SISTEMA]: Um usuбrio se logou com 'BAD NICK' e foi interceptado!");
            format(String, sizeof(String), "%d1", playerid);
            SetPlayerName(playerid, String);
            break;//verificamos o nome, foi encontrado na lista, foi alterado, e por isso usamos break para parar a verificacao, se ja encontramos nao precisamos continuar procurando neh?
        }
    }
    LimparChatLogin(playerid);
    TextDrawShowForPlayer(playerid, CriarImagemLogin);
    new RandonMusicasL = random(sizeof(MusicasLogin));
    TocarMusica(playerid, MusicasLogin[RandonMusicasL]);
    LimparChatLogin(playerid);
    return true;
}