[Ajuda] Por que o banimento nгo funciona?
#1

Bom seguinte, eu tentei arrumar um sistema de quando o player for banido ir os dados do mesmo para a pasta scripfiles/Administracao e cair no Info_Banidos quem for ban, e Timer_Banidos para quem quem for ban por tempo.
Quando o player й banido cai la os dados certinho, mas o mesmo player banido pode entrar no servidor de novo, mesmo banido, jб tentei colocar um travamento, que quando o player estiver banido ele nгo logar no servidor, mas nгo funciona o player continua podendo entrar, porque isso?

pawn Код:
public OnPlayerConnect(playerid)
{
    new string1[256];
    if(dini_Int("Administracao/Info_Banidos.ini", PlayerName(playerid)))
    {
        format(glob15010, 256, "%dStats", dini_Int("Administracao/Info_Banidos.ini", PlayerName(playerid)));
        format(string1, 256, "%dHora", dini_Int("Administracao/Info_Banidos.ini", PlayerName(playerid)));
        if(dini_Int("Administracao/Timer_Banidos.ini", string1))
        {
            format(glob15010, 256, "Ban por mais %d hora(s). %s", dini_Int("Administracao/Timer_Banidos.ini", string1), dini_Int("Administracao/Timer_Banidos.ini", string1));
        }
        else
        {
            format(glob15010, 256, "Ban permanente. %s", dini_Int("Administracao/Info_Banidos.ini", glob15010));
        }
        SendClientMessage(playerid, 0xAFAFAFAA, glob15010);
        Kick(playerid);
        return 1;
    }
    if(dini_Int("Administracao/Info_Banidos.ini", PlayerName(playerid)))
    {
        format(glob15010, 256, "%dStats", dini_Int("Administracao/Info_Banidos.ini", PlayerName(playerid)));
        format(string1, 256, "%dHora", dini_Int("Administracao/Info_Banidos.ini", PlayerName(playerid)));
        if(dini_Int("Administracao/Timer_Banidos.ini", string1))
        {
            format(glob15010, 256, "Ban por mais %d hora(s). %s", dini_Int("Administracao/Timer_Banidos.ini", string1), dini_Int("Administracao/Timer_Banidos.ini", string1));
        }
        else
        {
            format(glob15010, 256, "Ban permanente. %s", dini_Int("Administracao/Info_Banidos.ini", glob15010));
        }
        SendClientMessage(playerid, 0xAFAFAFAA, glob15010);
        Kick(playerid);
        return 1;
    }
Ajudem?
Reply
#2

Por que vocк nгo muda:

Quote:

Administracao/Info_Banidos.ini

para:

Quote:

Administracao/%s.ini ( iria verificar direto no arquivo do player ao invйs de procurar em um arquivo sу por um nome)

° Mais ou menos assim:

PHP код:
new string[60], aname[MAX_PLAYER_NAME];
GetPlayerName(VARIAVEL DO ID DO BANIDOanamesizeof(aname));
format(stringsizeof(string),"Administracao/%s.ini"aname);
dini_Create(string); 
Ajudei? +Rep
Reply
#3

Ok, assim que eu chegar em casa eu testo, desde jб agradeзo.

@Edit.

Tipo eu substituo todo o meu processo e coloco esse novo?
Reply
#4

Use booleanas,й um mйtodo "fraco",mais eficiкnte.
Reply
#5

Como й esse booleanas ? pode me dar uma previa de como ficaria?
Reply
#6

Pode postar o comando usado para o banimento ?

Uma booleana й uma variavel de somente dois valores,positivo e negativo,no caso do pawn,true e false.

Um exemplo pode ser um comando que compre vida:

PHP код:
new bool:LifeBuySpawn[MAX_PLAYERS];
public 
OnPlayerCommandText(playeridcmdtext[])
{
      if(
strcmp(cmdtext"/vida"true) == 0)
      {
            if(
LifeBuySpawn[playerid] == true) return SendClientMessage(playerid0xFF0000FF"[ERRO]:Vocк ja comprou vida.");
            
SetPlayerHealth(playerid100);
            
LifeBuySpawn[playerid] = true;
            return 
1;
     }
     return 
0;
}
public 
OnPlayerSpawn(playerid)
{
     
LifeBuySpawn false;
     return 
1;

Se a pessoa ja comprou,ela nгo podera comprar novamente atй que ela renasзa.
E para salva й simples:

PHP код:
dini_BoolSet(arquivo,"serveronline",false); 
E temo que vocк esta usando as funзхes erradas para cada coisa.

Nesta linha:

PHP код:
if(dini_Int("Administracao/Info_Banidos.ini"PlayerName(playerid))) 
O que exatamente vocк quer pegar ?

dini_Get pode ser usado para nomes com numeros normalmente,o dini_Int sу pega valores que sгo numeros.

Quote:
Originally Posted by [BOPE]Seu._.Madruga
Посмотреть сообщение
PHP код:
new string[60], aname[MAX_PLAYER_NAME];
GetPlayerName(VARIAVEL DO ID DO BANIDOanamesizeof(aname));
format(stringsizeof(string),"Administracao/%s.ini"aname);
dini_Create(string); 
Й o mais apropriado a fazer,porйm a "VARIAVEL DO ID DO BANIDO" nгo seria playerid ?
Afinal,estamos pegando o id da pessoa que entrou,e nгo setamos nenhum id alvo.
Reply
#7

Hum, ok.

Vocк deve ter percebido que eu nгo sou muito bom em pwn, entгo no caso do dini_Int, eu teria que mudar para dini_Get ?

Seu fosse para eu colocar o booleana no meu sistema de banido ficaria mais pratico para min ?

Sobre o comando de banimento, eu tenho 3 tipos de banimento, por conta normal, quando o player se localiza online no servidor, banimento por um determinado tempo, e banimento por nick.

Sгo eles:
pawn Код:
if(strcmp(cmd,"/banirnick",true) == 0)
    {
            tmp = strtok(cmdtext,idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, COLOR_LARANJA2, "Digite: /banirnick [nome-do-jogador] [motivo]");
                return 1;
            }
            for(new a=0; a < strlen(tmp); a++)
            {
                if((tmp[a] < 40 && tmp[a] != 36) || (tmp[a] > 41 && tmp[a] != 46 && tmp[a] < 48) || (tmp[a] > 57 && tmp[a] != 61 && tmp[a] < 64) ||
                (tmp[a] > 91 && tmp[a] < 93) || (tmp[a] > 95 && tmp[a] < 97) || tmp[a] > 122)
                {
                    SendClientMessage(playerid,COLOR_VERMELHO,"O nome que vocк deseja colocar possui carбcter(es) invбlido(s)!");
                    return 1;
                }
            }
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' ')) {
            idx++;
            }
            new offset = idx;
            new result[64];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) {
            result[idx - offset] = cmdtext[idx];
            idx++;
            }
            result[idx - offset] = EOS;
            if(!strlen(result)) result = "Nгo usou motivo";
            if(strlen(result)>30)
            {
                SendClientMessage(playerid,COLOR_VERMELHO,"Vocк sу pode usar 30 carбcteres para o motivo!");
                return 1;
            }
            if(!dini_Isset(BanFile,tmp))
            {
                format(string, sizeof(string), "O %s %s(id:%d) baniu o nick %s por tempo ilimitado! Motivo: %s",
                admincargo[Stats[playerid][LEVELADMIN]],PlayerName(playerid),playerid,tmp,result);
                SendClientMessageToAll(COLOR_VERMELHO2,string);
                new year, month,day;
                getdate(year, month, day);
                new hora, minuto, segundo;
                gettime(hora,minuto,segundo);
                format(string, sizeof(string), "%s    |      \"%s\"      | %s    (%02d/%02d/%d) (%02d:%02d:%02d)",
                tmp,PlayerName(playerid), result, day ,month,year, hora,minuto,segundo);
                BanLog();
                BanNomeEspecial(PlayerName(playerid),tmp,result);
            }
            else SendClientMessage(playerid,COLOR_VERMELHO,"Este nick jб estб banido!");
        return 1;
    }
