Shadows In Rain писал(а): Юля-Юлечка, на технических форумах любая проблема решается оченнь легко. Нужно просто показать сиськи. С пруфами.
Модераторы: Subb98, liFe iS GoOD
DeMNiX писал(а):разницы нет что так пишешь, что так
L 01/30/2018 - 09:00:54: Start of error session.
L 01/30/2018 - 09:00:54: Info (map "zm_zod_hideout") (file "addons/amxmodx/logs/error_20180130.log")
L 01/30/2018 - 09:00:54: [AMXX] Displaying debug trace (plugin "zp_bank_sql_new.amxx", version "0.2")
L 01/30/2018 - 09:00:54: [AMXX] Run time error 3: stack error
L 01/30/2018 - 09:00:54: [AMXX] [0] zp_bank_sql_new.sma::displayMainMenu (line 626)
L 01/30/2018 - 09:00:54: [AMXX] [1] zp_bank_sql_new.sma::TextMenu (line 890)
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <sqlx>
#include <zombieplague>
#include <colorchat>
#include <cstrike>
#define MAX_PLAYERS 32
#define AJC_ADMIN_FLAG ADMIN_IMMUNITY
#define TASK_AJC 6000
#define AJC_TASK_TIME 0.1
new const JOIN_TEAM_MENU_FIRST[] = "#Team_Select";
new const JOIN_TEAM_MENU_FIRST_SPEC[] = "#Team_Select_Spect";
new const JOIN_TEAM_MENU_INGAME[] = "#IG_Team_Select";
new const JOIN_TEAM_MENU_INGAME_SPEC[] = "#IG_Team_Select_Spect";
new const JOIN_TEAM_VGUI_MENU = 2;
new PLUGIN_PREFIX[] = "[ZP]";
new g_hunterlevel[MAX_PLAYERS+1], g_killcount[MAX_PLAYERS+1], g_zmhunterlevel[MAX_PLAYERS+1], g_zmkillcount[MAX_PLAYERS+1], g_zmkiller[MAX_PLAYERS+1], g_zmkillercount[MAX_PLAYERS+1], g_nemelevel[MAX_PLAYERS+1];
new cvar_hunter_multi, cvar_hunter_maxlvl, cvar_zombiehunter_multi, cvar_zombiehunter_maxlvl, cvar_terminator_multi, cvar_terminator_maxlvl, cvar_zmkiller_multi, cvar_zmkiller_maxlvl;
new cvar_achvs, g_cvar_enable, g_cvar_save_type, g_cvar_save_days, g_cvar_block_name_change, cvar_allow_change_name, cvar_allow_change_password, g_cvar_startedammo, cvar_pass_length;
new g_BankSql[MAX_PLAYERS+1], bool:g_BankSqlOpened[MAX_PLAYERS+1];
new Handle:g_Sql = Empty_Handle, Handle:g_StdTupleBank = Empty_Handle;
new g_SqlTable[32], g_configsDir[128], g_szAuth[MAX_PLAYERS+1][32];
new bool:g_registred[MAX_PLAYERS+1], bool:g_loggin[MAX_PLAYERS+1], g_password[MAX_PLAYERS+1][64], bool:g_status[MAX_PLAYERS+1];
new cvar_invited, g_invited[33];
new g_ajc_team, g_ajc_admin, g_ajc_class[2], g_ajc_change;
new params[2]
public plugin_init()
{
register_plugin("[ZP]Bank & Register", "0.2", "Epmak & 3BEPb");
register_dictionary("zp_bank_sql_new.txt");
register_clcmd("say /register", "displayMainMenu");
register_clcmd("say /reg", "displayMainMenu");
register_clcmd("say /login", "displayMainMenu");
register_clcmd("say zpmenu", "clcmd_changeteam");
register_clcmd("say /zpmenu", "clcmd_changeteam");
register_clcmd("chooseteam", "clcmd_changeteam");
register_clcmd("jointeam", "clcmd_changeteam");
g_cvar_enable = register_cvar("zp_bank_sql", "1");
cvar_achvs = register_cvar("zp_bank_achvs", "1");
g_cvar_save_type = register_cvar("zp_bank_sql_save_type", "2");
g_cvar_save_days = register_cvar("zp_bank_sql_save_days", "16");
g_cvar_block_name_change = register_cvar("zp_bank_sql_block_name_change", "1");
cvar_hunter_multi = register_cvar("zp_achvs_hunter_aprevard", "10");
cvar_hunter_maxlvl = register_cvar("zp_achvs_hunter_maxlvl", "120");
cvar_zombiehunter_multi = register_cvar("zp_achvs_zmhunter_aprevard", "10");
cvar_zombiehunter_maxlvl = register_cvar("zp_achvs_zmhunter_maxlvl", "4");
cvar_terminator_multi = register_cvar("zp_achvs_terminator_aprevard", "10");
cvar_terminator_maxlvl = register_cvar("zp_achvs_terminator_maxlvl", "1");
cvar_zmkiller_multi = register_cvar("zp_achvs_zmkiller_aprevard", "10");
cvar_zmkiller_maxlvl = register_cvar("zp_achvs_zmkiller_maxlvl", "3");
cvar_invited = register_cvar("zp_reg_invited", "1");
cvar_allow_change_name = register_cvar("zp_bank_register_allow_change_name","0");
cvar_allow_change_password = register_cvar("zp_bank_register_allow_change_password","1");
cvar_pass_length = register_cvar("zp_password_len", "6")
g_ajc_team = register_cvar("zp_ajc_team", "5")
g_ajc_class[0] = register_cvar("zp_ajc_class_t", "5")
g_ajc_class[1] = register_cvar("zp_ajc_class_ct", "5")
g_ajc_admin = register_cvar("zp_ajc_admin", "1")
g_ajc_change = register_cvar("zp_ajc_change", "0")
register_clcmd("EnterPassword", "cmd_enterpassword");
register_clcmd("EnterNewPassword", "cmd_enternewpassword");
register_clcmd("EnterNewChangePassword", "cmd_enterchangepassword");
register_menucmd(register_menuid("BankMainMenu"), 1023, "actionMainMenu");
register_menucmd(register_menuid("ChangeMenu"), 1023, "actionChangeMenu");
register_message(get_user_msgid("ShowMenu"), "TextMenu")
register_message(get_user_msgid("VGUIMenu"), "VGUIMenu")
register_forward(FM_ClientUserInfoChanged, "fwClientUserInfoChanged");
register_event("DeathMsg", "DeathMsg", "a");
register_srvcmd("zp_bank_connect", "DataBase_Connect");
register_cvar("zp_bank_sql_host", "127.0.0.1");
register_cvar("zp_bank_sql_user", "root");
register_cvar("zp_bank_sql_pass", "");
register_cvar("zp_bank_sql_db", "amxx");
register_cvar("zp_bank_sql_type", "mysql");
register_cvar("zp_bank_sql_table", "zp_bank");
get_configsdir(g_configsDir, 127);
server_cmd("exec %s/zp_bank_sql_new.cfg", g_configsDir);
server_cmd("zp_bank_connect");
}
public plugin_cfg()
{
g_cvar_startedammo = get_cvar_pointer("zp_starting_ammo_packs");
}
public plugin_end()
{
if(g_Sql != Empty_Handle) SQL_FreeHandle(g_Sql);
if(g_StdTupleBank != Empty_Handle) SQL_FreeHandle(g_StdTupleBank);
}
public plugin_natives()
{
register_library("register_system")
register_native("is_registered", "is_registred")
}
public client_authorized(id)
{
if(!get_pcvar_num(g_cvar_enable) || g_Sql == Empty_Handle) return;
get_user_info(id,"_bpw",g_password[id],63);
g_loggin[id] = false;
g_registred[id] = false;
GetAuthId(id,g_szAuth[id],31);
g_BankSql[id] = 0;
g_BankSqlOpened[id] = false;
LoadClientBank(id);
}
public client_putinserver(id)
{
g_BankSqlOpened[id] = true;
if(!is_loggin(id)) set_task(0.3, "displayMainMenu", id);
if(get_pcvar_num(g_cvar_enable) == 2)
{
zp_set_user_ammo_packs(id,g_BankSql[id]);
}
}
public client_disconnect(id)
{
if(!get_pcvar_num(g_cvar_enable) || g_Sql == Empty_Handle) return;
if(g_BankSqlOpened[id] == true && is_loggin(id)) SaveClientBank(id);
g_killcount[id] = 0;
g_hunterlevel[id] = 0;
g_zmhunterlevel[id] = 0;
g_zmkillcount[id] = 0;
g_zmkiller[id] = 0;
g_zmkillercount[id] = 0;
g_nemelevel[id] = 0;
g_BankSqlOpened[id] = false;
g_invited[id] = false;
}
public DataBase_Connect()
{
if(!get_pcvar_num(g_cvar_enable)) return;
new host[64], user[32], pass[32], db[128];
new get_type[12], set_type[12];
new error[128], errno;
get_cvar_string("zp_bank_sql_host", host, 63);
get_cvar_string("zp_bank_sql_user", user, 31);
get_cvar_string("zp_bank_sql_pass", pass, 31);
get_cvar_string("zp_bank_sql_type", set_type, 11);
get_cvar_string("zp_bank_sql_db", db, 127);
get_cvar_string("zp_bank_sql_table", g_SqlTable, 31);
if(is_module_loaded(set_type) == -1)
{
server_print("%s error: module '%s' not loaded.^r^n%s Add line %s to %s/modules.ini and restart server", PLUGIN_PREFIX, set_type, PLUGIN_PREFIX, set_type, g_configsDir);
return;
}
SQL_GetAffinity(get_type, 12);
if(!equali(get_type, set_type)) if(!SQL_SetAffinity(set_type)) log_amx("Failed to set affinity from %s to %s.", get_type, set_type);
g_StdTupleBank = SQL_MakeDbTuple(host, user, pass, db);
g_Sql = SQL_Connect(g_StdTupleBank, errno, error, 127);
if(g_Sql == Empty_Handle)
{
server_print("%s SQL error: '%s'", PLUGIN_PREFIX, error);
return;
}
SQL_QueryAndIgnore(g_Sql, "SET NAMES utf8");
if(equali(set_type, "sqlite") && !sqlite_TableExists(g_Sql, g_SqlTable)) SQL_QueryAndIgnore(g_Sql, "CREATE TABLE %s (auth VARCHAR(36) NOT NULL PRIMARY KEY, passwd VARCHAR(64) NOT NULL, amount INT(10) NOT NULL DEFAULT 0,timestamp INT(10) NOT NULL DEFAULT 0);",g_SqlTable);
else if(equali(set_type, "mysql")) SQL_QueryAndIgnore(g_Sql,"CREATE TABLE IF NOT EXISTS `%s` (auth VARCHAR(36) NOT NULL PRIMARY KEY, passwd VARCHAR(64), amount INT(10) UNSIGNED NOT NULL DEFAULT 0, timestamp INT(10) UNSIGNED NOT NULL DEFAULT 0) ENGINE=MyISAM DEFAULT CHARSET=utf8;", g_SqlTable);
CleanDataBase();
server_print("%s connected to: '%s://%s:****@%s/%s/%s'",PLUGIN_PREFIX, set_type, user, host, db, g_SqlTable);
}
public CleanDataBase()
{
if(!get_pcvar_num(g_cvar_save_days)) return;
new curTime = get_systime();
curTime -= ((get_pcvar_num(g_cvar_save_days) * 24) * 3600);
SQL_QueryAndIgnore(g_Sql,"DELETE FROM %s WHERE timestamp < '%d';", g_SqlTable, curTime);
}
public fwClientUserInfoChanged(id, buffer)
{
if(!get_pcvar_num(g_cvar_enable) || !is_user_connected(id)) return FMRES_IGNORED;
new name[32], val[32], name_1[] = "name";
get_user_name(id, name, 31);
engfunc(EngFunc_InfoKeyValue, buffer, name_1, val, 31);
if(equal(val, name)) return FMRES_IGNORED;
if(get_pcvar_num(g_cvar_block_name_change))
{
engfunc(EngFunc_SetClientKeyValue, id, buffer, name_1, name);
client_cmd(id, "name ^"%s^"; setinfo name ^"%s^"", name, name);
console_print(id, "%L", id ,"NO_NAME_CHANGE");
}
else
{
g_loggin[id] = false;
g_registred[id] = false;
GetAuthId(id,g_szAuth[id],31,true);
LoadClientBank(id);
return FMRES_IGNORED;
}
return FMRES_SUPERCEDE;
}
public LoadClientBank(id)
{
if(g_StdTupleBank == Empty_Handle) return;
new szQuery[120];
format(szQuery, 119,"SELECT * FROM %s WHERE auth='%s';", g_SqlTable, g_szAuth[id]);
new szData[2];
szData[0] = id;
szData[1] = get_user_userid(id);
SQL_ThreadQuery(g_StdTupleBank, "LoadClient_QueryHandler", szQuery, szData, 2);
}
public LoadClient_QueryHandler(iFailState, Handle:hQuery, szError[], iErrnum, szData[], iSize, Float:fQueueTime)
{
if(iFailState != TQUERY_SUCCESS)
{
log_amx("%s SQL Error #%d - %s", PLUGIN_PREFIX, iErrnum, szError);
return;
}
new id = szData[0];
if(szData[1] != get_user_userid(id)) return;
new Password[64];
new packs = get_pcvar_num(g_cvar_startedammo);
if(SQL_NumResults(hQuery))
{
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "passwd"), Password, sizeof(Password)-1);
if(equal(g_password[id], Password))
{
g_loggin[id] = true;
packs = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "amount"));
new max_loops = 5;
while(--max_loops)
{
client_cmd(id,"setinfo _bpw ^"%s^"",g_password[id]);
}
}
g_registred[id] = true;
}
else
{
g_registred[id] = false;
displayMainMenu(id);
}
if(g_status[id] == true)
{
if(g_loggin[id] == true)
{
if(is_user_connected(id)) colorChat(id, CHATCOLOR_GREY, "[ZP]^4 Приветствуем! Вы вошли как %s.", g_szAuth[id]);
new max_loops = 5;
while(--max_loops)
{
client_cmd(id,"setinfo _bpw ^"%s^";wait;chooseteam",g_password[id]);
}
g_hunterlevel[id] = 0;
g_zmhunterlevel[id] = 0;
g_zmkiller[id] = 0;
g_nemelevel[id] = 0;
}
else
{
if(is_user_connected(id)) colorChat(id, CHATCOLOR_GREY, "[ZP]^4 Неверный пароль! Попробуйте другой пароль.");
displayMainMenu(id);
}
g_status[id] = false;
}
g_BankSql[id] = packs;
if(g_loggin[id] == true && g_BankSqlOpened[id] == true && get_pcvar_num(g_cvar_enable) == 2)
{
zp_set_user_ammo_packs(id,g_BankSql[id]);
}
}
public SaveClientBank(id)
{
if(g_Sql == Empty_Handle || !is_loggin(id)) return;
new packs;
if(get_pcvar_num(g_cvar_enable) == 2) packs = zp_get_user_ammo_packs(id);
else
packs = g_BankSql[id];
new szQuery[200];
format(szQuery, charsmax(szQuery), "REPLACE INTO %s (auth,passwd,amount,timestamp) VALUES('%s', '%s', '%d','%d');", g_SqlTable, g_szAuth[id], g_password[id], packs, get_systime());
SQL_QueryAndIgnore(g_Sql, szQuery);
}
public DeathMsg()
{
if(!get_pcvar_num(g_cvar_enable) || !get_pcvar_num(cvar_achvs)) return PLUGIN_CONTINUE;
new killer = read_data(1);
if(!is_loggin(killer)) return PLUGIN_CONTINUE;
new victim = read_data(2);
g_zmkillcount[victim] = 0
g_zmkillercount[victim] = 0
if(zp_is_nemesis_round())
{
if(g_nemelevel[killer] < get_pcvar_num(cvar_terminator_maxlvl) && zp_get_user_nemesis(victim) && !zp_get_user_zombie(killer))
{
g_nemelevel[killer]++;
give_present(killer, get_pcvar_num(cvar_terminator_multi));
colorChat(0, CHATCOLOR_GREY, "[ZP]^1 Игрок^4 %s^1 достиг^3 Счастливчик уровень:^1 %i^1 и получил^3 %i^1 Кредитов!", g_szAuth[killer], g_nemelevel[killer], get_pcvar_num(cvar_terminator_multi));
}
return PLUGIN_CONTINUE;
}
if(zp_get_user_zombie(killer) && g_zmkiller[killer] <get_pcvar_num(cvar_zmkiller_maxlvl) && !zp_get_user_zombie(victim))
{
g_zmkillercount[killer]++;
showStats(killer, 3);
colorChat(killer, CHATCOLOR_GREY, "[ZP]^3 Колличество съеденых:^1 %i", g_zmkillercount[killer]);
if(g_zmkillercount[killer] >= (g_zmkiller[killer] + 1) * 5)
{
g_zmkiller[killer]++;
g_zmkillercount[killer] = 0;
give_present(killer, g_zmkiller[killer] * get_pcvar_num(cvar_zmkiller_multi));
colorChat(0, CHATCOLOR_GREY, "[ZP]^1 Игрок^4 %s^1 достиг^3 Коллекционер душ уровень:^1 %i^1 и получил^3 %i^1 Кредитов!", g_szAuth[killer], g_zmkiller[killer], g_zmkiller[killer]*get_pcvar_num(cvar_zmkiller_multi));
}
}
if(zp_get_user_zombie(victim) && g_hunterlevel[killer] < get_pcvar_num(cvar_hunter_maxlvl) && !zp_get_user_survivor(killer))
{
g_killcount[killer]++;
showStats(killer, 1);
colorChat(killer, CHATCOLOR_GREY, "[ZP]^3 Колличество убитых:^1 %i", g_killcount[killer]);
if(g_killcount[killer] >= (g_hunterlevel[killer] + 1) * 5)
{
g_hunterlevel[killer]++;
g_killcount[killer] = 0;
give_present(killer, g_hunterlevel[killer]*get_pcvar_num(cvar_hunter_multi));
colorChat(0, CHATCOLOR_GREY, "[ZP]^1 Игрок^4 %s^1 достиг^3 Охотник уровень:^1 %i^1 и получил^3 %i^1 Кредитов!", g_szAuth[killer], g_hunterlevel[killer], g_hunterlevel[killer]*get_pcvar_num(cvar_hunter_multi));
}
}
return PLUGIN_CONTINUE;
}
public zp_user_infected_post(id, infector, nemesis)
{
if(!get_pcvar_num(g_cvar_enable) || !get_pcvar_num(cvar_achvs)) return PLUGIN_CONTINUE;
g_killcount[id] = 0;
if(g_zmhunterlevel[infector] < get_pcvar_num(cvar_zombiehunter_maxlvl) && is_loggin(infector) && zp_get_user_zombie(infector))
{
g_zmkillcount[infector]++;
showStats(infector, 2);
colorChat(infector, CHATCOLOR_GREY, "[ZP]^3 Колличество съеденых:^1 %i", g_zmkillcount[infector]);
if(g_zmkillcount[infector] >= (g_zmhunterlevel[infector] + 1) * 5)
{
g_zmhunterlevel[infector]++;
g_zmkillcount[infector] = 0;
give_present(infector, (g_zmhunterlevel[infector] + 1) * get_pcvar_num(cvar_zombiehunter_multi));
colorChat(0, CHATCOLOR_GREY, "[ZP]^1 Игрок^4 %s^1 достиг^3 Пожирателя уровень:^1 %i^1 и получил^3 %i^1 Кредитов!", g_szAuth[infector], g_zmhunterlevel[infector] + 1, (g_zmhunterlevel[infector] + 1) * get_pcvar_num(cvar_zombiehunter_multi));
}
}
return PLUGIN_CONTINUE;
}
public give_present(id, amout)
{
new curaps;
if(get_pcvar_num(g_cvar_enable) == 2)
{
curaps = zp_get_user_ammo_packs(id);
zp_set_user_ammo_packs(id,curaps+amout);
}
else
{
g_BankSql[id] += amout;
curaps = g_BankSql[id];
}
colorChat(id, CHATCOLOR_GREY, "[ZP]^1 У вас сейчас^3 %i^1 кредитов в^3 банке^1!", curaps+amout);
}
public showStats(id, mode)
{
new text[200];
switch(mode)
{
case 1:
{
formatex(text, charsmax(text), "Охотник: %i / %i", g_killcount[id], (g_hunterlevel[id] + 1) * 5);
}
case 2:
{
formatex(text, charsmax(text), "Пожиратель: %i / %i", g_zmkillcount[id], (g_zmhunterlevel[id] + 1) * 5);
}
case 3:
{
formatex(text, charsmax(text), "Коллекционер душ: %i / %i", g_zmkillercount[id], (g_zmkiller[id] + 1) * 5);
}
}
set_hudmessage(255, 255, 255, 0.02, 0.50, 0, 6.0, 4.0, _, _, -1);
show_hudmessage(id, text);
}
stock GetAuthId(id,Buffer[]="", BufferSize=0,info=false)
{
switch(get_pcvar_num(g_cvar_save_type))
{
case 1: get_user_authid(id,Buffer,BufferSize);
case 2:
{
new name[32];
if(info)
{
get_user_info(id,"name",name,31);
}
else
get_user_name(id,name,31);
SQL_QuoteString(g_Sql, Buffer, BufferSize, name);
}
case 3: get_user_ip(id,Buffer,BufferSize,true);
}
}
public cmd_enterpassword(id)
{
if(is_loggin(id)) return PLUGIN_HANDLED;
new password[64];
read_args(password, 63);
remove_quotes(password);
if(password[0])
{
g_password[id] = password;
g_status[id] = true;
LoadClientBank(id);
return PLUGIN_HANDLED;
}
if(g_invited[id])
{
g_invited[id] = false;
g_loggin[id] = true;
}
return PLUGIN_HANDLED;
}
public cmd_enternewpassword(id)
{
if(is_registred(id)) return PLUGIN_HANDLED;
new password[64];
read_args(password, charsmax(password));
remove_quotes(password);
new passlength = strlen(password)
if(equal(password, ""))
return PLUGIN_HANDLED
if(passlength < get_pcvar_num(cvar_pass_length))
{
colorChat(id, CHATCOLOR_GREY, "Пароль должен иметь минимум %d символов!", get_pcvar_num(cvar_pass_length))
client_cmd(id, "messagemode EnterNewPassword")
return PLUGIN_HANDLED
}
if(password[0])
{
g_password[id] = password;
g_loggin[id] = true;
g_registred[id] = true;
SaveClientBank(id);
client_cmd(id,"setinfo _bpw ^"%s^";wait;chooseteam",g_password[id]);
colorChat(id, CHATCOLOR_GREY, "[ZP]^4 Аккаунт создан: %s Пароль: %s Кредитов: %d", g_szAuth[id], g_password[id], g_BankSql[id]);
return PLUGIN_HANDLED;
}
else
{
client_cmd(id, "messagemode EnterNewPassword");
}
if(g_invited[id])
{
g_invited[id] = false;
g_loggin[id] = true;
}
colorChat(id, CHATCOLOR_RED, "Введите ваш новый пароль");
return PLUGIN_HANDLED;
}
public cmd_enterchangepassword(id)
{
if(!is_loggin(id)) return PLUGIN_HANDLED;
new password[64];
read_args(password, charsmax(password));
remove_quotes(password);
new passlength = strlen(password)
if(equal(password, ""))
return PLUGIN_HANDLED
if(passlength < get_pcvar_num(cvar_pass_length))
{
colorChat(id, CHATCOLOR_GREY, "Пароль должен иметь минимум %d символов!", get_pcvar_num(cvar_pass_length))
client_cmd(id, "messagemode EnterNewChangePassword")
return PLUGIN_HANDLED
}
if(password[0])
{
g_password[id] = password;
SaveClientBank(id);
client_cmd(id,"setinfo _bpw ^"%s^"",g_password[id]);
colorChat(id, CHATCOLOR_GREY, "[ZP]^4 Пароль сменился: %s Новый пароль: %s Кредитов: %d", g_szAuth[id], g_password[id], g_BankSql[id]);
return PLUGIN_HANDLED;
}
else
{
client_cmd(id, "messagemode EnterNewChangePassword");
}
if(g_invited[id])
{
g_invited[id] = false;
g_loggin[id] = true;
}
colorChat(id, CHATCOLOR_RED, "Введите ваш новый пароль");
return PLUGIN_HANDLED;
}
public clcmd_changeteam(id)
{
if(!get_pcvar_num(g_cvar_enable)) return PLUGIN_CONTINUE;
if(!is_loggin(id) && !g_invited[id] && !is_user_bot(id) && !is_user_hltv(id))
{
displayMainMenu(id);
return PLUGIN_HANDLED;
}
else if(get_pcvar_num(g_ajc_change) && cs_get_user_team(id) != CS_TEAM_UNASSIGNED && (!get_pcvar_num(g_ajc_admin) || !(get_user_flags(id) & AJC_ADMIN_FLAG)))
{
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE;
}
public displayMainMenu(id)
{
new menu[273], len;
new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_0;
len += format(menu[len], charsmax(menu) - len, "\yРегистрация\w^n\rСтатус: \w%s^n^n", (is_registred(id) ? "зарегистрирован" : "не зарегистрирован"));
if(!is_loggin(id) && is_registred(id))
len += format(menu[len], charsmax(menu) - len, "\r1.\w Вход^n");
else
len += format(menu[len], charsmax(menu) - len, "\d1. Вход^n");
if(!is_loggin(id) && !is_registred(id))
len += format(menu[len], charsmax(menu) - len, "\r2.\w Создать Аккаунт^n");
else
len += format(menu[len], charsmax(menu) - len, "\d2. Создать Аккаунт^n");
if(is_registred(id) && get_pcvar_num(cvar_allow_change_password))
len += format(menu[len], charsmax(menu) - len, "\r3.\w Настройки^n");
else
len += format(menu[len], charsmax(menu) - len, "\d3. Настройки^n");
if(is_loggin(id))
len += format(menu[len], charsmax(menu) - len, "\r4.\w Достижения^n");
else
len += format(menu[len], charsmax(menu) - len, "\d4. Достижения^n");
len += format(menu[len], charsmax(menu) - len, "\r5.\w Помощь^n^n");
if(!is_registred(id) || !get_pcvar_num(cvar_invited) || g_invited[id])
len += format(menu[len], charsmax(menu) - len, "\r6.\w Войти не регистрируясь^n");
else
len += format(menu[len], charsmax(menu) - len, "\d6. Войти не регистрируясь^n");
len += format(menu[len], charsmax(menu) - len, "^n\r0.\w Выход");
show_menu(id, keys, menu, -1, "BankMainMenu");
}
public actionMainMenu(id, key)
{
switch(key)
{
case 0:
{
if(is_loggin(id))
{
colorChat(id, CHATCOLOR_GREEN, "Вы уже авторизовались.");
return PLUGIN_HANDLED;
}
colorChat(id, CHATCOLOR_RED, "Введите ваш пароль");
client_cmd(id, "messagemode EnterPassword");
}
case 1:
{
if(is_loggin(id) || is_registred(id)) return PLUGIN_HANDLED;
colorChat(id, CHATCOLOR_RED, "Введите ваш новый пароль");
client_cmd(id, "messagemode EnterNewPassword");
}
case 2:
{
displayChangeMenu(id);
}
case 3:
{
if(is_loggin(id))
{
archivments_menu(id);
}
else
{
colorChat(id, CHATCOLOR_RED, "Достижения только для зарегистрированных");
return PLUGIN_HANDLED;
}
}
case 4:
{
show_motd(id, "addons\amxmodx\configs\motd\register_help.txt", "Регистрация");
displayMainMenu(id);
}
case 5:
{
invited(id);
}
}
return PLUGIN_HANDLED;
}
public invited(id)
{
if(!get_pcvar_num(cvar_invited))
{
colorChat(id, CHATCOLOR_GREY, "Вход в качестве гостя выключен.");
displayMainMenu(id);
return PLUGIN_HANDLED
}
if(is_registred(id))
{
colorChat(id, CHATCOLOR_GREY, "Зарегистрированный игрок не может войти как гость.");
displayMainMenu(id);
}
else if(g_invited[id])
{
displayMainMenu(id);
colorChat(id, CHATCOLOR_GREY, "Вы уже выполнили вход как гость.");
}
else
{
client_cmd(id, "jointeam");
colorChat(id, CHATCOLOR_GREY, "Вы вошли без регистрации.");
g_invited[id] = true;
}
return PLUGIN_HANDLED
}
public displayChangeMenu(id)
{
new menu[512], len
new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_0;
len += formatex(menu[len], charsmax(menu) - len, "\yНастройки^n^n");
if(!get_pcvar_num(cvar_allow_change_password) || !is_loggin(id))
len += formatex(menu[len], charsmax(menu) - len, "\r1.\d Сменить пароль^n");
else
len += formatex(menu[len], charsmax(menu) - len, "\r1.\w Сменить пароль^n");
if(!get_pcvar_num(cvar_allow_change_name) || !is_loggin(id))
len += formatex(menu[len], charsmax(menu) - len, "\r2.\d Сменить имя^n");
else
len += formatex(menu[len], charsmax(menu) - len, "\r2.\w Сменить имя^n");
len += formatex(menu[len], charsmax(menu) - len, "^n\r0.\w Назад");
show_menu(id, keys, menu, -1, "BankChangeMenu");
}
public actionChangeMenu(id, key)
{
switch(key)
{
case 0:
{
if(!get_pcvar_num(cvar_allow_change_password) || !is_loggin(id)) return PLUGIN_HANDLED;
client_cmd(id, "messagemode EnterNewChangePassword");
}
case 1:
{
if(!get_pcvar_num(cvar_allow_change_name) || !is_loggin(id)) return PLUGIN_HANDLED;
}
case 9:
{
displayMainMenu(id);
}
}
return PLUGIN_HANDLED;
}
public archivments_menu(id)
{
if(!get_pcvar_num(g_cvar_enable) || !get_pcvar_num(cvar_achvs)) return PLUGIN_HANDLED;
if(is_loggin(id))
{
new title[23]; formatex(title, charsmax(title), "\yДостижения")
new menu5 = menu_create(title, "handler_archs")
new humanhtitle[512]
if(g_hunterlevel[id] < get_pcvar_num(cvar_hunter_maxlvl))
formatex(humanhtitle, charsmax(humanhtitle), "\wОхотник\y Level %i \rNext: %i\w (%i Кр.)^n\yУбей %i зомби за раунд^n", g_hunterlevel[id], g_hunterlevel[id] + 1, (g_hunterlevel[id] + 1) * get_pcvar_num(cvar_hunter_multi), (g_hunterlevel[id] + 1) * 5)
else
formatex(humanhtitle, charsmax(humanhtitle), "\wОхотник\y Level %i \rMax. Level^n", g_hunterlevel[id]);
menu_additem(menu5, humanhtitle , "1");
new zmhtitle[512]
if(g_zmhunterlevel[id] < get_pcvar_num(cvar_zombiehunter_maxlvl))
formatex(zmhtitle, charsmax(zmhtitle), "\wПожиратель\y Level %i - \rNext: %i\w (%i Кр.)^n\yЗарази %i людей за раунд^n", g_zmhunterlevel[id], g_zmhunterlevel[id] + 1, (g_zmhunterlevel[id] + 1) * get_pcvar_num(cvar_zombiehunter_multi), (g_zmhunterlevel[id] + 1) * 5)
else
formatex(zmhtitle, charsmax(zmhtitle), "\wПожиратель\y Level %i - \rMax. Level^n", g_zmhunterlevel[id]);
menu_additem(menu5, zmhtitle , "2");
new zmkillertitle[512]
if(g_zmkiller[id] < get_pcvar_num(cvar_zmkiller_maxlvl))
formatex(zmkillertitle, charsmax(zmkillertitle), "\wКоллекционер душ\y Level %i - \rNext: %i\w (%i Кр.)^n\yУбей %i людей в раунде Куча на кучу/Чума^n", g_zmkiller[id], g_zmkiller[id] + 1, (g_zmkiller[id] + 1) * get_pcvar_num(cvar_zmkiller_multi), (g_zmkiller[id] + 1) * 3)
else
formatex(zmkillertitle, charsmax(zmkillertitle), "\wКоллекционер душ\y Level %i - \rMax. Level^n", g_zmkiller[id]);
menu_additem(menu5, zmkillertitle, "3");
new nemetitle[512]
if(g_nemelevel[id] < get_pcvar_num(cvar_terminator_maxlvl))
formatex(nemetitle, charsmax(nemetitle), "\wСчастливчик\y Level %i - \rNext: %i\w (%i Кр.)^n\yУбей немезиду^n", g_nemelevel[id], g_nemelevel[id] + 1, get_pcvar_num(cvar_terminator_multi))
else
formatex(nemetitle, charsmax(nemetitle), "\wСчастливчик\y Level %i - \rMax. Level^n", g_nemelevel[id]);
menu_additem(menu5, nemetitle, "4");
menu_setprop(menu5, MPROP_EXITNAME, "Выход")
menu_display(id, menu5, 0);
}
else
{
displayMainMenu(id);
colorChat(id, CHATCOLOR_GREY, "Достижения только для зарегистрированных игроков.")
}
return PLUGIN_CONTINUE;
}
public handler_archs(id, menu5, item)
{
if(!get_pcvar_num(g_cvar_enable) || !get_pcvar_num(cvar_achvs)) return PLUGIN_HANDLED;
new data[6], iName[64], access, callback
menu_item_getinfo(menu5, item, access, data, 5, iName, 63, callback)
new key = str_to_num(data)
switch(key)
{
case 1:
{
if(g_hunterlevel[id] >= 4) return PLUGIN_HANDLED
colorChat(id, CHATCOLOR_GREY, "[ZP]^1 Убей %i зомби за раунд чтобы получить %i Кредитов!", (g_hunterlevel[id] + 1) * 5, (g_hunterlevel[id] + 1) * get_pcvar_num(cvar_hunter_multi))
}
case 2:
{
if(g_zmhunterlevel[id] >= 2) return PLUGIN_HANDLED
colorChat(id, CHATCOLOR_GREY, "[ZP]^1 Зарази %i Людей за Раунд чтобы получить %i Кредитов!", (g_zmhunterlevel[id] + 1) * 5, (g_zmhunterlevel[id] + 1) * get_pcvar_num(cvar_zombiehunter_multi))
}
case 3:
{
if(g_zmkiller[id] >= 3) return PLUGIN_HANDLED
colorChat(id, CHATCOLOR_GREY, "[ZP]^1 Убей %i людей в режимах Куча на кучу/Чума чтобы получить %i Кредитов!", (g_zmkiller[id] + 1) * 3, (g_zmkiller[id] + 1) * get_pcvar_num(cvar_zmkiller_multi))
}
case 4:
{
if(g_zmkiller[id] >= 1) return PLUGIN_HANDLED
colorChat(id, CHATCOLOR_GREY, "[ZP]^1 Убей немезиду чтобы получить %i Кредитов!", get_pcvar_num(cvar_terminator_multi))
}
}
return PLUGIN_CONTINUE;
}
public TextMenu(msgid, dest, id)
{
if(!get_pcvar_num(g_cvar_enable) || !is_user_connected(id)) return PLUGIN_CONTINUE
new menu_text[64];
get_msg_arg_string(4, menu_text, charsmax(menu_text))
if(equal(menu_text, JOIN_TEAM_MENU_FIRST) || equal(menu_text, JOIN_TEAM_MENU_FIRST_SPEC))
{
if(is_registred(id) && !is_loggin(id))
{
displayMainMenu(id)
return PLUGIN_HANDLED
}
else if((get_pcvar_num(g_ajc_team) && cs_get_user_team(id) == CS_TEAM_UNASSIGNED) && !task_exists(TASK_AJC) && (!get_pcvar_num(g_ajc_admin) || !(get_user_flags(id) & AJC_ADMIN_FLAG)))
{
SetAutoJoinTask(id, msgid)
return PLUGIN_HANDLED
}
}
else if(equal(menu_text, JOIN_TEAM_MENU_INGAME) || equal(menu_text, JOIN_TEAM_MENU_INGAME_SPEC))
{
if(is_registred(id) && !is_loggin(id))
{
displayMainMenu(id)
return PLUGIN_HANDLED
}
else if(get_pcvar_num(g_ajc_change) && (!get_pcvar_num(g_ajc_admin) || !(get_user_flags(id) & AJC_ADMIN_FLAG)))
{
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
}
public VGUIMenu(msgid, dest, id)
{
if(!get_pcvar_num(g_cvar_enable) || get_msg_arg_int(1) != JOIN_TEAM_VGUI_MENU || !is_user_connected(id)) return PLUGIN_CONTINUE
if(is_registred(id) && !is_loggin(id))
{
displayMainMenu(id)
return PLUGIN_HANDLED
}
else if(get_pcvar_num(g_ajc_team))
{
if((!get_pcvar_num(g_ajc_admin) || !(get_user_flags(id) & AJC_ADMIN_FLAG)))
{
if(cs_get_user_team(id) == CS_TEAM_UNASSIGNED && !task_exists(TASK_AJC))
{
SetAutoJoinTask(id, msgid)
return PLUGIN_HANDLED
}
else if(get_pcvar_num(g_ajc_change))
{
return PLUGIN_HANDLED
}
}
}
else if(get_pcvar_num(g_ajc_change) && (!get_pcvar_num(g_ajc_admin) || !(get_user_flags(id) & AJC_ADMIN_FLAG)))
{
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public AutoJoin(parameters[])
{
new id = parameters[0]
if(!is_user_connected(id)) return PLUGIN_HANDLED
if(cs_get_user_team(id) != CS_TEAM_UNASSIGNED) return PLUGIN_HANDLED
new g_team[2], g_team_num = get_pcvar_num(g_ajc_team)
if(g_team_num == 6)
{
num_to_str(g_team_num, g_team, charsmax(g_team))
engclient_cmd(id, "jointeam", g_team)
return PLUGIN_CONTINUE
}
if(g_team_num == 5)
{
g_team_num = random_num(1, 2)
}
else if(g_team_num != 1 && g_team_num != 2)
return PLUGIN_HANDLED
new g_class_num = get_pcvar_num(g_ajc_class[g_team_num - 1])
num_to_str(g_team_num, g_team, charsmax(g_team))
if(g_class_num == 5)
{
g_class_num = random_num(1, 4)
}
if(g_class_num == 0 || (g_class_num != 1 && g_class_num != 2 && g_class_num != 3 && g_class_num != 4))
{
engclient_cmd(id, "jointeam", g_team)
return PLUGIN_CONTINUE
}
new g_class[2], msg_block = get_msg_block(parameters[1])
num_to_str(g_class_num, g_class, charsmax(g_class))
set_msg_block(parameters[1], BLOCK_SET)
engclient_cmd(id, "jointeam", g_team)
engclient_cmd(id, "joinclass", g_class)
set_msg_block(parameters[1], msg_block)
return PLUGIN_CONTINUE
}
stock SetAutoJoinTask(id, menu_msgid)
{
params[0] = id
params[1] = menu_msgid
set_task(AJC_TASK_TIME, "AutoJoin", id+TASK_AJC, params, sizeof params)
}
stock remove_tasks(const id)
{
remove_task(id+TASK_AJC)
}
public is_registred(id)
{
return g_registred[id];
}
public is_loggin(id)
{
return g_loggin[id];
}
KOTOKU писал(а):У вас в archivments_menu слишком много массивов размерностью в 512 и утечка памяти там же, от того у вас и стэк забивается. Переходите на старую систему меню, новое не значит лучше.
И стэк может забиться не в том месте где укзаано, просто если стэк переполнен, то ошибку выдаст на той функций, которая в стэке не уместилась.
Сейчас этот форум просматривают: Bing [Bot] и гости: 9