Any game Guns Menu для Insurgency - изменение/доработка/исправление плагина

Статус
В этой теме нельзя размещать новые ответы.

puma133

Участник
Сообщения
33
Реакции
12
Здраствуйте! Ищу кто может доработать один из этих плагинов Guns Menu для игры insurgency

После ряда обновлений игры, плагин не работает как следует.
Что нужно ?:
1. Сделать выдачу оружия актуальным (много чего не работает в орг плагине)
2. Прописать модификацию для оружия (к примеру M16 + глушитеь + рукоядка + прицел 8х) и тд
3. Прописать флаг доступа к команде !guns
4. При наличия опыта переписать плагин не через выдачу sv_cheats 1

Вроде из основного все. Жду предложений и цену.
 

puma133

Участник
Сообщения
33
Реакции
12
Я там создал заявку параллельно с этой темой/

Я начал делать сам уже, меню появляется, но оружие выдается без модификаций

#include <sourcemod>
#include <sdktools>


public Plugin myinfo =
{
name = "[INS] Guns Menu",
author = "",
description = "Guns Menu",
version = "0.3",
url = ""
};

char CurrentGameMode[30];

public void OnPluginStart()
{

RegConsoleCmd("guns", WeaponMenu);
LoadTranslations("common.phrases");
}

public void OnConfigsExecuted()
{
ConVar mp_gamemode = FindConVar("mp_gamemode");

if(mp_gamemode != null)
{
mp_gamemode.GetString(CurrentGameMode, sizeof(CurrentGameMode));
delete mp_gamemode;
return;
}
CurrentGameMode[0] = '\0';
}

public Action:WeaponMenu(client,args)
{
Weapons(client);
}
public Action:Weapons(clientId) {

if(clientId > 0)
{
new Handle:menu = CreateMenu(AdminWeaponMenuHandlerUS);
SetMenuTitle(menu, "Guns Menu");
AddMenuItem(menu, "option1", "MK18");
AddMenuItem(menu, "option2", "M14");
AddMenuItem(menu, "option3", "MP5K");
AddMenuItem(menu, "option4", "AT4");
AddMenuItem(menu, "option5", "AKS 74U");
SetMenuExitButton(menu, true);
DisplayMenu(menu, clientId, 15);
}
return Plugin_Handled;
}
public AdminWeaponMenuHandlerUS(Handle:menu, MenuAction:action, client, itemNum)
{
if(client > 0)
{
SetConVarBool(FindConVar("sv_cheats"), true, false);
if (action == MenuAction_Select)
{

switch (itemNum)
{
case 0:
{
FakeClientCommand(client, "give weapon_mk18");
FakeClientCommand(client, "give upgrade_ammo_ap_m4");
FakeClientCommand(client, "give upgrade_barrel_silencer_sec2");
FakeClientCommand(client, "give upgrade_optic_aimpoint");
FakeClientCommand(client, "give_upgrade siderail_flashlight_rail");
FakeClientCommand(client, "give_upgrade underbarrel_foregrip_sec1");
FakeClientCommand(client, "give_gear sec_nightvision");
FakeClientCommand(client, "give_gear sec_chest_carrier");
FakeClientCommand(client, "give_gear sec_heavy_armor");
}
case 1:
{
FakeClientCommand(client, "give weapon_m14");
FakeClientCommand(client, "give_upgrade ammo_ap_m14");
FakeClientCommand(client, "give_upgrade barrel_silencer_sec1");
FakeClientCommand(client, "give_upgrade optic_aimpoint");
FakeClientCommand(client, "give_upgrade siderail_flashlight_rail");
FakeClientCommand(client, "give_upgrade underbarrel_foregrip_sec2");
FakeClientCommand(client, "give_gear sec_nightvision");
FakeClientCommand(client, "give_gear sec_chest_carrier");
FakeClientCommand(client, "give_gear sec_heavy_armor");
}
case 2:
{
FakeClientCommand(client, "give weapon_mp5");
FakeClientCommand(client, "give_upgrade ammo_ap_mp5");
FakeClientCommand(client, "give_upgrade barrel_silencer_sec1");
FakeClientCommand(client, "give_upgrade optic_aimpoint");
FakeClientCommand(client, "give_upgrade siderail_flashlight_band");
FakeClientCommand(client, "give_gear sec_nightvision");
FakeClientCommand(client, "give_gear sec_chest_carrier");
FakeClientCommand(client, "give_gear sec_heavy_armor");
}
case 3:
{
FakeClientCommand(client, "give weapon_at4");

}
case 4:
{
FakeClientCommand(client, "give weapon_aks74u");
FakeClientCommand(client, "give_upgrade ammo_ap_aks74u");
FakeClientCommand(client, "give_upgrade barrel_silencer_ins1");
FakeClientCommand(client, "give_upgrade optic_aimpoint");
FakeClientCommand(client, "give_upgrade siderail_flashlight_band");
FakeClientCommand(client, "give_upgrade underbarrel_woodgrip");
FakeClientCommand(client, "give_gear ins_nightvision");
FakeClientCommand(client, "give_gear ins_chest_carrier");
FakeClientCommand(client, "give_gear ins_heavy_armor");
}
}
}
FakeClientCommand(client, "give_ammo 5");
SetConVarBool(FindConVar("sv_cheats"), false, false);
}
}

