[ANY] Получение KeyValue у сущности (entity)

inklesspen

Одержим MMORPG
Сообщения
1,594
Реакции
608
Получаем функцией GetKeyValue(int entity, const String:name[], String:buf[], int size)
PHP:
#include <sdktools>

new Handle:fGetKeyValue = INVALID_HANDLE

public OnPluginStart()
{
    StartPrepSDKCall(SDKCall_Entity)
    new Handle:conf = LoadGameConfigFile("func_getkeyvalue.txt")
    PrepSDKCall_SetFromConf(conf, SDKConf_Virtual, "CBaseEntity_GetKeyValue") // Можно вместо SDKConf_Virtual поставить SDKConf_Signature,
    CloseHandle(conf)
    PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer)
    PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer)
    PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain)
    fGetKeyValue = EndPrepSDKCall()
}

GetKeyValue(int entity, const String:name[], String:buf[], int size)
{
    SDKCall(fGetKeyValue, entity, name, buf, size)
}
ОБЯЗАТЕЛЬНО func_getkeyvalue.txt ПОЛОЖИТЬ В gamedata ПАПКУ

Пример для плагина
PHP:
new Handle:fGetKeyValue = INVALID_HANDLE

public OnPluginStart()
{
    StartPrepSDKCall(SDKCall_Entity)
    new Handle:conf = LoadGameConfigFile("func_getkeyvalue.txt")
    PrepSDKCall_SetFromConf(conf, SDKConf_Virtual, "CBaseEntity_GetKeyValue") // Можно вместо SDKConf_Virtual поставить SDKConf_Signature,
    CloseHandle(conf)
    PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer)
    PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer)
    PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain)
    fGetKeyValue = EndPrepSDKCall()
}

public OnEntityCreated(int entity, const String:classname[])
{
    if(StrEqual(classname, "func_breakable"))
        SDKHook(entity, SDKHook_OnTakeDamagePost, OnTakeDamage_FuncBreakable)
}

public OnTakeDamage_FuncBreakable(int victim, int client, int inflictor, float damage, int damagetype)
{
    if(client<65&&client>0&&IsClientInGame(client))
        PrintHintText(client, "Health: %i", GetKeyValueInt(victim, "health"))
}

int GetKeyValueInt(int entity, const String:name[])
{
    decl String:value[64]
    GetKeyValue(entity, name, value, 64)
    return StringToInt(value)
}

GetKeyValue(int entity, const String:name[], String:buf[], int size)
{
    SDKCall(fGetKeyValue, entity, name, buf, size)
}
Для вас оставил готовый плагин, достаточно пихнуть в начало
native ICNative_GetKeyValue(int entity, const String:name[], String:buffer[], int size)
PHP:
param1 Клиент
param2 Название ключа
param3 Буффер для значения
param4 Макс.размер буффера

P.S. Если используете сигнатуру и у вас винда, то работать будет только на CS:GO
 

Вложения

Последнее редактирование:

gibs

Фитиль народного волненья
Сообщения
721
Реакции
268
Сорсмод апи дают доступ к data и send таблицам. Я ещё не находил kv значение, которое бы не хранилось в соответствующем пропе. Этим никто пользоваться не будет.
 

inklesspen

Одержим MMORPG
Сообщения
1,594
Реакции
608
Сорсмод апи дают доступ к data и send таблицам. Я ещё не находил kv значение, которое бы не хранилось в соответствующем пропе. Этим никто пользоваться не будет.
Не ну мало-ли, я вот не нашел жизни у FuncBreakable, вот и решил замутить + немного удобнее, например с цветом, вместо того, чтобы находить оффсет и прибавлять, просто получаем строку и делим на... Ладно, это сложнее(
А вот FuncBreakable я действительно не нашел
 
Сверху