Buy_items

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
775
Реакции
293
Помог
11 раз(а)
Ошибка
консоль чиста, как лист
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5263
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.8.0.704-dev
Build date: 13:14:54 Dec 3 2020 (2427)
Build from: https://github.com/dreamstalker/rehlds/commit/83c0b6e
ReGamedll
ReGameDLL version: 5.20.0.492-dev
Build date: 15:26:35 Jan 4 2021
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/aae507c
Версия Metamod
Metamod-r v1.3.0.128, API (5:13)
Metamod-r build: 17:47:54 Aug 24 2018
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/0cf2f70
Список метамодулей
Currently loaded plugins:
description stat pend file vers src load unload
[ 1] Reunion RUN - reunion.so v0.1.0.135 ini Start Never
[ 2] AMX Mod X RUN - amxmodx.so v1.9.0.5263 ini Start ANY
[ 3] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5263 pl2 ANY
[ 4] ReAPI RUN - reapi_amxx_i386.so v5.19.0.211-dev pl2 ANY Never
[ 5] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5263 pl2 ANY
[ 6] MySQL RUN - mysql_amxx_i386.so v1.9.0.5263 pl2 ANY
[ 7] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5263 pl2 ANY
[ 8] Engine RUN - engine_amxx_i386.so v1.9.0.5263 pl2 ANY
8 plugins, 8 running
Список плагинов
Currently loaded plugins:
name version author file status
[ 1] Buy items v1.1 maFFyoZZyk buy_items.amxx running
[ 2] Advanced Experience Sy v0.5.9 [REA serfreeman1337/s aes_main.amxx running
[ 3] unknown vunknown unknown aes_statsx.amxx bad load
[ 4] unknown vunknown unknown aes_exp_cstrike bad load
[ 5] AES: Informer v0.5.9 [REA serfreeman1337/s aes_informer.am running
[ 6] AES: Admin Tools v0.5.9 [REA serfreeman1337/s aes_exp_editor. running
[ 7] AES: Bonus System v0.5.9 Vega serfreeman1337/s aes_bonus_syste running
[ 8] AES: Bonus CSTRIKE v0.5.9.1 [R serfreeman1337/s aes_bonus_cstri running
Автор плагина
maFFyoZZyk
Версия плагина
1.1
Исходный код
#include <amxmodx>
#include <reapi>

new Trie:g_tReplaceInfoMsg;
new HookChain:HookShowMenuPre;

public plugin_init()
{
register_plugin("Buy items", "1.1", "maFFyoZZyk");
g_tReplaceInfoMsg = TrieCreate();
Fill_trie();

register_message(get_user_msgid("TextMsg"), "MessageTextMsg");
RegisterHookChain(RG_ShowVGUIMenu, "BuyShowVGUIMenu_Pre", false);
HookShowMenuPre = RegisterHookChain(RG_ShowMenu, "ShowMenu_Pre", false);
DisableHookChain(HookShowMenuPre);
}

public BuyShowVGUIMenu_Pre(const id, VGUIMenu:menuType, const bitsSlots, szOldMenu[])
{
new szMenu[MAX_MENU_LENGTH], iKeys = MENU_KEY_0;
new TeamName:team = get_member(id, m_iTeam);
if(menuType == VGUI_Menu_Buy)
{
new iLen = formatex(szMenu, charsmax(szMenu), "\r[\yGFS\r]\w Магазин оружия:^n^n");

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wПистолеты^n");
iKeys |= MENU_KEY_1;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2. \wДробовики^n");
iKeys |= MENU_KEY_2;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \wПистолеты - Пулеметы^n");
iKeys |= MENU_KEY_3;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wШтурмовые винтовки^n");
iKeys |= MENU_KEY_4;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \wПулеметы^n^n");
iKeys |= MENU_KEY_5;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r8. \yЭкипировка^n^n^n");
iKeys |= MENU_KEY_8;

formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wВыход");

SetHookChainArg(3, ATYPE_INTEGER, iKeys);
SetHookChainArg(4, ATYPE_STRING, szMenu);

if (strlen(szMenu) > 175)
{
EnableHookChain(HookShowMenuPre);
}
}
else if(menuType == VGUI_Menu_Buy_Pistol)
{
new iLen = formatex(szMenu, charsmax(szMenu), "\r[\yGFS\r]\w Пистолеты:^n^n");

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wGlock\R\r$\y400^n");
iKeys |= MENU_KEY_1;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2. \wUsp\R\r$\y500^n");
iKeys |= MENU_KEY_2;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \wP228\R\r$\y600^n");
iKeys |= MENU_KEY_3;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wDeagle\R\r$\y650^n");
iKeys |= MENU_KEY_4;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, team == TEAM_TERRORIST ? "\r5. \wElites\R\r$\y800^n^n^n" : "\r5. \wFiveseven\R\r$\y750^n^n^n");
iKeys |= MENU_KEY_5;

formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wВыход");

SetHookChainArg(3, ATYPE_INTEGER, iKeys);
SetHookChainArg(4, ATYPE_STRING, szMenu);

if (strlen(szMenu) > 175)
{
EnableHookChain(HookShowMenuPre);
}
}
else if(menuType == VGUI_Menu_Buy_ShotGun)
{
new iLen = formatex(szMenu, charsmax(szMenu), "\r[\yGFS\r]\w Дробовики:^n^n");

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wM3\R\r$\y1700^n");
iKeys |= MENU_KEY_1;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2. \wXm1014\R\r$\y3000^n^n^n");
iKeys |= MENU_KEY_2;

formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wВыход");

SetHookChainArg(3, ATYPE_INTEGER, iKeys);
SetHookChainArg(4, ATYPE_STRING, szMenu);

if (strlen(szMenu) > 175)
{
EnableHookChain(HookShowMenuPre);
}
}
else if(menuType == VGUI_Menu_Buy_SubMachineGun)
{
new iLen = formatex(szMenu, charsmax(szMenu), "\r[\yGFS\r]\w Пистолеты-Пулеметы:^n^n");

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, team == TEAM_TERRORIST ? "\r1. \wMac-10\R\r$\y1400^n" : "\r1. \wTmp\R\r$\y1250^n");
iKeys |= MENU_KEY_1;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2. \wMp5\R\r$\y1500^n");
iKeys |= MENU_KEY_2;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \wUmp5\R\r$\y1700^n");
iKeys |= MENU_KEY_3;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wP90\R\r$\y2350^n^n^n");
iKeys |= MENU_KEY_4;
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wВыход");

SetHookChainArg(3, ATYPE_INTEGER, iKeys);
SetHookChainArg(4, ATYPE_STRING, szMenu);

if (strlen(szMenu) > 175)
{
EnableHookChain(HookShowMenuPre);
}
}
else if(menuType == VGUI_Menu_Buy_Rifle)
{
new iLen = formatex(szMenu, charsmax(szMenu), "\r[\yGFS\r]\w Штурмовые винтовки:^n^n");

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, team == TEAM_TERRORIST ? "\r1. \wGalil\R\r$\y2000^n" : "\r1. \wFamas\R\r$\y2250^n");
iKeys |= MENU_KEY_1;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, team == TEAM_TERRORIST ? "\r2. \wAk-47\R\r$\y2500^n" : "\r2. \wScout\R\r$\y2750^n");
iKeys |= MENU_KEY_2;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, team == TEAM_TERRORIST ? "\r3. \wScout\R\r$\y2750^n" : "\r3. \wM4A1\R\r$\y3100^n");
iKeys |= MENU_KEY_3;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, team == TEAM_TERRORIST ? "\r4. \wSG-552\R\r$\y3500^n" : "\r4. \wAUG\R\r$\y3500^n");
iKeys |= MENU_KEY_4;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, team == TEAM_TERRORIST ? "\r5. \wAwp\R\r$\y47500^n" : "\r5. \wKrieg550\R\r$\y4200^n");
iKeys |= MENU_KEY_5;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, team == TEAM_TERRORIST ? "\r6. \wD3/AU1\R\r$\y5000^n^n^n" : "\r6. \wAwp\R\r$\y4750^n^n^n");
iKeys |= MENU_KEY_6;

formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wВыход");

SetHookChainArg(3, ATYPE_INTEGER, iKeys);
SetHookChainArg(4, ATYPE_STRING, szMenu);

if (strlen(szMenu) > 175)
{
EnableHookChain(HookShowMenuPre);
}
}
else if(menuType == VGUI_Menu_Buy_MachineGun)
{
new iLen = formatex(szMenu, charsmax(szMenu), "\r[\yGFS\r]\w Пулеметы:^n^n");

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wM249\R\r$\y5750^n");
iKeys |= MENU_KEY_1;

formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wВыход");

SetHookChainArg(3, ATYPE_INTEGER, iKeys);
SetHookChainArg(4, ATYPE_STRING, szMenu);

if (strlen(szMenu) > 175)
{
EnableHookChain(HookShowMenuPre);
}
}
else if(menuType == VGUI_Menu_Buy_Item)
{
new iLen = formatex(szMenu, charsmax(szMenu), "\r[\yGFS\r]\w Экипировка:^n^n");

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wБронежилет\R\r$\y650^n");
iKeys |= MENU_KEY_1;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2. \wБронежилет и Шлем\R\r$\y1000^n");
iKeys |= MENU_KEY_2;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \wОслепляющая граната\R\r$\y200^n");
iKeys |= MENU_KEY_3;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wОсколочная граната\R\r$\y300^n");
iKeys |= MENU_KEY_4;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \wДымовая граната\R\r$\y300^n");
iKeys |= MENU_KEY_5;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, team == TEAM_TERRORIST ? "\r6. \wНочное видение\R\r$\y1250^n^n^n" : "\r6. \wНочное видение\R\r$\y1250^n");
iKeys |= MENU_KEY_6;

