| mashinata619 |
11-13-2014 17:45 |
[HELP][ZP] Login system optimization
HI guys,
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.
I think that the problem come of the switch in the Load function.
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 :D
|