[Ajuda] Sistema de salvamento DOF2
#1

Criei um tуpico e ele ficou esquecido, como й proibido ficar fazendo 2/3 post seguidos eu criei este outro tуpico!

-O problema й que quando alguem clica em Quit ou erra a senha 5 vezes a conta й resetada, alguem poderia me explicar porque isso acontece?

Obs: Usei o FS de salvamento feito pela Humildadeforever para aprender a mexer!

http://forum.sa-mp.com/showpost.php?...89&postcount=1

PHP код:
#include <a_samp>
#include <DOF2>
#include <zcmd>
#include <sscanf>
#define FileUsers       "Contas/%s.ini"
#define DIALOG_REGISTRO 1
#define DIALOG_LOGIN 2
#define DIALOG_MUDAR_NICK 3
#define DIALOG_MUDAR_SENHA 4
#define DIALOG_RELATORIO 5
enum pDados
{
    
pAdmin,
    
pVIP
};
new 
PlayerDados[MAX_PLAYERS][pDados];
new 
SenhaErrada[MAX_PLAYERS];
new 
bool:Autorizado[MAX_PLAYERS] = false;
stock ReturnFileUser(playerid)
{
    new 
File[156],Name[MAX_PLAYER_NAME];
    
GetPlayerName(playerid,Name,sizeof(Name));
    
format(File,sizeof(File),FileUsers,Name);
    return 
File;
}
public 
OnFilterScriptInit()
{
    print(
"\n--------------------------------------");
    print(
" FS feito  por Aninhaah");
    print(
"--------------------------------------\n");
    return 
1;
}
public 
OnFilterScriptExit()
{
    
DOF2_Exit();
    return 
1;
}
public 
OnPlayerConnect(playerid)
{
    new 
string[70];
    
format(string,sizeof(string),"{00FF7F}%s {FFFAFA}entrou!",PlayerName(playerid));
    
SendClientMessageToAll(-1,string);
    if(!
DOF2_FileExists(ReturnFileUser(playerid))) return ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_INPUT,"[NOME] - Registro","Se registre para poder jogar, se clicar em sair serб kickado.""Registrar","Cancelar");
    else if(
DOF2_FileExists(ReturnFileUser(playerid))) return  ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"[Nome] - Login""Para logar digite sua senha""Logar","Cancelar");
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    new 
string[90];
    switch(
reason)
    {
        case 
0format(string,sizeof(string),"{00FF7F}%s {FFFAFA}saiu (Crash/Conexгo).",PlayerName(playerid));
        case 
1format(string,sizeof(string),"{00FF7F}%s {FFFAFA}saiu (Vontade prуpria).",PlayerName(playerid));
        case 
2format(string,sizeof(string),"{00FF7F}%s {FFFAFA}saiu (Kickado/Banido).",PlayerName(playerid));
    }
    
SendClientMessageToAll(-1,string);
    
SalvarPlayer(playerid);
    return 
