dini account system is not saving new information
#1

Hello guys, im currently having issue with my account system, for some unknown reason it is not saving any modification made to an user's account, like admin levels, kills, deaths after someone relogs. Basically, their information is normally updated as long as they are online, but when they leave and return, their status will be gone, or/and all values in their account will be 0. Here's my code

pawn Код:
enum PlayerData
{
    Logged,
    Regged,
    Kills,
    Deaths,
    Clan,
    Money,
    Level
};

// OnPlayerConnect

public OnPlayerConnect(playerid)
{
   
        TextDrawShowForPlayer(playerid, Textdraw0);
        SendClientMessage(playerid, 0xFFC0CBAA, "Welcome to Gang War Training Server.");
        SendClientMessage(playerid, 0xFFC0CBAA, "Remember to use /register to save your status and be able to spawn.");
        SendClientMessage(playerid, 0xFFC0CBAA, "You may use /cmds for a list of commands.");
        new File:fi_log;
        fi_log = fopen("Admin/Logs/Chatlog.txt", io_append);
        new string[128], text[128], pIP[16], day, year, month, hour, minute, second;
        GetPlayerIp(playerid, pIP, sizeof(pIP));
        getdate(year, month, day); gettime(hour, minute, second);
        new dname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, dname, sizeof(dname));
        format(string, sizeof(string), "[%d/%d/%d - %d:%d:%d][IP:%s]%s(ID:%d) has connected to the server.\r\n", day, month, year, hour, minute, second, pIP, dname, playerid, text);
        fwrite(fi_log, string);
        fclose(fi_log);
        new pname[MAX_PLAYER_NAME], file[128], dstring[128];
        new cname[MAX_PLAYER_NAME+1];
        GetPlayerName(playerid, cname, sizeof(cname));
        format(dstring, sizeof(dstring), "%s (ID:%d) has connected to the server.", cname, playerid);
        SendClientMessageToAll(0xC0C0C0AA, dstring);
        aduty[playerid] = 0;
        pInfo[playerid][Logged] = 0;
        pInfo[playerid][Regged] = 0;
        pInfo[playerid][Level] = 0;
        GetPlayerName(playerid, pname, sizeof(pname));
        format(file, sizeof(file), "Admin/Users/%s.txt", pname);
        if(dini_Exists(file))
        {
            SendClientMessage(playerid, 0xFFC0CBAA, "You are registered, please use /login and save your stats.");
                pInfo[playerid][Logged] = 0;
                pInfo[playerid][Regged] = 1;
                dini_IntSet(file, "Deaths",pInfo[playerid][Deaths]);
                dini_IntSet(file, "Money",pInfo[playerid][Money]);
                dini_IntSet(file, "Kills",pInfo[playerid][Kills]);
                return 1;
        }
        if(!dini_Exists(file))
        {
            SendClientMessage(playerid, 0xFF9900AA, "You are not registered, please use /register to register your account.");
            pInfo[playerid][Logged] = 0;
            pInfo[playerid][Regged] = 0;
            return 1;
        }
        return 1;

}

// OnPlayerDisconnect part

public OnPlayerDisconnect(playerid, reason)
{
        pConnected --;
        new File:fi_log;
        fi_log = fopen("Admin/Logs/Chatlog.txt", io_append);
        new string[128], text[128], day, year, month, hour, minute, second;
        getdate(year, month, day); gettime(hour, minute, second);
        new dname[MAX_PLAYER_NAME], pIP[16];
        GetPlayerName(playerid, dname, sizeof(dname));
        GetPlayerIp(playerid, pIP, sizeof(pIP));
        format(string, sizeof(string), "[%d/%d/%d - %d:%d:%d][IP:%s]%s(ID:%d) has disconnected from the server.\r\n", day, month, year, hour, minute, second, pIP, dname, playerid, text);
        fwrite(fi_log, string);
        fclose(fi_log);
        new cname[MAX_PLAYER_NAME] ,bstring[128];
        new cash = GetPlayerMoney(playerid);
        GetPlayerName(playerid, cname, sizeof(cname));
        format(bstring, sizeof(bstring),"%s (ID:%d) has disconnected from the server.", cname, playerid);
        SendClientMessageToAll(0xC0C0C0AA, bstring);
        aduty[playerid] = 0;
        jetpack[playerid] = 0;
        pmuted[playerid] = 0;
        new pname[MAX_PLAYER_NAME], file[128];
        GetPlayerName(playerid, pname, sizeof(pname));
        format(file, sizeof(file),"Admin/Users/%s.txt", pname);
        pInfo[playerid][Logged] = 0;
        dini_IntSet(file, "Logged", 0);
        dini_IntSet(file, "Kills", pInfo[playerid][Kills]);
        dini_IntSet(file, "Deaths",pInfo[playerid][Deaths]);
        dini_IntSet(file, "Money", cash);
    if(pspectate[playerid] == 1)
    {
        foreach(Player,i)
        {
            if(spectatorid[i] == playerid)
            {
                TogglePlayerSpectating(i,false);
            }
        }
    }
    return 1;
}

