Русское сообщество по скриптингу

Register System: Run time error 3: stack error (В консоли)

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Re: Register System: Run time error 3: stack error (В консол

Сообщение артист666 » 19 сен 2017, 20:45

Попробуй уменьшить, просто ради интереса.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Register System: Run time error 3: stack error (В консол

Сообщение 3BEPb » 19 сен 2017, 22:22

Ахахахаха ошибка ушла в другую функцию, правда теперь один из видов меню не умещается, символов не хватает.

Думаю придётся сделать отдельную переменную, под каждое меню?
Аватара пользователя
3BEPb
 
Сообщения: 141
Зарегистрирован: 16 авг 2014, 22:02
Откуда: Пряжа
Благодарил (а): 22 раз.
Поблагодарили: 17 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re: Register System: Run time error 3: stack error (В консол

Сообщение Subb98 » 20 сен 2017, 07:36

DeMNiX писал(а):разницы нет что так пишешь, что так

Есть разница. В случае через запятую компилятор будет считать, что это одна строка, даже, если каждую переменную написать с новой строки. Я думал, это очевидно.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Register System: Run time error 3: stack error (В консол

Сообщение Fabrizzo » 08 окт 2017, 16:42

Проблема [AMXX] Run time error 3: stack error все еще актуальна, насколько я понял это при переходе со старого amxmodx 1.8.2 на amxmodx 1.8.3 возникает. Или же неработает на новом билде. У кого еще есть какието идеи по исправлению?
black rabbit
Аватара пользователя
Fabrizzo
 
Сообщения: 24
Зарегистрирован: 14 дек 2013, 22:34
Благодарил (а): 12 раз.
Поблагодарили: 0 раз.
Языки программирования: PHP/JS (Back-end, Front-end)

Re: Register System: Run time error 3: stack error (В консол

Сообщение fl0wer » 08 окт 2017, 17:23

Покажи ланги.
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 508 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

Re: Register System: Run time error 3: stack error (В консол

Сообщение 3BEPb » 31 янв 2018, 01:51

Проблема так и не решилась.

Лог ошибки
Код: Выделить всё
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];
}
Аватара пользователя
3BEPb
 
Сообщения: 141
Зарегистрирован: 16 авг 2014, 22:02
Откуда: Пряжа
Благодарил (а): 22 раз.
Поблагодарили: 17 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re: Register System: Run time error 3: stack error (В консол

Сообщение Fabrizzo » 12 фев 2018, 01:30

Ребята, если есть, кто сможет решить проблему - можем договориться насчет вознаграждения.
black rabbit
Аватара пользователя
Fabrizzo
 
Сообщения: 24
Зарегистрирован: 14 дек 2013, 22:34
Благодарил (а): 12 раз.
Поблагодарили: 0 раз.
Языки программирования: PHP/JS (Back-end, Front-end)

Re: Register System: Run time error 3: stack error (В консол

Сообщение KOTOKU » 12 фев 2018, 02:38

У вас в archivments_menu слишком много массивов размерностью в 512 и утечка памяти там же, от того у вас и стэк забивается. Переходите на старую систему меню, новое не значит лучше.
И стэк может забиться не в том месте где укзаано, просто если стэк переполнен, то ошибку выдаст на той функций, которая в стэке не уместилась.
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: Register System: Run time error 3: stack error (В консол

Сообщение 3BEPb » 16 фев 2018, 03:51

KOTOKU писал(а):У вас в archivments_menu слишком много массивов размерностью в 512 и утечка памяти там же, от того у вас и стэк забивается. Переходите на старую систему меню, новое не значит лучше.
И стэк может забиться не в том месте где укзаано, просто если стэк переполнен, то ошибку выдаст на той функций, которая в стэке не уместилась.


За комментировал меню archivments_menu, ошибка так и появляется в логах.
Аватара пользователя
3BEPb
 
Сообщения: 141
Зарегистрирован: 16 авг 2014, 22:02
Откуда: Пряжа
Благодарил (а): 22 раз.
Поблагодарили: 17 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Пред.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 9