Get keys from point entity - получить ключи точечной сущности

Сообщения
14
Реакции
6
Добрый день. На моей карте есть объект info_target, внутри которого (помимо 'targetname') есть 3 параметра: Light1, Light2, Light3. Я хочу при активации моего info_target активировать одну из 3-х энтити случайным образом (да, параметры внутри info_target и 'targetname' у этих 3-х энтити одинаковые). Но столкнулся с проблемой: как получить эти самые Keys'ы у info_target?

Сейчас делаю так:

Код:
RegisterHam(Ham_Use, "info_target", "HamHook_RandomTarget", false);


public HamHook_RandomTarget(iRandomEnt, iEnt)
{
    new szBuf1[128];
    get_info_keybuffer(iRandomEnt, szBuf1, charsmax(szBuf1));
    UTIL_SayText(0, "%s", szBuf1);
    return HAM_IGNORED;
}
Однако get_info_keybuffer используется только для сервера или клиента, поэтому в чат я ничего не получаю.

Еще думал над pfn_keyvalue, но там как-то уж ооочень неудобно это реализовать. Как все-таки получить эти самые параметры у энтити?
 
Сообщения
678
Реакции
579
Предупреждения
8
Помог
9 раз(а)
Сообщения
14
Реакции
6
BalbuR, оно не подходит. Там даже в описании написано, что он уже принимает Key в качестве аргумента. А я этот Key как раз получить пытаюсь
7 Дек 2024
Vaqtincha, Спасибо, эту штуку попробую, но все-таки хотелось бы и ответ на основной вопрос получить, если таковой имеется
 
Сообщения
678
Реакции
579
Предупреждения
8
Помог
9 раз(а)
PhED, есть хук FM_KeyValue и я думаю можно сделать как реализовано моде (те получить их и записывать на свободный pev)
 
Сообщения
14
Реакции
6
Vaqtincha, FM_KeyValue и pfn_keyvalue(), упомянутый в самом начале, делают одно и тоже. Да, я тоже думал над такой реализацией, но боюсь тут есть парочка проблем: во-первых, код будет супер-неоптимизированный, ибо внутри этих хуков пары keyvalue передаются в каком-то рандомном порядке (т.е. я не могу сразу проверить подходит мне конкретно эта сущность или нет, т.к. targetname может передаться значительно позже), а значит код придется делать очень большим с кучей проверок и циклов; во-вторых, из первой причины вытекает другая: сами по себе сущности передаются по порядку (то есть их индексы от 1..EntCount), однако, я предполагаю, что пока не проинициализируется следующая энтити, доступ к ней из предыдущей получить никак нельзя (то есть, всякие find_ent_by_[name|tname|class|др.] использовать не получится, чтобы проверить нужна мне эта энтити или нет).

Хотелось бы отыскать такой способ, чтобы я в любое время мог получить эти Keys'ы. Но все равно спасибо)
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
В модуле fakemeta есть функция get_kvd.
 
Сообщения
14
Реакции
6
fl0wer, тоже работает только внутри forward'а (требует kvd handle)
 
Сообщения
857
Реакции
532
Помог
13 раз(а)
fl0wer, тоже работает только внутри forward'а (требует kvd handle)
берешь этот хук, регаешь его в прекеше
собираешь всю инфу по объектам, пушишь все это в дин.массив
анрегаешь хук, чтобы туда не пушились левые энтити
далее берешь из этого дин.массива инфу, которую тебе нужно - но по факту это все тоже самое делает get_keyvalue

я тут заметил что ты хочешь сразу получить ключи, чтобы их рандомить, но как ты будешь понимать какие именно ключи нужно рандомить к конкретной энтити?
 
Сообщения
857
Реакции
532
Помог
13 раз(а)
можно сделать проще
в target задай имя, которое будет общим для всех объектов в рандоме
дальше плагином искать по части имени targetname и рандомить
 
Сообщения
14
Реакции
6
BalbuR, скорее всего так и придется сделать.

А рандомить тогда буду так:
получаю в Array все нужные мне энтити и для каждого из них внутри каждого Array еще один дин.массив с id'шниками keyvalues'ов внутри каждого info_target (правда, не знаю пока можно ли так. В классическом c++ проблем не возникло бы, а тут пока хз). Ну а потом на каждую энтити кидаю Ham_Use и ловлю его. В самом хуке по targetname ищу нужные мне ключи и среди них рандомлю, так же юзаю ExecuteHam(Ham_Use, ...).
7 Дек 2024
BalbuR, предполагается, что info_target'ов будет несколько, так же, как и объектов, которые он должен рандомить (и они, естественно, заранее не определены в плагине)
Upd: это к тому, что одно и тоже имя использовать (или же часть имени) не выйдет
Upd2: да и с рандомом я буду использовать, скорее всего, вариант fl0wer'а. Зачем велосипед изобретать. Но просто я хочу еще похожую концепцию (активацию энтити через сервер) использовать и в других целях, не только в рандоме. Поэтому и пытаюсь найти самый адекватный вариант
 

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

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