Portal SAMP
[Ajuda] Dados deletados ao reiniciar o servidor - 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] Dados deletados ao reiniciar o servidor (/showthread.php?tid=4628)



Dados deletados ao reiniciar o servidor - Ryzen_ - 16/03/2024

Em alguns momentos quando reinicio meu servidor, algum player acaba voltando com sua conta tendo o dinheiro, level, cargo, emprego e skins deletadas. Estou utilizando DOF2 para realizar o salvamento, mas simplesmente não consigo encontrar o que pode estar causando isso (Obs.: a parte de salvamento foi feita por um colega da equipe que também codifica na GM). De começo eu notei que estava faltando a função DOF2_SaveFile() ao final da SaveAccount(playerid), mas mesmo após a inserir, continua acontecendo o mesmo problema. Não é sempre que acontece, geralmente é quando eu reinicio o servidor várias vezes enquanto estou adicionando novas funcionalidades, daí em uma delas, ao voltar para o game ele acaba dando uma mensagem de crash ou fechando do nada, e quando volto estou setado com a skin do CJ e caindo no limbo. Se alguém puder me ajudar com isso, ficarei grato! Caso precisem de mais informações, basta me perguntar.

SaveAccount:
Código PHP:
stock SaveAccount(playerid) {
    
format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    
DOF2_SetInt(File"Level"PlayerInfo[playerid][pLevel]);
    
DOF2_SetInt(File"EXP"PlayerInfo[playerid][pExp]);
    
DOF2_SetInt(File"Admin"PlayerInfo[playerid][pAdmin]);
    
DOF2_SetInt(File"Dinheiro"PlayerInfo[playerid][pGrana]);
    
DOF2_SetInt(File"Skin"PlayerInfo[playerid][pSkin]);
    
DOF2_SetInt(File"Sexo"PlayerInfo[playerid][pSexo]);
    
DOF2_SetInt(File"Fome"PlayerInfo[playerid][pFome]);
    
DOF2_SetInt(File"Sede"PlayerInfo[playerid][pSede]);
    
DOF2_SetInt(File"Sono"PlayerInfo[playerid][pSono]);
    
DOF2_SetInt(File"Emprego"PlayerInfo[playerid][pEmprego]);
    
DOF2_SetInt(File"CategoriaEmprego"PlayerInfo[playerid][pEmpregoCategoria]);
    
DOF2_SetInt(File"NivelProcurado"PlayerInfo[playerid][pWantedLevel]);
    
DOF2_SetInt(File"TempoPreso"PlayerInfo[playerid][pTempoPreso]);
    
DOF2_SetBool(File"Preso"PlayerInfo[playerid][pPreso]);
    
DOF2_SetBool(File"Mutado"PlayerInfo[playerid][pMutado]);
    
DOF2_SetInt(File"TempoMutado"PlayerInfo[playerid][pTempoMutado]);

    
DOF2_SetBool(File"Contrato"PlayerInfo[playerid][pContrato]);
    
DOF2_SetInt(File"ValorContrato"PlayerInfo[playerid][pValorContrato]);

    
DOF2_SetInt(File"Organizacao"PlayerInfo[playerid][pOrganizacao]);
    
DOF2_SetInt(File"Cargo"PlayerInfo[playerid][pCargo]);

    new 
daymonthyear;
    
getdate(yearmonthday);
    
format(STRX128"%02d/%02d/%04d"daymonthyear);
    
DOF2_SetString(File"UltimoLogin"STRX);

    new 
Float:XFloat:YFloat:Zintid;
    
GetPlayerPos(playeridXYZ);
    
intid GetPlayerInterior(playerid);

    
PlayerInfo[playerid][pPosX] = X;
    
PlayerInfo[playerid][pPosY] = Y;
    
PlayerInfo[playerid][pPosZ] = Z;
    
PlayerInfo[playerid][pInterior] = intid;

    
DOF2_SetFloat(File"PosX"PlayerInfo[playerid][pPosX]);
    
DOF2_SetFloat(File"PosY"PlayerInfo[playerid][pPosY]);
    
DOF2_SetFloat(File"PosZ"PlayerInfo[playerid][pPosZ]);
    
DOF2_SetInt(File"Interior"PlayerInfo[playerid][pInterior]);
    
DOF2_SaveFile();
    
    return 
1;


OnPlayerDisconnect:
Código PHP:
public OnPlayerDisconnect(playeridreason) {
    
SaveAccount(playerid);

    if(
GetPVarInt(playerid"Fardado")) {
        
DeletePVar(playerid"Fardado");
        
SetPlayerSkin(playeridGetPVarInt(playerid"PreviousSkin"));
        
DeletePVar(playerid"PreviousSkin");
    }

    if(
GetPVarInt(playerid"Alugou")) {
        
DestroyVehicle(GetPVarInt(playerid"AlugadoID"));

        
DestroyDynamic3DTextLabel(TrashTruckInfo[GetPVarInt(playerid"AlugadoID")][tLabel]);
        
TrashTruckInfo[GetPVarInt(playerid"AlugadoID")][tLabel] = Text3D:INVALID_3DTEXT_ID;

        
DeletePVar(playerid"AlugadoID");
        
DeletePVar(playerid"Alugou");
    }

    if(
GetPVarInt(playerid"criouv")) {
        
DeletePVar(playerid"criouv");

        if(
GetPVarInt(playerid"cvehid") != INVALID_VEHICLE_IDDestroyVehicle(GetPVarInt(playerid"cvehid"));

        
DeletePVar(playerid"cvehid");
    }

    if(
PlayerInfo[playerid][pPreso]) {
        
DOF2_SetInt(FormatAccFile(playerid), "TempoPreso"PlayerInfo[playerid][pTempoPreso]);
        
KillTimer(TimerPrisao[playerid]);
    }
    
    
// Timers
    
KillTimer(ClockTimer[playerid]);
    
KillTimer(TimerHunger[playerid]);
    
KillTimer(TimerSono[playerid]);
    
KillTimer(TimerSede[playerid]);
    
KillTimer(TimerCar[playerid]);
    
KillTimer(TimerExpirarLogin[playerid]);
    
KillTimer(TimerAbastecer[playerid]);
    
KillTimer(TimerProcurado[playerid]);

    
DeletePVar(playerid"Abastecendo");
    
HideGlobalGasolinaText(playerid); 
    
HidePlayerGasolinaText(playerid);

    if(
HotelInfo[playerid][hInHotel]) {
        
SetPlayerInterior(playerid0);
        
SetPlayerPos(playerid332.0835,-1515.6294,35.8672);
        
SetPlayerVirtualWorld(playerid0);

        
HotelInfo[playerid][hInHotel] = false;
        
HotelInfo[playerid][hVWorld] = 0;
    }


    
// Reset
    
PlayerInfo[playerid][pRcon] = false;
    
PlayerInfo[playerid][pAFK] = false;

    if(
GetPVarInt(playerid"Algemado")) {
        
SendClientMessageToAllEx(Verde"| INFO | %s saiu algemado e portanto foi punido automaticamente"GetPlayerNameEx(playerid));

        
GivePlayerWanted(playeridGetPlayerWanted(playerid) * 2);
        
GivePlayerLevel(playerid, -3);
        
GivePlayerCash(playerid, -15000);
    }

    if(
PlayerInfo[playerid][pPegouEmprego]) {
        
RemovePlayerMapIcon(playerid1);
        
PlayerInfo[playerid][pPegouEmprego] = false;
        
DeletePVar(playerid"EmpregoID");
    }

    if (
GetPVarInt(playerid"Called")) {
        
CallStarted[playerid] = false;
        
InCall[playerid] = false;
        
DeletePVar(playerid"Called");
    }
    return 
1;


Caso sirva de algo, aqui está a mensagem de crash:
Código:
SA-MP 0.3.7-R5
Exception At Address: 0x0460D9D1
Base: 0x04570000

Registers:
EAX: 0x00000045    EBX: 0xFFFFFFFF    ECX: 0x00000040    EDX: 0x00619000
ESI: 0x49F764FF    EDI: 0x00000003    EBP: 0x0177F688    ESP: 0x0177F618
EFLAGS: 0x00010206

Stack:
+0000: 0x0421EB08   0x007F99B0   0x045E4836   0x007F99B0
+0010: 0x007F99C7   0x041312C0   0x007FB1C3   0x0421EB08
+0020: 0x00060E7E   0x00000000   0x01974178   0x041BE8B4
+0030: 0x007EE388   0x0421EB08   0x00060E7E   0x00000000
+0040: 0x0177F708   0x0074526A   0x041BE8B4   0x00060E7E
+0050: 0x00000000   0x0053EC06   0x041BE8B4   0x041BE8B4
+0060: 0x44700000   0x44070000   0x5F82FC50   0x00000001
+0070: 0x0177F6D0   0x5F82B8E9   0x0177F6DC   0x0198D120
+0080: 0x5F888A9C   0x01974178   0x00060E7E   0x00000000
+0090: 0x0177F6C0   0x7548E74B   0x00000113   0x00000001
+00A0: 0x00000000   0x0177F698   0x0177F698   0x0177F6F4
+00B0: 0x5F883B40   0x00000001   0x0177F6E4   0x5F82FC02
+00C0: 0x0198D134   0x00000001   0x0177F888   0x0177F700
+00D0: 0x5F82E267   0x0177F708   0x0177F888   0x0177F868
+00E0: 0x5F883B58   0x00000000   0x0177F874   0x5F830246
+00F0: 0x5F8889A4   0x01974178   0x00060E7E   0xDCBAABCD
+0100: 0x00000000   0x0177F868   0x5F883D85   0xFFFFFFFF
+0110: 0x0177F874   0x00000000   0x0177F888   0x0000001A
+0120: 0x00000001   0x00000000   0x00000000   0x003B7000
+0130: 0x00000001   0xA8A5E770   0x00000000   0x77698850
+0140: 0x00000001   0x00000000   0x00000000   0x00000070
+0150: 0x00000000   0x00760994   0x00000000   0x0177F74C
+0160: 0x02262DD0   0x0177F7D8   0x75475A70   0xDC9FFB14
+0170: 0xFFFFFFFE   0x0177F7C8   0x7546D6DF   0x0233F9F0
+0180: 0x776767AC   0x7546D6F7   0x0177F7B0   0x00000018
+0190: 0x00000000   0x0177F8F8   0x00000000   0x00000000
+01A0: 0x00000000   0x00000000   0x00000000   0x00000000
+01B0: 0x0177F850   0x77678D6D   0x0177F7E4   0x00000020
+01C0: 0x0177F980   0x7FFE8000   0x0000AA64   0x77661532
+01D0: 0x0177F840   0x0177F844   0x00000000   0xFFFFFFFF
+01E0: 0x72D5AE20   0x77698850   0x00000000   0x7546C70F
+01F0: 0x0177F8F8   0x00000000   0x00000000   0x00000000
+0200: 0x6576CE2C   0x0177F894   0x77661220   0xFFFFFFFF
+0210: 0x0177F844   0x7766133A   0x5F8889A4   0x01974178
+0220: 0x00000000   0x00000001   0xA8A58664   0x0000014C
+0230: 0x9FBFDFA1   0x00B1750F   0x00192FD4   0x00000000
+0240: 0x01974178   0x01973930   0x7FFE8000   0x546C6148
+0250: 0x0177F980   0x5F883CEC   0x00000000   0x0177F880
+0260: 0x5F83013C   0x0177F888   0x754D78F0   0x0053ECC2
+0270: 0x00000001   0x00619B71   0x0000001A   0x00000001

SCM Op: 0x248, lDbg: 0 LastRendObj: 3276

Game Version: US 1.0

State Information: Ped Context: 0



RE: Dados deletados ao reiniciar o servidor - White_Blue - 16/03/2024

Se possível, também mande a callback OnGameModeExit. Não entendi por que você enviou o crash report, já que você disse que isso só acontece quando o servidor é reiniciado.


RE: Dados deletados ao reiniciar o servidor - Ryzen_ - 16/03/2024

(16/03/2024 08:17)White_Blue Escreveu: Se possível, também mande a callback OnGameModeExit. Não entendi por que você enviou o crash report, já que você disse que isso só acontece quando o servidor é reiniciado.

Achei que poderia servir de algo.

OnGameModeExit()
Código PHP:
public OnGameModeExit() {
    foreach(new 
iPlayer) {
        if(
IsPlayerConnected(i)) {
            
SaveAccount(i);
        }
    }

    
DOF2_Exit();
    print(
"Servidor reiniciado");
    return 
1;




RE: Dados deletados ao reiniciar o servidor - Notknown - 16/03/2024

(16/03/2024 02:35)Ryzen_ Escreveu: Em alguns momentos quando reinicio meu servidor, algum player acaba voltando com sua conta tendo o dinheiro, level, cargo, emprego e skins deletadas. Estou utilizando DOF2 para realizar o salvamento, mas simplesmente não consigo encontrar o que pode estar causando isso (Obs.: a parte de salvamento foi feita por um colega da equipe que também codifica na GM). De começo eu notei que estava faltando a função DOF2_SaveFile() ao final da SaveAccount(playerid), mas mesmo após a inserir, continua acontecendo o mesmo problema. Não é sempre que acontece, geralmente é quando eu reinicio o servidor várias vezes enquanto estou adicionando novas funcionalidades, daí em uma delas, ao voltar para o game ele acaba dando uma mensagem de crash ou fechando do nada, e quando volto estou setado com a skin do CJ e caindo no limbo. Se alguém puder me ajudar com isso, ficarei grato! Caso precisem de mais informações, basta me perguntar.

SaveAccount:
Código PHP:
stock SaveAccount(playerid) {
    format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    DOF2_SetInt(File"Level"PlayerInfo[playerid][pLevel]);
    DOF2_SetInt(File"EXP"PlayerInfo[playerid][pExp]);
    DOF2_SetInt(File"Admin"PlayerInfo[playerid][pAdmin]);
    DOF2_SetInt(File"Dinheiro"PlayerInfo[playerid][pGrana]);
    DOF2_SetInt(File"Skin"PlayerInfo[playerid][pSkin]);
    DOF2_SetInt(File"Sexo"PlayerInfo[playerid][pSexo]);
    DOF2_SetInt(File"Fome"PlayerInfo[playerid][pFome]);
    DOF2_SetInt(File"Sede"PlayerInfo[playerid][pSede]);
    DOF2_SetInt(File"Sono"PlayerInfo[playerid][pSono]);
    DOF2_SetInt(File"Emprego"PlayerInfo[playerid][pEmprego]);
    DOF2_SetInt(File"CategoriaEmprego"PlayerInfo[playerid][pEmpregoCategoria]);
    DOF2_SetInt(File"NivelProcurado"PlayerInfo[playerid][pWantedLevel]);
    DOF2_SetInt(File"TempoPreso"PlayerInfo[playerid][pTempoPreso]);
    DOF2_SetBool(File"Preso"PlayerInfo[playerid][pPreso]);
    DOF2_SetBool(File"Mutado"PlayerInfo[playerid][pMutado]);
    DOF2_SetInt(File"TempoMutado"PlayerInfo[playerid][pTempoMutado]);

    DOF2_SetBool(File"Contrato"PlayerInfo[playerid][pContrato]);
    DOF2_SetInt(File"ValorContrato"PlayerInfo[playerid][pValorContrato]);

    DOF2_SetInt(File"Organizacao"PlayerInfo[playerid][pOrganizacao]);
    DOF2_SetInt(File"Cargo"PlayerInfo[playerid][pCargo]);

    new daymonthyear;
    getdate(yearmonthday);
    format(STRX128"%02d/%02d/%04d"daymonthyear);
    DOF2_SetString(File"UltimoLogin"STRX);

    new Float:XFloat:YFloat:Zintid;
    GetPlayerPos(playeridXYZ);
    intid GetPlayerInterior(playerid);

    PlayerInfo[playerid][pPosX] = X;
    PlayerInfo[playerid][pPosY] = Y;
    PlayerInfo[playerid][pPosZ] = Z;
    PlayerInfo[playerid][pInterior] = intid;

    DOF2_SetFloat(File"PosX"PlayerInfo[playerid][pPosX]);
    DOF2_SetFloat(File"PosY"PlayerInfo[playerid][pPosY]);
    DOF2_SetFloat(File"PosZ"PlayerInfo[playerid][pPosZ]);
    DOF2_SetInt(File"Interior"PlayerInfo[playerid][pInterior]);
    DOF2_SaveFile();
    
    
return 1;


OnPlayerDisconnect:
Código PHP:
public OnPlayerDisconnect(playeridreason) {
    SaveAccount(playerid);

    if(GetPVarInt(playerid"Fardado")) {
        DeletePVar(playerid"Fardado");
        SetPlayerSkin(playeridGetPVarInt(playerid"PreviousSkin"));
        DeletePVar(playerid"PreviousSkin");
    }

    if(GetPVarInt(playerid"Alugou")) {
        DestroyVehicle(GetPVarInt(playerid"AlugadoID"));

        DestroyDynamic3DTextLabel(TrashTruckInfo[GetPVarInt(playerid"AlugadoID")][tLabel]);
        TrashTruckInfo[GetPVarInt(playerid"AlugadoID")][tLabel] = Text3D:INVALID_3DTEXT_ID;

        DeletePVar(playerid"AlugadoID");
        DeletePVar(playerid"Alugou");
    }

    if(GetPVarInt(playerid"criouv")) {
        DeletePVar(playerid"criouv");

        if(GetPVarInt(playerid"cvehid") != INVALID_VEHICLE_IDDestroyVehicle(GetPVarInt(playerid"cvehid"));

        DeletePVar(playerid"cvehid");
    }

    if(PlayerInfo[playerid][pPreso]) {
        DOF2_SetInt(FormatAccFile(playerid), "TempoPreso"PlayerInfo[playerid][pTempoPreso]);
        KillTimer(TimerPrisao[playerid]);
    }
    
    
// Timers
    KillTimer(ClockTimer[playerid]);
    KillTimer(TimerHunger[playerid]);
    KillTimer(TimerSono[playerid]);
    KillTimer(TimerSede[playerid]);
    KillTimer(TimerCar[playerid]);
    KillTimer(TimerExpirarLogin[playerid]);
    KillTimer(TimerAbastecer[playerid]);
    KillTimer(TimerProcurado[playerid]);

    DeletePVar(playerid"Abastecendo");
    HideGlobalGasolinaText(playerid); 
    HidePlayerGasolinaText(playerid);

    if(HotelInfo[playerid][hInHotel]) {
        SetPlayerInterior(playerid0);
        SetPlayerPos(playerid332.0835,-1515.6294,35.8672);
        SetPlayerVirtualWorld(playerid0);

        HotelInfo[playerid][hInHotel] = false;
        HotelInfo[playerid][hVWorld] = 0;
    }


    // Reset
    PlayerInfo[playerid][pRcon] = false;
    PlayerInfo[playerid][pAFK] = false;

    if(GetPVarInt(playerid"Algemado")) {
        SendClientMessageToAllEx(Verde"| INFO | %s saiu algemado e portanto foi punido automaticamente"GetPlayerNameEx(playerid));

        GivePlayerWanted(playeridGetPlayerWanted(playerid) * 2);
        GivePlayerLevel(playerid, -3);
        GivePlayerCash(playerid, -15000);
    }

    if(PlayerInfo[playerid][pPegouEmprego]) {
        RemovePlayerMapIcon(playerid1);
        PlayerInfo[playerid][pPegouEmprego] = false;
        DeletePVar(playerid"EmpregoID");
    }

    if (GetPVarInt(playerid"Called")) {
        CallStarted[playerid] = false;
        InCall[playerid] = false;
        DeletePVar(playerid"Called");
    }
    return 1;


Caso sirva de algo, aqui está a mensagem de crash:
Código:
SA-MP 0.3.7-R5
Exception At Address: 0x0460D9D1
Base: 0x04570000

Registers:
EAX: 0x00000045    EBX: 0xFFFFFFFF    ECX: 0x00000040    EDX: 0x00619000
ESI: 0x49F764FF    EDI: 0x00000003    EBP: 0x0177F688    ESP: 0x0177F618
EFLAGS: 0x00010206

Stack:
+0000: 0x0421EB08   0x007F99B0   0x045E4836   0x007F99B0
+0010: 0x007F99C7   0x041312C0   0x007FB1C3   0x0421EB08
+0020: 0x00060E7E   0x00000000   0x01974178   0x041BE8B4
+0030: 0x007EE388   0x0421EB08   0x00060E7E   0x00000000
+0040: 0x0177F708   0x0074526A   0x041BE8B4   0x00060E7E
+0050: 0x00000000   0x0053EC06   0x041BE8B4   0x041BE8B4
+0060: 0x44700000   0x44070000   0x5F82FC50   0x00000001
+0070: 0x0177F6D0   0x5F82B8E9   0x0177F6DC   0x0198D120
+0080: 0x5F888A9C   0x01974178   0x00060E7E   0x00000000
+0090: 0x0177F6C0   0x7548E74B   0x00000113   0x00000001
+00A0: 0x00000000   0x0177F698   0x0177F698   0x0177F6F4
+00B0: 0x5F883B40   0x00000001   0x0177F6E4   0x5F82FC02
+00C0: 0x0198D134   0x00000001   0x0177F888   0x0177F700
+00D0: 0x5F82E267   0x0177F708   0x0177F888   0x0177F868
+00E0: 0x5F883B58   0x00000000   0x0177F874   0x5F830246
+00F0: 0x5F8889A4   0x01974178   0x00060E7E   0xDCBAABCD
+0100: 0x00000000   0x0177F868   0x5F883D85   0xFFFFFFFF
+0110: 0x0177F874   0x00000000   0x0177F888   0x0000001A
+0120: 0x00000001   0x00000000   0x00000000   0x003B7000
+0130: 0x00000001   0xA8A5E770   0x00000000   0x77698850
+0140: 0x00000001   0x00000000   0x00000000   0x00000070
+0150: 0x00000000   0x00760994   0x00000000   0x0177F74C
+0160: 0x02262DD0   0x0177F7D8   0x75475A70   0xDC9FFB14
+0170: 0xFFFFFFFE   0x0177F7C8   0x7546D6DF   0x0233F9F0
+0180: 0x776767AC   0x7546D6F7   0x0177F7B0   0x00000018
+0190: 0x00000000   0x0177F8F8   0x00000000   0x00000000
+01A0: 0x00000000   0x00000000   0x00000000   0x00000000
+01B0: 0x0177F850   0x77678D6D   0x0177F7E4   0x00000020
+01C0: 0x0177F980   0x7FFE8000   0x0000AA64   0x77661532
+01D0: 0x0177F840   0x0177F844   0x00000000   0xFFFFFFFF
+01E0: 0x72D5AE20   0x77698850   0x00000000   0x7546C70F
+01F0: 0x0177F8F8   0x00000000   0x00000000   0x00000000
+0200: 0x6576CE2C   0x0177F894   0x77661220   0xFFFFFFFF
+0210: 0x0177F844   0x7766133A   0x5F8889A4   0x01974178
+0220: 0x00000000   0x00000001   0xA8A58664   0x0000014C
+0230: 0x9FBFDFA1   0x00B1750F   0x00192FD4   0x00000000
+0240: 0x01974178   0x01973930   0x7FFE8000   0x546C6148
+0250: 0x0177F980   0x5F883CEC   0x00000000   0x0177F880
+0260: 0x5F83013C   0x0177F888   0x754D78F0   0x0053ECC2
+0270: 0x00000001   0x00619B71   0x0000001A   0x00000001

SCM Op: 0x248, lDbg: 0 LastRendObj: 3276

Game Version: US 1.0

State Information: Ped Context: 0

O problema me parece aqui
Código:
format(File, sizeof(File), PASTA_CONTAS, GetPlayerNameEx(playerid));
"PASTA_CONTAS" ele não está achando o arquivo do player para salvar, você apenas informou a pasta de onde é para salvar os dados. 

acho que o certo séria assim.



Código:
format(File, sizeof(File), PASTA_CONTAS/%s.txt (ou .ini), GetPlayerNameEx(playerid));

O erro também pode ser como você estaria fechando o samp server, recomendo criar uma função para sempre estar salvando os dados dos players e ir testando para saber se realmente seria isso. 

em OnGameModeExit() tente isto

Código:
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i)) SaveAccount(i);
            print("Verifica se os dados estão salvando");

    }



RE: Dados deletados ao reiniciar o servidor - White_Blue - 16/03/2024

(16/03/2024 19:56)Notknown Escreveu:
(16/03/2024 02:35)Ryzen_ Escreveu: Em alguns momentos quando reinicio meu servidor, algum player acaba voltando com sua conta tendo o dinheiro, level, cargo, emprego e skins deletadas. Estou utilizando DOF2 para realizar o salvamento, mas simplesmente não consigo encontrar o que pode estar causando isso (Obs.: a parte de salvamento foi feita por um colega da equipe que também codifica na GM). De começo eu notei que estava faltando a função DOF2_SaveFile() ao final da SaveAccount(playerid), mas mesmo após a inserir, continua acontecendo o mesmo problema. Não é sempre que acontece, geralmente é quando eu reinicio o servidor várias vezes enquanto estou adicionando novas funcionalidades, daí em uma delas, ao voltar para o game ele acaba dando uma mensagem de crash ou fechando do nada, e quando volto estou setado com a skin do CJ e caindo no limbo. Se alguém puder me ajudar com isso, ficarei grato! Caso precisem de mais informações, basta me perguntar.

SaveAccount:
Código PHP:
stock SaveAccount(playerid) {
    format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    DOF2_SetInt(File"Level"PlayerInfo[playerid][pLevel]);
    DOF2_SetInt(File"EXP"PlayerInfo[playerid][pExp]);
    DOF2_SetInt(File"Admin"PlayerInfo[playerid][pAdmin]);
    DOF2_SetInt(File"Dinheiro"PlayerInfo[playerid][pGrana]);
    DOF2_SetInt(File"Skin"PlayerInfo[playerid][pSkin]);
    DOF2_SetInt(File"Sexo"PlayerInfo[playerid][pSexo]);
    DOF2_SetInt(File"Fome"PlayerInfo[playerid][pFome]);
    DOF2_SetInt(File"Sede"PlayerInfo[playerid][pSede]);
    DOF2_SetInt(File"Sono"PlayerInfo[playerid][pSono]);
    DOF2_SetInt(File"Emprego"PlayerInfo[playerid][pEmprego]);
    DOF2_SetInt(File"CategoriaEmprego"PlayerInfo[playerid][pEmpregoCategoria]);
    DOF2_SetInt(File"NivelProcurado"PlayerInfo[playerid][pWantedLevel]);
    DOF2_SetInt(File"TempoPreso"PlayerInfo[playerid][pTempoPreso]);
    DOF2_SetBool(File"Preso"PlayerInfo[playerid][pPreso]);
    DOF2_SetBool(File"Mutado"PlayerInfo[playerid][pMutado]);
    DOF2_SetInt(File"TempoMutado"PlayerInfo[playerid][pTempoMutado]);

    DOF2_SetBool(File"Contrato"PlayerInfo[playerid][pContrato]);
    DOF2_SetInt(File"ValorContrato"PlayerInfo[playerid][pValorContrato]);

    DOF2_SetInt(File"Organizacao"PlayerInfo[playerid][pOrganizacao]);
    DOF2_SetInt(File"Cargo"PlayerInfo[playerid][pCargo]);

    new daymonthyear;
    getdate(yearmonthday);
    format(STRX128"%02d/%02d/%04d"daymonthyear);
    DOF2_SetString(File"UltimoLogin"STRX);

    new Float:XFloat:YFloat:Zintid;
    GetPlayerPos(playeridXYZ);
    intid GetPlayerInterior(playerid);

    PlayerInfo[playerid][pPosX] = X;
    PlayerInfo[playerid][pPosY] = Y;
    PlayerInfo[playerid][pPosZ] = Z;
    PlayerInfo[playerid][pInterior] = intid;

    DOF2_SetFloat(File"PosX"PlayerInfo[playerid][pPosX]);
    DOF2_SetFloat(File"PosY"PlayerInfo[playerid][pPosY]);
    DOF2_SetFloat(File"PosZ"PlayerInfo[playerid][pPosZ]);
    DOF2_SetInt(File"Interior"PlayerInfo[playerid][pInterior]);
    DOF2_SaveFile();
    
    
return 1;


OnPlayerDisconnect:
Código PHP:
public OnPlayerDisconnect(playeridreason) {
    SaveAccount(playerid);

    if(GetPVarInt(playerid"Fardado")) {
        DeletePVar(playerid"Fardado");
        SetPlayerSkin(playeridGetPVarInt(playerid"PreviousSkin"));
        DeletePVar(playerid"PreviousSkin");
    }

    if(GetPVarInt(playerid"Alugou")) {
        DestroyVehicle(GetPVarInt(playerid"AlugadoID"));

        DestroyDynamic3DTextLabel(TrashTruckInfo[GetPVarInt(playerid"AlugadoID")][tLabel]);
        TrashTruckInfo[GetPVarInt(playerid"AlugadoID")][tLabel] = Text3D:INVALID_3DTEXT_ID;

        DeletePVar(playerid"AlugadoID");
        DeletePVar(playerid"Alugou");
    }

    if(GetPVarInt(playerid"criouv")) {
        DeletePVar(playerid"criouv");

        if(GetPVarInt(playerid"cvehid") != INVALID_VEHICLE_IDDestroyVehicle(GetPVarInt(playerid"cvehid"));

        DeletePVar(playerid"cvehid");
    }

    if(PlayerInfo[playerid][pPreso]) {
        DOF2_SetInt(FormatAccFile(playerid), "TempoPreso"PlayerInfo[playerid][pTempoPreso]);
        KillTimer(TimerPrisao[playerid]);
    }
    
    
// Timers
    KillTimer(ClockTimer[playerid]);
    KillTimer(TimerHunger[playerid]);
    KillTimer(TimerSono[playerid]);
    KillTimer(TimerSede[playerid]);
    KillTimer(TimerCar[playerid]);
    KillTimer(TimerExpirarLogin[playerid]);
    KillTimer(TimerAbastecer[playerid]);
    KillTimer(TimerProcurado[playerid]);

    DeletePVar(playerid"Abastecendo");
    HideGlobalGasolinaText(playerid); 
    HidePlayerGasolinaText(playerid);

    if(HotelInfo[playerid][hInHotel]) {
        SetPlayerInterior(playerid0);
        SetPlayerPos(playerid332.0835,-1515.6294,35.8672);
        SetPlayerVirtualWorld(playerid0);

        HotelInfo[playerid][hInHotel] = false;
        HotelInfo[playerid][hVWorld] = 0;
    }


    // Reset
    PlayerInfo[playerid][pRcon] = false;
    PlayerInfo[playerid][pAFK] = false;

    if(GetPVarInt(playerid"Algemado")) {
        SendClientMessageToAllEx(Verde"| INFO | %s saiu algemado e portanto foi punido automaticamente"GetPlayerNameEx(playerid));

        GivePlayerWanted(playeridGetPlayerWanted(playerid) * 2);
        GivePlayerLevel(playerid, -3);
        GivePlayerCash(playerid, -15000);
    }

    if(PlayerInfo[playerid][pPegouEmprego]) {
        RemovePlayerMapIcon(playerid1);
        PlayerInfo[playerid][pPegouEmprego] = false;
        DeletePVar(playerid"EmpregoID");
    }

    if (GetPVarInt(playerid"Called")) {
        CallStarted[playerid] = false;
        InCall[playerid] = false;
        DeletePVar(playerid"Called");
    }
    return 1;


Caso sirva de algo, aqui está a mensagem de crash:
Código:
SA-MP 0.3.7-R5
Exception At Address: 0x0460D9D1
Base: 0x04570000

Registers:
EAX: 0x00000045    EBX: 0xFFFFFFFF    ECX: 0x00000040    EDX: 0x00619000
ESI: 0x49F764FF    EDI: 0x00000003    EBP: 0x0177F688    ESP: 0x0177F618
EFLAGS: 0x00010206

Stack:
+0000: 0x0421EB08   0x007F99B0   0x045E4836   0x007F99B0
+0010: 0x007F99C7   0x041312C0   0x007FB1C3   0x0421EB08
+0020: 0x00060E7E   0x00000000   0x01974178   0x041BE8B4
+0030: 0x007EE388   0x0421EB08   0x00060E7E   0x00000000
+0040: 0x0177F708   0x0074526A   0x041BE8B4   0x00060E7E
+0050: 0x00000000   0x0053EC06   0x041BE8B4   0x041BE8B4
+0060: 0x44700000   0x44070000   0x5F82FC50   0x00000001
+0070: 0x0177F6D0   0x5F82B8E9   0x0177F6DC   0x0198D120
+0080: 0x5F888A9C   0x01974178   0x00060E7E   0x00000000
+0090: 0x0177F6C0   0x7548E74B   0x00000113   0x00000001
+00A0: 0x00000000   0x0177F698   0x0177F698   0x0177F6F4
+00B0: 0x5F883B40   0x00000001   0x0177F6E4   0x5F82FC02
+00C0: 0x0198D134   0x00000001   0x0177F888   0x0177F700
+00D0: 0x5F82E267   0x0177F708   0x0177F888   0x0177F868
+00E0: 0x5F883B58   0x00000000   0x0177F874   0x5F830246
+00F0: 0x5F8889A4   0x01974178   0x00060E7E   0xDCBAABCD
+0100: 0x00000000   0x0177F868   0x5F883D85   0xFFFFFFFF
+0110: 0x0177F874   0x00000000   0x0177F888   0x0000001A
+0120: 0x00000001   0x00000000   0x00000000   0x003B7000
+0130: 0x00000001   0xA8A5E770   0x00000000   0x77698850
+0140: 0x00000001   0x00000000   0x00000000   0x00000070
+0150: 0x00000000   0x00760994   0x00000000   0x0177F74C
+0160: 0x02262DD0   0x0177F7D8   0x75475A70   0xDC9FFB14
+0170: 0xFFFFFFFE   0x0177F7C8   0x7546D6DF   0x0233F9F0
+0180: 0x776767AC   0x7546D6F7   0x0177F7B0   0x00000018
+0190: 0x00000000   0x0177F8F8   0x00000000   0x00000000
+01A0: 0x00000000   0x00000000   0x00000000   0x00000000
+01B0: 0x0177F850   0x77678D6D   0x0177F7E4   0x00000020
+01C0: 0x0177F980   0x7FFE8000   0x0000AA64   0x77661532
+01D0: 0x0177F840   0x0177F844   0x00000000   0xFFFFFFFF
+01E0: 0x72D5AE20   0x77698850   0x00000000   0x7546C70F
+01F0: 0x0177F8F8   0x00000000   0x00000000   0x00000000
+0200: 0x6576CE2C   0x0177F894   0x77661220   0xFFFFFFFF
+0210: 0x0177F844   0x7766133A   0x5F8889A4   0x01974178
+0220: 0x00000000   0x00000001   0xA8A58664   0x0000014C
+0230: 0x9FBFDFA1   0x00B1750F   0x00192FD4   0x00000000
+0240: 0x01974178   0x01973930   0x7FFE8000   0x546C6148
+0250: 0x0177F980   0x5F883CEC   0x00000000   0x0177F880
+0260: 0x5F83013C   0x0177F888   0x754D78F0   0x0053ECC2
+0270: 0x00000001   0x00619B71   0x0000001A   0x00000001

SCM Op: 0x248, lDbg: 0 LastRendObj: 3276

Game Version: US 1.0

State Information: Ped Context: 0

O problema me parece aqui
Código:
format(File, sizeof(File), PASTA_CONTAS, GetPlayerNameEx(playerid));
"PASTA_CONTAS" ele não está achando o arquivo do player para salvar, você apenas informou a pasta de onde é para salvar os dados. 

acho que o certo séria assim.



Código:
format(File, sizeof(File), PASTA_CONTAS/%s.txt (ou .ini), GetPlayerNameEx(playerid));

O erro também pode ser como você estaria fechando o samp server, recomendo criar uma função para sempre estar salvando os dados dos players e ir testando para saber se realmente seria isso. 

em OnGameModeExit() tente isto

Código:
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i)) SaveAccount(i);
            print("Verifica se os dados estão salvando");

    }

Não, o format está correto. "PASTA_CONTAS" provavelmente é um macro cujo valor é o caminho da pasta. Creio que o DOF2 é muito lento e às vezes falha em salvar os dados ou os corrompe.

P.S.: Também não faz sentido verificar se o jogador não está conectado para salvar e trocar o foreach por for.


RE: Dados deletados ao reiniciar o servidor - Maycon_Felipe - 17/03/2024

O melhor a se fazer é verificar se o player estava jogando dentro do SaveAccount..
Só isso já vai evitar que dados limpos sejam salvos que é o que deve tá acontecendo,
vc reinicia o sv na tela de login ou desloga e ele salva com dados limpos..

Código:
stock SaveAccount(playerid) {
      if(!PlayerInfo[playerid][pJogando]) return 1;
}

Quando ele logar, seta para 1 ou true a variavel PlayerInfo[playerid][pJogando]..


RE: Dados deletados ao reiniciar o servidor - Ryzen_ - 17/03/2024

(16/03/2024 20:39)White_Blue Escreveu:
(16/03/2024 19:56)Notknown Escreveu:
(16/03/2024 02:35)Ryzen_ Escreveu: Em alguns momentos quando reinicio meu servidor, algum player acaba voltando com sua conta tendo o dinheiro, level, cargo, emprego e skins deletadas. Estou utilizando DOF2 para realizar o salvamento, mas simplesmente não consigo encontrar o que pode estar causando isso (Obs.: a parte de salvamento foi feita por um colega da equipe que também codifica na GM). De começo eu notei que estava faltando a função DOF2_SaveFile() ao final da SaveAccount(playerid), mas mesmo após a inserir, continua acontecendo o mesmo problema. Não é sempre que acontece, geralmente é quando eu reinicio o servidor várias vezes enquanto estou adicionando novas funcionalidades, daí em uma delas, ao voltar para o game ele acaba dando uma mensagem de crash ou fechando do nada, e quando volto estou setado com a skin do CJ e caindo no limbo. Se alguém puder me ajudar com isso, ficarei grato! Caso precisem de mais informações, basta me perguntar.

SaveAccount:
Código PHP:
stock SaveAccount(playerid) {
    format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    DOF2_SetInt(File"Level"PlayerInfo[playerid][pLevel]);
    DOF2_SetInt(File"EXP"PlayerInfo[playerid][pExp]);
    DOF2_SetInt(File"Admin"PlayerInfo[playerid][pAdmin]);
    DOF2_SetInt(File"Dinheiro"PlayerInfo[playerid][pGrana]);
    DOF2_SetInt(File"Skin"PlayerInfo[playerid][pSkin]);
    DOF2_SetInt(File"Sexo"PlayerInfo[playerid][pSexo]);
    DOF2_SetInt(File"Fome"PlayerInfo[playerid][pFome]);
    DOF2_SetInt(File"Sede"PlayerInfo[playerid][pSede]);
    DOF2_SetInt(File"Sono"PlayerInfo[playerid][pSono]);
    DOF2_SetInt(File"Emprego"PlayerInfo[playerid][pEmprego]);
    DOF2_SetInt(File"CategoriaEmprego"PlayerInfo[playerid][pEmpregoCategoria]);
    DOF2_SetInt(File"NivelProcurado"PlayerInfo[playerid][pWantedLevel]);
    DOF2_SetInt(File"TempoPreso"PlayerInfo[playerid][pTempoPreso]);
    DOF2_SetBool(File"Preso"PlayerInfo[playerid][pPreso]);
    DOF2_SetBool(File"Mutado"PlayerInfo[playerid][pMutado]);
    DOF2_SetInt(File"TempoMutado"PlayerInfo[playerid][pTempoMutado]);

    DOF2_SetBool(File"Contrato"PlayerInfo[playerid][pContrato]);
    DOF2_SetInt(File"ValorContrato"PlayerInfo[playerid][pValorContrato]);

    DOF2_SetInt(File"Organizacao"PlayerInfo[playerid][pOrganizacao]);
    DOF2_SetInt(File"Cargo"PlayerInfo[playerid][pCargo]);

    new daymonthyear;
    getdate(yearmonthday);
    format(STRX128"%02d/%02d/%04d"daymonthyear);
    DOF2_SetString(File"UltimoLogin"STRX);

    new Float:XFloat:YFloat:Zintid;
    GetPlayerPos(playeridXYZ);
    intid GetPlayerInterior(playerid);

    PlayerInfo[playerid][pPosX] = X;
    PlayerInfo[playerid][pPosY] = Y;
    PlayerInfo[playerid][pPosZ] = Z;
    PlayerInfo[playerid][pInterior] = intid;

    DOF2_SetFloat(File"PosX"PlayerInfo[playerid][pPosX]);
    DOF2_SetFloat(File"PosY"PlayerInfo[playerid][pPosY]);
    DOF2_SetFloat(File"PosZ"PlayerInfo[playerid][pPosZ]);
    DOF2_SetInt(File"Interior"PlayerInfo[playerid][pInterior]);
    DOF2_SaveFile();
    
    
return 1;


OnPlayerDisconnect:
Código PHP:
public OnPlayerDisconnect(playeridreason) {
    SaveAccount(playerid);

    if(GetPVarInt(playerid"Fardado")) {
        DeletePVar(playerid"Fardado");
        SetPlayerSkin(playeridGetPVarInt(playerid"PreviousSkin"));
        DeletePVar(playerid"PreviousSkin");
    }

    if(GetPVarInt(playerid"Alugou")) {
        DestroyVehicle(GetPVarInt(playerid"AlugadoID"));

        DestroyDynamic3DTextLabel(TrashTruckInfo[GetPVarInt(playerid"AlugadoID")][tLabel]);
        TrashTruckInfo[GetPVarInt(playerid"AlugadoID")][tLabel] = Text3D:INVALID_3DTEXT_ID;

        DeletePVar(playerid"AlugadoID");
        DeletePVar(playerid"Alugou");
    }

    if(GetPVarInt(playerid"criouv")) {
        DeletePVar(playerid"criouv");

        if(GetPVarInt(playerid"cvehid") != INVALID_VEHICLE_IDDestroyVehicle(GetPVarInt(playerid"cvehid"));

        DeletePVar(playerid"cvehid");
    }

    if(PlayerInfo[playerid][pPreso]) {
        DOF2_SetInt(FormatAccFile(playerid), "TempoPreso"PlayerInfo[playerid][pTempoPreso]);
        KillTimer(TimerPrisao[playerid]);
    }
    
    
// Timers
    KillTimer(ClockTimer[playerid]);
    KillTimer(TimerHunger[playerid]);
    KillTimer(TimerSono[playerid]);
    KillTimer(TimerSede[playerid]);
    KillTimer(TimerCar[playerid]);
    KillTimer(TimerExpirarLogin[playerid]);
    KillTimer(TimerAbastecer[playerid]);
    KillTimer(TimerProcurado[playerid]);

    DeletePVar(playerid"Abastecendo");
    HideGlobalGasolinaText(playerid); 
    HidePlayerGasolinaText(playerid);

    if(HotelInfo[playerid][hInHotel]) {
        SetPlayerInterior(playerid0);
        SetPlayerPos(playerid332.0835,-1515.6294,35.8672);
        SetPlayerVirtualWorld(playerid0);

        HotelInfo[playerid][hInHotel] = false;
        HotelInfo[playerid][hVWorld] = 0;
    }


    // Reset
    PlayerInfo[playerid][pRcon] = false;
    PlayerInfo[playerid][pAFK] = false;

    if(GetPVarInt(playerid"Algemado")) {
        SendClientMessageToAllEx(Verde"| INFO | %s saiu algemado e portanto foi punido automaticamente"GetPlayerNameEx(playerid));

        GivePlayerWanted(playeridGetPlayerWanted(playerid) * 2);
        GivePlayerLevel(playerid, -3);
        GivePlayerCash(playerid, -15000);
    }

    if(PlayerInfo[playerid][pPegouEmprego]) {
        RemovePlayerMapIcon(playerid1);
        PlayerInfo[playerid][pPegouEmprego] = false;
        DeletePVar(playerid"EmpregoID");
    }

    if (GetPVarInt(playerid"Called")) {
        CallStarted[playerid] = false;
        InCall[playerid] = false;
        DeletePVar(playerid"Called");
    }
    return 1;


Caso sirva de algo, aqui está a mensagem de crash:
Código:
SA-MP 0.3.7-R5
Exception At Address: 0x0460D9D1
Base: 0x04570000

Registers:
EAX: 0x00000045    EBX: 0xFFFFFFFF    ECX: 0x00000040    EDX: 0x00619000
ESI: 0x49F764FF    EDI: 0x00000003    EBP: 0x0177F688    ESP: 0x0177F618
EFLAGS: 0x00010206

Stack:
+0000: 0x0421EB08   0x007F99B0   0x045E4836   0x007F99B0
+0010: 0x007F99C7   0x041312C0   0x007FB1C3   0x0421EB08
+0020: 0x00060E7E   0x00000000   0x01974178   0x041BE8B4
+0030: 0x007EE388   0x0421EB08   0x00060E7E   0x00000000
+0040: 0x0177F708   0x0074526A   0x041BE8B4   0x00060E7E
+0050: 0x00000000   0x0053EC06   0x041BE8B4   0x041BE8B4
+0060: 0x44700000   0x44070000   0x5F82FC50   0x00000001
+0070: 0x0177F6D0   0x5F82B8E9   0x0177F6DC   0x0198D120
+0080: 0x5F888A9C   0x01974178   0x00060E7E   0x00000000
+0090: 0x0177F6C0   0x7548E74B   0x00000113   0x00000001
+00A0: 0x00000000   0x0177F698   0x0177F698   0x0177F6F4
+00B0: 0x5F883B40   0x00000001   0x0177F6E4   0x5F82FC02
+00C0: 0x0198D134   0x00000001   0x0177F888   0x0177F700
+00D0: 0x5F82E267   0x0177F708   0x0177F888   0x0177F868
+00E0: 0x5F883B58   0x00000000   0x0177F874   0x5F830246
+00F0: 0x5F8889A4   0x01974178   0x00060E7E   0xDCBAABCD
+0100: 0x00000000   0x0177F868   0x5F883D85   0xFFFFFFFF
+0110: 0x0177F874   0x00000000   0x0177F888   0x0000001A
+0120: 0x00000001   0x00000000   0x00000000   0x003B7000
+0130: 0x00000001   0xA8A5E770   0x00000000   0x77698850
+0140: 0x00000001   0x00000000   0x00000000   0x00000070
+0150: 0x00000000   0x00760994   0x00000000   0x0177F74C
+0160: 0x02262DD0   0x0177F7D8   0x75475A70   0xDC9FFB14
+0170: 0xFFFFFFFE   0x0177F7C8   0x7546D6DF   0x0233F9F0
+0180: 0x776767AC   0x7546D6F7   0x0177F7B0   0x00000018
+0190: 0x00000000   0x0177F8F8   0x00000000   0x00000000
+01A0: 0x00000000   0x00000000   0x00000000   0x00000000
+01B0: 0x0177F850   0x77678D6D   0x0177F7E4   0x00000020
+01C0: 0x0177F980   0x7FFE8000   0x0000AA64   0x77661532
+01D0: 0x0177F840   0x0177F844   0x00000000   0xFFFFFFFF
+01E0: 0x72D5AE20   0x77698850   0x00000000   0x7546C70F
+01F0: 0x0177F8F8   0x00000000   0x00000000   0x00000000
+0200: 0x6576CE2C   0x0177F894   0x77661220   0xFFFFFFFF
+0210: 0x0177F844   0x7766133A   0x5F8889A4   0x01974178
+0220: 0x00000000   0x00000001   0xA8A58664   0x0000014C
+0230: 0x9FBFDFA1   0x00B1750F   0x00192FD4   0x00000000
+0240: 0x01974178   0x01973930   0x7FFE8000   0x546C6148
+0250: 0x0177F980   0x5F883CEC   0x00000000   0x0177F880
+0260: 0x5F83013C   0x0177F888   0x754D78F0   0x0053ECC2
+0270: 0x00000001   0x00619B71   0x0000001A   0x00000001

SCM Op: 0x248, lDbg: 0 LastRendObj: 3276

Game Version: US 1.0

State Information: Ped Context: 0

O problema me parece aqui
Código:
format(File, sizeof(File), PASTA_CONTAS, GetPlayerNameEx(playerid));
"PASTA_CONTAS" ele não está achando o arquivo do player para salvar, você apenas informou a pasta de onde é para salvar os dados. 

acho que o certo séria assim.



Código:
format(File, sizeof(File), PASTA_CONTAS/%s.txt (ou .ini), GetPlayerNameEx(playerid));

O erro também pode ser como você estaria fechando o samp server, recomendo criar uma função para sempre estar salvando os dados dos players e ir testando para saber se realmente seria isso. 

em OnGameModeExit() tente isto

Código:
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i)) SaveAccount(i);
            print("Verifica se os dados estão salvando");

    }

Não, o format está correto. "PASTA_CONTAS" provavelmente é um macro cujo valor é o caminho da pasta. Creio que o DOF2 é muito lento e às vezes falha em salvar os dados ou os corrompe.

P.S.: Também não faz sentido verificar se o jogador não está conectado para salvar e trocar o foreach por for.


Sim, isso mesmo, ela é uma macro. Creio que o problema possa ser algo referente ao DOF2 msm, já que sempre salva tudo certinho, e o problema só ocorre quando eu reinicio o server (Não sempre, mas do nada dá isso). O ruim é que é meio complicado eu precisar reiniciar pra atualizar, e algum jogador simplesmente voltar com sua conta resetada.