Разные entity id в <csx> и <reapi>

Сообщения
15
Реакции
1
Привет. Возникла проблема при попытке портировать плагин с модуля csx на reapi. В csx я использовал grenade_throw форвард
Код:
public grenade_throw(c, grenade, weapon_id)
{
    server_print("grenade: %d, weapon_id: %d", grenade, weapon_id);
}
Полученный индекс grenade я потом использовал для создания эффекта TE_BEAMPOINTS.
После того, как повесил хук на RG_CBasePlayer_ThrowGrenade, полученный индекс отличается от того, что дает форвард grenade_throw.
Из-за чего эффект перестал работать.
Код:
[csx] grenade: 156, weapon_id: 9
[reapi] grenade: 159, weapon_id: 9, CSW_SMOKEGRENADE: 9
Это моя первая попытка подружиться с reapi, еще толком не знаю ничего. Тут свои нейтивы для создания эффектов?
Я пытался найти аналог функции message_begin по типу rg_message_begin, но не нашел такую.
Код:
public plugin_init()
{
    RegisterHookChain(RG_CBasePlayer_ThrowGrenade, "throw_grenade");
}

public throw_grenade(c, grenade)
{
    new weapon_id;

    weapon_id = rg_get_iteminfo(grenade, ItemInfo_iId);
    server_print("grenade: %d, weapon_id: %d, CSW_SMOKEGRENADE: %d", grenade, weapon_id, CSW_SMOKEGRENADE);
}
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
grenade это ent. А пробовал использоваь хук в post?
RegisterHookChain(RG_CBasePlayer_ThrowGrenade, "throw_grenade", true);
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Использовать пост-хук. Гранату в мире можно получить через GetHookChainReturn(ATYPE_INTEGER).
 
Сообщения
15
Реакции
1
grenade это ent. А пробовал использоваь хук в post?
RegisterHookChain(RG_CBasePlayer_ThrowGrenade, "throw_grenade", true);
Пост не помог, grenade по-прежнему указывает другое значение.

Использовать пост-хук. Гранату в мире можно получить через GetHookChainReturn(ATYPE_INTEGER).
GetHookChainReturn в пост хуке вернул то, что нужно, спасибо.
 
Сообщения
657
Реакции
562
Предупреждения
8
Помог
9 раз(а)
Сообщения
15
Реакции
1
Ну я как раз в инклюде и нашел этот хук, и строчку эту видел с Return type, просто не понял, что это значит - я же не функцию вызываю, а навешиваю обработчик на событие. В таких случаях все переменные обычно передают в параметрах функции.

Хотя лучше const grenade может запутать и лучше переименовать его на const weapon
Я так и не понял, что в себе хранит переменная grenade. Это и не weapon_id (CSW_*) и не entity id.

ПС: как сказать "спасибо" под чьим-то постом?
9 Май 2024
Кажется понял, grenade нужен для работы с функциями reapi, т.к. следующий код возвращает 0
Код:
ent = GetHookChainReturn(ATYPE_INTEGER);
weapon_id = rg_get_iteminfo(ent, ItemInfo_iId);
server_print("weapon_id: %d", weapon_id);
В rg_get_iteminfo нужно именно grenade передавать.
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Я так и не понял, что в себе хранит переменная grenade. Это и не weapon_id (CSW_*) и не entity id.
Аргумент функции grenade - это энтити у игрока в руках (в инвентаре). С неё можно получить weapon id.
То что получаешь из return - это энтити созданной гранаты, которая показывается в мире (летит).

ПС: как сказать "спасибо" под чьим-то постом?
Справа внизу в каждом сообщении.
 
Сообщения
15
Реакции
1
Аргумент функции grenade - это энтити у игрока в руках (в инвентаре). С неё можно получить weapon id.
То что получаешь из return - это энтити созданной гранаты, которая показывается в мире (летит).


Справа внизу в каждом сообщении.
Понял, благодарю.
 

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

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