2°:
pawn Код:
if(strcmp(cmd,"/banir",true) == 0)
    {
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, COLOR_LARANJA2, "Digite: /banir [id-do-jogador] [motivo]");
                return 1;
            }
            giveplayerid = strval(tmp);
            if(playerid != giveplayerid)
            {
                if(IsPlayerConnected(giveplayerid))
                {
                    if(Stats[giveplayerid][VIP]==0)
                    {
                        if(!IsPlayerAdmin(giveplayerid) && Stats[giveplayerid][LEVELADMIN] < 2)
                        {
                            for(new i = 0; i < TOTALPLAYERS; i ++)
                            {
                                if(IsPlayerAdmin(i) || Stats[i][LEVELADMIN] > 0)
                                {
                                    if(i != playerid)
                                    {
                                        format(string, sizeof(string), "%s(id:%d) baniu %s(id:%d) permanente com o comando /banir.",
                                        PlayerName(playerid), playerid, PlayerName(giveplayerid), giveplayerid);
                                        SendClientMessage(i,COLOR_AZULFRACO,string);
                                    }
                                }
                            }
                            new length = strlen(cmdtext);
                            while ((idx < length) && (cmdtext[idx] <= ' ')) {
                            idx++;
                            }
                            new offset = idx;
                            new result[64];
                            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) {
                            result[idx - offset] = cmdtext[idx];
                            idx++;
                            }
                            result[idx - offset] = EOS;
                            if(!strlen(result)) result = "Nгo usou motivo";
                            if(strlen(result)>30)
                            {
                                SendClientMessage(playerid,COLOR_VERMELHO,"Vocк sу pode usar 30 carбcteres para o motivo!");
                                return 1;
                            }
                            new year, month,day;
                            getdate(year, month, day);
                            new hora, minuto, segundo;
                            gettime(hora,minuto,segundo);
                            format(string, sizeof(string), "%s  IP: %s    |      \"%s\"      | %s    (%02d/%02d/%d) (%02d:%02d:%02d)",
                            PlayerName(giveplayerid), PlayerIp(giveplayerid),PlayerName(playerid), result, day ,month,year, hora,minuto,segundo);
                            BanLog();
                            format(string, sizeof(string), "O %s %s(id:%d) baniu %s(id:%d) por tempo ilimitado! Motivo: %s",
                            admincargo[Stats[playerid][LEVELADMIN]],PlayerName(playerid),playerid,PlayerName(giveplayerid), giveplayerid,result);
                            SendClientMessageToAll(COLOR_VERMELHO2,string);
                            BanPlayerEspecial(PlayerName(playerid),giveplayerid,result);
                        }
                        else SendClientMessage(playerid,COLOR_VERMELHO,"Vocк nгo pode banir um Administrador!");
                    }
                    else SendClientMessage(playerid,COLOR_VERMELHO,"Vocк nгo pode banir um VIP!");
                }
                else SendClientMessage(playerid,COLOR_VERMELHO,"Este jogador nгo estб conectado!");
            }
            else SendClientMessage(playerid,COLOR_VERMELHO,"Vocк nгo pode usar este comando para si mesmo!");
        return 1;
    }
