Portal SAMP
[Ajuda] DOF2 Não Salva A Variavel - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] DOF2 Não Salva A Variavel (/showthread.php?tid=2601)



DOF2 Não Salva A Variavel - [M]ADARA - 27/07/2022

Estou criando um sistema de admin, estava dando tudo certo, mas a variável admin não é salva na scriptfiles na conta do player

esse é o codigo


Código:
//=================================================INCLUDES===========================================//
#include <a_samp>
#include <DOF2>
#include <sscanf2>
#include <zcmd>

main()
{
print("\n----------------------------------");
print(" Blank Gamemode by [M]ADARA");
print("----------------------------------\n");
}

//================================================CORES===========================================//

#define VERMELHO 0xFF9C9CF6
#define VERDE_BEM_CLARO 0xC5FFC2F6
#define AZUL_BEM_CLARO 0xACF6FFF6
#define ROXO 0xCBC2FFF6
#define COR_ROSA_CLARO 0xFFB7FFF6
#define COR_PRETA_TRANSPARENTE 0x00000051
#define COR_VERDE_AMARELADA 0xD8FF12F6
#define COR_BRANCA 0xFFFFFFF6
#define COR_CINZA 0xD2D2D2F6
#define COR_VERDE_FOLHA 0x90BC70F6
#define COR_LARANJA 0xFFA500F6
#define COR_AMARELO 0xEBEB00F6

//================================================VARIAVEIS======================================//

#define Dialog_Registro 1
#define Dialog_Login 2

enum pInfo
{
pLogado,
pAdmin

};
new Player[MAX_PLAYERS][pInfo];

new bool:Registrado[MAX_PLAYERS];


public OnGameModeInit()
{

SetGameModeText("Brasil Conexão RolePlay");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
DisableInteriorEnterExits();
UsePlayerPedAnims();
return 1;
}

public OnGameModeExit()
{
DOF2_Exit();
return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
SetSpawnInfo(playerid, 0, 0, -2556.5728, 2898.2754, 89.0627, 346.8486, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
TogglePlayerControllable(playerid, 0);
SetPlayerCameraPos(playerid, 635.4689, -1917.6497, 58.3797);
SetPlayerCameraLookAt(playerid, 534.3591, -1854.5668, 26.9556, 11000);
if(DOF2_FileExists(Arquivo(playerid))) return ShowPlayerDialog(playerid, Dialog_Login, DIALOG_STYLE_INPUT, "Login", "{FFFFFF}Digite sua Senha", "Cofirmar", "Sair");
if(!DOF2_FileExists(Arquivo(playerid))) return ShowPlayerDialog(playerid, Dialog_Registro, DIALOG_STYLE_INPUT, "Registro", "{FFFFFF}Digite sua Senha", "Cofirmar", "Sair");
return 1;
}

public OnPlayerConnect(playerid)
{
GivePlayerMoney(playerid, 5000);
Player[playerid][pAdmin] = DOF2_GetInt(Arquivo(playerid), "Admin");

return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(DOF2_FileExists(Arquivo(playerid)))
    {
        DOF2_SetInt(Arquivo(playerid), "Admin", Player[playerid][pAdmin]);
        DOF2_SaveFile();
    }
    else
    {
        DOF2_CreateFile(Arquivo(playerid));
        DOF2_SetInt(Arquivo(playerid), "Admin", Player[playerid][pAdmin]);
        DOF2_SaveFile();
    }
return 1;
}

public OnPlayerSpawn(playerid)
{
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}

public OnVehicleSpawn(vehicleid)
{
return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}

public OnPlayerText(playerid, text[])
{
return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}

public OnRconCommand(cmd[])
{
return 1;
}

public OnPlayerRequestSpawn(playerid)
{
return 1;
}

public OnObjectMoved(objectid)
{
return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}

public OnPlayerExitedMenu(playerid)
{
return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}

public OnPlayerUpdate(playerid)
{
return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == Dialog_Registro)
{
    if(response)
    {
        if(strlen(inputtext) < 4 || strlen(inputtext) > 8) return SendClientMessage(playerid, -1, "Sua Senha deve conter entre 4 e 8 caracteres!"), ShowPlayerDialog(playerid, Dialog_Registro, DIALOG_STYLE_INPUT, "Registro", "{FFFFFF}Digite sua Senha", "Cofirmar", "Sair");
        DOF2_CreateFile(Arquivo(playerid));
        DOF2_SetString(Arquivo(playerid), "Senha", inputtext);
        DOF2_SaveFile();
        SetSpawnInfo(playerid, 0, 26, 1451.6366,-2287.0376,13.5469,267.0363,0,0,0,0,0,0);
  SpawnPlayer(playerid);
  TogglePlayerControllable(playerid, 1);
  SetCameraBehindPlayer(playerid);
Player[playerid][pLogado] = 1;
    }
    else
    {
        Kick(playerid);
    }
    return 1;
}
if(dialogid == Dialog_Login)
{
    if(strcmp(inputtext, DOF2_GetString(Arquivo(playerid), "Senha")) == 0)
    {
        SetSpawnInfo(playerid, 0, 26, 1451.6366,-2287.0376,13.5469,267.0363,0,0,0,0,0,0);
  SpawnPlayer(playerid);
TogglePlayerControllable(playerid, 1);
  SetCameraBehindPlayer(playerid);
  Player[playerid][pLogado] = 1;
    }
    else
    {
        SendClientMessage(playerid, -1, "Senha Incorreta");
        ShowPlayerDialog(playerid, Dialog_Login, DIALOG_STYLE_INPUT, "Login", "{FFFFFF}Digite sua Senha", "Cofirmar", "Sair");
    }
}
else
{
  Kick(playerid);
}
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}

