Team Select Menu - Run time error

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Ошибка
L 02/19/2018 - 21:56:36: [AMXX] Displaying debug trace (plugin "team_select_menu.amxx", version "2.0")
L 02/19/2018 - 21:56:36: [AMXX] Run time error 3: stack error
ОС
Linux
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.4.0.633-dev
Build date: 10:34:06 Jan 24 2018 (1383)
ReGamedll
ReGameDLL version: 5.5.0.291-dev
Build date: 09:37:02 Feb 8 2018
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/40f3bc4
Список метамодулей
[ 1] SafeNameAndChat  RUN   -    SafeNameAndChat.so          v1.1             ini  ANY   ANY  
[ 2] Reunion RUN - reunion_mm_i386.so v0.1.75 ini Start Never
[ 3] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC3 ini ANY ANY
[ 4] AMX Mod X RUN - amxmodx_mm_i386.so v1.8.3-dev+5151 ini Start ANY
[ 5] WHBlocker RUN - whblocker_mm_i386.so v1.5.692 ini Chlvl ANY
[ 6] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 7] Rechecker RUN - rechecker_mm_i386.so v2.3 ini Chlvl ANY
[ 8] hackdetector RUN - hackdetector_amxx_i386.so v0.15.328.lite ini ANY ANY
[ 9] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[10] FakeMeta RUN - fakemeta_amxx_i386.so v1.8.3-dev+5151 pl4 ANY ANY
[11] Engine RUN - engine_amxx_i386.so v1.8.3-dev+5151 pl4 ANY ANY
[12] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.8.3-dev+5151 pl4 ANY ANY
[13] ReAPI RUN - reapi_amxx_i386.so v5.5.0.149-dev pl4 ANY Never
[14] CStrike RUN - cstrike_amxx_i386.so v1.8.3-dev+5151 pl4 ANY ANY
[15] Fun RUN - fun_amxx_i386.so v1.8.3-dev+5151 pl4 ANY ANY
[16] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.1.6 pl4 ANY Never
[17] CSX RUN - csx_amxx_i386.so v1.8.3-dev+5151 pl4 ANY ANY
Список плагинов
[  1] Anticheat               3.1.6       ctr52             anticheat.amxx   running  
[ 2] Admin Access 1.0 Javekson admin_access.am running
[ 3] Admin Core Functions 1.0 Javekson admin_core_func running
[ 4] Admin Menu 1.0 Javekson admin_menu.amxx running
[ 5] Admin Subnet Bans 1.0 Subb98 admin_subnet_ba running
[ 6] Admin Blank Bullets 1.0 Javekson admin_blankbull running
[ 7] Admin Know Players 1.0 Javekson admin_know.amxx running
[ 8] Admin Checker 1.0 Javekson admin_checker.a running
[ 9] Admin Free Look 1.0 ReHLDS Team admin_freelook. running
[ 10] ReAimDetector API 0.1.6 ReHLDS Team reaimdetector.a running
[ 11] Aliases checker 1.0.3 kanagava alias_detector. running
[ 12] Simple Bans 1.0 Subb98 simple_bans.amx running
[ 13] Advanced Gag 1.4.2 neygomon amx_gag.amxx running
[ 14] Warning Players 0.1 Javekson warning_players running
[ 15] Player Logger 1.0 Javekson player_logger.a running
[ 16] AES: StatsX 0.5 Vega serfreeman1337 aes_statsx_cstr running
[ 17] StatsX 1.8.3-Re AMXX Dev Team statsx.amxx running
[ 18] Nextmap Chooser 1.9 UFPS.Team mapchooser.amxx running
[ 19] Auto Help Blocker 1.0 Subb98 ahblocker.amxx running
[ 20] Some SRV Commands 1.0 Subb98 some_srv_cmds.a running
[ 21] HLTV Show Time 1.0 Adidasman hltv_show_time. running
[ 22] Sky Setting 1.0 Javekson sky_setting.amx stopped
[ 23] Replace Info Message 2.0 Javekson replace_info_ms running
[ 24] Items Restrict 1.0 ReHLDS Team items_restrict. running
[ 25] Custom Radio 1.0 Subb98 custom_radio.am running
[ 26] Mode 2x2 2.5re s1lent mode.amxx running
[ 27] Anti Flood Plus 1.0 Subb98 anti_flood_plus running
[ 28] AFK Control 1.4.1 [Rnd neygomon afk_control.amx running
[ 29] No Fall Damage 1.0 s1lent no_fall_damage. running
[ 30] [ReAPI] No Team Flash 1.0 ReHLDS Team no_team_flash.a running
[ 31] Server Menu 1.0 Javekson server_menu.amx running
[ 32] Killing Screen 1.0 Subb98 killing_screen. running
[ 33] Advertising Hud 2.0 Javekson advertising_hud running
[ 34] Reset Score 1.0 Javekson reset_score.amx running
[ 35] VIP 2.0 Javekson vip.amxx running
[ 36] VIP Guns 2.0 Javekson vipguns.amxx running
[ 37] Team Select Menu 2.0 Javekson team_select_men debug
[ 38] Prefixes Manager 1.0 Javekson prefixes_manage running
[ 39] Translit 1.0 Javekson translit.amxx running
Исходный код
#include <amxmodx>
#include <reapi>

#pragma semicolon 1

const TIME_MENU = NULLENT;
const MENU_KEYS = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_5|MENU_KEY_6;

new const MENU_CONTENT[] =\
"^t^t^t^t\rVK.COM/GMFORCE^n\
^t^t^t^t\yМеню выбора команды^n^n\
^t^t^t^t\y1. \wТеррористы^n\
^t^t^t^t\y2. \wКонтр-террористы^n^n\
^t^t^t^t\y5. \wСлучайный выбор^n\
^t^t^t^t\y6. \wНаблюдатели^n^n\
^t^t^t^t\y0. \wВыход";

public plugin_init() {
register_plugin("Team Select Menu", "2.0", "Javekson");
register_clcmd("chooseteam", "ClCmdChooseTeam");
register_clcmd("jointeam", "ClCmdChooseTeam");
RegisterHookChain(RG_ShowVGUIMenu, "ShowVGUIMenu", false);
register_menucmd(register_menuid("_team_select_menu"), MENU_KEYS, "HandleTeamSelectMenu");
}

public ClCmdChooseTeam(const iIndex) {
if(!is_user_connected(iIndex)) {
return PLUGIN_HANDLED;
}
ShowTeamSelectMenu(iIndex);
return PLUGIN_HANDLED;
}

public ShowVGUIMenu(const iIndex, VGUIMenu:menuType) {
if(!is_user_connected(iIndex)) {
return HC_SUPERCEDE;
}
if(menuType == VGUI_Menu_Team) {
ShowTeamSelectMenu(iIndex);
return HC_SUPERCEDE;
}
return HC_CONTINUE;
}

public ShowTeamSelectMenu(const id) {
return show_menu(id, MENU_KEYS, MENU_CONTENT, TIME_MENU, "_team_select_menu");
}

public HandleTeamSelectMenu(const id, const iKey) {
switch(iKey) {
case 0: {
rg_join_team(id, TEAM_TERRORIST);
rg_set_user_team(id, TEAM_TERRORIST, MODEL_AUTO);
}
case 1: {
rg_join_team(id, TEAM_CT);
rg_set_user_team(id, TEAM_CT, MODEL_AUTO);
}
case 4: rg_join_team(id, TeamName:random_num(_:TEAM_TERRORIST, _:TEAM_CT));
case 5: rg_join_team(id, TEAM_SPECTATOR);
case 9: return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
Отладочный режим для этого плагина включен, почему конкретные строки не показывает я не пойму.
До того, как вынес меню в глобалку ругался на public ShowVGUIMenu и public ShowTeamSelectMen с той же ошибкой.
Уже несколько дней не могу понять, что ему нужно?
 
В этой теме было размещено решение! Перейти к решению.

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
Мб так?
Diff:
public ShowVGUIMenu(const iIndex, VGUIMenu:menuType) {
    if(!is_user_connected(iIndex)) {
-        return HC_SUPERCEDE;
+        return HC_CONTINUE;
    }
    if(menuType == VGUI_Menu_Team) {
        ShowTeamSelectMenu(iIndex);
        return HC_SUPERCEDE;
    }
    return HC_CONTINUE;
}
Вообще, глянь этот плагин: Unlimited ChooseTeam
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Javekson, честно не вижу причин в таком меню ибо оно точь в точ повторяет обычное. Но вот пример
Код:
#include <amxmodx>
#include <reapi>

const MENU_KEYS = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_5|MENU_KEY_6;
new const MENU_CONTENT[] =\
    "^t^t^t^t\rVK.COM/GMFORCE^n\
    ^t^t^t^t\yМеню выбора команды^n^n\
    ^t^t^t^t\y1. \wТеррористы^n\
    ^t^t^t^t\y2. \wКонтр-террористы^n^n\
    ^t^t^t^t\y5. \wСлучайный выбор^n\
    ^t^t^t^t\y6. \wНаблюдатели^n^n\
    ^t^t^t^t\y0. \wВыход";

public plugin_init()
{
    RegisterHookChain(RG_ShowVGUIMenu, "ShowVGUIMenu", 0);
    RegisterHookChain(RG_HandleMenu_ChooseTeam, "HandleMenu_ChooseTeam", 0);
}

public ShowVGUIMenu(const id, VGUIMenu:menuType, const bitsSlots, szOldMenu[]) {
    if (menuType == VGUI_Menu_Team) {
        set_member(id, m_bForceShowMenu, true);
        
        SetHookChainArg(3, ATYPE_INTEGER, MENU_KEYS);
        SetHookChainArg(4, ATYPE_STRING, MENU_CONTENT);
    }
    
    return HC_CONTINUE;
}
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
честно не вижу причин в таком меню ибо оно точь в точ повторяет обычное.
обычное это которое?
20 Фев 2018
здесь вылетит графическое меню выбора класса, мне это не нужно, он мне нужен рандомный.
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
new const MENU_CONTENT[]
размер массива большой
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
здесь вылетит графическое меню выбора класса, мне это не нужно, он мне нужен рандомный.
Не тестировал
Код:
#include <amxmodx>
#include <reapi>

const MENU_KEYS = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_5|MENU_KEY_6;
new const MENU_CONTENT[] =\
    "^t^t^t^t\rVK.COM/GMFORCE^n\
    ^t^t^t^t\yМеню выбора команды^n^n\
    ^t^t^t^t\y1. \wТеррористы^n\
    ^t^t^t^t\y2. \wКонтр-террористы^n^n\
    ^t^t^t^t\y5. \wСлучайный выбор^n\
    ^t^t^t^t\y6. \wНаблюдатели^n^n\
    ^t^t^t^t\y0. \wВыход";

public plugin_init()
{
    RegisterHookChain(RG_ShowVGUIMenu, "ShowVGUIMenu", 0);
    RegisterHookChain(RG_HandleMenu_ChooseTeam, "HandleMenu_ChooseTeam", 0);
    RegisterHookChain(RG_HandleMenu_ChooseTeam, "HandleMenu_ChooseTeam", 1);
}

public ShowVGUIMenu(const id, VGUIMenu:menuType, const bitsSlots, szOldMenu[]) {
    if (menuType == VGUI_Menu_Team) {
        set_member(id, m_bForceShowMenu, true);
        
        SetHookChainArg(3, ATYPE_INTEGER, MENU_KEYS);
        SetHookChainArg(4, ATYPE_STRING, MENU_CONTENT);
    }
    
    return HC_CONTINUE;
}

public HandleMenu_ChooseTeamPre() {
    set_member_game(m_bSkipShowMenu, true);
}
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Javekson, попробуй уменшить длину строкы
20 Фев 2018
wopox1337 не плохо было бы пофиксить это. Насколько я понял достаточно в цыкле отправить несколько сообщений
https://github.com/s1lentq/ReGameDLL_CS/blob/master/regamedll/dlls/client.cpp#L413
https://github.com/s1lentq/ReGameDLL_CS/blob/master/regamedll/dlls/client.cpp#L404
https://wiki.alliedmods.net/Half-life_1_game_events#ShowMenu
как тут
https://github.com/alliedmodders/amxmodx/blob/master/amxmodx/util.cpp#L36
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
попробуй уменшить длину строкы
да, падать перестал, проблема из-за большого массива, меню выбора класса игрока пропадает в функции Pre
Теперь я так понимаю можно делать свитч и кидать туда свою выборку класса.
Типа так, наверно, или может вариант получше можно придумать?
C++:
public HandleMenu_ChooseTeamPre(const index, const MenuChooseTeam:slot) {
    switch(slot) {
        case MenuChoose_T: {
            rg_join_team(index, TEAM_TERRORIST);
            rg_set_user_team(index, TEAM_TERRORIST, MODEL_AUTO);
        }
        case MenuChoose_CT: {
            rg_join_team(index, TEAM_CT);
            rg_set_user_team(index, TEAM_CT, MODEL_AUTO);
        }
        case MenuChoose_AutoSelect: rg_join_team(index, TeamName:random_num(_:TEAM_TERRORIST, _:TEAM_CT));
        case MenuChoose_Spec: rg_join_team(index, TEAM_SPECTATOR);
    }
    set_member_game(m_bSkipShowMenu, true);
}
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
zhorzh78, пользовательское меню ограничено 512 байтами, в MENU_CONTENT[] явно меньше.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Javekson, в моем примере пока что ограничение 192 байта
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Javekson, есть надежда что пофиксят отправку меню мультыпакетами.
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Появилось немного времени, поэтому возвращаюсь к этой же теме. Переписал, уменьшил массив поигрался с ретурнами и нефига не изменилось одна и та же ошибка, а спустя некоторое время(1-2 раза в сутки) сервер падает. из-за него.
C++:
#include <amxmodx>
#include <reapi>

#pragma semicolon 1

new const MENU_CONTENT[] = "\
    ^t^t^t^t\rVK.COM/GMFORCE^n\
    ^t^t^t^t\ySelect a team^n^n\
    ^t^t^t^t\y1. \wTerrorist Force^n\
    ^t^t^t^t\y2. \wCounter-Terrorist Force^n^n\
    ^t^t^t^t\y5. \wAuto-select^n\
    ^t^t^t^t\y6. \wSpectators^n^n\
    ^t^t^t^t\y0. \wExit";

public plugin_init() {
    register_plugin("Team Select Menu", "2.0", "Javekson");
    register_clcmd("chooseteam", "ClCmdChooseTeam");
    register_clcmd("jointeam", "ClCmdChooseTeam");
    RegisterHookChain(RG_ShowVGUIMenu, "ShowVGUIMenu", false);
    RegisterHookChain(RG_HandleMenu_ChooseTeam, "HandleMenu_ChooseTeamPre", true);
}

public ClCmdChooseTeam(const index) {
    if(!is_user_connected(index)) return PLUGIN_HANDLED;
    set_member(index, m_bTeamChanged, false);
    return PLUGIN_CONTINUE;
}

public ShowVGUIMenu(const index, VGUIMenu:menuType, const bitsSlots, szOldMenu[]) {
    if(!is_user_connected(index)) return PLUGIN_HANDLED;
    if(menuType == VGUI_Menu_Team) {
        SetHookChainArg(3, ATYPE_INTEGER, bitsSlots|MENU_KEY_6);
        SetHookChainArg(4, ATYPE_STRING, MENU_CONTENT);
    }
    return PLUGIN_CONTINUE;
}

public HandleMenu_ChooseTeamPre(const index, const MenuChooseTeam:slot) {
    if(!is_user_connected(index)) return PLUGIN_HANDLED;
    switch(slot) {
        case MenuChoose_T: {
            engclient_cmd(index, "joinclass", "5");
        }
        case MenuChoose_CT: {
            engclient_cmd(index, "joinclass", "5");
        }
        case MenuChoose_AutoSelect: {
            engclient_cmd(index, "joinclass", "5");
        }
        case MenuChoose_Spec: {
            if(is_user_alive(index)) user_kill(index, true);
            engclient_cmd(index, "jointeam", "6");
        }
    }
    return PLUGIN_CONTINUE;
}
Код:
L 03/06/2018 - 21:01:08: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20180306.log")
L 03/06/2018 - 21:01:08: [AMXX] Displaying debug trace (plugin "team_select_menu.amxx", version "2.0")
L 03/06/2018 - 21:01:08: [AMXX] Run time error 3: stack error
6 Мар 2018
Ошибка выскакивает в основном при смене карты.
Кстати, если убрать все ретурны, то ошибка будет немного подробнее.
Код:
L 03/06/2018 - 20:49:17: [ReAPI] set_member: invalid or uninitialized entity
L 03/06/2018 - 20:49:17: [AMXX] Displaying debug trace (plugin "team_select_menu.amxx", version "2.0")
L 03/06/2018 - 20:49:17: [AMXX] Run time error 10: native error (native "set_member")
L 03/06/2018 - 20:49:17: [AMXX]    [0] team_select_menu.sma::ClCmdChooseTeam (line 24)
L 03/06/2018 - 20:49:18: [AMXX] Displaying debug trace (plugin "team_select_menu.amxx", version "2.0")
L 03/06/2018 - 20:49:18: [AMXX] Run time error 3: stack error
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Код:
if(!is_user_connected(index)) return PLUGIN_HANDLED;
Код:
#define PLUGIN_HANDLED      1   /* stop other plugins */
Почему return PLUGIN_HANDLED при такой проверке?
С таким кодом это равноценно этому:
Код:
if(!is_user_connected(index)) return HC_SUPERCEDE;
Почему не используешь варианты ниже?
Код:
// hookchain return type
enum
{
    HC_CONTINUE = 0, // Plugin didn't take any action
    HC_SUPERCEDE,    // Skip real function, use my return value
    HC_BREAK         // Skip all forwards and real function, use my return value
                     // @note Warning: Be very careful, using this type of return will skip calls for all following AMXX plugins
};
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
w0w, Я пробовал абсолютно все вариации ретурнов, и HC_CONTINUE и HC_SUPERCEDE и PLUGIN_HANDLED и PLUGIN_CONTINUE в разных комбинациях, все та же самая ошибка.
6 Мар 2018
w0w, и по отдельности в каждой зарегистрированной функции я их ставил и убирал, толку нету. =(
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
w0w, тем, что в нем те же самые ошибки.
P.s.: когда я сказал, что сервер перестал падать я имел ввиду, что я уложился в лимит 192 байта при уменьшении массива(при использовании RG_ShowVGUIMenu) а общая ошибка осталось той же, только я это посмотреть смог спустя длительное время так-как был в командировки.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу