18.04.2014, 04:36
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;
}