Участник
Пользователь
- Сообщения
- 899
- Реакции
- 150
- Помог
- 25 раз(а)
Здравставуйте.
Задался таким вопросом, а именно, как можно до выстрела отослать анимацию один раз, а затем устанавливать уже другую анимацию?
Мне нужно до выстрела оружия установить анимацию, а потом уже устанавливать другую анимацию.
У меня был сперва вариант хукать ПраймериАттак в пре, выставлять там первую анимацию, а затем ловить пост, и выставлять уже другую, но потом я вспомнил, что пре и пост хукаются в момент каждого выстрела.
Пока набросал такой вот мини код:
Будет ли в таком случае нормальным решением хукать Ham_Item_PostFrame, получать IN_ATTACK, задавать первую анимацию, и затем, через время, уже остылать аттаку?
Задался таким вопросом, а именно, как можно до выстрела отослать анимацию один раз, а затем устанавливать уже другую анимацию?
Мне нужно до выстрела оружия установить анимацию, а потом уже устанавливать другую анимацию.
У меня был сперва вариант хукать ПраймериАттак в пре, выставлять там первую анимацию, а затем ловить пост, и выставлять уже другую, но потом я вспомнил, что пре и пост хукаются в момент каждого выстрела.
Пока набросал такой вот мини код:
C++:
#include <AmxModX>
#include <HamSandWich>
#include <ReApi>
new const WeaponReference[] = "weapon_m4a1";
public plugin_init() {
RegisterHam(Ham_Weapon_PrimaryAttack, WeaponReference, "Ham_CBasePlayerWeapon__PrimaryAttack_Post", true);
}
public Ham_CBasePlayerWeapon__PrimaryAttack_Post(ItemId) {
static UserId; UserId = get_member(ItemId, m_pPlayer);
client_print_color(UserId, print_team_default, "^4%s ^1Attack: ^4Post^1!", WeaponReference);
// Тут выдача первой анимации
UTIL_SendWeaponAnim(MSG_ONE, UserId, ItemId, 2);
}
stock UTIL_SendWeaponAnim(const iDest, const pReceiver, const pItem, const iAnim)
{
static iBody; iBody = get_entvar(pItem, var_body);
set_entvar(pReceiver, var_weaponanim, iAnim);
message_begin(iDest, SVC_WEAPONANIM, .player = pReceiver);
write_byte(iAnim);
write_byte(iBody);
message_end();
if(get_entvar(pReceiver, var_iuser1))
return;
static i, iCount, pSpectator, aSpectators[MAX_PLAYERS];
get_players(aSpectators, iCount, "bch");
for (i = 0; i < iCount; i++)
{
pSpectator = aSpectators[i];
if(get_entvar(pSpectator, var_iuser1) != OBS_IN_EYE)
continue;
if(get_entvar(pSpectator, var_iuser2) != pReceiver)
continue;
set_entvar(pSpectator, var_weaponanim, iAnim);
message_begin(iDest, SVC_WEAPONANIM, .player = pSpectator);
write_byte(iAnim);
write_byte(iBody);
message_end();
}
}