|
Member
|

10-08-2021
, 10:52
Weird issue when player joins
|
#1
|
Okay, when player joins my server, the function Load_MySql(id); load his data.
When that happen, players who are in the game already can't use /rank command anymore to see their rank.
PHP Code:
public Load_MySql(id)
{
new szSteamId[32];
new szTemp[512];
get_user_authid(id, szSteamId, charsmax(szSteamId));
new Data[1];
Data[0] = id;
format(szTemp, charsmax(szTemp), "SELECT * FROM `amx_ranks` WHERE (`amx_ranks`.`steam_id` = '%s')", szSteamId);
SQL_ThreadQuery(g_SqlTuple, "register_client", szTemp, Data, 1);
}
public register_client(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED)
{
log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error);
}
else if(FailState == TQUERY_QUERY_FAILED)
{
log_amx("Load Query failed. [%d] %s", Errcode, Error);
}
new id;
id = Data[0];
if(SQL_NumResults(Query) < 1)
{
new szSteamId[32];
new szName[33];
get_user_name(id, szName, charsmax(szName));
get_user_authid(id, szSteamId, charsmax(szSteamId));
if (equal(szSteamId,"ID_PENDING"))
return PLUGIN_HANDLED;
new szTemp[512];
format(szTemp,charsmax(szTemp),"INSERT INTO `amx_ranks` (`steam_id`, `name`) VALUES ('%s','%s');", szSteamId, szName);
SQL_ThreadQuery(g_SqlTuple, "activate_client", szTemp, Data);
}
return PLUGIN_HANDLED;
}
public activate_client(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
new id = Data[0];
Save_MySql(id)
return PLUGIN_HANDLED;
}
public Save_MySql(id)
{
if(!is_user_connected(id))
return;
new szSteamId[32];
new szTemp[512];
get_user_authid(id, szSteamId, charsmax(szSteamId));
format(szTemp, charsmax(szTemp), "UPDATE `amx_ranks` SET `kills` = kills + %i, `deaths` = deaths + %i, `headshots` = headshots + %i, `score` = kills - deaths WHERE `amx_ranks`.`steam_id` = '%s';",
g_PlayerData[id][pKills],
g_PlayerData[id][pDeaths],
g_PlayerData[id][pHeadshots],
szSteamId
);
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp);
}
public IgnoreHandle(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}
public cmd_rank(id)
{
new szName[33];
new szQuery[200];
new data[1];
data[0] = id;
get_user_name(id, szName, 32);
formatex(szQuery, charsmax(szQuery), "SELECT name, kills, deaths, FIND_IN_SET( score, ( SELECT GROUP_CONCAT( score ORDER BY kills DESC, deaths DESC ) FROM amx_ranks ) ) AS rank FROM amx_ranks WHERE name = '%s';", szName);
SQL_ThreadQuery(g_SqlTuple, "mysql_rank", szQuery, data);
}
public mysql_rank(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
if(FailState)
{
log_amx("SQL Error: %s (%d)", Error, Errcode);
return PLUGIN_HANDLED;
}
if(SQL_NumResults(Query) >= 1)
{
new iRank = SQL_FieldNameToNum(Query, "rank");
new iKills = SQL_FieldNameToNum(Query, "kills");
new iDeaths = SQL_FieldNameToNum(Query, "deaths");
ColorChat(Data[0], BLUE, "$g%s$t Your rank: $g%d$n |$t Broj kills: $g%d$n |$t Deaths: $g%d ", CHAT_PREFIX, SQL_ReadResult(Query, iRank), SQL_ReadResult(Query, iKills), SQL_ReadResult(Query, iDeaths));
}
else
{
ColorChat(Data[0], GREY, "$g%s$t No players in database.", CHAT_PREFIX);
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
Last edited by GasmoN; 10-08-2021 at 13:54.
Reason: Fixed
|
|