3°:
pawn Код:
if(strcmp(cmd,"/banirt",true) == 0)
    {
            tmp = strtok(cmdtext, idx);
            new tmpp[256];
            new tban = strval(tmpp);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, COLOR_LARANJA2, "Digite: /banirt [id-do-jogador] [tempo] [motivo]");
                return 1;
            }
            giveplayerid = strval(tmp);
            tmpp = strtok(cmdtext, idx);
            if(!strlen(tmpp))
            {
                SendClientMessage(playerid, COLOR_LARANJA2, "Digite: /banirt [id-do-jogador] [tempo] [motivo]");
                return 1;
            }
            tban = strval(tmpp);
            if(tban > 48 || tban < 1)
            {
                SendClientMessage(playerid,COLOR_VERMELHO,"Tempo invбlido! O tempo pode variar de 1 а 48 horas!");
                return 1;
            }
            if(playerid != giveplayerid)
            {
                if(IsPlayerConnected(giveplayerid))
                {
                    if(Stats[giveplayerid][VIP]==0)
                    {
                        if(!IsPlayerAdmin(giveplayerid) && Stats[giveplayerid][LEVELADMIN]<TEMPORARIO)
                        {
                            for(new i = 0; i < TOTALPLAYERS; i ++)
                            {
                                if(IsPlayerAdmin(i) || Stats[i][LEVELADMIN] > 0)
                                {
                                    if(i != playerid)
                                    {
                                        format(string, sizeof(string), "%s(id:%d) baniu %s(id:%d) com o comando /banirt.",
                                        PlayerName(playerid), playerid, PlayerName(giveplayerid), giveplayerid);
                                        SendClientMessage(i,COLOR_AZULFRACO,string);
                                    }
                                }
                            }
                            new length = strlen(cmdtext);
                            while ((idx < length) && (cmdtext[idx] <= ' ')) {
                            idx++;
                            }
                            new offset = idx;
                            new result[64];
                            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) {
                            result[idx - offset] = cmdtext[idx];
                            idx++;
                            }
                            result[idx - offset] = EOS;
                            if(!strlen(result)) result = "Nгo usou motivo";
                            if(strlen(result)>30)
                            {
                                SendClientMessage(playerid,COLOR_VERMELHO,"Vocк sу pode usar 30 carбcteres para o motivo!");
                                return 1;
                            }
                            new year, month,day;
                            getdate(year, month, day);
                            new hora, minuto, segundo;
                            gettime(hora,minuto,segundo);
                            format(string, sizeof(string), "%s(id:%d) foi banido pelo %s %s(id:%d) durante %d horas! Motivo de: %s.",
                            PlayerName(giveplayerid), giveplayerid, admincargo[Stats[playerid][LEVELADMIN]],PlayerName(playerid),playerid,tban,result);
                            SendClientMessageToAll(COLOR_VERMELHO2, string);
                            format(string, sizeof(string), "%s  IP: %s    |      \"%s\"      | %s    (%02d/%02d/%d) (%02d:%02d:%02d)",
                            PlayerName(giveplayerid), PlayerIp(giveplayerid),PlayerName(playerid), result, day ,month,year, hora,minuto,segundo);
                            BanLog();
                            BanPlayerEspecial(PlayerName(playerid),giveplayerid,result,tban);
                        }
                        else
                        {
                            SendClientMessage(playerid,COLOR_VERMELHO,"Vocк nгo pode banir um Admin!");
                            SendClientMessage(playerid,COLOR_VERMELHO,"Como essa tentativa nгo й permitida pelo servidor, vocк foi kickado de forma justa!");
                            format(string, sizeof(string),"%s(id:%d) tentou BANIR-LHE e foi automaticamente combatido pelo servidor sendo kickado!",PlayerName(playerid),playerid);
                            SendClientMessage(giveplayerid,COLOR_LARANJA2,string);
                            Kick(playerid);
                        }
                    }
                    else
                    {
                        SendClientMessage(playerid,COLOR_VERMELHO,"Vocк nгo pode banir um VIP!");
                        SendClientMessage(playerid,COLOR_VERMELHO,"Como essa tentativa nгo й permitida pelo servidor, vocк foi kickado de forma justa!");
                        format(string, sizeof(string),"%s(id:%d) tentou BANIR-LHE e foi automaticamente combatido pelo servidor sendo kickado!",PlayerName(playerid),playerid);
                        SendClientMessage(giveplayerid,COLOR_LARANJA2,string);
                        Kick(playerid);
                    }
                }
                else SendClientMessage(playerid, COLOR_VERMELHO,"Este jogador nгo estб conectado!");
            }
            else SendClientMessage(playerid,COLOR_VERMELHO,"Vocк nгo pode usar este comando para si mesmo!");
        return 1;
    }
Reply
#8

1 - Sim

2 - Sim

E recomendo que use DCMD.

Alйm do mais,dos trкs,quais deles tem o problema ?
Reply
#9

Colocar booleanas ficarб bem mais fбcil, vocк sу vai precisar salvar ela num arquivo e usar get quando ele logar para checar se й banido ou nгo.
Reply
#10

Todos eles, quando eu uso qualquer um deles, as informaзхes do banimento vгo para scriptfiles/Administraзгo/Info_Banidos ou Timer_Banidos, sу que eu queria fazer com que o sistema bloqueб-se o player que as informaзхes contida em Info-Banidos e Timer_Banidos, mas nгo bloqueб, o player mesmo banido pode entrar novamente no servidor.

Sobre o DCMD, a GM que eu tenho aqui, tem muitos comandos, e eu estou atualizando eles para zCMD, o uso do DCMD й mais pratico que o zCMD?

@Edit
Como ficaria esse sistema se fosse para eu mudar para booleana?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)