CMD:daradmin(playerid, params[])
{
new id, nivel, string[250];
if(!IsPlayerAdmin(playerid) && Player[playerid][pAdmin] <5) return SendClientMessage(playerid, VERMELHO,"Você não está Autorizado a utilizar este Comando");
if(sscanf(params, "dd", id, nivel)) return SendClientMessage(playerid, ROXO,"USE /DARADMIN [ID] [NIVEL]");
if(nivel < 0 || nivel > 5) return SendClientMessage(playerid, ROXO,"NIVEL DE ADMIN 0 A 5");
if (!IsPlayerConnected(id)) return SendClientMessage(playerid, VERMELHO, "digite um [id] valido");
Player[id][pAdmin] = nivel;
format(string, 250, "Você Se Tornou Admin Nivel %d", nivel);
SendClientMessage(id, -1, string);
return 1;
}

CMD:retiraradmin(playerid, params[])
{
new id, string[250];
if(!IsPlayerAdmin(playerid) && Player[playerid][pAdmin] <5) return SendClientMessage(playerid, VERMELHO,"Você não está Autorizado a utilizar este Comando");
if(sscanf(params, "d", id)) return SendClientMessage(playerid, ROXO,"USE /TIRARADMIN [ID]");
if (!IsPlayerConnected(id)) return SendClientMessage(playerid, VERMELHO, "digite um [id] valido");
Player[id][pAdmin] = 0;
format(string, 250, "Você não é mais um admin");
SendClientMessage(id, -1, string);
return 1;
}

CMD:ir(playerid, params[])
{
new id, Float:pos[3], string[150];
if(!IsPlayerAdmin(playerid) && Player[playerid][pAdmin] <1 ) return SendClientMessage(playerid, VERMELHO,"Você não está Autorizado a utilizar este Comando");
if(sscanf(params, "d", id)) return SendClientMessage(playerid, ROXO,"USE /IR [ID]");
if (!IsPlayerConnected(id)) return SendClientMessage(playerid, VERMELHO, "digite um [id] valido");
GetPlayerPos(id, pos[0], pos[1], pos[2]);
SetPlayerPos(playerid, pos[0], pos[1], pos[2]);
format(string, 150, "Você Foi Até o Jogador %s", pName(id));
SendClientMessage(playerid, -1, string);
return 1;
}

CMD:trazer(playerid, params[])
{
new id, Float:pos[3], string[150];
if(!IsPlayerAdmin(playerid) && Player[playerid][pAdmin] <1 ) return SendClientMessage(playerid, VERMELHO,"Você não está Autorizado a utilizar este Comando");
if(sscanf(params, "d", id)) return SendClientMessage(playerid, ROXO,"USE /TRAZER [ID]");
if (!IsPlayerConnected(id)) return SendClientMessage(playerid, VERMELHO, "digite um [id] valido");
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
SetPlayerPos(id, pos[0], pos[1], pos[2]);
format(string, 150, "Você Puxou Jogador %s", pName(id));
SendClientMessage(playerid, -1, string);
return 1;
}

