hello. i want to make a plugin but first i have to be sure that i use sql correct.
I have a piece of code that works without problems. Can someone look over it and tell me what i can improve or if i did something that can cause bugs?
PHP Code:
#include <amxmodx>
#include <sqlx>
#define VERSION "1.0"
#if !defined MAX_IP_LENGTH_WITHOUT_PORT
#define MAX_IP_LENGTH_WITHOUT_PORT 16
#endif
#pragma semicolon 1
///// ENUM
enum _:PDATA
{
NAME[MAX_NAME_LENGTH],
STEAMID[MAX_AUTHID_LENGTH],
IP[MAX_IP_LENGTH_WITHOUT_PORT],
CASH,
DONATE
};
//// SQL
new Handle:g_SqlTuple;
new g_Error[512];
new const g_szTable [] = "bank";
new const g_szSqlData[][] =
{
"",
"",
"",
""
};
//// VARIABLES
new const g_szPluginName[] = "BANK";
new g_PlayerData[MAX_PLAYERS + 1][PDATA];
public plugin_init()
{
register_plugin("Bank System", VERSION, "lexzor");
register_clcmd("points", "add_points");
set_task(0.1, "MySql_Init");
}
public MySql_Init()
{
g_SqlTuple = SQL_MakeDbTuple(g_szSqlData[0], g_szSqlData[1],g_szSqlData[2], g_szSqlData[3]);
new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error));
if(SqlConnection == Empty_Handle)
{
set_fail_state(g_Error);
}
new Handle:Queries;
new szQuery[1024];
formatex(szQuery, charsmax(szQuery), "CREATE TABLE IF NOT EXISTS %s ( `id` INT(11) NOT NULL AUTO_INCREMENT , `steamid` VARCHAR(36) NOT NULL , `points` INT(11) NOT NULL, PRIMARY KEY (`id`))", g_szTable);
Queries = SQL_PrepareQuery(SqlConnection, szQuery);
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error));
set_fail_state(g_Error);
}
SQL_FreeHandle(Queries);
SQL_FreeHandle(SqlConnection);
}
public plugin_end()
{
SQL_FreeHandle(g_SqlTuple);
}
public client_authorized(id)
{
get_user_authid(id, g_PlayerData[id][STEAMID], charsmax(g_PlayerData[][STEAMID]));
get_user_name(id, g_PlayerData[id][NAME], charsmax(g_PlayerData[][NAME]));
}
public client_putinserver(id)
{
new szQuery[512];
new szData[1];
szData[0] = id;
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `steamid` = '%s'", g_szTable, g_PlayerData[id][STEAMID]);
SQL_ThreadQuery(g_SqlTuple, "GetPoints", szQuery, szData, 1);
}
public GetPoints(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
if(FailState || ErrorCode)
{
server_print(" ");
server_print("[%s] SQL ERROR: %s", szError, g_szPluginName);
server_print(" ");
}
new id = szData[0];
if(SQL_NumResults(Query) != 0)
{
g_PlayerData[id][CASH] = SQL_ReadResult(Query, 2);
}
else
{
g_PlayerData[id][CASH] = 0;
}
server_print("[%s] %s has %i points.", g_szPluginName, g_PlayerData[id][STEAMID], g_PlayerData[id][CASH]);
}
public add_points(id)
{
new iArg = read_argv_int(id);
server_print("%i", iArg);
switch(iArg)
{
case 1: g_PlayerData[id][CASH] += 300;
case 2: g_PlayerData[id][CASH] -= 300;
}
new szQuery[512];
new szData[2];
szData[0] = id;
szData[1] = g_PlayerData[id][CASH];
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `steamid` = '%s'", g_szTable, g_PlayerData[id][STEAMID]);
SQL_ThreadQuery(g_SqlTuple, "Points", szQuery, szData, 2);
}
public Points(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
if(FailState || ErrorCode)
{
server_print(" ");
server_print("[%s] SQL ERROR: %s", szError, g_szPluginName);
server_print(" ");
}
new szQuery[512];
new id = szData[0];
new iCash = szData[1];
if(SQL_NumResults(Query) != 0)
{
formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `points` = '%i' WHERE `steamid` = '%s'", g_szTable, iCash, g_PlayerData[id][STEAMID]);
}
else
{
formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` (`steamid`,`points`) VALUES ('%s','%i')", g_szTable, g_PlayerData[id][STEAMID], g_PlayerData[id][CASH]);
}
SQL_ThreadQuery(g_SqlTuple, "FreeHandle", szQuery);
}
public FreeHandle(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
if(FailState || ErrorCode)
{
server_print(" ");
server_print("[%s] SQL ERROR: %s", szError, g_szPluginName);
server_print(" ");
}
SQL_FreeHandle(Query);
}