Помощь в переходе на reapi

Сообщения
15
Реакции
1
Переписал все плагины на reapi, насколько смог, но пока удалось избавиться только от модуля engine, fun и csx. С модулями hamsandwich и cstrike есть небольшой затык, а конкретно вот эти функции:

cstrike
cs_set_weapon_silen
cs_set_weapon_burst

hamsandwich
Ham_Weapon_PrimaryAttack

Могу ли я их как-то заменить используя reapi или fakemeta? С fakemeta я так понял не всё так просто, там есть довольно специфичные функции, так что этот модуль похоже никак не заменить. Но обидно крутить 2 выше перечисленных модуля буквально из-за одной-двух функций.

cs_set_weapon_silen
В reapi есть свойство m_Weapon_bSecondarySilencerOn, но его изменение ни к чему не привело. Также для глока есть m_GLOCK18_bBurstFire. Это свойство я еще не тестировал, но в любом случае это не решение, потому что фамас подобным свойством не обладает.
 
Сообщения
15
Реакции
1
Artemich, Да понимаю я, что там нагрузка на цп минимальная, но лучше без неё, чем с ней)
Ладно бы тут было много кода, а так всего одна-две функции.
 
Сообщения
15
Реакции
1
cstrike
cs_set_weapon_silen
cs_set_weapon_burst

За глушитель и стрельбу 3-мя пульками отвечает оффсет m_Weapon_iWeaponState. Чтобы включить/выключить нужно добавить/убрать соответствующий бит.

Код:
enum (<<= 1) {
    WPNSTATE_USP_SILENCED = 1,
    WPNSTATE_GLOCK18_BURST_MODE = 2,
    WPNSTATE_M4A1_SILENCED,
    WPNSTATE_ELITE_LEFT,
    WPNSTATE_FAMAS_BURST_MODE,
    WPNSTATE_SHIELD_DRAWN,
};

set_member(weapon_ent, m_Weapon_iWeaponState, WPNSTATE_USP_SILENCED);
set_member(weapon_ent, m_Weapon_iWeaponState, WPNSTATE_M4A1_SILENCED);
set_member(weapon_ent, m_Weapon_iWeaponState, WPNSTATE_GLOCK18_BURST_MODE);
set_member(weapon_ent, m_Weapon_iWeaponState, WPNSTATE_FAMAS_BURST_MODE);
 
Сообщения
654
Реакции
560
Помог
9 раз(а)
fakemeta и hamsandwich незаменимы. Один для хуков/вызова функции движка и работа с трейсами и.т.д а другой для хука/вызовов виртуальных функций геймлиба.

В принципе они сейчас не нужны с появлением реапи.
 
Сообщения
15
Реакции
1
fakemeta и hamsandwich незаменимы. Один для хуков/вызова функции движка и работа с трейсами и.т.д а другой для хука/вызовов виртуальных функций геймлиба.
Да, ты прав. Но идея уже поселилась в больной голове...
Я использую PrimaryAttack для подсчета количества выстрелов и выставления оффсета m_Weapon_flNextSecondaryAttack, т.к. он сбрасывается после каждого выстрела. Нашел метод как это сделать на fakemeta
 
Сообщения
654
Реакции
560
Помог
9 раз(а)
выставления оффсета m_Weapon_flNextSecondaryAttack,
Нашел метод как это сделать на fakemeta
https://forums.alliedmods.net/showthread.php?t=54887
Ну офсет обновляется после вызова PlaybackEvent. На примере ак
Так что это бесполезно.


подсчета количества выстрелов
Есть еще хук FireBullets3/FireBuckshot
 
Сообщения
15
Реакции
1
Если не ошибаюсь - есть мембер m_Weapon_iShotsFired, он отвечает за количество выстрелов вроде как.
Видел этот мембер, но мне один фиг нужен хук с правильным таймингом, чтобы переназначать m_Weapon_flNextSecondaryAttack.

Ну офсет обновляется после вызова PlaybackEvent.
Бляха, этого я и боялся) Еще не тестил просто.
А что за FireBullets3/FireBuckshot? Нигде их не нахожу. Их нет ни в reapi, не в документации на amxmodx.
 
Сообщения
15
Реакции
1
Сообщения
15
Реакции
1
Потестил немного. Хуки
RG_CBaseEntity_FireBullets
RG_CBaseEntity_FireBuckshots
вообще не вызываются во время стрельбы
RG_CBaseEntity_FireBullets3 - отрабатывает как надо, но тайминг слишком ранний
RG_CBasePlayerWeapon_KickBack - тайминг не проверял, но там не всё оружие отслеживается. Usp, например, нет, а мне нужен именно юсп и эмка.
В итоге решил остановиться на RG_CBaseEntity_FireBullets3. Для подсчета количества выстрелов - то что нужно, а вот для параметра m_Weapon_flNextSecondaryAttack буду использовать RequestFrame.
С этой функцией вроде есть проблемы
но я на личном опыте их не замечал. Ну еще как вариант можно не вы*бываться и использовать hamsandwich использовать RG_CBasePlayerWeapon_ItemPostFrame, но первый вариант должен быть получше.
 
Сообщения
654
Реакции
560
Помог
9 раз(а)
RG_CBaseEntity_FireBuckshots
вообще не вызываются во время стрельбы
Он для дробовиков.

RG_CBasePlayerWeapon_KickBack - тайминг не проверял, но там не всё оружие отслеживается
Кстати да. Нет пистолетов и снайперское оружие.
 
Сообщения
15
Реакции
1
Ну офсет обновляется после вызова PlaybackEvent
Ну кстати для юспа PlaybackEvent вызывается после выставления оффсета:
А для эмки буду использовать KickBack.

Он для дробовиков
А, тогда понятно, почему я его не отлавливал.

не страдайте ерундой
Да просто hamsandwich используется только в одном плагине и только для одной функции.
Ham_Weapon_PrimaryAttack ничем не заменить, но для моего сценария подойдет связка KickBack/PlaybackEvent.

PS: спасибо всем за помощь.
 

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

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