// /setlevel command:


CMD:setlevel(playerid, params[])
{
new pname[MAX_PLAYER_NAME], aname[MAX_PLAYER_NAME], pID, level, string[128], file[128];
if(sscanf(params, "ui", pID, level)) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /setlevel <playerid> <level>.");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, 0xFF0000AA, "[ERROR]User is not connected.");
if(level >5 || level < 0) return SendClientMessage(playerid, 0xFF0000AA, "[ERROR] You may only set valid amounts between 0 and 5.");
if(pInfo[playerid][Level] < 5) return SendClientMessage(playerid, 0xFF0000AA, "[ERROR]You must be an admin to be able to set admin levels.");
else
{
        GetPlayerName(playerid, aname, sizeof(aname));
        GetPlayerName(pID, pname, sizeof(pname));
        format(string, sizeof(string), "You have set %s admin level to %d.", pname, level);
        SendClientMessage(playerid, 0xFFFF00AA, string);
        format(string, sizeof(string), "Your admin level has been set to %d by administrator %s.", level, aname);
        SendClientMessage(pID, 0xFFFF00AA, string);
        format(file, sizeof(file), "Admin/Users/%s.txt", pname);
        pInfo[playerid][Level] = level;
        dini_IntSet(file,"Level", level);
        new File:fi_log;
    fi_log = fopen("Admin/Logs/Adminlog.txt", io_append);
    new cstring[128], day, year, month, hour, minute, second;
    getdate(year, month, day); gettime(hour, minute, second);
    format(cstring, sizeof(cstring), "[%d/%d/%d - %d:%d:%d]%s(ID:%d): has promoted %s(ID:%d) to [Level:%d]\r\n", day, month, year, hour, minute, second, aname, playerid,  pname, playerid, level);
    fwrite(fi_log, cstring);
    fclose(fi_log);
        }
return 1;
}
Reply
#2

Please show you /login command. If you use a dialog for the login, please show that dialog at OnDialogResponse aswell.
Reply
#3

pawn Код:
CMD:login(playerid, params[])
{
    new file[256], pname[MAX_PLAYER_NAME], pass[256];
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    format(file, sizeof(file), "Admin/Users/%s.txt", pname);
    if(!dini_Exists(file)) return SendClientMessage(playerid,0xFF0000AA,"You are not registered! Please /register");
    if(pInfo[playerid][Logged] == 1) return SendClientMessage(playerid,0xFF0000AA, "You are already logged in.");
    if(pInfo[playerid][Regged] == 0) return SendClientMessage(playerid,0xFF0000AA,"You are not registered! Please /register");
    if(sscanf(params, "s[128]", pass))return SendClientMessage(playerid,0xFF0000AA,"Usage: /login <password>");


    pass = dini_Get(file,"Password");
    if(dini_Exists(file))
    {
        if(strcmp(params,pass,false) != 0)
            return SendClientMessage(playerid,0xFF4500AA,"Wrong Password!");

        dini_IntSet(file,"Logged",1);
        pInfo[playerid][Logged] = 1;
        pInfo[playerid][Level] = dini_Int(file,"Level");
        pInfo[playerid][Money] = dini_Int(file,"Money");
        pInfo[playerid][Kills] = dini_Int(file,"Kills");
        pInfo[playerid][Deaths] = dini_Int(file,"Deaths");
        pInfo[playerid][Clan]  = dini_Int(file, "Clan");
        GivePlayerMoney(playerid, pInfo[playerid][Money]);
        SendClientMessage(playerid, 0xFF4500AA ,"You have now logged in!");
    }
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)