enum Info { pLevel, pExp, };
new ScoreOld; new levelexp = 1;
forward ScoreUpdate(); forward PayDay(playerid);
public ScoreUpdate() { new Score; new name[MAX_PLAYER_NAME]; //new string[256]; for(new i=0; i<MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { GetPlayerName(i, name, sizeof(name)); Score = PlayerInfo[i][pLevel]; SetPlayerScore(i, Score); if (Score > ScoreOld) { ScoreOld = Score; } } } }
public OnPlayerConnect(playerid) { PlayerInfo[playerid][pLevel] = 1; PlayerInfo[playerid][pExp] = 0; return 1; }
COMMAND:buylevel(playerid,params[]) { new nxtlevel = PlayerInfo[playerid][pLevel]+5; new expamount = nxtlevel*levelexp; new string[30]; // String. if(IsPlayerConnected(playerid) == 1) // Checks if player is connected. { new points[248]; // Points. if(PlayerInfo[playerid][pExp] < expamount) // Checks if player's exp amount is above the required one or not. { format(points,sizeof(points)," You need [%d] Exp Points in order to level up, You currently have [%d]",expamount,PlayerInfo[playerid][pExp]); // Format, This is pretty obvious. SendClientMessage(playerid,COLOR_GREEN,points); // Sends the message. return 1; } else { PlayerInfo[playerid][pExp] = 0; // Sets the EXP amount to 0 as you level'd up. PlayerInfo[playerid][pLevel]++; // Adds a level. format(string,sizeof(string),"~g~Your now level:[%d]",PlayerInfo[playerid][pLevel]); // Format. GameTextForPlayer(playerid,string,6000,1); // Sends gametext about his new level'ing up. return 1; } } return 1; }
forward OnPlayerLogin(playerid,password[]);
public OnPlayerLogin(playerid,password[]) { if(GetPVarInt(playerid, "PlayerLogged") != 0) return true; new string[128]; format(string, sizeof(string), "users/%s.ini", PlayerName(playerid)); Hash(password); if(strcmp(DOF2_GetString(string, "Key"), password, true) == 0) { if(DOF2_GetInt(string, "Convert") != 5) return Kick(playerid); // Load Ints // SetPVarInt(playerid, "pLevel", DOF2_GetInt(string, "level")); SetPVarInt(playerid, "pExp", DOF2_GetInt(string, "Exp")); new score = PlayerInfo[playerid][pLevel]; SetPlayerScore(playerid, score); // END brackets are all fine no syntax errors.
forward OnPlayerDataSave(playerid);
public OnPlayerDataSave(playerid) { if(IsPlayerConnected(playerid) && GetPVarInt(playerid, "PlayerLogged") == 1) { new string[128]; format(string, sizeof(string), "users/%s.ini", PlayerName(playerid)); if(DOF2_FileExists(string)) { DOF2_SetInt(string, "level", GetPVarInt(playerid, "level")); DOF2_SetInt(string, "Exp", GetPVarInt(playerid, "Exp")); } return 0 } }
PlayerInfo[playerid][pExp]
PlayerInfo[playerid][pLevel]
Use this variables when saving instead of the pvars:
pawn Код:
|
pawn Код:
|
public OnPlayerLogin(playerid,password[])
{
if(GetPVarInt(playerid, "PlayerLogged") != 0) return true;
new string[128];
format(string, sizeof(string), "users/%s.ini", PlayerName(playerid));
Hash(password);
if(strcmp(DOF2_GetString(string, "Key"), password, true) == 0)
{
if(DOF2_GetInt(string, "Convert") != 5) return Kick(playerid);
// Load Ints //
SetPVarInt(playerid, "Level", DOF2_GetInt(string, "pLevel"));
SetPVarInt(playerid, "Exp", DOF2_GetInt(string, "pExp"));
new score = PlayerInfo[playerid][pLevel];
SetPlayerScore(playerid, score);
}
}
public OnPlayerDataSave(playerid)
{
if(IsPlayerConnected(playerid) && GetPVarInt(playerid, "PlayerLogged") == 1)
{
new string[128];
format(string, sizeof(string), "users/%s.ini", PlayerName(playerid));
if(DOF2_FileExists(string))
{
DOF2_SetInt(string, "pLevel", GetPVarInt(playerid, "Level"));
DOF2_SetInt(string, "pExp", GetPVarInt(playerid, "Exp"));
}
return 0;
}
}
First of all, as you see, you are loading it via PVars, while you earlier used normal variables.
Second, you are using "pLevel" and "pExp" to load the variables, while using "level" and "Exp" to save them. This way you will save everything with "pLevel" and "pExp" and loading from unsigned names. I'd suggest you to use one type of var, and also put the same names when loading and saving data: pawn Код:
|
#include <a_samp> #define white 0xFFFFFFAA #define white 0xFFFFFFAA #define yellow 0xFFFFF00AA #define red 0x660000AA #define pink 0xFF66FFAA #define lightblue 0x33CCFFAA #define darkred 0x660000AA #define grey 0xAFAFAFAA #define error 0xD2691EAA #define orange 0xFF9900AA #define nicepink 0xEC13COFF #define grad1 0xB4B5B7AA #define lightgreen 0x7CFC00AA enum Info { pPassword[128], pLevel, pExp, pCash, }; new PlayerInfo[MAX_PLAYERS][Info]; new levelexp = 1; new gPlayerLogged[MAX_PLAYERS]; new gPlayerAccount[MAX_PLAYERS]; new ScoreOld; forward OnPlayerLogin(playerid,const string[]); forward String(string[]); forward ScoreUpdate(); forward PayDay(playerid); forward PlayerPlayMusic(playerid); forward StopMusic(); public ScoreUpdate() { new Score; new name[MAX_PLAYER_NAME]; //new string[256]; for(new i=0; i<MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { GetPlayerName(i, name, sizeof(name)); Score = PlayerInfo[i][pLevel]; SetPlayerScore(i, Score); if (Score > ScoreOld) { ScoreOld = Score; } } } } // This is a comment // uncomment the line below if you want to write a filterscript #define FILTERSCRIPT #if defined FILTERSCRIPT public OnFilterScriptInit() { SetTimer("PayDay",10000,1);//600000 SetTimer("ScoreUpdate", 1000, 1); print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { return 1; } #endif public OnPlayerConnect(playerid) { PlayerInfo[playerid][pLevel] = 1; PlayerInfo[playerid][pExp] = 0; return 1; } public OnPlayerDisconnect(playerid, reason) { 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 OnPlayerPrivmsg(playerid, recieverid, text[]) { return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { new cmd[256]; new idx; cmd = strtok(cmdtext, idx); new tmp[256]; new playername[MAX_PLAYER_NAME]; GetPlayerName(playerid,playername,sizeof(playername)); new nxtlevel = PlayerInfo[playerid][pLevel]+1; new expamount = nxtlevel*levelexp; new info[248]; if (strcmp(cmd, "/login", true) ==0 ) { if(IsPlayerConnected(playerid)) { new tmppass[64]; if(gPlayerLogged[playerid] == 1) { SendClientMessage(playerid, grey, " You are already logged in."); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, grey, " USAGE: /login [password]"); return 1; } strmid(tmppass, tmp, 0, strlen(cmdtext), 255); String(tmppass); OnPlayerLogin(playerid,tmppass); } return 1; } if (strcmp(cmd, "/register", true)==0) { new string[265]; tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, grey, "USAGE: /register [password]"); return 1; } if (gPlayerAccount[playerid] == 1) { SendClientMessage(playerid, grey, " That nickname is already registered"); return 1; } strmid(PlayerInfo[playerid][pPassword], tmp, 0, strlen(cmdtext), 255); String(PlayerInfo[playerid][pPassword]); GetPlayerName(playerid, playername, sizeof(playername)); format(string, sizeof(string), "%s.cer", playername); new File: file = fopen(string, io_read); if (file) { SendClientMessage(playerid, grey, " That name is already registered"); fclose(file); return 1; } new File:hFile; hFile = fopen(string, io_append); new var[32];// format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var); format(var, 32, "Level:%d\n",PlayerInfo[playerid][pLevel]);fwrite(hFile, var); format(var, 32, "Exp:%d\n",PlayerInfo[playerid][pExp]);fwrite(hFile, var); PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid); format(var, 32, "Cash:%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var); fclose(hFile); SendClientMessage(playerid, white, "Succesfully Registered!"); SendClientMessage(playerid, white, "Next time when you come , use /login [ password ]."); OnPlayerLogin(playerid,PlayerInfo[playerid][pPassword]); return 1; } if (strcmp("/buylevel", cmd, true, 10) == 0) { if(IsPlayerConnected(playerid) == 1) { new points[248]; if(PlayerInfo[playerid][pExp] < expamount) { format(points,sizeof(points)," You need [%d] Exp Points! You cureently have [%d]",expamount,PlayerInfo[playerid][pExp]); SendClientMessage(playerid,white,points); return 1; } else { PlayerInfo[playerid][pExp] = 0; PlayerInfo[playerid][pLevel]++; format(info,sizeof(info)," ~g~ Level Up! ~w~ Your now level: [%d]",PlayerInfo[playerid][pLevel]); GameTextForPlayer(playerid,info,6000,1); return 1; } } return 1; } if(strcmp("/level", cmd, true, 10) == 0) { if(gPlayerLogged[playerid] == 0) { SendClientMessage(playerid,white," Error: You must be logged in to use this!"); return 1; } else if(gPlayerLogged[playerid] == 1) { new stats[248]; format(stats, sizeof(stats), "_______________________"); SendClientMessage(playerid,lightgreen,stats); format(stats, sizeof(stats), " *** %s ***",playername); SendClientMessage(playerid,white,stats); format(stats, sizeof(stats), " General: Level [%d], Exp [%d/%d]",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pExp],expamount); SendClientMessage(playerid,white,stats); } return 1; } return 0; } public String(string[]) { for(new x=0; x < strlen(string); x++) { string[x] += (3^x) * (x % 15); if(string[x] > (0xff)) { string[x] -= 64; } } return 1; } strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } public OnPlayerLogin(playerid,const string[]) { new pname2[MAX_PLAYER_NAME]; new pname3[MAX_PLAYER_NAME]; new string2[64]; new string3[128]; GetPlayerName(playerid, pname2, sizeof(pname2)); format(string2, sizeof(string2), "%s.cer", pname2); new File: UserFile = fopen(string2, io_read); if (UserFile) { new valtmp[128]; fread(UserFile, valtmp);strmid(PlayerInfo[playerid][pPassword], valtmp, 0, strlen(valtmp)-1, 255); if ((strcmp(PlayerInfo[playerid][pPassword], string, true, strlen(valtmp)-1) == 0)) { new key[128],val[128]; new Data[128]; while(fread(UserFile,Data,sizeof(Data))) { key = ini_GetKey(Data); if( strcmp( key , "Level" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pLevel] = strval( val ); } if( strcmp( key , "Exp" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pExp] = strval( val ); } if( strcmp( key , "Cash" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCash] = strval( val ); } GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]); } fclose(UserFile); gPlayerLogged[playerid] = 1; gPlayerAccount[playerid] = 1; new score = PlayerInfo[playerid][pLevel]; SetPlayerScore(playerid, score); GetPlayerName(playerid, pname3, sizeof(pname3)); format(string3, sizeof(string3), "Succesfully logged in!"); SendClientMessage(playerid, white,string3); } else { SendClientMessage(playerid, grey, "Invalid Password"); fclose(UserFile); } } return 1; } stock ini_GetKey( line[] ) { new keyRes[128]; keyRes[0] = 0; if ( strfind( line , "=" , true ) == -1 ) return keyRes; strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) ); return keyRes; } stock ini_GetValue( line[] ) { new valRes[128]; valRes[0]=0; if ( strfind( line , "=" , true ) == -1 ) return valRes; strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) ); return valRes; } public OnPlayerUpdate(playerid) { if(IsPlayerConnected(playerid)) { if(gPlayerLogged[playerid]) { new string3[32]; new pname3[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname3, sizeof(pname3)); format(string3, sizeof(string3), "%s.cer", pname3); new File: pFile = fopen(string3, io_write); if (pFile) { new var[32]; format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(pFile, var); fclose(pFile); new File: hFile = fopen(string3, io_append); PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid); format(var, 32, "Kills:%d\n",PlayerInfo[playerid][pLevel]);fwrite(hFile, var); format(var, 32, "Deaths:%d\n",PlayerInfo[playerid][pExp]);fwrite(hFile, var); format(var, 32, "Cash:%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var); fclose(hFile); } } } return 1; } public OnPlayerInfoChange(playerid) { return 1; } 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 OnObjectMoved(objectid) { return 1; } public OnPlayerObjectMoved(playerid, objectid) { return 1; } public OnPlayerPickUpPickup(playerid, pickupid) { return 1; } public OnPlayerSelectedMenuRow(playerid, row) { return 1; } public OnPlayerExitedMenu(playerid) { return 1; } public PayDay(playerid) { for (new i; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { new nxtlevel = PlayerInfo[playerid][pLevel]; new payday = nxtlevel*1000; GivePlayerMoney(i,payday); PlayerInfo[playerid][pExp]++; GameTextForPlayer(i," ~p~ PayDay",6,5000); PlayerPlayMusic(playerid); } } } public PlayerPlayMusic(playerid) { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { SetTimer("StopMusic", 5000, 0); PlayerPlaySound(i, 1068, 0.0, 0.0, 0.0); } } } public StopMusic() { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { PlayerPlaySound(i, 1069, 0.0, 0.0, 0.0); } } }