added changes to the public store plugin with a readme

This commit is contained in:
jenz 2025-01-03 14:24:01 +01:00
parent 9524a6550a
commit d50914c54a
4 changed files with 1802 additions and 0 deletions

35
zrstore/README.md Normal file
View File

@ -0,0 +1,35 @@
url: https://github.com/nuclearsilo583/zephyrus-store-preview-new-syntax
what is changed?
store/sql.sp and store/db.sp
char m_szQuery[1024]; buffer size 512 is not enough. this is related to the query
Format(STRING(m_szQuery), "CREATE TABLE IF NOT EXISTS `%s` (\
`id` int(11) NOT NULL AUTO_INCREMENT,\
`parent_id` int(11) NOT NULL DEFAULT '-1',\
`item_price` int(32) NOT NULL,\
`item_type` varchar(64) NOT NULL,\
`item_flag` varchar(64) NOT NULL,\
`item_name` varchar(64) NOT NULL,\
`additional_info` text NOT NULL,\
`item_status` tinyint(1) NOT NULL,\
`supported_game` varchar(64) NOT NULL,\
PRIMARY KEY (`id`)\
) ENGINE=InnoDB AUTO_INCREMENT=0 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci", g_eCvars[g_cvarItemsTable].sCache);
not executing the query
DELETE store_items, store_equipment "
... "FROM store_items, store_equipment "
... "WHERE store_items.unique_id = store_equipment.unique_id "
... "AND store_items.player_id = store_equipment.player_id "
... "AND store_items.date_of_expiration != 0 "
... "AND store_items.date_of_expiration < %d", GetTime());
DELETE FROM store_items WHERE date_of_expiration != 0 AND date_of_expiration < %d
because its performing bad, also all our stuff is permanent.
fuck these jewish niggers edit to the include/zephstocks file, they added tabbing inside quotes that fuck up compiling when retabbing the indentation of the whole file.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,98 @@
Handle g_hDatabase = INVALID_HANDLE;
bool g_bMySQL = false;
#include "store/sql.sp"
void Store_DB_ConfigsExecuted_ConnectDatabase()
{
if(g_hDatabase == INVALID_HANDLE)
SQL_TConnect(SQLCallback_Connect, g_eCvars[g_cvarDatabaseEntry].sCache);
// If database has been connected. Skip connection and do some housekeeping here
else Store_DB_HouseKeeping(g_hDatabase);
if(g_eCvars[g_cvarDatabaseRetries].aCache > 0)
CreateTimer(view_as<float>(g_eCvars[g_cvarDatabaseTimeout].aCache), Timer_DatabaseTimeout);
}
public Action Timer_DatabaseTimeout(Handle timer, any userid)
{
// Database is connected successfully
if(g_hDatabase != INVALID_HANDLE)
return Plugin_Stop;
if(g_iDatabaseRetries < g_eCvars[g_cvarDatabaseRetries].aCache)
{
SQL_TConnect(SQLCallback_Connect, g_eCvars[g_cvarDatabaseEntry].sCache);
CreateTimer(view_as<float>(g_eCvars[g_cvarDatabaseTimeout].aCache), Timer_DatabaseTimeout);
++g_iDatabaseRetries;
}
else
{
SetFailState("Database connection failed to initialize after %d retrie(s)", g_eCvars[g_cvarDatabaseRetries].aCache);
}
return Plugin_Stop;
}
void Store_DB_HouseKeeping(Handle db)
{
// Do some housekeeping
char m_szQuery[600], m_szLogCleaningQuery[256];
char m_szDriver[12];
SQL_ReadDriver(db, STRING(m_szDriver));
// Remove expired and equipped items
if (StrEqual(m_szDriver, "mysql"))
{
// This query removes expired items that are equipped, and also remove the rows from store_equipment - it doesnt remove unequipped items!
Format(STRING(m_szQuery), "DELETE store_items, store_equipment "
... "FROM store_items, store_equipment "
... "WHERE store_items.unique_id = store_equipment.unique_id "
... "AND store_items.player_id = store_equipment.player_id "
... "AND store_items.date_of_expiration != 0 "
... "AND store_items.date_of_expiration < %d", GetTime());
// Ugly syntax, but MySQL DOES allow DELETE clauses between multiple tables in a single query
}
else
{
// This query removes rows from store_equipment that are linked to items that are expired, BUT DOESNT ACTUALLY REMOVE EXPIRED ITEMS FROM PLAYERS INVENTORIES! - This is done by the query after this one.
// ^ NOTE THAT THE BEHAVIOR OF THIS QUERY DIFFERS FROM THE MySQL ONE!
// For easier copy-pasting: DELETE FROM store_equipment WHERE ROWID IN (SELECT store_equipment.ROWID FROM store_items, store_equipment WHERE store_items.unique_id = store_equipment.unique_id AND store_items.player_id = store_equipment.player_id AND store_items.date_of_expiration != 0 AND store_items.date_of_expiration < %d);
Format(STRING(m_szQuery), "DELETE FROM store_equipment "
... "WHERE ROWID IN "
... "("
... "SELECT store_equipment.ROWID "
... "FROM store_items, store_equipment "
... "WHERE store_items.unique_id = store_equipment.unique_id "
... "AND store_items.player_id = store_equipment.player_id "
... "AND store_items.date_of_expiration != 0 "
... "AND store_items.date_of_expiration < %d"
... ") ", GetTime());
// SQLite doesnt allow DELETE clauses between multiple tables in a single query. GRRRR!!!
// Btw, ROWID is the default hidden SQLite primary key, because the store_equipment table doesnt have one
}
//SQL_TVoid(db, m_szQuery); //these just waste time. everything is permanent anyways on unloze
// Remove expired and unequipped items
Format(STRING(m_szQuery), "DELETE FROM store_items WHERE date_of_expiration != 0 AND date_of_expiration < %d", GetTime());
//SQL_TVoid(db, m_szQuery); //these just waste time. everything is permanent anyways on unloze
if (g_eCvars[g_cvarLogLast].aCache>0)
{
if (StrEqual(m_szDriver, "mysql"))
{
Format(STRING(m_szLogCleaningQuery), "DELETE FROM store_plugin_logs WHERE `date` < CURDATE()-%i", g_eCvars[g_cvarLogLast].aCache);
SQL_TVoid(db, m_szLogCleaningQuery);
Format(STRING(m_szLogCleaningQuery), "DELETE FROM store_logs WHERE `date` < CURDATE()-%i", g_eCvars[g_cvarLogLast].aCache);
SQL_TVoid(db, m_szLogCleaningQuery);
}
else
{
Format(STRING(m_szLogCleaningQuery), "DELETE FROM store_plugin_logs WHERE `date` < (SELECT DATETIME('now', '-%i day'))", g_eCvars[g_cvarLogLast].aCache);
SQL_TVoid(db, m_szLogCleaningQuery);
}
}
}

