[Ajuda] Se apertar TAB, o servidor fecha!
#1

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? :/
Reply
#2

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;
}
Reply
#3

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.
Reply
#4

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.
Reply
#5

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.
Reply
#6

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); ?
Reply
#7

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

'Pelo menos eu acho'
Reply
#8

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;
}
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)