1;
}
new 
giveplayerid,nivel;
CMD:mudarsenha(playeridparams[])
{
    
ShowPlayerDialog(playeridDIALOG_MUDAR_SENHADIALOG_STYLE_INPUT,"[Nome do server] - Mudanзa de senha","Digite sua nova senha!","Trocar","Cancelar");
    return 
1;
}
CMD:mudarnick(playeridparams[])
{
    if(
PlayerDados[playerid][pVIP] < || Autorizado[playerid] == false) return SendClientMessage(playerid,-1,"Vocк nгo й VIP ou nгo estб autorizado a troca de nick.");
    
ShowPlayerDialog(playeridDIALOG_MUDAR_NICKDIALOG_STYLE_INPUT,"[Nome do server] - Mudanзa de nick","Digite seu novo nick!","Trocar","Cancelar");
    return 
1;
}
CMD:autorizartroca(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid) && PlayerDados[playerid][pAdmin] < 1000) return SendClientMessage(playerid,-1,"Vocк nгo pode usar esse comando.");
    if(
sscanf(params,"u"giveplayerid)) return SendClientMessage(playerid,-1,"Use: /autorizartroca [id/nome]");
    if(!
IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado.");
    if(
Autorizado[giveplayerid] == true) return SendClientMessage(playerid,-1,"Jogador jб estб autorizado.");
    
Autorizado[giveplayerid] = true;
    new 
string[120];
    
format(string,sizeof(string),"{14E5FF}%s {FFFAFA}autorizou {14E5FF}%s {FFFAFA}a trocar seu nick!",PlayerName(playerid), PlayerName(giveplayerid));
    
SendClientMessage(giveplayerid,-1,string);
    
SendClientMessage(giveplayerid,-1,"Use: /mudarnick.");
    print(string);
     for(new 
0MAX_PLAYERSi++)
    {
        if(
PlayerDados[i][pAdmin] >= || IsPlayerAdmin(i))
        {
            
SendClientMessage(i, -1,string);
        }
    }
    return 
1;
}
CMD:daradmin(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid) && PlayerDados[playerid][pAdmin] < 1000) return SendClientMessage(playerid,-1,"Vocк nгo pode usar esse comando.");
    if(
sscanf(params,"ud"giveplayeridnivel)) return SendClientMessage(playerid, -1"Use: /daradmin [ID/Nome] [Level]");
    if(!
IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado.");
    if(
nivel || nivel 1000) return SendClientMessage(playerid,-1,"Os niveis sгo de 1 a 1000 (Para tirar admin use /tiraradmin)");
    
PlayerDados[giveplayerid][pAdmin] = nivel;
    new 
string[100];
    
format(string,sizeof(string),"{14E5FF}%s{FFFAFA} deu nivel {14E5FF}%d {FFFAFA}de administrador para {14E5FF}%s"PlayerName(playerid), nivelPlayerName(giveplayerid));
    
SendClientMessageToAll(-1,string);
    print(string);
    
SalvarPlayer(giveplayerid);
    return 
1;
}
CMD:admins(playeridparams[])
{
    
SendClientMessage(playerid,0xFFF00093,"|============== Admins Online ============ |");
    for(new 
0MAX_PLAYERSi++)
    {
        if(
PlayerDados[i][pAdmin] >= 1)
        {
            new 
string[50];
            
format(string,sizeof(string),"[Admin: %d] {F6E500}%s"PlayerDados[i][pAdmin], PlayerName(i));
            
SendClientMessage(playerid,-1,string);
        }
    }
    
SendClientMessage(playerid,0xFFF00093,"|===========================================|");
    return 
1;
}
CMD:relatorio(playeridparams[])
{
    
ShowPlayerDialog(playeridDIALOG_RELATORIODIALOG_STYLE_INPUT,"[Nome do server] - Relбtorio","Digite seu relбtorio","Enviar","Cancelar");
    return 
1;
}
CMD:darvip(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid) && PlayerDados[playerid][pAdmin] < 1000) return SendClientMessage(playerid,-1,"Vocк nгo pode usar esse comando.");
    if(
sscanf(params,"ud"giveplayeridnivel)) return SendClientMessage(playerid, -1"Use: /darvip [ID/Nome] [Level]");
    if(!
IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado.");
    if(
nivel || nivel 3) return SendClientMessage(playerid,-1,"Os niveis sгo de 1 a 3(Para tirar o vip use /tirarvip)");
    
PlayerDados[giveplayerid][pVIP] = nivel;
    new 
string[100];
    
format(string,sizeof(string),"{14E5FF}%s {FFFAFA}deu nivel {14E5FF}%d {FFFAFA}de VIP para {14E5FF}%s"PlayerName(playerid), nivelPlayerName(giveplayerid));
    
SendClientMessage(giveplayerid,-1,string);
    print(string);
    
SalvarPlayer(giveplayerid);
    for(new 
0MAX_PLAYERSi++)
    {
        if(
PlayerDados[i][pAdmin] >= || IsPlayerAdmin(i))
        {
            
SendClientMessage(i, -1,string);
        }
    }
    return 
1;
}
CMD:aviso(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid) && PlayerDados[playerid][pAdmin] < 1) return SendClientMessage(playerid,-1,"Vocк nгo pode usar esse comando.");
    if(
params[0] == 1) return SendClientMessage(playerid,-1,"Use: {F6E500}/av(iso) [texto]");
    new 
string[150];
    
format(stringsizeof(string),"{FFD700}Admin %s: {FFFAFA}%s",PlayerName(playerid),params);
     
SendClientMessageToAll(-1,string);
    return 
