I try to optimize the login system of Zombie Apocalypse because it need many time to load all of things.
But I don't understand any of SQL. Can someone help my?
This is the part of login system in the .sma.
PHP Code:
// SQL table's names
#define TABLE1 "account"
#define TABLE2 "experience"
#define TABLE3 "classes"
#define TABLE4 "statistics"
#define TABLE5 "skills"
#define TABLE6 "quest"
#define TABLE7 "time"
#define TABLE8 "colours"
#define TABLE9 "system"
/*================================================================================
[Account System]
=================================================================================*/
// Logging Account: Logging ID
public logging_id(id)
{
if (g_status[id] != OFFLINE) return;
read_args(user_id[id][0], charsmax(user_id[][]))
remove_quotes(user_id[id][0]);trim(user_id[id][0])
static iData[2]
iData[0] = id
iData[1] = LOG_ID
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^"", TABLE1, user_id[id][0])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
// Logging Account: Logging Password
public logging_password(id)
{
read_args(user_password[id][0], charsmax(user_password[][]))
remove_quotes(user_password[id][0]);trim(user_password[id][0])
static iData[2]
iData[0] = id
iData[1] = LOG_PASSWORD
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^"", TABLE1, (g_status[id] != OFFLINE) ? user_id[id][1] : user_id[id][0])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
// Check if account is currently online
check_online_account(id)
{
// Get logged players count
static iPlayersnum; iPlayersnum = fnGetLogged()
// Not enough players, load directly
if (iPlayersnum < 1)
{
copy(user_id[id][1], charsmax(user_id[][]), user_id[id][0])
copy(user_password[id][1], charsmax(user_password[][]), user_password[id][0])
user_id[id][0] = ""
user_password[id][0] = ""
Load(id, 0)
return;
}
// Check all players ID's
for (new i = 1; i <= g_maxplayers; i++)
{
// Same user ID
if (equal(user_id[i][1], user_id[id][0]) && g_status[i] > OFFLINE)
{
client_print(id, print_center, "[ZA] Error: La cuenta se está utilizando actualmente.")
show_menu_registration(id)
break;
}
else if (i == g_maxplayers) // All players checked
{
copy(user_id[id][1], charsmax(user_id[][]), user_id[id][0])
copy(user_password[id][1], charsmax(user_password[][]), user_password[id][0])
user_id[id][0] = ""
user_password[id][0] = ""
Load(id, 0)
}
}
}
// Register Account: Checking ID
public check_id(id)
{
if (g_status[id] != OFFLINE) return;
read_args(user_id[id][0], charsmax(user_id[][]))
remove_quotes(user_id[id][0]);trim(user_id[id][0])
if (count_characters(user_id[id][0]) < g_minidcharacters)
{
client_print(id, print_center, "[ZA] Error: El ID debe contener al menos %d carácteres", g_minidcharacters)
show_menu_registration(id)
return;
}
if (contain_special_characters(user_id[id][0]))
{
client_print(id, print_center, "[ZA] Error: El ID no debe contener carácteres especiales")
show_menu_registration(id)
return;
}
static iData[2]
iData[0] = id
iData[1] = REG_ID
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^"", TABLE1, user_id[id][0])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
// Register Account / Change Account: Checking Password
public check_password(id)
{
if (g_status[id] != OFFLINE && CONFIRM_MENU != 3) return;
read_args(user_password[id][0], charsmax(user_password[][]))
remove_quotes(user_password[id][0]);trim(user_password[id][0])
if (count_characters(user_password[id][0]) < g_minpasscharacters)
{
client_print(id, print_center, "[ZA] Error: La contraseña debe contener al menos %d carácteres", g_minpasscharacters)
(CONFIRM_MENU == 3) ? show_menu_character_selection(id) : show_menu_registration(id)
return;
}
if (contain_special_characters(user_password[id][0]))
{
client_print(id, print_center, "[ZA] Error: La contraseña no debe contener carácteres especiales")
(CONFIRM_MENU == 3) ? show_menu_character_selection(id) : show_menu_registration(id)
return;
}
if (equal(user_password[id][0], user_id[id][0]) && CONFIRM_MENU != 3 || equal(user_password[id][0], user_id[id][1]) && CONFIRM_MENU == 3)
{
client_print(id, print_center, "[ZA] Error: La contraseña no puede ser similar al ID")
(CONFIRM_MENU == 3) ? show_menu_character_selection(id) : show_menu_registration(id)
return;
}
if (equal(user_password[id][0], user_password[id][1]) && CONFIRM_MENU == 3)
{
client_print(id, print_center, "[ZA] Error: La contraseña es la misma que la actual")
show_menu_character_selection(id)
return;
}
show_menu_confirm(id)
}
Save(id)
{
// Not character selected don't save
if (g_status[id] < ONLINE_SPEC) return;
static szDate[11]
get_time("%Y/%m/%d", szDate, charsmax(szDate))
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Last Loggin`='%s' WHERE `User ID`=^"%s^"", TABLE1, szDate, user_id[id][1])
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Level`='%d', `Experience`='%d', `Ammopacks`='%d', `Used Ammopacks`='%d', `Range`='%d', `Fame`='%d', `Human Points`='%d', `Zombie Points`='%d', `Used Human Points`='%d', `Used Zombie Points`='%d' WHERE `User ID`=^"%s^" AND `Character`=^"%s^"",
TABLE2, g_level[id], g_experience[id], g_ammopacks[id][0], g_ammopacks[id][1], g_rangelevel[id], g_fame[id], g_points[id][0], g_points[id][1], g_usedpoints[id][0], g_usedpoints[id][1], user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Human Class`='%d', `Next Human Class`='%d', `Zombie Class`='%d', `Next Zombie Class`='%d' WHERE `User ID`=^"%s^" AND `Character`=^"%s^"",
TABLE3, g_humanclass[id], g_humanclassnext[id], g_zombieclass[id], g_zombieclassnext[id], user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Infected Human`='%d', `Received Infect`='%d', `Human Killed`='%d', `Zombie Killed`='%d', `Survivor Killed`='%d', `Wesker Killed`='%d', `Nemesis Killed`='%d', `Alien Killed`='%d', `Human Dead`='%d', `Zombie Dead`='%d', `Survivor Dead`='%d', `Wesker Dead`='%d', `Nemesis Dead`='%d', `Alien Dead`='%d' WHERE `User ID`=^"%s^" AND `Character`=^"%s^"",
TABLE4, g_infected[id][0], g_infected[id][1], g_killed[id][0][0], g_killed[id][0][1], g_killed[id][0][2], g_killed[id][0][3], g_killed[id][0][4], g_killed[id][0][5], g_killed[id][1][0], g_killed[id][1][1], g_killed[id][1][2], g_killed[id][1][3], g_killed[id][1][4], g_killed[id][1][5], user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Human Damage`='%d', `Zombie Damage`='%d', `Survivor Damage`='%d', `Wesker Damage`='%d', `Nemesis Damage`='%d', `Alien Damage`='%d', `Human RDamage`='%d', `Zombie RDamage`='%d', `Survivor RDamage`='%d', `Wesker RDamage`='%d', `Nemesis RDamage`='%d', `Alien RDamage`='%d' WHERE `User ID`=^"%s^" AND `Character`=^"%s^"",
TABLE4, g_damage[id][0][0], g_damage[id][0][1], g_damage[id][0][2], g_damage[id][0][3], g_damage[id][0][4], g_damage[id][0][5], g_damage[id][1][0], g_damage[id][1][1], g_damage[id][1][2], g_damage[id][1][3], g_damage[id][1][4], g_damage[id][1][5], user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `HAttack Skill`='%d', `HHealth Skill`='%d', `HSpeed Skill`='%d', `HGravity Skill`='%d', `HArmor Skill`='%d', `ZAttack Skill`='%d', `ZHealth Skill`='%d', `ZSpeed Skill`='%d', `ZGravity Skill`='%d', `ZDefense Skill`='%d' WHERE `User ID`=^"%s^" AND `Character`=^"%s^"",
TABLE5, g_skill_points[id][0][0], g_skill_points[id][0][1], g_skill_points[id][0][2], g_skill_points[id][0][3], g_skill_points[id][0][4], g_skill_points[id][1][0], g_skill_points[id][1][1], g_skill_points[id][1][2], g_skill_points[id][1][3], g_skill_points[id][1][4], user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Selected Quest`='%d', `Completed Quest`='%d', `Quest Rounds`='%d', `Quest Killed Human`='%d', `Quest Killed Zombie`='%d', `Quest Killed Survivor`='%d', `Quest Killed Wesker`='%d', `Quest Killed Nemesis`='%d', `Quest Killed Alien`='%d' WHERE `User ID`=^"%s^" AND `Character`=^"%s^"",
TABLE6, g_quest[id], g_questcompleted[id], g_questrounds[id], g_questkill[id][0], g_questkill[id][1], g_questkill[id][2], g_questkill[id][3], g_questkill[id][4], g_questkill[id][5], user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Rounds Played`='%d', `Hours Played`='%d', `Minutes Played`='%d', `Seconds Played`='%d' WHERE `User ID`=^"%s^" AND `Character`=^"%s^"",
TABLE7, g_playedtime[id][0], g_playedtime[id][1], g_playedtime[id][2], g_playedtime[id][3], user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Hud Stat T`='%d', `Hud Stat X`='%f', `Hud Stat Y`='%f', `Hud RGB`='%d %d %d', `NVG RGB`='%d %d %d', `Flashlight RGB`='%d %d %d' WHERE `User ID`=^"%s^" AND `Character`=^"%s^"",
TABLE8, g_hud_stats_t[id], g_hud_stats_x[id], g_hud_stats_y[id], g_hudred[id], g_hudgreen[id], g_hudblue[id], g_nvgred[id], g_nvggreen[id], g_nvgblue[id], g_flashred[id], g_flashgreen[id], g_flashblue[id], user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
}
Load(id, yourdata)
{
static iData[2]
iData[0] = id
switch (yourdata)
{
case 0:
{
iData[1] = LOAD_DATA1
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^"", TABLE1, user_id[id][1])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
case 1:
{
iData[1] = LOAD_DATA2
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^" AND `Character`=^"%s^"", TABLE2, user_id[id][1], g_charactername[id][SELECTED_CHARACTER])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
case 2:
{
iData[1] = LOAD_DATA3
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^" AND `Character`=^"%s^"", TABLE3, user_id[id][1], g_charactername[id][SELECTED_CHARACTER])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
case 3:
{
iData[1] = LOAD_DATA4
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^" AND `Character`=^"%s^"", TABLE4, user_id[id][1], g_charactername[id][SELECTED_CHARACTER])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
case 4:
{
iData[1] = LOAD_DATA5
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^" AND `Character`=^"%s^"", TABLE5, user_id[id][1], g_charactername[id][SELECTED_CHARACTER])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
case 5:
{
iData[1] = LOAD_DATA6
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^" AND `Character`=^"%s^"", TABLE6, user_id[id][1], g_charactername[id][SELECTED_CHARACTER])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
case 6:
{
iData[1] = LOAD_DATA7
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^" AND `Character`=^"%s^"", TABLE7, user_id[id][1], g_charactername[id][SELECTED_CHARACTER])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
case 7:
{
iData[1] = LOAD_DATA8
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `User ID`=^"%s^" AND `Character`=^"%s^"", TABLE8, user_id[id][1], g_charactername[id][SELECTED_CHARACTER])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
}
}
// Create New Account
create_account(id)
{
new iData[2], szBuffer[34], szDate[11]
iData[0] = id
iData[1] = REG_PASSWORD
md5(user_password[id][0], szBuffer)
get_time("%Y/%m/%d", szDate, charsmax(szDate))
formatex(g_query, charsmax(g_query), "INSERT INTO `%s` (`User ID`, `Password`, `Register Date`) VALUES (^"%s^", ^"%s^", '%s')", TABLE1, user_id[id][0], szBuffer, szDate)
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
// Create Character: Check Character
check_character(id)
{
if (equal(g_playername[id], "None"))
{
client_print(id, print_center, "[ZA] Error: Este nombre no puede ser usado. Por favor, cámbiese el nombre")
show_menu_character_selection(id)
return;
}
new iData[2]
iData[0] = id
iData[1] = CHECK_CHARACTER
formatex(g_query, charsmax(g_query), "SELECT * FROM `%s` WHERE `Character`=^"%s^"", TABLE2, g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
// Create Character
create_character(id)
{
new iData[2]
iData[0] = id
iData[1] = REG_CHARACTER
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Character %d`=^"%s^" WHERE `User ID`=^"%s^"", TABLE1, SELECTED_CHARACTER+1, g_playername[id], user_id[id][1])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
formatex(g_query, charsmax(g_query), "INSERT INTO `%s` (`User ID`, `Character`) VALUES (^"%s^", ^"%s^")", TABLE2, user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
formatex(g_query, charsmax(g_query), "INSERT INTO `%s` (`User ID`, `Character`) VALUES (^"%s^", ^"%s^")", TABLE3, user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
formatex(g_query, charsmax(g_query), "INSERT INTO `%s` (`User ID`, `Character`) VALUES (^"%s^", ^"%s^")", TABLE4, user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
formatex(g_query, charsmax(g_query), "INSERT INTO `%s` (`User ID`, `Character`) VALUES (^"%s^", ^"%s^")", TABLE5, user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
formatex(g_query, charsmax(g_query), "INSERT INTO `%s` (`User ID`, `Character`) VALUES (^"%s^", ^"%s^")", TABLE6, user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
formatex(g_query, charsmax(g_query), "INSERT INTO `%s` (`User ID`, `Character`) VALUES (^"%s^", ^"%s^")", TABLE7, user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
formatex(g_query, charsmax(g_query), "INSERT INTO `%s` (`User ID`, `Character`) VALUES (^"%s^", ^"%s^")", TABLE8, user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
// Change Password
change_password(id)
{
new iData[2], szBuffer[34]
iData[0] = id
iData[1] = CHANGE_PASSWORD
md5(user_password[id][0], szBuffer)
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Password`=^"%s^" WHERE `User ID`=^"%s^"", TABLE1, szBuffer, user_id[id][1])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
// Show player rank
show_rank(id)
{
static iData[2]
iData[0] = id
iData[1] = SHOW_RANK
formatex(g_query, charsmax(g_query), "SELECT (COUNT(*) + 1) FROM `%s` WHERE `Fame` > '%d' OR (`Fame` = '%d' AND `Experience` > '%d')", TABLE2, g_fame[id], g_fame[id], g_experience[id])
SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_query, iData, 2)
}
// Load top 15 motd
load_top15()
{
new ErrorCode, Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, g_Error, charsmax(g_Error))
if (SqlConnection != Empty_Handle)
{
new Handle:query = SQL_PrepareQuery(SqlConnection, "SELECT `Character`, `Level`, `Experience`, `Ammopacks`, `Fame`, `Human Points`, `Zombie Points` FROM `%s` ORDER BY `Fame` DESC, `Level` DESC, `Experience` DESC LIMIT 15", TABLE2)
SQL_Execute(query)
if (SQL_NumResults(query))
{
g_top15_clear = false
static len; len = 0
len += formatex(g_motd[len], charsmax(g_motd), "<body bgcolor=#000000><font color=#FFB000><pre><center><h2>---- Zombie Apocalypse Top 15 ----</h2></center>^n^n")
len += formatex(g_motd[len], charsmax(g_motd), "<b><u>%5s %29s %7s %2s %9s %7s %5s %5s</u></b>^n", "Rank", "Nombre", "Prestigio", "Nivel", "Experiencia", "Ammopacks", "H. Puntos", "Z. Puntos")
new iPosition, szName[32], iLevel, iExp, iAp, iFame, iHP, iZP
while (SQL_MoreResults(query))
{
++iPosition
SQL_ReadResult(query, 0, szName, charsmax(szName))
iLevel = SQL_ReadResult(query, 1)
iExp = SQL_ReadResult(query, 2)
iAp = SQL_ReadResult(query, 3)
iFame = SQL_ReadResult(query, 4)
iHP = SQL_ReadResult(query, 5)
iZP = SQL_ReadResult(query, 6)
len += formatex(g_motd[len], charsmax(g_motd), "%4d %29s %4d %8d %11d %9d %9d %9d^n", iPosition, szName, iFame, iLevel, iExp, iAp, iHP, iZP)
SQL_NextRow(query)
}
}
else
g_top15_clear = true
SQL_FreeHandle(query)
}
}
save_account_count()
{
formatex(g_query, charsmax(g_query), "UPDATE `%s` SET `Created accounts`='%d', `Created characters`='%d'", TABLE9, g_createdaccounts, g_createdcharacters)
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query)
}
public IgnoreHandle(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
SQL_FreeHandle(Query)
return PLUGIN_HANDLED;
}
public QueryHandle(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:time)
{
static id; id = Data[0]
// Connected?
if (!is_user_connected(id)) return PLUGIN_HANDLED;
switch (FailState)
{
case TQUERY_CONNECT_FAILED: log_to_file("SQL_LOG_TQ.txt", "Failed to connect to database [%i]: %s", Errcode, Error)
case TQUERY_QUERY_FAILED: log_to_file("SQL_LOG_TQ.txt", "Error in MySQL query [%i]: %s", Errcode, Error)
}
switch (Data[1])
{
case SHOW_RANK:
{
if (SQL_NumResults(Query))
zp_colored_print(id, "^x04[ZA]^x01 Tu ranking es ^x04%s^x01 de ^x04%s^x01.", add_point(SQL_ReadResult(Query, 0)), add_point(g_createdcharacters))
}
case REG_ID:
{
if (!SQL_NumResults(Query))
{
client_cmd(id, "messagemode ^"register_password^"")
set_hudmessage(0, 255, 255, 0.03, 0.05, 0, 0.1, 4.0, 0.01, 0.01, -1)
ShowSyncHudMsg(id, g_MsgSync5, "Ingresa una Contraseña^nPulse ESC para salir")
}
else
{
client_print(id, print_center, "[ZA] Error: El ID ingresado se encuentra en uso")
show_menu_registration(id)
}
}
case REG_PASSWORD:
{
g_createdaccounts++
save_account_count()
user_id[id][0] = ""
client_print(id, print_center, "[ZA] Registro finalizado con éxito")
show_menu_registration(id)
}
case LOG_ID:
{
if (SQL_NumResults(Query))
{
client_cmd(id, "messagemode ^"your_password^"")
set_hudmessage(0, 255, 255, 0.03, 0.05, 0, 0.1, 4.0, 0.01, 0.01, -1)
ShowSyncHudMsg(id, g_MsgSync5, "Ingresa tu Contraseña^nPulse ESC para salir")
}
else
{
g_attempts[id]--
client_print(id, print_center, "[ZA] Error: El ID ingresado no existe. Intentos restantes: %d", g_attempts[id])
show_menu_registration(id)
}
}
case LOG_PASSWORD:
{
if (SQL_NumResults(Query))
{
static szPass[35], szBuffer[34]
SQL_ReadResult(Query, 1, szPass, charsmax(szPass))
md5(user_password[id][0], szBuffer)
if (equal(szBuffer, szPass))
{
if (g_status[id] != OFFLINE)
{
CONFIRM_MENU = 3
client_cmd(id, "messagemode ^"register_new_password^"")
set_hudmessage(0, 255, 255, 0.03, 0.05, 0, 0.1, 4.0, 0.01, 0.01, -1)
ShowSyncHudMsg(id, g_MsgSync5, "Ingresa una Contraseña nueva^nPulse ESC para salir")
}
else
check_online_account(id)
}
else
{
if (g_status[id] != OFFLINE)
{
user_password[id][0] = ""
client_print(id, print_center, "[ZA] Error: La contraseña ingresada es incorrecta.")
show_menu_character_selection(id)
}
else
{
g_attempts[id]--
client_print(id, print_center, "[ZA] Error: La contraseña ingresada es incorrecta. Intentos restantes: %d", g_attempts[id])
show_menu_registration(id)
}
}
}
}
case CHECK_CHARACTER:
{
if (!SQL_NumResults(Query))
{
CONFIRM_MENU = 1
show_menu_confirm(id)
}
else
{
client_print(id, print_center, "[ZA] El nombre se encuentra en uso. Por favor, cámbiese el nombre")
show_menu_character_selection(id)
}
}
case REG_CHARACTER:
{
static loading; loading++
switch (loading)
{
case 1:
{
loading = 0
g_createdcharacters++
save_account_count()
copy(g_charactername[id][SELECTED_CHARACTER], charsmax(g_charactername[][]), g_playername[id])
client_print(id, print_center, "[ZA] Personaje creado con éxito")
show_menu_character_selection(id)
}
}
}
case LOAD_DATA1:
{
if (SQL_NumResults(Query))
{
SQL_ReadResult(Query, 2, g_register_date[id], charsmax(g_register_date[]))
SQL_ReadResult(Query, 3, g_last_loggin[id], charsmax(g_last_loggin[]))
SQL_ReadResult(Query, 4, g_charactername[id][0], charsmax(g_charactername[][]))
SQL_ReadResult(Query, 5, g_charactername[id][1], charsmax(g_charactername[][]))
SQL_ReadResult(Query, 6, g_charactername[id][2], charsmax(g_charactername[][]))
SQL_ReadResult(Query, 7, g_charactername[id][3], charsmax(g_charactername[][]))
SQL_ReadResult(Query, 8, g_charactername[id][4], charsmax(g_charactername[][]))
}
g_status[id] = CHARACTER_MENU
show_menu_character_selection(id)
}
case LOAD_DATA2:
{
if (SQL_NumResults(Query))
{
g_level[id] = SQL_ReadResult(Query, 2)
g_experience[id] = SQL_ReadResult(Query, 3)
g_ammopacks[id][0] = SQL_ReadResult(Query, 4)
g_ammopacks[id][1] = SQL_ReadResult(Query, 5)
g_rangelevel[id] = SQL_ReadResult(Query, 6)
g_fame[id] = SQL_ReadResult(Query, 7)
g_points[id][0] = SQL_ReadResult(Query, 8)
g_points[id][1] = SQL_ReadResult(Query, 9)
g_usedpoints[id][0] = SQL_ReadResult(Query, 10)
g_usedpoints[id][1] = SQL_ReadResult(Query, 11)
client_print(id, print_center, "[ZA] Cargando... 10%")
}
Load(id, 2)
}
case LOAD_DATA3:
{
if (SQL_NumResults(Query))
{
g_humanclass[id] = SQL_ReadResult(Query, 2)
g_humanclassnext[id] = SQL_ReadResult(Query, 3)
g_zombieclass[id] = SQL_ReadResult(Query, 4)
g_zombieclassnext[id] = SQL_ReadResult(Query, 5)
client_print(id, print_center, "[ZA] Cargando... 20%")
}
Load(id, 3)
}
case LOAD_DATA4:
{
if (SQL_NumResults(Query))
{
g_infected[id][0] = SQL_ReadResult(Query, 2)
g_infected[id][1] = SQL_ReadResult(Query, 3)
g_killed[id][0][0] = SQL_ReadResult(Query, 4)
g_killed[id][0][1] = SQL_ReadResult(Query, 5)
g_killed[id][0][2] = SQL_ReadResult(Query, 6)
g_killed[id][0][3] = SQL_ReadResult(Query, 7)
g_killed[id][0][4] = SQL_ReadResult(Query, 8)
g_killed[id][0][5] = SQL_ReadResult(Query, 9)
g_killed[id][1][0] = SQL_ReadResult(Query, 10)
g_killed[id][1][1] = SQL_ReadResult(Query, 11)
g_killed[id][1][2] = SQL_ReadResult(Query, 12)
g_killed[id][1][3] = SQL_ReadResult(Query, 13)
g_killed[id][1][4] = SQL_ReadResult(Query, 14)
g_killed[id][1][5] = SQL_ReadResult(Query, 15)
g_damage[id][0][0] = SQL_ReadResult(Query, 16)
g_damage[id][0][1] = SQL_ReadResult(Query, 17)
g_damage[id][0][2] = SQL_ReadResult(Query, 18)
g_damage[id][0][3] = SQL_ReadResult(Query, 19)
g_damage[id][0][4] = SQL_ReadResult(Query, 20)
g_damage[id][0][5] = SQL_ReadResult(Query, 21)
g_damage[id][1][0] = SQL_ReadResult(Query, 22)
g_damage[id][1][1] = SQL_ReadResult(Query, 23)
g_damage[id][1][2] = SQL_ReadResult(Query, 24)
g_damage[id][1][3] = SQL_ReadResult(Query, 25)
g_damage[id][1][4] = SQL_ReadResult(Query, 26)
g_damage[id][1][5] = SQL_ReadResult(Query, 27)
client_print(id, print_center, "[ZA] Cargando... 50%")
}
Load(id, 4)
}
case LOAD_DATA5:
{
if (SQL_NumResults(Query))
{
g_skill_points[id][0][0] = SQL_ReadResult(Query, 2)
g_skill_points[id][0][1] = SQL_ReadResult(Query, 3)
g_skill_points[id][0][2] = SQL_ReadResult(Query, 4)
g_skill_points[id][0][3] = SQL_ReadResult(Query, 5)
g_skill_points[id][0][4] = SQL_ReadResult(Query, 6)
g_skill_points[id][1][0] = SQL_ReadResult(Query, 7)
g_skill_points[id][1][1] = SQL_ReadResult(Query, 8)
g_skill_points[id][1][2] = SQL_ReadResult(Query, 9)
g_skill_points[id][1][3] = SQL_ReadResult(Query, 10)
g_skill_points[id][1][4] = SQL_ReadResult(Query, 11)
client_print(id, print_center, "[ZA] Cargando... 60%")
}
Load(id, 5)
}
case LOAD_DATA6:
{
if (SQL_NumResults(Query))
{
g_quest[id] = SQL_ReadResult(Query, 2)
g_questcompleted[id] = SQL_ReadResult(Query, 3)
g_questrounds[id] = SQL_ReadResult(Query, 4)
g_questkill[id][0] = SQL_ReadResult(Query, 5)
g_questkill[id][1] = SQL_ReadResult(Query, 6)
g_questkill[id][2] = SQL_ReadResult(Query, 7)
g_questkill[id][3] = SQL_ReadResult(Query, 8)
g_questkill[id][4] = SQL_ReadResult(Query, 9)
g_questkill[id][5] = SQL_ReadResult(Query, 10)
client_print(id, print_center, "[ZA] Cargando... 70%")
}
Load(id, 6)
}
case LOAD_DATA7:
{
if (SQL_NumResults(Query))
{
g_playedtime[id][0] = SQL_ReadResult(Query, 2)
g_playedtime[id][1] = SQL_ReadResult(Query, 3)
g_playedtime[id][2] = SQL_ReadResult(Query, 4)
g_playedtime[id][3] = SQL_ReadResult(Query, 5)
client_print(id, print_center, "[ZA] Cargando... 75%")
}
Load(id, 7)
}
case LOAD_DATA8:
{
if (SQL_NumResults(Query))
{
static datacolor[16], szRed[4], szGreen[4], szBlue[4]
g_hud_stats_t[id] = SQL_ReadResult(Query, 2)
SQL_ReadResult(Query, 3, Float:g_hud_stats_x[id])
SQL_ReadResult(Query, 4, Float:g_hud_stats_y[id])
SQL_ReadResult(Query, 5, datacolor, charsmax(datacolor))
parse(datacolor, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue))
g_hudred[id] = str_to_num(szRed)
g_hudgreen[id] = str_to_num(szGreen)
g_hudblue[id] = str_to_num(szBlue)
SQL_ReadResult(Query, 6, datacolor, charsmax(datacolor))
parse(datacolor, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue))
g_nvgred[id] = str_to_num(szRed)
g_nvggreen[id] = str_to_num(szGreen)
g_nvgblue[id] = str_to_num(szBlue)
SQL_ReadResult(Query, 7, datacolor, charsmax(datacolor))
parse(datacolor, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue))
g_flashred[id] = str_to_num(szRed)
g_flashgreen[id] = str_to_num(szGreen)
g_flashblue[id] = str_to_num(szBlue)
client_print(id, print_center, "[ZA] Cargando... 100%")
}
show_menu_character(id)
}
case CHANGE_PASSWORD:
{
copy(user_password[id][1], charsmax(user_password[][]), user_password[id][0])
user_password[id][0] = ""
client_print(id, print_center, "[ZA] Contraseña cambiada con éxito")
}
}
return PLUGIN_CONTINUE;
}
loggin_success(id, spec = 0)
{
// Set character name
set_user_info(id, "name", g_charactername[id][SELECTED_CHARACTER])
// Welcome message
zp_colored_print(0, "^x04[ZA]^x01 Bienvenido! ^x04%s^x01 ha iniciado sesión.", g_charactername[id][SELECTED_CHARACTER])
// Update level
update_level(id)
// Set time check task
set_task(1.0, "check_time", id+TASK_TIME, _, _, "b")
// Set the custom HUD display task if enabled
if (get_pcvar_num(cvar_huddisplay))
set_task(1.0, "ShowHUD", id+TASK_SHOWHUD, _, _, "b")
// Go to spectator?
if (spec)
{
// Make a task because name has to be changed, after set account it's logged
set_task(0.5, "join_team_spec", id)
}
else
{
// Make a task because name has to be changed, after set account it's logged
set_task(0.5, "join_team_t_ct", id)
}
// Make a task because admin has to be checked, after name changed
set_task(0.5, "loggin_success2", id)
}
public join_team_spec(id)
{
// Not connected
if (!g_isconnected[id]) return;
// Currently logged spectator
g_status[id] = ONLINE_SPEC
// Join SPEC team
engclient_cmd(id, "jointeam", "6")
}
public join_team_t_ct(id)
{
// Not connected
if (!g_isconnected[id]) return;
// Currently logged
g_status[id] = ONLINE
// Join T or CT team
if (fnGetTs() >= fnGetCTs())
engclient_cmd(id, "jointeam", "2")
else
engclient_cmd(id, "jointeam", "1")
// Prevent player bugged if he was logged as spectator and
// went to character menu again
if (fm_cs_get_user_team(id) == FM_CS_TEAM_SPECTATOR)
{
remove_task(id+TASK_TEAM)
fm_cs_set_user_team(id, FM_CS_TEAM_CT) // must be CT (he isn't a zombie)
fm_user_team_update(id)
}
}
public loggin_success2(id)
{
// Not connected
if (!g_isconnected[id]) return;
// Prevent admin log out, loggin and get full modes again
if (equal(g_playername[id], g_logoutname[id])) return;
// Get user flags
static userflags; userflags = get_user_flags(id)
// Admin modes per map
for (new i = ArraySize(g_admin_names)-1; i > -1; i--)
{
if (userflags & ArrayGetCell(g_admin_flags, i))
{
g_modescount[id] = ArrayGetCell(g_admin_modes, i)
break;
}
else if (i == 0) // All flags checked, not admin
g_modescount[id] = 0
}
}
// Log Out from Account
log_out(id, charactermenu)
{
// Player alive?
if (g_isalive[id])
{
// Prevent players from killing themselves?
if (get_pcvar_num(cvar_blocksuicide))
{
zp_colored_print(id, "^x04[ZA]^x01 No puedes salir estando vivo.")
return;
}
// Check that we still have both humans and zombies to keep the round going
check_round(id)
// Kill him before he switches team
dllfunc(DLLFunc_ClientKill, id)
}
// Remove previous tasks
remove_task(id+TASK_SPAWN)
remove_task(id+TASK_SHOWHUD)
remove_task(id+TASK_TIME)
remove_task(id+TASK_COMBO)
// Save progress
Save(id)
// Move him to unassigned team
if (fm_cs_get_user_team(id) != FM_CS_TEAM_SPECTATOR)
{
remove_task(id+TASK_TEAM)
fm_cs_set_user_team(id, FM_CS_TEAM_UNASSIGNED)
fm_user_team_update(id)
}
// Initialize player vars
reset_vars(id, 1, 0)
// Prevent admin log out, loggin and get full modes again
copy(g_logoutname[id], charsmax(g_logoutname[]), g_playername[id])
// Go to character menu?
if (!charactermenu)
{
// Show print
client_print(id, print_center, "[ZA] Sesión cerrada con éxito.")
// Reset character names
for (new i = 0; i < 5; i++) g_charactername[id][i] = "None"
// Show register menu
g_attempts[id] = g_attemptslogging
user_id[id][0] = ""
user_id[id][1] = ""
user_password[id][0] = ""
user_password[id][1] = ""
g_status[id] = OFFLINE
show_menu_registration(id)
}
else
{
// Show character menu
g_status[id] = CHARACTER_MENU
show_menu_character_selection(id)
}
}
I hope someone help me. Thanks