CMD:avisoadm(playerid, params[])
{
new mensagem[250], string[250];
if(!IsPlayerAdmin(playerid) && Player[playerid][pAdmin] <3 ) return SendClientMessage(playerid, VERMELHO,"Você não está Autorizado a utilizar este Comando");
if(sscanf(params, "s[250]", mensagem)) return SendClientMessage(playerid, ROXO,"USE /AVISO [MENSAGEM]");
format(string, 250, "%s [%d] > %s", pName(playerid), playerid, mensagem);
SendClientMessageToAll(-1, "=====Administração=====");
SendClientMessageToAll(-1, string);
return 1;
}

stock pName(playerid)
{
new Nome[MAX_PLAYER_NAME];
GetPlayerName(playerid, Nome, MAX_PLAYER_NAME);
return Nome;
}

stock Arquivo(playerid)
{
new string[100];
format(string, 100, "Contas/%s.ini", pName(playerid));
return string;
}



RE: DOF2 Não Salva A Variavel - Treze_. - 27/07/2022

Boa tarde, analisando o teu código não vi nenhum erro, posso estar enganado mas acho que aconteceu o seguinte:

Como você está salvando em OnPlayerDisconect, quando você fecha o servidor pelo console e o player está dentro do servidor, a public  OnPlayerDisconect não é chamada, experimenta salvar do mesmo jeito que você salvou antes mas dentro do comando de /daradmin, assim a variável será salva logo depois quando setada no player, não esqueça de mudar dai na string de playerid para id.


Dica: da próxima vez não precisa postar todo o código, só coloque as partes principais do problema.


RE: DOF2 Não Salva A Variavel - [M]ADARA - 27/07/2022

(27/07/2022 15:18)Treze_. Escreveu: Boa tarde, analisando o teu código não vi nenhum erro,  posso estar enganado mas acho que aconteceu o seguinte:

Como você está salvando em OnPlayerDisconect, quando você fecha o servidor pelo console e o player está dentro do servidor, a public  OnPlayerDisconect não é chamada, experimenta salvar do mesmo jeito que você salvou antes mas dentro do comando de /daradmin, assim a variável será salva logo depois quando setada no player, não esqueça de mudar dai na string de playerid para id.


Dica: da próxima vez não precisa postar todo o código, só coloque as partes principais do problema.

Mn, eu testei aqui e não funcionou ainda, eu vou tentar refazer o sistema de login e ai nisso eu já vou add o sistema de admin pra ver se funciona

vlw pela ajuda.


RE: DOF2 Não Salva A Variavel - White_Blue - 27/07/2022

Então, a lógica de salvamento em DOF2 é simples, basicamente funciona em input/output, você salva os dados que estão armazenados em uma variável e puxa no evento desejado. Irei fazer um exemplo sistema de admin simples abaixo.

Código PHP:
new Arq[128];
new 
Admin[MAX_PLAYERS];

#define Contas "/Contas/%s.ini"

public OnPlayerConnect(playerid) { // Como eu não irei criar uma tela de login, eu salvo a conta do player assim que ele entrar no servidor!
 
format(Arqsizeof(Arq), ContasPlayerName(playerid));
 if(!
DOF2_FileExists(Arq)) DOF2_CreateFile(Arq);
 
Input(playerid);
 return 
1;
}

stock Input(playerid) {
 
format(Arqsizeof(Arq), ContasPlayerName(playerid));
 if(
Admin[playerid] > 0Admin[playerid] = DOF2_GetInt(Arq"Admin");
 else {
 
Admin[playerid] = 0;
 }
 return 
1;
}

stock PlayerName(playerid) {
 static 
Nome[MAX_PLAYER_NAME];
 
GetPlayerName(playeridNomeMAX_PLAYER_NAME);
 return 
Nome;
}

CMD:daradmin(playeridparams[]) {
 new 
plidlevelstr[128]; 
 if(!
IsPlayerAdmin(playerid)) return 1;
 if(
sscanf(params"ud"plidlevel)) return SendClientMessage(playerid, -1"/daradmin [id] [level]");
 if(
level || level 1) return SendClientMessage(playerid, -1"O level deve ser entre 1 e 2!"); // Farei apenas dois níveis de admin neste exemplo.
 
Admin[plid] = level;
 
format(strsizeof(str), "Você recebeu %d level de admin!"level);
 
SendClientMessage(playerid, -1str);
 return 
1;