Вот тема которая поможет кодерам [insurgency] Upgrades - AlliedModders
 
Последнее редактирование:

over_trax

Участник
Сообщения
1,451
Реакции
488
в инсу играют не так много людей, ещё меньше людей брались за написание плагинов под неё, да, не уверен что у тебя получится)
 

smoke96

Участник
Сообщения
1,134
Реакции
175
Обратись у @Grey83 он как раз по этой игре знает достаточно, и думаю сможет тебе помочь.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@smoke96, я поиграл от силы час когда-то давно в эту игру.
Не понравилось.
Откуда я могу много знать об этой игре?
 

puma133

Участник
Сообщения
33
Реакции
12
Да уж, пока никто не хочет взяться за работу, возможно кто то поможет пояснить почему модификации не выдаються

case 2:
{
FakeClientCommand(client, "give weapon_mp5");
FakeClientCommand(client, "give_upgrade ammo_ap_mp5");
FakeClientCommand(client, "give_upgrade barrel_silencer_sec1");
FakeClientCommand(client, "give_upgrade optic_aimpoint");
FakeClientCommand(client, "give_upgrade siderail_flashlight_band");
FakeClientCommand(client, "give_gear sec_nightvision");
FakeClientCommand(client, "give_gear sec_chest_carrier");
FakeClientCommand(client, "give_gear sec_heavy_armor");
}

Говорят решения в этом посте [insurgency] Upgrades - AlliedModders но я не особо понимаю как применить
 

puma133

Участник
Сообщения
33
Реакции
12
Вот еще один вариант без sv_cheats, уже лучше, но не выдает модификации

#include <sourcemod>
#include <sdktools>
#pragma newdecls required

char CurrentGameMode[30];

public Plugin myinfo =
{
name = "[INS] Guns Menu",
author = "",
description = "Guns Menu",
version = "0.4",
url = ""
};

public void OnPluginStart()
{
RegConsoleCmd("guns", WeaponMenu);
LoadTranslations("common.phrases");
}

public void OnConfigsExecuted()
{
ConVar mp_gamemode = FindConVar("mp_gamemode");
if (mp_gamemode != null)
{
mp_gamemode.GetString(CurrentGameMode, sizeof(CurrentGameMode));
delete mp_gamemode;
return;
}
CurrentGameMode[0] = '\0';
}

public Action WeaponMenu(int client, int args)
{
if (IsClientInGame(client))
{
if (!IsFakeClient(client))
{
Weapons(client);
}
}
return Plugin_Handled;
}

public Action Weapons(int client)
{
if (client > 0)
{
Menu menu = new Menu(AdminWeaponMenuHandlerUS);
menu.SetTitle("Guns Menu");
menu.AddItem("1", "AT4");
menu.AddItem("2", "RPG");
menu.AddItem("3", "MK18");
menu.ExitButton = false;
menu.Display(client, 15);
}
return Plugin_Handled;
}

public int AdminWeaponMenuHandlerUS(Menu menu, MenuAction action, int client, int itemNum)
{
switch (action)
{
case MenuAction_End:
{
delete menu;
}
case MenuAction_Select:
{
char info[32];
menu.GetItem(itemNum, info, sizeof(info));
if (strcmp(info, "1") == 0)
{
GivePlayerItem(client, "weapon_at4");
}
if (strcmp(info, "2") == 0)
{
GivePlayerItem(client, "weapon_rpg7");
}
if (strcmp(info, "3") == 0)
{
GivePlayerItem(client, "weapon_mk18");
GivePlayerItem(client, "upgrade_optic_aimpoint"); //модификация
}

GivePlayerItem(client, "ammo 5");
}
}
}

stock void HxFakeCHEAT(int &client, char[] sCmd, char[] sArg)
{
int iFlags = GetCommandFlags(sCmd);
SetCommandFlags(sCmd, iFlags & ~FCVAR_CHEAT);
FakeClientCommand(client, "%s %s", sCmd, sArg);
SetCommandFlags(sCmd, iFlags);
}
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Попробуй будут ли работать 3 и 4 пункты меню вот такого кода:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_functions>

static const char TYPE[][] = {"give_upgrade", "give_gear"};

enum
{
    T_Upgrade,
    T_Gear
};

Menu hMenu;

public void OnPluginStart()
{
    RegConsoleCmd("sm_guns", Cmd_WeaponMenu);

    hMenu = new Menu(Handler_WeaponMenu);
    hMenu.SetTitle("Guns Menu");
    hMenu.AddItem("", "AT4");
    hMenu.AddItem("", "RPG");
    hMenu.AddItem("", "MK18 AimPoint");
    hMenu.AddItem("", "MP5 (test)");
    hMenu.ExitButton = false;
}

public Action Cmd_WeaponMenu(int client, int args)
{
    if(client && IsClientInGame(client) && !IsFakeClient(client)) hMenu.Display(client, 15);
    return Plugin_Handled;
}

public int Handler_WeaponMenu(Menu menu, MenuAction action, int client, int param)
{
    if(action == MenuAction_Select)
    {
        switch(param)
        {
            case 0:    GivePlayerItem(client, "weapon_at4");
            case 1:    GivePlayerItem(client, "weapon_rpg7");
            case 2:
            {
                GivePlayerItem(client, "weapon_mk18");
                GivePlayerItem(client, "upgrade_optic_aimpoint"); //модификация
            }
            case 3:
            {
                GivePlayerItem(client, "weapon_mp5");
                UnCheatCmd(client, T_Upgrade, "ammo_ap_mp5");
                UnCheatCmd(client, T_Upgrade, "barrel_silencer_sec1");
                UnCheatCmd(client, T_Upgrade, "optic_aimpoint");
                UnCheatCmd(client, T_Upgrade, "siderail_flashlight_band");
                UnCheatCmd(client, T_Gear, "sec_nightvision");
                UnCheatCmd(client, T_Gear, "sec_chest_carrier");
                UnCheatCmd(client, T_Gear, "sec_heavy_armor");
            }
        }
        GivePlayerItem(client, "ammo 5");
    }
}

stock void UnCheatCmd(int client, int type, char[] arg)
{
    int flags = GetCommandFlags(TYPE[type]);
    SetCommandFlags(TYPE[type], flags & ~FCVAR_CHEAT);
    FakeClientCommand(client, "%s %s", TYPE[type], arg);
    SetCommandFlags(TYPE[type], flags);
}
И ещё не помешало бы сделать и выложить дампы datamaps и netprops для игры (ты же знаешь как их делать?).
 
Последнее редактирование:

puma133

Участник
Сообщения
33
Реакции
12
@Grey83, да, конечно, вот дампы.
3й и 4й пункт - оружия выдают , но без модификаций, лог консоли
А тут названия оружия и модификаций jaredballou/insurgency-theaters

