inital commit
This commit is contained in:
254
antitk/keyvalues.sp
Normal file
254
antitk/keyvalues.sp
Normal file
@@ -0,0 +1,254 @@
|
||||
// Keyvalue Storage
|
||||
//#define ANTITK_KV_FILE "AntiTK.txt"
|
||||
|
||||
new String:AntiTK_DataFile[PLATFORM_MAX_PATH];
|
||||
|
||||
new Handle:g_kv_AntiTK = INVALID_HANDLE;
|
||||
new LastTKPurge = 0;
|
||||
|
||||
new String:arrayPlayerIDs[MAXPLAYERS + 1][MAX_NETWORKID_LENGTH];
|
||||
|
||||
// Create KeyValue Data Path.
|
||||
BuildKeyValuePath()
|
||||
{
|
||||
// Build Data File Path
|
||||
BuildPath(Path_SM, AntiTK_DataFile, sizeof(AntiTK_DataFile), "data/AntiTK.txt");
|
||||
LogAction(0, -1, "[Anti-TK Manager] Data File: %s", AntiTK_DataFile);
|
||||
}
|
||||
|
||||
// Read All TKer Information from Keyvalue file.
|
||||
ReadTKers()
|
||||
{
|
||||
LogDebug(false, "ReadTKers - Reading all TK'ers from Keyvalue file: %s", AntiTK_DataFile);
|
||||
|
||||
if (g_kv_AntiTK == INVALID_HANDLE)
|
||||
{
|
||||
LogDebug(false, "ReadTKers - Keyvalues Handle is invalid (May not have been read yet)");
|
||||
g_kv_AntiTK = CreateKeyValues("Anti-TK");
|
||||
}
|
||||
else
|
||||
LogDebug(false, "ReadTKers - Keyvalues Handle is valid (File has probably already been read?)");
|
||||
|
||||
FileToKeyValues(g_kv_AntiTK, AntiTK_DataFile);
|
||||
}
|
||||
|
||||
SaveTKFile(Handle:file_handle)
|
||||
{
|
||||
// Safety Precation?
|
||||
KvRewind(file_handle);
|
||||
KeyValuesToFile(file_handle, AntiTK_DataFile);
|
||||
}
|
||||
|
||||
// Save All TKer data to Keyvalue file.
|
||||
SaveTKers()
|
||||
{
|
||||
LogDebug(false, "SaveTKers - Saving all TK'ers to Keyvalue file: %s", AntiTK_DataFile);
|
||||
|
||||
if (g_kv_AntiTK == INVALID_HANDLE)
|
||||
LogDebug(false, "SaveTKers - Keyvalues Handle is invalid? (This should probably not happen)");
|
||||
else
|
||||
SaveTKFile(g_kv_AntiTK);
|
||||
|
||||
CloseHandle(g_kv_AntiTK);
|
||||
g_kv_AntiTK = INVALID_HANDLE;
|
||||
}
|
||||
|
||||
// Purge Old TK'er data that has expired?
|
||||
bool:PurgeTKerData(const purgetime, checklast = false)
|
||||
{
|
||||
new time = GetTime();
|
||||
#if _DEBUG >= 2
|
||||
LogDebug(false, "PurgeTKerData - Checking Old TKer data. LastPurge: %d Time: %d", LastTKPurge, time);
|
||||
#endif
|
||||
|
||||
if (checklast)
|
||||
if ((time - LastTKPurge) >= purgetime)
|
||||
{
|
||||
LogDebug(false, "PurgeTKerData - Old TKer data being purged: LastPurge: %d Time: %d", LastTKPurge, time);
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
if (g_kv_AntiTK == INVALID_HANDLE)
|
||||
{
|
||||
LogDebug(false, "PurgeTKerData - Keyvalues Handle is invalid? Attempting to read file?");
|
||||
ReadTKers();
|
||||
}
|
||||
|
||||
LogDebug(false, "PurgeTKerData - TKer's are being checked.");
|
||||
|
||||
new bool:check_record = true;
|
||||
decl savetime;
|
||||
decl String:steam_id[MAX_NETWORKID_LENGTH];
|
||||
|
||||
if (KvGotoFirstSubKey(g_kv_AntiTK))
|
||||
{
|
||||
LogDebug(false, "PurgeTKerData - Starting loop");
|
||||
do
|
||||
{
|
||||
check_record = true;
|
||||
|
||||
do
|
||||
{
|
||||
savetime = KvGetNum(g_kv_AntiTK, "saved");
|
||||
LogDebug(false, "PurgeTKerData - Record Retrieved: Time: %i Saved: %i", time, savetime);
|
||||
|
||||
if (savetime > 0)
|
||||
{
|
||||
if ((time - savetime) >= purgetime)
|
||||
{
|
||||
if ( KvGetSectionName(g_kv_AntiTK, steam_id, sizeof(steam_id)) )
|
||||
LogDebug(false, "PurgeTKerData - Deleting record %s.", steam_id);
|
||||
else
|
||||
LogDebug(false, "PurgeTKerData - Deleting record... could not retrieve record name");
|
||||
|
||||
if (KvDeleteThis(g_kv_AntiTK) < 1)
|
||||
check_record = false;
|
||||
}
|
||||
else
|
||||
check_record = false;
|
||||
}
|
||||
else
|
||||
check_record = false;
|
||||
} while (check_record);
|
||||
} while(KvGotoNextKey(g_kv_AntiTK));
|
||||
}
|
||||
else
|
||||
LogDebug(false, "PurgeTKerData - Could not get first Key?");
|
||||
|
||||
|
||||
LastTKPurge = time;
|
||||
SaveTKFile(g_kv_AntiTK);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Retrieve stored TKer data for players steamid.
|
||||
bool:RetrieveTKer(client)
|
||||
{
|
||||
// Retrieve Steam ID
|
||||
GetClientAuthString(client, arrayPlayerIDs[client], MAX_NETWORKID_LENGTH);
|
||||
|
||||
#if _DEBUG >= 2
|
||||
LogDebug(false, "RetrieveTKer - Reading TK'er data for: %s", arrayPlayerIDs[client]);
|
||||
#endif
|
||||
|
||||
if (g_kv_AntiTK == INVALID_HANDLE)
|
||||
{
|
||||
LogDebug(false, "RetrieveTKer - Keyvalues Handle is invalid? (This should not happen)");
|
||||
ReadTKers();
|
||||
}
|
||||
|
||||
// Rewind File
|
||||
KvRewind(g_kv_AntiTK);
|
||||
|
||||
if (KvJumpToKey(g_kv_AntiTK, arrayPlayerIDs[client]))
|
||||
{
|
||||
#if _DEBUG >= 2
|
||||
LogDebug(false, "RetrieveTKer - Found Key: %s", arrayPlayerIDs[client]);
|
||||
#endif
|
||||
arrayPlayerStats[client][STAT_KARMA] = KvGetNum(g_kv_AntiTK, "karma");
|
||||
arrayPlayerStats[client][STAT_KILLS] = KvGetNum(g_kv_AntiTK, "kills");
|
||||
arrayPlayerStats[client][STAT_TEAM_KILLS] = KvGetNum(g_kv_AntiTK, "tks");
|
||||
KvRewind(g_kv_AntiTK);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
#if _DEBUG >= 2
|
||||
LogDebug(false, "RetrieveTKer - Failed? Key Not Found.");
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool:SaveTKer(client)
|
||||
{
|
||||
#if _DEBUG >= 2
|
||||
LogDebug(false, "SaveTKer - Saving TK'er data for: %s", arrayPlayerIDs[client]);
|
||||
#endif
|
||||
|
||||
if (g_kv_AntiTK == INVALID_HANDLE)
|
||||
{
|
||||
LogDebug(false, "SaveTKer - Keyvalues Handle is invalid? (This should not happen)");
|
||||
ReadTKers();
|
||||
}
|
||||
|
||||
// Safety Precaution
|
||||
KvRewind(g_kv_AntiTK);
|
||||
if (!StrEqual(arrayPlayerIDs[client], ""))
|
||||
{
|
||||
KvJumpToKey(g_kv_AntiTK,arrayPlayerIDs[client],true);
|
||||
|
||||
// Store Values
|
||||
KvSetNum(g_kv_AntiTK, "karma", arrayPlayerStats[client][STAT_KARMA]);
|
||||
KvSetNum(g_kv_AntiTK, "kills", arrayPlayerStats[client][STAT_KILLS]);
|
||||
KvSetNum(g_kv_AntiTK, "tks", arrayPlayerStats[client][STAT_TEAM_KILLS]);
|
||||
KvSetNum(g_kv_AntiTK, "saved", GetTime());
|
||||
|
||||
SaveTKFile(g_kv_AntiTK);
|
||||
|
||||
arrayPlayerIDs[client] = "";
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool:RemoveTKer(const String:steamid[])
|
||||
{
|
||||
LogDebug(false, "RemoveTKer - Removing TK'er data for: %s", steamid);
|
||||
|
||||
if (g_kv_AntiTK == INVALID_HANDLE)
|
||||
{
|
||||
LogDebug(false, "RemoveTKer - Keyvalues Handle is invalid? (This should not happen)");
|
||||
ReadTKers();
|
||||
}
|
||||
|
||||
if (KvGotoFirstSubKey(g_kv_AntiTK))
|
||||
{
|
||||
if (KvJumpToKey(g_kv_AntiTK, steamid))
|
||||
{
|
||||
KvDeleteThis(g_kv_AntiTK);
|
||||
KvRewind(g_kv_AntiTK);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
DeleteAllTKers()
|
||||
{
|
||||
#if _DEBUG
|
||||
LogAction(0, -1, "DeleteAllTKers - Removing all TKer data.");
|
||||
#endif
|
||||
if (g_kv_AntiTK == INVALID_HANDLE)
|
||||
{
|
||||
#if _DEBUG
|
||||
LogAction(0, -1, "DeleteAllTKers - Keyvalues Handle is invalid? (This should not happen)");
|
||||
#endif
|
||||
}
|
||||
if (!KvGotoFirstSubKey(g_kv_AntiTK))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
decl String:name[4];
|
||||
KvGetString(g_kv_AntiTK, name, sizeof(name))
|
||||
if (name[0] == '\0')
|
||||
{
|
||||
if (KvDeleteThis(g_kv_AntiTK) < 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
} else if (!KvGotoNextKey(g_kv_AntiTK)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
Reference in New Issue
Block a user