if(team == TEAM_CT)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r7. \wНабор сапера\R\r$\y200^n");
iKeys |= MENU_KEY_7;

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r8. \wЩит\R\r$\y2200^n^n^n");
iKeys |= MENU_KEY_8;
}

formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wВыход");

SetHookChainArg(3, ATYPE_INTEGER, iKeys);
SetHookChainArg(4, ATYPE_STRING, szMenu);

if (strlen(szMenu) > 175)
{
EnableHookChain(HookShowMenuPre);
}

}
return HC_CONTINUE;
}

// Fix menu limit in ReGameDLL (https://github.com/s1lentq/ReGameDLL_CS/blob/9d89a347fa22662b716697c97150ddea2bd00d99/regamedll/dlls/client.cpp#L394)
public ShowMenu_Pre(const id, const keys, const time, const needMore, const menu[]) {
DisableHookChain(HookShowMenuPre);
show_menu(id, keys, menu, time);
set_member(id, m_iMenu, Menu_ChooseTeam); // AMXX overide m_iMenu after show_menu
return HC_SUPERCEDE;
}

public Fill_trie() {
TrieSetString(g_tReplaceInfoMsg, "#C4_Arming_Cancelled", "Бомба может быть установлена только в зоне установки бомбы");
TrieSetString(g_tReplaceInfoMsg, "#C4_Plant_Must_Be_On_Ground", "Для установки бобмы Вы должны находиться на земле");
TrieSetString(g_tReplaceInfoMsg, "#Defusing_Bomb_With_Defuse_Kit", "Обезвреживание бомбы с набором сапёра");
TrieSetString(g_tReplaceInfoMsg, "#Defusing_Bomb_Without_Defuse_Kit", "Обезвреживание бомбы без набора сапёра");
TrieSetString(g_tReplaceInfoMsg, "#Weapon_Cannot_Be_Dropped", "Нельзя выбросить данное оружие");
TrieSetString(g_tReplaceInfoMsg, "#C4_Plant_At_Bomb_Spot", "Бомба может быть установлена только в зоне установки бомбы");
TrieSetString(g_tReplaceInfoMsg, "#Cannot_Carry_Anymore", "Вы не можете взять больше");
TrieSetString(g_tReplaceInfoMsg, "#Already_Have_Kevlar", "У вас уже имеется бронежилет");
TrieSetString(g_tReplaceInfoMsg, "#Already_Have_Kevlar_Helmet", "У вас уже имеется бронежилет и шлем");
TrieSetString(g_tReplaceInfoMsg, "#Switch_To_BurstFire", "Переключен в режим пулеметного огня");
TrieSetString(g_tReplaceInfoMsg, "#Switch_To_FullAuto", "Переключен в автоматический режим");
TrieSetString(g_tReplaceInfoMsg, "#Switch_To_SemiAuto", "Переключен в полуавтоматический режим");
TrieSetString(g_tReplaceInfoMsg, "#Already_Own_Weapon", "У вас уже имеется данное оружие");
TrieSetString(g_tReplaceInfoMsg, "#Command_Not_Available", "Данное действие недоступно в Вашем местонахождении");
TrieSetString(g_tReplaceInfoMsg, "#Got_bomb", "Вы подобрали бомбу");
TrieSetString(g_tReplaceInfoMsg, "#Game_bomb_pickup", "%s подобрал бомбу");
TrieSetString(g_tReplaceInfoMsg, "#Game_bomb_drop", "%s выбросил бомбу");
TrieSetString(g_tReplaceInfoMsg, "#Cant_buy", "%s секунд уже истекли.^rПокупка оружия запрещена");
TrieSetString(g_tReplaceInfoMsg, "#Not_Enough_Money", "У вас не достаточно денег");
TrieSetString(g_tReplaceInfoMsg, "#Alias_Not_Avail", "Вашей команде недоступна покупка «%s».");
}

