В нет пропах смотрел, похоже не узнать, но проверю повторно. Спасибо за совет, пошел гуглить про 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 помог. Оказалось все просто, вот как надо сделать:
#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;
}