L 12/02/2020 - 20:42:29: "@)(otnik<2><STEAM_1:1:429051992><#Team_Security>" say "!guns"
Attempted to create unknown entity type upgrade_optic_aimpoint!
NULL Ent in GiveNamedItem!
Attempted to create unknown entity type ammo 5!
NULL Ent in GiveNamedItem!
@)(otnik: !guns
L 12/02/2020 - 20:42:35: "@)(otnik<2><STEAM_1:1:429051992><#Team_Security>" say "!guns"
Attempted to create unknown entity type upgrade_optic_aimpoint!
NULL Ent in GiveNamedItem!
Attempted to create unknown entity type ammo 5!
NULL Ent in GiveNamedItem!
@)(otnik: !guns
L 12/02/2020 - 20:42:42: "@)(otnik<2><STEAM_1:1:429051992><#Team_Security>" say "!guns"
Attempted to create unknown entity type ammo 5!
NULL Ent in GiveNamedItem!
@)(otnik: !guns
L 12/02/2020 - 20:42:46: "@)(otnik<2><STEAM_1:1:429051992><#Team_Security>" say "!guns"
Attempted to create unknown entity type upgrade_optic_aimpoint!
NULL Ent in GiveNamedItem!
Attempted to create unknown entity type ammo 5!
NULL Ent in GiveNamedItem!
@)(otnik: !guns
L 12/02/2020 - 20:42:52: "@)(otnik<2><STEAM_1:1:429051992><#Team_Security>" say "!guns"
Attempted to create unknown entity type upgrade_optic_aimpoint!
NULL Ent in GiveNamedItem!
Attempted to create unknown entity type ammo 5!
NULL Ent in GiveNamedItem!
@)(otnik: !guns
L 12/02/2020 - 20:43:00: "@)(otnik<2><STEAM_1:1:429051992><#Team_Security>" say "!guns"
Attempted to create unknown entity type ammo 5!
NULL Ent in GiveNamedItem!
@)(otnik: !guns
L 12/02/2020 - 20:43:04: "@)(otnik<2><STEAM_1:1:429051992><#Team_Security>" say "!guns"
Attempted to create unknown entity type ammo 5!
NULL Ent in GiveNamedItem!
@)(otnik: !guns
L 12/02/2020 - 20:43:06: "@)(otnik<2><STEAM_1:1:429051992><#Team_Security>" say "!guns"
Attempted to create unknown entity type ammo 5!
NULL Ent in GiveNamedItem!
 

Вложения

  • datamaps.txt
    4.3 МБ · Просмотры: 7
  • netprops.txt
    1.1 МБ · Просмотры: 4

puma133

Участник
Сообщения
33
Реакции
12
Ребята помогите сделать хотя бы одну модификацию, дальше я сам
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Игра вот эта?
Какие принципы добавления обвеса на стволы? Есть какие-то ограничения?


Есть, в принципе идея, как можно попробовать сделать, но хз сработает ли.
Могу попробовать тестовый плагин написать.
У меня, в принципе, есть игра на акке, но её нужно устанавливать и создавать сервер, чтобы нормально потестить.
 

puma133

Участник
Сообщения
33
Реакции
12
@Grey83, Да, игра эта. У меня есть пару серваков, и есть сервер на котором можно протестировать могу дать фтп доступ. ПО поводу ограничений, лет 5 назад играл на таком сервере, где был похожий плагин, и там по модификациях не было ограничений, можно было на пулемет насадить шлушитель и 8х прицел. Впринципе он мне и нужне, чтобы обвешивать то что в орг игре нельзя делать
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
поставил, поиграл
нашёл способ выдачи токенов игроку (за которые экипировку игрок выбирает)
а вот принудительную выдачу обвеса пока не понял как сделать
 

puma133

Участник
Сообщения
33
Реакции
12
@Grey83, возможно попробуйте через m_hActiveWeapon (текущее оружие в руках), а затем измените m_upgradeSlots, чтобы добавить новое

C-подобный:
public Action:Command_Test2(client, args)
{
    if (client > 0)
    {
        new offset = GetEntSendPropOffs(client, "m_EquippedGear", true);
        if (offset == -1)
        {
            LogError("Failed to find m_EquippedGear on client");
        }
        else
        {
            //decl String:sClassname[64];
            for (new i = 0; i < 24; i+=4)
            {
                new value = GetEntData(client, offset + i);
                ReplyToCommand(client, "Value: %d | At offset %d", value, i);
                //if (entity != -1 && GetEntityClassname(entity, sClassname, sizeof(sClassname)))
                //{
                //    ReplyToCommand(client, sClassname);
                //}
            }
        }
    }
    return Plugin_Handled;
}

public Action:Command_Test(client, args)
{
    if (client > 0)
    {
        new weapon_index = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
        if (weapon_index == -1)
        {
            LogError("No active weapon");
        }
        else
        {
            new offset = GetEntSendPropOffs(weapon_index, "m_upgradeSlots", true);
            if (offset == -1)
            {
                LogError("Failed to find m_upgradeSlots on wepaon");
            }
            else
            {
                //decl String:sClassname[64];
                for (new i = 0; i < 32; i+=4)
                {
                    new value = GetEntData(weapon_index, offset + i);
                    ReplyToCommand(client, "Value: %d | At offset %d", value, i);
                    //if (entity != -1 && GetEntityClassname(entity, sClassname, sizeof(sClassname)))
                    //{
                    //    ReplyToCommand(client, sClassname);
                    //}
                }
            }
        }
    }
    return Plugin_Handled;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
В общем: получается выдавать оружие на используя sv_cheats 1, но при выдаче гранат почему-то скрывается всё оружие, иногда при выдаче пистолета происходит то же самое (возможно дело в ограничении переносимого веса, не проверял), также не получается сменить тип используемых патронов (игра игнорит изменение значения) и сделать дополнительные патроны (непонятно где это значение сохраняется, но выдача дополнительных магазинов не добавляет ни одного патрона, только пустые магазины).
Сама функция выдачи винтовок:
C-подобный:
stock void GivePlayerWeapon(int client, const char[] name, const int[] upgrades, const int ammo = 0, const int type = 0)
{//    слотов максимум 10
    static int wpn, i;
    if((wpn = CreateEntityByName(name)) == -1 || !DispatchSpawn(wpn)) return;

    if(type) SetEntData(wpn, m_iPrimaryAmmoType, type, _, true);    // не срабатывает, всегда обычные патроны
//    ChangeEdictState(client, m_iPrimaryAmmoType);
//    Апгрейды (m_upgradeSlots): 0 - прицел, 1 - патроны?, 2 - магазин, 3 - глушитель, 5- фонарик, 6 - рукоятка
    for(i = 0; i < 7; i++) if(upgrades[i]) SetEntProp(wpn, Prop_Send, "m_upgradeSlots", upgrades[i], _, i);
    SetEntData(wpn, m_iClip1, ammo);
    AcceptEntityInput(wpn, "use", client, client);
    if(type) SetEntData(wpn, m_iPrimaryAmmoType, type, _, true);    // попытка №2
    if(type) SetEntData(client, (m_iAmmo + type * 4), 10);            // не срабатывает
//    ChangeEdictState(client);
}
 

puma133

Участник
Сообщения
33
Реакции
12
В общем: получается выдавать оружие на используя sv_cheats 1, но при выдаче гранат почему-то скрывается всё оружие, иногда при выдаче пистолета происходит то же самое (возможно дело в ограничении переносимого веса, не проверял), также не получается сменить тип используемых патронов (игра игнорит изменение значения) и сделать дополнительные патроны (непонятно где это значение сохраняется, но выдача дополнительных магазинов не добавляет ни одного патрона, только пустые магазины).
Сама функция выдачи винтовок:
C-подобный:
stock void GivePlayerWeapon(int client, const char[] name, const int[] upgrades, const int ammo = 0, const int type = 0)
{//    слотов максимум 10
    static int wpn, i;
    if((wpn = CreateEntityByName(name)) == -1 || !DispatchSpawn(wpn)) return;

    if(type) SetEntData(wpn, m_iPrimaryAmmoType, type, _, true);    // не срабатывает, всегда обычные патроны
//    ChangeEdictState(client, m_iPrimaryAmmoType);
//    Апгрейды (m_upgradeSlots): 0 - прицел, 1 - патроны?, 2 - магазин, 3 - глушитель, 5- фонарик, 6 - рукоятка
    for(i = 0; i < 7; i++) if(upgrades[i]) SetEntProp(wpn, Prop_Send, "m_upgradeSlots", upgrades[i], _, i);
    SetEntData(wpn, m_iClip1, ammo);
    AcceptEntityInput(wpn, "use", client, client);
    if(type) SetEntData(wpn, m_iPrimaryAmmoType, type, _, true);    // попытка №2
    if(type) SetEntData(client, (m_iAmmo + type * 4), 10);            // не срабатывает
//    ChangeEdictState(client);
}
Да, я тоже столкнулся с проблемой что некоторое оружие просто изчазает, например С4 или коктейл молотова. Скажите как бороться с ошибкой в sourcemod: Reached limit of 128 for WeaponDefinitions ?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу