Quote:
For some reason, levels for players (other than bots) don't seem to be saving, so if you disconnect and reconnect, you'll be back at Level 0. Maybe I missed a cvar somewhere. (And yeah, Clientprefs *is* installed.)
|
huhm, thats weird. can't reproduce this.
does your serverlog say sth like this when a player connects:
DB: <playername> has xp: <value>
and is xp > 0 ?
your clientprefs db is configured correctly? is there a clientprefs-sqlite.sq3 in your sourcemod/data/sqlite folder? are you using mysql as a clientprefs backend?
or am i having some race condition in my code - when i think about it, this could be the case.
Maybe some one else can help as i am no expert for clientprefs:
PHP Code:
public OnPluginStart()
{
db_level = RegClientCookie("levelmod_level", "Current player level", CookieAccess_Private);
db_xp = RegClientCookie("levelmod_xp", "Current player experience points", CookieAccess_Private);
}
/////////////////////////
//L O A D F R O M D B//
/////////////////////////
public OnClientCookiesCached(client) {
loadValues(client);
}
stock loadValues(client) {
if (!AreClientCookiesCached(client))
return;
new String:sLevel[20];
GetClientCookie(client, db_level, sLevel, sizeof(sLevel));
new iLevel = StringToInt(sLevel);
if(iLevel >= 0) {
lm_SetClientLevel(client, iLevel);
LogMessage("DB: %N is level %i", client, iLevel);
}
new String:sXP[20];
GetClientCookie(client, db_xp, sXP, sizeof(sXP));
new iXP = StringToInt(sXP);
if(iXP >= 0) {
lm_SetClientXP(client, iXP);
LogMessage("DB: %N has xp: %i", client, iXP);
}
}
/////////////////////
//S A V E T O D B//
/////////////////////
public OnClientDisconnect(client)
{
new iXP = lm_GetClientXP(client);
new iLevel = lm_GetClientLevel(client);
if(iLevel >= 0) {
new String:sXP[20];
Format(sXP, sizeof(sXP), "%i", iXP);
new String:sLevel[6];
Format(sLevel, sizeof(sLevel), "%i", iLevel);
LogMessage("Writing client cookie: level %i, xp: %i", iLevel, iXP);
SetClientCookie(client, db_level, sLevel);
SetClientCookie(client, db_xp, sXP);
}
}
Facts:
OnClientConnected(client) is setting xp to 0. (the core does this)
OnClientCookiesCached(client) loads the values from the db.
The latter will always be called after the former, right?