public MessageTextMsg() {
new szMsg[192], szArg3[32];
get_msg_arg_string(2, szMsg, charsmax(szMsg));
//log_amx("Сообщение %s", szMsg);
if(TrieGetString(g_tReplaceInfoMsg, szMsg, szMsg, charsmax(szMsg))) {
if(get_msg_args() > 2) {
get_msg_arg_string(3, szArg3, charsmax(szArg3));
replace(szMsg, charsmax(szMsg), "%s", szArg3);
}
set_msg_arg_string(2, szMsg);
}
}

public plugin_end() TrieDestroy(g_tReplaceInfoMsg);
Всем салют, суть проблемы в том, что 4 и 8 пункт не работают. А именно открывается Choose Team Menu.
Если я включаю VGUI меню используя setinfo "_vgui_menus" "1", все работает как часики.
А если нет, то в принципе работает все.нажимаю на 4 или 8 пункт и вылазит чус, как фиксануть, ума не дам.
P.S. Сервак дефолтный, так для тестов. потому на плохую загрузку аес не смотрите, сути этого не меняет.
P.S.S. Дабы предотвратить "О, а у тебя кусок чужого кода, а ты свое авторство ставишь." объясняю. Этот магазин создан сугубо в личных целях и в массы направляться не собирался.На авторство отлова сообщений и их подмены на свои, я не претендую. Да и в принципе пофиг на авторство, просто бесит unknow (иной раз думаю, что плагин гакнулся). Как-то так
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
775
Реакции
293
Помог
11 раз(а)
тему можно закрыть, разобрался
 
Сообщения
775
Реакции
293
Помог
11 раз(а)
Алексеич, Я также думал, что у вас принято помогать, а не заходить в тему читать и выходить. За сутки 70 просмотров темы и ни одна душа не указала на косяк. Кажется, что проблема утопающих, дело самих утопающих. Зато как накинулись, он решение не выложил - дизлайк тебе (смешно). Какова помощь, таков и результат. ну да ладно.
Проблема была, при активации хука показа меню set_member(id, m_iMenu, Menu_ChooseTeam);
Увы когда на радостях решил улучшить менюшку, не стал вникать сильно в код. Огромное спасибо первой версии плагина, которая работала исправно и дала возможность обмозговать и пойти пересмотреть результат. заменяем на свое, ну что-то типа set_member(id, m_iMenu, Menu_BuyRifle) или set_member(id, m_iMenu, Menu_BuyItem)

полный набор, для тех кого это интересует
Код:
        case VGUI_Menu_Buy: set_member(id, m_iMenu, Menu_Buy); // AMXX overide m_iMenu after show_menu
        case VGUI_Menu_Buy_Pistol: set_member(id, m_iMenu, Menu_BuyPistol); // AMXX overide m_iMenu after show_menu
        case VGUI_Menu_Buy_Shotgun: set_member(id, m_iMenu, Menu_BuyShotgun); // AMXX overide m_iMenu after show_menu
        case VGUI_Menu_Buy_SubMachineGun: set_member(id, m_iMenu, Menu_BuySubMachineGun); // AMXX overide m_iMenu after show_menu
        case VGUI_Menu_Buy_Rifle: set_member(id, m_iMenu, Menu_BuyRifle); // AMXX overide m_iMenu after show_menu
        case VGUI_Menu_Buy_Item: set_member(id, m_iMenu, Menu_BuyItem); // AMXX overide m_iMenu after show_menu
думаю, кому надо, тот разберется
 
Статус
В этой теме нельзя размещать новые ответы.

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

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