PDA

View Full Version : [Key Values] Overwriting the wrong ones?


Marcus101RR
03-08-2015, 17:23
I am unable to determine how a string becomes an integer, as you can see "2147483647" and "0". When the last entry was done correctly, why are the others done incorrectly?

NOTE: I determined that when it saves a person's data, it overwrites all others. Even though their STEAMID, or BOT ID doesn't match. What is going on in this code that is causing this?

"SaveFile"
{
"BOT_Francis"
{
"Upgrades" "0"
"Disabled" "0"
"PerkBonusSlots" "0"
}
"BOT_Zoey"
{
"Upgrades" "2147483647"
"Disabled" "0"
"PerkBonusSlots" "0"
}
"BOT_Louis"
{
"Upgrades" "0"
"Disabled" "0"
"PerkBonusSlots" "0"
}
"BOT_(1)Francis"
{
"Upgrades" "2147483647"
"Disabled" "0"
"PerkBonusSlots" "0"
}
"BOT_Bill"
{
"Upgrades" "2147483647"
"Disabled" "0"
"PerkBonusSlots" "0"
}
"BOT_(1)Louis"
{
"Upgrades" "0"
"Disabled" "0"
"PerkBonusSlots" "0"
}
"STEAM_1:0:26901013"
{
"Upgrades" "00010000000001000000000100000010"
"Disabled" "00000000000000000000000000000000"
"PerkBonusSlots" "0"
}
}

Source:
/* Save To File */
ClientSaveToFileSave(targetid)
{
decl Handle:kv;
decl String:cName[MAX_NAME_LENGTH];
decl String:cUsername[MAX_TARGET_LENGTH];
kv = CreateKeyValues("SurvivorUpgradesReloaded");
FileToKeyValues(kv, SavePath);

GetClientAuthString(targetid, cName, sizeof(cName));
GetClientName(targetid, cUsername, sizeof(cUsername));
if(IsFakeClient(targetid) && StrContains(cUsername, "SurvivorBot", false) == -1)
{
Format(cName, sizeof(cName), "%s_%s", cName, cUsername);
}
KvJumpToKey(kv, cName, true);

decl String:buffer[256] = "", String:buffer2[256] = "";

for(new i = 0; i < MAX_UPGRADES; i++)
{
if(i == 0)
{
if(iUpgrade[targetid][i] > 0)
Format(buffer, sizeof(buffer), "1");
else
Format(buffer, sizeof(buffer), "0");

if(iUpgradeDisabled[targetid][i] > 0)
Format(buffer2, sizeof(buffer2), "1");
else
Format(buffer2, sizeof(buffer2), "0");
}
else
{
if(iUpgrade[targetid][i] > 0)
Format(buffer, sizeof(buffer), "%s1", buffer);
else
Format(buffer, sizeof(buffer), "%s0", buffer);

if(iUpgradeDisabled[targetid][i] > 0)
Format(buffer2, sizeof(buffer2), "%s1", buffer2);
else
Format(buffer2, sizeof(buffer2), "%s0", buffer2);
}
}
KvSetString(kv, "Upgrades", buffer);
KvSetString(kv, "Disabled", buffer2);
KvSetNum(kv, "PerkBonusSlots", iPerkBonusSlots[targetid]);

KvRewind(kv);
KeyValuesToFile(kv, SavePath);
CloseHandle(kv);
}

/* Load Save From File */
ClientSaveToFileLoad(targetid)
{
decl Handle:kv;
decl String:cName[MAX_NAME_LENGTH];
decl String:cUsername[MAX_TARGET_LENGTH];
kv = CreateKeyValues("SurvivorUpgradesReloaded");
FileToKeyValues(kv, SavePath);

GetClientAuthString(targetid, cName, sizeof(cName));
GetClientName(targetid, cUsername, sizeof(cUsername));

if(IsFakeClient(targetid) && StrContains(cUsername, "SurvivorBot", false) == -1)
{
Format(cName, sizeof(cName), "%s_%s", cName, cUsername);
}
if(!KvJumpToKey(kv, cName))
{
return;
}
KvJumpToKey(kv, cName, true);

iBitsUpgrades[targetid] = 0;

decl String:buffer[256];
decl String:buffer2[256];

KvGetString(kv, "Upgrades", buffer, sizeof(buffer));
KvGetString(kv, "Disabled", buffer2, sizeof(buffer2));

new len = strlen(buffer);
for (new i = 0; i <= len; i++)
{
if(buffer[i] == '1')
{
iUpgrade[targetid][i] = UpgradeIndex[i];
}
}

len = strlen(buffer2);
for (new i = 0; i <= len; i++)
{
if(buffer2[i] == '1')
{
iUpgradeDisabled[targetid][i] = 1;
}
}
iPerkBonusSlots[targetid] = KvGetNum(kv, "PerkBonusSlots", 0);
CloseHandle(kv);
}