1;
}
CMD:av(playeridparams[])
{
    
cmd_aviso(playerid,params);
    return 
1;
}
CMD:kick(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid) && PlayerDados[playerid][pAdmin] < 2) return SendClientMessage(playerid,-1,"Vocк precisa estar logado na RCON ou ser admin level 2.");
    new 
motivo[60];
    if(
sscanf(params,"us"giveplayeridmotivo)) return SendClientMessage(playerid,-1,"Use: /kick [ID/Nome] [Motivo]");
    if(!
IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado.");
    new 
string[140];
    
format(string,sizeof(string),"{00BFFF}%s {FFFAFA}foi kickado por {00BFFF}%s{FFFAFA}. Motivo: {00BFFF}%s"PlayerName(giveplayerid), PlayerName(playerid), motivo);
    
SendClientMessageToAll(-1,string);
    
Kick(giveplayerid);
    return 
1;
}
CMD:ban(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid) && PlayerDados[playerid][pAdmin] < 3) return SendClientMessage(playerid,-1,"Vocк precisa estar logado na RCON ou ser admin level 3.");
    new 
motivo[60];
    if(
sscanf(params,"us"giveplayeridmotivo)) return SendClientMessage(playerid,-1,"Use: /ban [ID/Nome] [Motivo]");
    if(!
IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado.");
    new 
string[140];
    
format(string,sizeof(string),"{F6E500}%s {FFFAFA}foi banido por {F6E500}%s{FFFAFA}. Motivo: {F6E500}%s"PlayerName(giveplayerid), PlayerName(playerid), motivo);
    
SendClientMessageToAll(-1,string);
    
Ban(giveplayerid);
    return 
1;
}
CMD:setskin(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid) && PlayerDados[playerid][pAdmin] < 2) return SendClientMessage(playerid,-1,"Vocк precisa estar logado na RCON ou ser admin level 2.");
    new 
skin;
    if(
sscanf(params,"ud"giveplayeridskin)) return SendClientMessage(playerid,-1,"Use: /setskin [ID] [Skin]");
    if(!
IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,-1,"Jogador nгo estб conectado.");
    new 
string[120];
    
format(string,sizeof(string),"{FF4040}%s {FFFAFA}trocou a skin de {FF4040}%s {FFFAFA}para {FF4040}%d"PlayerName(playerid), PlayerName(giveplayerid), skin);
    
SendClientMessage(playerid,-1,string);
    
SendClientMessage(giveplayerid,-1,string);
    
SetPlayerSkin(giveplayerid,skin);
    return 
1;
}
CMD:ir(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid) && PlayerDados[playerid][pAdmin] < 2) return SendClientMessage(playerid,-1,"Vocк precisa estar logado na RCON ou ser admin level 2.");
    if(
sscanf(params,"u",giveplayerid)) return SendClientMessage(playerid,-1,"Use: /ir [ID]");
    if(!
IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,-1,"Jogador nгo conectado.");
    new 
Float:X,Float:YFloat:Z;
    new 
intgiveplayerid GetPlayerInterior(giveplayerid);
    
GetPlayerPos(giveplayeridX,Y,Z);
    
SetPlayerPos(playeridX+1Y,Z);
    
SetPlayerInterior(playeridintgiveplayerid);
    new 
string[80];
    
format(string,sizeof(string),"%s foi atй %s"PlayerName(playerid), PlayerName(giveplayerid));
    
SendClientMessage(playerid,-1,string);
    
SendClientMessage(giveplayerid,-1,string);
    return 
1;
}
CMD:trazer(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid) && PlayerDados[playerid][pAdmin] < 2) return SendClientMessage(playerid,-1,"Vocк precisa estar logado na RCON ou ser admin level 2.");
    if(
sscanf(params,"u",giveplayerid)) return SendClientMessage(playerid,-1,"Use: /trazer [ID]");
    if(!
IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,-1,"Jogador nгo conectado.");
    new 
Float:X,Float:YFloat:Z;
    new 
intplayerid GetPlayerInterior(playerid);
    
GetPlayerPos(playeridX,Y,Z);
    
SetPlayerPos(giveplayeridX+1Y,Z);
    
SetPlayerInterior(giveplayeridintplayerid);
    new 
string[90];
    
format(string,sizeof(string),"%s levou %s atй ele(a)."PlayerName(playerid), PlayerName(giveplayerid));
    
