Вопрос по insurgecny

Artos

Участник
Сообщения
14
Реакции
1
Привет!

Может тут есть кто пишет плагины к insurgecny?

Это очень похоже на cs go, но есть свои специфичные вещи. Потому не все плагины работают из cs go, многие нужен минимальный допил, или не минимальный.

Собственно вопрос. В инсе можно цеплять атачменты к оружию, можно ли как-то получить что у игрока c m16 стоит кобра?

К примеру теперь я могу костыльно узнать есть ли у игрока броня, т.к при покупке брони меняется полностью модель. Но к примеру в инсе можно купить очки ночного видения, как получить информацию о том что куплены очки(На игроке при этом появляется модель очков)?
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Я сомневаюсь, что тут кто-то писал плагины для этой игры. Но иди просто путём элементарной логики. Например, сперва следует проверить содержимое send и data tables для каждой ентити. Возможно, какой обвес у игрока можно узнать просто из нет пропов. Если же такой поиск не дал никакого результата, то смотреть какие функции есть в серверной библиотеке. Минимальный реверс инжениринг
 

Artos

Участник
Сообщения
14
Реакции
1
В нет пропах смотрел, похоже не узнать, но проверю повторно. Спасибо за совет, пошел гуглить про data tables.
--- Добавлено позже ---
Потренировался дергать свойства из нет пропа. Теперь могу узнать количество патрон, количество магазинов и тип патрон. Теперь точно уверен что в нет пропах нет ничего о атачментах.

Остается еще data tables, но пока не нагугли примеры с data tables. Буду благодарен за примеры.
--- Добавлено позже ---
Случайно наткнулся, кажется это то что надо:
Table: 000 (offset 0) (type DT_WeaponPurchases)
Member: m_hWeapon (offset 4) (type integer) (bits 32) ()
Member: m_iSlot (offset 44) (type integer) (bits 5) ()
Member: m_iSubSlot (offset 48) (type integer) (bits 5) ()
Table: m_hUpgrades (offset 8) (type m_hUpgrades)
Member: 000 (offset 0) (type integer) (bits 8) (Unsigned)
Member: 001 (offset 4) (type integer) (bits 8) (Unsigned)
Member: 002 (offset 8) (type integer) (bits 8) (Unsigned)
Member: 003 (offset 12) (type integer) (bits 8) (Unsigned)
Member: 004 (offset 16) (type integer) (bits 8) (Unsigned)
Member: 005 (offset 20) (type integer) (bits 8) (Unsigned)
Member: 006 (offset 24) (type integer) (bits 8) (Unsigned)
Member: 007 (offset 28) (type integer) (bits 8) (Unsigned)
Member: 008 (offset 32) (type integer) (bits 8) (Unsigned)

Осталось понять как выдирать данный из "подтаблиц".
--- Добавлено позже ---
Завел тред на [insurgency] Upgrades - AlliedModders

Если у кого-то есть подсказки как посмотреть что надо передать в m_hUpgrades, буду благодарен.
--- Добавлено позже ---
В итоге могу дергать всякие Member: m_nRecievedTokens (offset 12) (type integer) (bits 8) (Unsigned) и даже нашел пример с:
Table: m_hMyWeapons (offset 2828) (type m_hMyWeapons)
Member: 000 (offset 0) (type integer) (bits 21) (Unsigned|NoScale)
Member: 001 (offset 4) (type integer) (bits 21) (Unsigned|NoScale)
Member: 002 (offset 8) (type integer) (bits 21) (Unsigned|NoScale)
Member: 003 (offset 12) (type integer) (bits 21) (Unsigned|NoScale)
Member: 004 (offset 16) (type integer) (bits 21) (Unsigned|NoScale)
Member: 005 (offset 20) (type integer) (bits 21) (Unsigned|NoScale)
Member: 006 (offset 24) (type integer) (bits 21) (Unsigned|NoScale)
Member: 007 (offset 28) (type integer) (bits 21) (Unsigned|NoScale)
...

Но не могу понять логику m_hUpgrades и скажем m_EquippedGear(Который как мне казалось должен вообще делаться по аналогии с m_hMyWeapons)

Я так понимаю что возможно они вызываются как m_iAmmo, но я не могу понять как люди узнают нужные параметры(Не считая варианта что находят как рабоать с m_iAmmo)
--- Добавлено позже ---
Ура. FrozDark помог. Оказалось все просто, вот как надо сделать:
C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

#define PLUGIN_VERSION    "1.0.0"

public Plugin:myinfo =
{
    name        = "Test",
    author        = "FrozDark",
    description    = "",
    version        = PLUGIN_VERSION,
    url            = "www.hlmod.ru"
}

public OnPluginStart()
{
    RegConsoleCmd("sm_test", Command_Test);
    RegConsoleCmd("sm_test2", Command_Test2);
}

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;
}
 
Последнее редактирование:
Сверху Снизу