View File

@ -0,0 +1,461 @@
//////////////////////////////
// SQL CALLBACKS //
//////////////////////////////
public void SQLCallback_Connect(Handle owner, Handle hndl, const char[] error, any data)
{
if(hndl==INVALID_HANDLE)
{
SetFailState("Failed to connect to SQL database. Error: %s", error);
}
else
{
// If it's already connected we are good to go
if(g_hDatabase != INVALID_HANDLE)
return;
g_hDatabase = hndl;
char m_szDriver[2];
SQL_ReadDriver(g_hDatabase, STRING(m_szDriver));
if(m_szDriver[0] == 'm')
{
g_bMySQL = true;
SQL_TVoid(g_hDatabase, "CREATE TABLE IF NOT EXISTS `store_players` (\
`id` int(11) NOT NULL AUTO_INCREMENT,\
`authid` varchar(32) NOT NULL,\
`name` varchar(64) NOT NULL,\
`credits` int(11) NOT NULL,\
`date_of_join` int(11) NOT NULL,\
`date_of_last_join` int(11) NOT NULL,\
PRIMARY KEY (`id`),\
UNIQUE KEY `id` (`id`),\
UNIQUE KEY `authid` (`authid`)\
) ENGINE=InnoDB AUTO_INCREMENT=0 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
SQL_TVoid(g_hDatabase, "CREATE TABLE IF NOT EXISTS `store_items` (\
`id` int(11) NOT NULL AUTO_INCREMENT,\
`player_id` int(11) NOT NULL,\
`type` varchar(16) NOT NULL,\
`unique_id` varchar(256) NOT NULL,\
`date_of_purchase` int(11) NOT NULL,\
`date_of_expiration` int(11) NOT NULL,\
PRIMARY KEY (`id`)\
) ENGINE=InnoDB AUTO_INCREMENT=0 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
SQL_TVoid(g_hDatabase, "CREATE TABLE IF NOT EXISTS `store_equipment` (\
`player_id` int(11) NOT NULL,\
`type` varchar(16) NOT NULL,\
`unique_id` varchar(256) NOT NULL,\
`slot` int(11) NOT NULL\
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
SQL_TVoid(g_hDatabase, "CREATE TABLE IF NOT EXISTS `store_logs` (\
`id` int(11) NOT NULL AUTO_INCREMENT,\
`player_id` int(11) NOT NULL,\
`credits` int(11) NOT NULL,\
`reason` varchar(256) NOT NULL,\
`date` timestamp NOT NULL,\
PRIMARY KEY (`id`)\
) ENGINE=InnoDB AUTO_INCREMENT=0 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
SQL_TVoid(g_hDatabase, "CREATE TABLE IF NOT EXISTS `store_plugin_logs` (\
`id` int(11) NOT NULL AUTO_INCREMENT,\
`level` varchar(8) NOT NULL,\
name varchar(64) NOT NULL default '',\
steam varchar(64) NOT NULL default '',\
`player_id` int(11) NOT NULL,\
`reason` varchar(256) NOT NULL,\
`date` timestamp NOT NULL,\
PRIMARY KEY (`id`),\
UNIQUE KEY `id` (`id`)\
) ENGINE=InnoDB AUTO_INCREMENT=0 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
SQL_TQuery(g_hDatabase, SQLCallback_NoError, "ALTER TABLE store_items ADD COLUMN price_of_purchase int(11)");
// Edit exist date column
SQL_TQuery(g_hDatabase, SQLCallback_CheckError, "ALTER TABLE store_logs MODIFY COLUMN date TIMESTAMP NOT NULL");
SQL_TQuery(g_hDatabase, SQLCallback_CheckError, "ALTER TABLE store_players CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;");
SQL_TQuery(g_hDatabase, SQLCallback_CheckError, "ALTER TABLE store_plugin_logs CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;");
char m_szQuery[1024];
Format(STRING(m_szQuery), "CREATE TABLE IF NOT EXISTS `%s` (\
`id` int(11) NOT NULL AUTO_INCREMENT,\
`parent_id` int(11) NOT NULL DEFAULT '-1',\
`item_price` int(32) NOT NULL,\
`item_type` varchar(64) NOT NULL,\
`item_flag` varchar(64) NOT NULL,\
`item_name` varchar(64) NOT NULL,\
`additional_info` text NOT NULL,\
`item_status` tinyint(1) NOT NULL,\
`supported_game` varchar(64) NOT NULL,\
PRIMARY KEY (`id`)\
) ENGINE=InnoDB AUTO_INCREMENT=0 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci", g_eCvars[g_cvarItemsTable].sCache);
SQL_TVoid(g_hDatabase, m_szQuery);
}
else
{
SQL_TVoid(g_hDatabase, "CREATE TABLE IF NOT EXISTS `store_players` (\
`id` INTEGER PRIMARY KEY AUTOINCREMENT,\
`authid` varchar(32) NOT NULL,\
`name` varchar(64) NOT NULL,\
`credits` int(11) NOT NULL,\
`date_of_join` int(11) NOT NULL,\
`date_of_last_join` int(11) NOT NULL\
)");
SQL_TVoid(g_hDatabase, "CREATE TABLE IF NOT EXISTS `store_items` (\
`id` INTEGER PRIMARY KEY AUTOINCREMENT,\
`player_id` int(11) NOT NULL,\
`type` varchar(16) NOT NULL,\
`unique_id` varchar(256) NOT NULL,\
`date_of_purchase` int(11) NOT NULL,\
`date_of_expiration` int(11) NOT NULL\
)");
SQL_TVoid(g_hDatabase, "CREATE TABLE IF NOT EXISTS `store_equipment` (\
`player_id` int(11) NOT NULL,\
`type` varchar(16) NOT NULL,\
`unique_id` varchar(256) NOT NULL,\
`slot` int(11) NOT NULL\
)");
SQL_TVoid(g_hDatabase, "CREATE TABLE IF NOT EXISTS `store_plugin_logs` (\
`id` INTEGER PRIMARY KEY AUTOINCREMENT,\
`level` varchar(8) NOT NULL,\
name varchar(64) NOT NULL default '',\
steam varchar(64) NOT NULL default '',\
`player_id` int(11) NOT NULL,\
`reason` varchar(256) NOT NULL,\
`date` timestamp NOT NULL\
)");
SQL_TQuery(g_hDatabase, SQLCallback_NoError, "ALTER TABLE store_items ADD COLUMN price_of_purchase int(11)");
if(strcmp(g_eCvars[g_cvarItemSource].sCache, "database")==0)
{
SetFailState("Database item source can only be used with MySQL databases");
}
}
// Do some housekeeping
Store_DB_HouseKeeping(g_hDatabase);
if(!SQL_SetCharset(g_hDatabase, "utf8mb4")){
SQL_SetCharset(g_hDatabase, "utf8");
}
}
}
public void SQLCallback_CheckError(Handle owner, Handle hndl, const char[] error, any userid)
{
if(!StrEqual("", error))
LogError("Error happened. Error: %s", error);
}
public void SQLCallback_LoadClientInventory_Credits(Handle owner, Handle hndl, const char[] error, any userid)
{
if(hndl==INVALID_HANDLE)
LogError("Error happened. Error: %s", error);
else
{
int client = GetClientOfUserId(userid);
if (!client || !IsClientInGame(client))
return;
char m_szQuery[256];
char m_szSteamID[32];
int m_iTime = GetTime();
g_eClients[client].iUserId = userid;
g_eClients[client].iItems = -1;
GetLegacyAuthString(client, STRING(m_szSteamID), false);
//strcopy(g_eClients[client].szAuthId, 32, m_szSteamID[8]);
strcopy(g_eClients[client].szAuthId, sizeof(Client_Data::szAuthId), m_szSteamID[8]);
GetClientName(client, g_eClients[client].szName_Client, 64);
SQL_EscapeString(g_hDatabase, g_eClients[client].szName_Client, g_eClients[client].szNameEscaped, 128);
if(SQL_FetchRow(hndl))
{
g_eClients[client].iId_Client = SQL_FetchInt(hndl, 0);
g_eClients[client].iCredits = SQL_FetchInt(hndl, 3);
g_eClients[client].iOriginalCredits = SQL_FetchInt(hndl, 3);
g_eClients[client].iDateOfJoin = SQL_FetchInt(hndl, 4);
g_eClients[client].iDateOfLastJoin = m_iTime;
Format(STRING(m_szQuery), "SELECT * FROM store_items WHERE `player_id`=%d", g_eClients[client].iId_Client);
SQL_TQuery(g_hDatabase, SQLCallback_LoadClientInventory_Items, m_szQuery, userid);
Store_LogMessage(client, g_eClients[client].iCredits, "Amount of credits when the player joined");
Store_SaveClientData(client);
}
else
{
Format(STRING(m_szQuery), "INSERT INTO store_players (`authid`, `name`, `credits`, `date_of_join`, `date_of_last_join`) VALUES('%s', '%s', %d, %d, %d)",
g_eClients[client].szAuthId, g_eClients[client].szNameEscaped, g_eCvars[g_cvarStartCredits].aCache, m_iTime, m_iTime);
SQL_TQuery(g_hDatabase, SQLCallback_InsertClient, m_szQuery, userid);
g_eClients[client].iCredits = g_eCvars[g_cvarStartCredits].aCache;
g_eClients[client].iOriginalCredits = g_eCvars[g_cvarStartCredits].aCache;
g_eClients[client].iDateOfJoin = m_iTime;
g_eClients[client].iDateOfLastJoin = m_iTime;
g_eClients[client].bLoaded= true;
g_eClients[client].iItems = 0;
if(g_eCvars[g_cvarStartCredits].aCache > 0)
Store_LogMessage(client, g_eCvars[g_cvarStartCredits].aCache, "Start credits");
}
g_eClients[client].hCreditTimer = Store_CreditTimer(client);
}
}
public void SQLCallback_LoadClientInventory_Items(Handle owner, Handle hndl, const char[] error, any userid)
{
if(hndl==INVALID_HANDLE)
LogError("Error happened. Error: %s", error);
else
{
int client = GetClientOfUserId(userid);
if (!client || !IsClientInGame(client))
return;
char m_szQuery[256];
Format(STRING(m_szQuery), "SELECT * FROM store_equipment WHERE `player_id`=%d", g_eClients[client].iId_Client);
SQL_TQuery(g_hDatabase, SQLCallback_LoadClientInventory_Equipment, m_szQuery, userid);
if(!SQL_GetRowCount(hndl))
{
g_eClients[client].bLoaded = true;
g_eClients[client].iItems = 0;
return;
}
char m_szUniqueId[PLATFORM_MAX_PATH];
char m_szType[16];
int m_iExpiration;
int m_iUniqueId;
int m_iTime = GetTime();
int i = 0;
while(SQL_FetchRow(hndl))
{
m_iUniqueId = -1;
m_iExpiration = SQL_FetchInt(hndl, 5);
if(m_iExpiration && m_iExpiration<=m_iTime)
continue;
SQL_FetchString(hndl, 2, STRING(m_szType));
SQL_FetchString(hndl, 3, STRING(m_szUniqueId));
while((m_iUniqueId = Store_GetItemId(m_szType, m_szUniqueId, m_iUniqueId))!=-1)
{
g_eClientItems[client][i].iId_Client_Item = SQL_FetchInt(hndl, 0);
g_eClientItems[client][i].iUniqueId = m_iUniqueId;
g_eClientItems[client][i].bSynced = true;
g_eClientItems[client][i].bDeleted = false;
g_eClientItems[client][i].iDateOfPurchase = SQL_FetchInt(hndl, 4);
g_eClientItems[client][i].iDateOfExpiration = m_iExpiration;
g_eClientItems[client][i].iPriceOfPurchase = SQL_FetchInt(hndl, 6);
++i;
}
}
g_eClients[client].iItems = i;
}
}
public void SQLCallback_LoadClientInventory_Equipment(Handle owner, Handle hndl, const char[] error, any userid)
{
if(hndl==INVALID_HANDLE)
LogError("Error happened. Error: %s", error);
else
{
int client = GetClientOfUserId(userid);
if (!client || !IsClientInGame(client))
return;
char m_szUniqueId[PLATFORM_MAX_PATH];
char m_szType[16];
int m_iUniqueId;
//int m_iFlags = GetUserFlagBits(client);
while(SQL_FetchRow(hndl))
{
SQL_FetchString(hndl, 1, STRING(m_szType));
SQL_FetchString(hndl, 2, STRING(m_szUniqueId));
m_iUniqueId = Store_GetItemId(m_szType, m_szUniqueId);
if(m_iUniqueId == -1)
continue;
// Client Dont have the item
if(!Store_HasClientItem(client, m_iUniqueId))
{
//PrintToChat(client, "You dont have item/ unequip");
Store_UnequipItem(client, m_iUniqueId);
}
// Client has item but VIP period is expired.
else if(Store_HasClientItem(client, m_iUniqueId) && !GetClientPrivilege(client, g_eItems[m_iUniqueId].iFlagBits))
{
//PrintToChat(client, "You ahve have item but no flag/ Sold.");
if (g_eCvars[g_cvarSellRestricted].aCache)
{
Store_SellItem(client, m_iUniqueId); // Sell the item.
}
else
{
Store_UnequipItem(client, m_iUniqueId); // Just prevent the player from equipping it.
}
}
// Client has item and has access to the item.
else
{
//PrintToChat(client, "You have item/ equip");
Store_UseItem(client, m_iUniqueId, true, SQL_FetchInt(hndl, 3));
}
}
g_eClients[client].bLoaded = true;
}
}
public void SQLCallback_RefreshCredits(Handle owner, Handle hndl, const char[] error, any userid)
{
if(hndl==INVALID_HANDLE)
LogError("Error happened. Error: %s", error);
else
{
int client = GetClientOfUserId(userid);
if(!client)
return;
if(SQL_FetchRow(hndl))
{
g_eClients[client].iCredits = SQL_FetchInt(hndl, 3);
g_eClients[client].iOriginalCredits = SQL_FetchInt(hndl, 3);
}
}
}
public void SQLCallback_InsertClient(Handle owner, Handle hndl, const char[] error, any userid)
{
if(hndl==INVALID_HANDLE)
LogError("Error happened. Error: %s", error);
else
{
int client = GetClientOfUserId(userid);
if(!client)
return;
g_eClients[client].iId_Client = SQL_GetInsertId(hndl);
}
}
public void SQLCallback_ReloadConfig(Handle owner, Handle hndl, const char[] error, any userid)
{
if(hndl==INVALID_HANDLE)
{
SetFailState("Error happened reading the config table. The plugin cannot continue.", error);
}
else
{
char m_szType[64];
char m_szFlag[64];
char m_szInfo[2048];
char m_szKey[64];
char m_szValue[256];
Handle m_hKV;
bool m_bSuccess;
int m_iLength;
int m_iHandler;
int m_iIndex = 0;
while(SQL_FetchRow(hndl))
{
if(g_iItems == STORE_MAX_ITEMS)
return;
if(!SQL_FetchInt(hndl, 7))
continue;
g_eItems[g_iItems].iId = SQL_FetchInt(hndl, 0);
g_eItems[g_iItems].iParent = SQL_FetchInt(hndl, 1);
g_eItems[g_iItems].iPrice = SQL_FetchInt(hndl, 2);
IntToString(g_eItems[g_iItems].iId, g_eItems[g_iItems].szUniqueId, PLATFORM_MAX_PATH);
SQL_FetchString(hndl, 3, STRING(m_szType));
m_iHandler = Store_GetTypeHandler(m_szType);
if(m_iHandler == -1)
continue;
g_eItems[g_iItems].iHandler = m_iHandler;
SQL_FetchString(hndl, 4, STRING(m_szFlag));
g_eItems[g_iItems].iFlagBits = ReadFlagString(m_szFlag);
SQL_FetchString(hndl, 5, g_eItems[g_iItems].szName, ITEM_NAME_LENGTH);
SQL_FetchString(hndl, 6, STRING(m_szInfo));
m_hKV = CreateKeyValues("Additional Info");
m_iLength = strlen(m_szInfo);
while(m_iIndex != m_iLength)
{
m_iIndex += strcopy(m_szKey, StrContains(m_szInfo[m_iIndex], "="), m_szInfo[m_iIndex])+2;
m_iIndex += strcopy(m_szValue, StrContains(m_szInfo[m_iIndex], "\";"), m_szInfo[m_iIndex])+2; // \"
KvJumpToKey(m_hKV, m_szKey, true);
KvSetString(m_hKV, m_szKey, m_szValue);
m_bSuccess = true;
if(g_eTypeHandlers[m_iHandler].fnConfig!=INVALID_FUNCTION)
{
Call_StartFunction(g_eTypeHandlers[m_iHandler].hPlugin, g_eTypeHandlers[m_iHandler].fnConfig);
Call_PushCellRef(m_hKV);
Call_PushCell(g_iItems);
Call_Finish(m_bSuccess);
}
if(m_bSuccess)
++g_iItems;
}
CloseHandle(m_hKV);
}
}
}
public void SQLCallback_ResetPlayer(Handle owner, Handle hndl, const char[] error, any userid)
{
if(hndl==INVALID_HANDLE)
LogError("Error happened. Error: %s", error);
else
{
int client = GetClientOfUserId(userid);
if(SQL_GetRowCount(hndl))
{
SQL_FetchRow(hndl);
int id = SQL_FetchInt(hndl, 0);
char m_szAuthId[32];
SQL_FetchString(hndl, 1, STRING(m_szAuthId));
char m_szQuery[512];
Format(STRING(m_szQuery), "DELETE FROM store_players WHERE id=%d", id);
SQL_TVoid(g_hDatabase, m_szQuery);
Format(STRING(m_szQuery), "DELETE FROM store_items WHERE player_id=%d", id);
SQL_TVoid(g_hDatabase, m_szQuery);
Format(STRING(m_szQuery), "DELETE FROM store_equipment WHERE player_id=%d", id);
SQL_TVoid(g_hDatabase, m_szQuery);
//ChatAll("%t", "Player Resetted", m_szAuthId);
CPrintToChatAll("%s%t", g_sChatPrefix, "Player Resetted", m_szAuthId);
}
else
if(client)
{
//Chat(client, "%t", "Credit No Match");
CPrintToChat(client, "%s%t", g_sChatPrefix, "Credit No Match");
}
}
}
public void SQLCallback_Void_Error(Handle owner, Handle hndl, const char[] error, any data)
{
if (owner == null)
{
StoreLogMessage(0, LOG_ERROR, "SQLCallback_Void_Error: %s", error);
}
}