SendClientMessage(playerid,-1,string);
    
SendClientMessage(giveplayerid,-1,string);
    return 
1;
}
CMD:gmx(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Vocк nгo й administrador.");
    for(new 
0MAX_PLAYERSi++)
    {
        
SalvarPlayer(i);
        
GameTextForPlayer(i,"GMX... Nao saia do servidor"20004);
        
SendRconCommand("gmx");
    }
    return 
1;
}
public 
OnPlayerCommandPerformed(playeridcmdtext[], success)
{
    if(!
success)
    {
        new 
string[85];
        
format(stringsizeof(string), "{FF0000}[ERRO] O comando {FF6EB4}%s{FF0000} nгo existe! Use: /ajuda ou /comandos",cmdtext);
        
SendClientMessage(playerid, -1string);
    }
    return 
1;
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == DIALOG_REGISTRO)
    {
        if(
response)
        {
            if(!
strlen(inputtext)) return ShowPlayerDialog(playerid,DIALOG_REGISTRO,DIALOG_STYLE_INPUT,"[NOME] - Registro","Digite uma senha para se registrar","Registrar","Cancelar");
            if(
strlen(inputtext) < || strlen(inputtext) > 15) return ShowPlayerDialog(playerid,DIALOG_REGISTRO,DIALOG_STYLE_INPUT,"[NOME] - Registro","A senha deve ter de 3 a 15 caracteres","Registrar","Cancelar");
            new 
string[70];
            
format(string,sizeof(string),"Conta registrada com sucesso! Senha: {F6E500}%s"inputtext);
             
SendClientMessage(playerid,-1,string);
            
DOF2_CreateFile(ReturnFileUser(playerid));
            
DOF2_SetString(ReturnFileUser(playerid),"Senha",inputtext);
            
DOF2_SaveFile();
            
SetSpawnInfo(playerid001722.5123, -1912.793113.5647269.15000000);
              
SpawnPlayer(playerid);
            
GivePlayerMoney(playerid1000);
             
SetPlayerScore(playerid,1);
         }
        else if(!
response)
        {
            
SendClientMessage(playerid,-1,"Vocк foi kickado por nгo se registrar.");
            
Kick(playerid);
        }
        return 
1;
    }
    if(
dialogid == DIALOG_LOGIN)
    {
        if(
response)
        {
            if(!
strlen(inputtext)) return ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"[NOME] - Login","Digite sua senha","Logar","Cancelar");
            if(
strcmp(inputtext,DOF2_GetString(ReturnFileUser(playerid),"Senha"),true) == 0)
            {
                
SetSpawnInfo(playerid001722.5123, -1912.793113.5647269.15000000);
                
SpawnPlayer(playerid);
                
GivePlayerMoney(playerid1000);
                
CarregarPlayer(playerid);
                
SendClientMessage(playerid,0x2CB60AAA,"<!>Logado com sucesso!");
            }
            else
            {
                if(
SenhaErrada[playerid] == 4)
                {
                    
SendClientMessage(playerid,0xC5B43AAA,"Vocк foi banido por errar a senha 5 vezes.");
                    
Ban(playerid);
                }
                else if(
SenhaErrada[playerid] < 4)
                {
                    
SenhaErrada[playerid] ++;
                    
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"[NOME] - Login","Senha incorreta, tente novamente. Se errar a senha 5 vezes serб banido!","Logar","Sair");
                }
            }
        }
        else if(!
response)
        {
            
SendClientMessage(playerid,0xC5B43AAA,"Vocк foi kickado por nгo logar");
            
Kick(playerid);
         }
        return 
1;
    }
    if(
dialogid == DIALOG_MUDAR_NICK)
    {
        if(!
response) return SendClientMessage(playerid,0xC5B43AAA,"Vocк cancelou a troca do nick.");
        if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDIALOG_MUDAR_NICKDIALOG_STYLE_INPUT,"[Nome do server] - Mudanзa de nick","Digite seu novo nick","Trocar","Cancelar");
        new 
arq[70];
        
format(arq,sizeof(arq),"Contas/%s.ini"inputtext);
        if(
fexist(arq)) return ShowPlayerDialog(playerid,DIALOG_MUDAR_NICK,DIALOG_STYLE_INPUT"[Nome do server] - Mudanзa de nick","ERRO: Esse nick jб existe","Trocar","Cancelar");
        new 
string[60];
        if(
fexist(ReturnFileUser(playerid)))
        {
            new 
string2[50];
            
format(string2,sizeof(string2),"Contas/%s.ini"inputtext);
            
DOF2_RenameFile(ReturnFileUser(playerid),string2);
            
DOF2_SaveFile();
        }
        
format(stringsizeof(string), "Parabйns! Seu novo nome й {FFFF34}%s"inputtext);
        
SendClientMessage(playerid, -1string);
        
SetPlayerName(playeridinputtext);
        
Autorizado[playerid] = false;
        return 
1;
    }
    if(
dialogid == DIALOG_MUDAR_SENHA)
    {
        if(!
response) return SendClientMessage(playerid,0xC5B43AAA,"Vocк cancelou a troca da senha.");
        if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDIALOG_MUDAR_SENHA,DIALOG_STYLE_INPUT,"[Nome do server] - Mudanзa de senha","Digite sua nova senha.","Trocar","Cancelar");
        if(
fexist(ReturnFileUser(playerid)))
        {
            
DOF2_SetString(ReturnFileUser(playerid),"Senha",inputtext);
            
DOF2_SaveFile();
        }
        new 
string[60];
        
format(stringsizeof(string), "Parabйns! Sua nova senha й {FFFF34}%s"inputtext);
        
SendClientMessage(playerid, -1string);
        return 
1;
    }
    if(
dialogid == DIALOG_RELATORIO)
    {
        if(!
response) return SendClientMessage(playerid,-1,"Vocк cancelou o envio do relбtorio.");
        if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDIALOG_RELATORIODIALOG_STYLE_INPUT,"[Nome do server] - Relбtorio","Digite seu relбtorio","Enviar","Cancelar");
        new 
string[160];
        
format(string,sizeof(string),"Relбtorio de %s: {25E500}%s",PlayerName(playerid), inputtext);
        for(new 
0MAX_PLAYERSi++)
        {
            if(
PlayerDados[i][pAdmin] > || IsPlayerAdmin(i))
            {
                if(
PlayerDados[playerid][pVIP] >= 1) return SendClientMessage(i,0x00FF40AAstring);// vai mandar a mensagem com uma cor mais bonitinha se for vip
                
else if(PlayerDados[playerid][pVIP] < 1) return SendClientMessage(i, -1string);//se nao for vip a mensagem sera mandada com a cor branca
            
}
        }
        return 
1;
    }
    return 
1;
}
stock SalvarPlayer(playerid)
{
    if(
DOF2_FileExists(ReturnFileUser(playerid)))
    {
        
DOF2_SetInt(ReturnFileUser(playerid),"Level",GetPlayerScore(playerid));
        
DOF2_SetInt(ReturnFileUser(playerid),"Dinheiro",GetPlayerMoney(playerid));
        
DOF2_SetInt(ReturnFileUser(playerid),"Admin Level",PlayerDados[playerid][pAdmin]);
        
DOF2_SetInt(ReturnFileUser(playerid),"Skin",GetPlayerSkin(playerid));
        
DOF2_SetInt(ReturnFileUser(playerid),"VIP"PlayerDados[playerid][pVIP]);
        
DOF2_SaveFile();
    }
}
stock CarregarPlayer(playerid)
{
    if(
DOF2_FileExists(ReturnFileUser(playerid)))
    {
        
SetPlayerScore(playeridDOF2_GetInt(ReturnFileUser(playerid), "Level"));
        
SetPlayerMoney(playeridDOF2_GetInt(ReturnFileUser(playerid), "Dinheiro"));
        
PlayerDados[playerid][pAdmin] = DOF2_GetInt(ReturnFileUser(playerid),"Admin Level");
        
SetPlayerSkin(playeridDOF2_GetInt(ReturnFileUser(playerid),"Skin"));
        
PlayerDados[playerid][pVIP] = DOF2_GetInt(ReturnFileUser(playerid),"VIP");
    }
}
stock PlayerName(playerid)
{
    new 
Name[MAX_PLAYERS];
    
GetPlayerName(playeridNamesizeof(Name));
    return 
Name;
}
stock SetPlayerMoney(playerid,ammount)
{
     
ResetPlayerMoney(playerid);
     
GivePlayerMoney(playerid,ammount);
     return 
1;

Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)