- Статьи
- 2018-12-21
Для начала, чтобы использовать кастомные анимации, нужно включить индексирование моделей. Есть два варианта для этого.
Если вы используете модификацию Zombie Plague 4.3 (и новее):
SET MODELINDEX OFFSET = 0
Если вы используете любую другую модификацию:
//#define SET_MODELINDEX_OFFSET
#define SET_MODELINDEX_OFFSET
При открытии модели, смотрим весь список анимаций и выбираем те, что нужны:

Вот выбрал я к примеру ref_aim_hammer и выглядит оно вот так:

Теперь переходим к основной части гайда. Нужно добавить код, чтобы как раз таки менялись анимации у нужного вам оружия. Открываем плагин вашего оружия и находим функцию, в которой идёт установка моделей оружия (Это Ham_Item_Deploy или CurWeapon), у меня в плагине это
RegisterHam(Ham_Item_Deploy, "weapon_knife", "CKnife__Item_Deploy_Post", true);
Ищем функцию CKnife__Item_Deploy_Post в плагине. Я нашёл, далее добавляем после наших проверок данный код:
// Linux extra offsets
#define linux_diff_weapon 4
#define linux_diff_animating 4
#define linux_diff_player 5
// CBasePlayerItem
#define m_pPlayer 41
// CBasePlayer
#define m_szAnimExtention 492
set_pdata_string(ИНДЕКС_ИГРОКА, m_szAnimExtention * 4, "НАЗВАНИЕ_АНИМАЦИИ", -1, linux_diff_player * linux_diff_animating);
В ИНДЕКС_ИГРОКА вписываем индекс игрока. У меня же это iPlayer, у вас может быть id / player / pPlayer / index.
В НАЗВАНИЕ_АНИМАЦИИ берём именно то, что указано в конце анимации в модельке игрока. То есть hammer или m134.
У меня получился такой код:
public CKnife__Item_Deploy_Post(iItem)
{
// Linux extra offsets
#define linux_diff_weapon 4
#define linux_diff_animating 4
#define linux_diff_player 5
// CBasePlayerItem
#define m_pPlayer 41
// CBasePlayer
#define m_szAnimExtention 492
static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
if(zp_get_user_zombie(iPlayer)) return;
set_pev(iPlayer, pev_viewmodel2, KNIFE_VIEW_MODEL);
set_pev(iPlayer, pev_weaponmodel2, KNIFE_PLAYER_MODEL);
set_pdata_string(iPlayer, m_szAnimExtention * 4, "hammer", -1, linux_diff_player * linux_diff_animating);
}
Теперь же, в моём случае, когда я достану нож, у меня будет Хаммер с анимацией не ..._knife, а с анимацией ..._hammer. Все стандартные анимации ..._knife заменены на ..._hammer.
Также, есть сток, чтобы вызвать нужную вам анимацию в нужный для вас момент. К примеру, у вас сделана кастомная атака на правую кнопку мыши у какого нибудь огнестрельного оружия. Добавляем данный сток:
stock UTIL_PlayerAnimation(const iPlayer, const szAnim[])
{
#define ACT_RANGE_ATTACK1 28
// Linux extra offsets
#define linux_diff_animating 4
#define linux_diff_player 5
// CBaseAnimating
#define m_flFrameRate 36
#define m_flGroundSpeed 37
#define m_flLastEventCheck 38
#define m_fSequenceFinished 39
#define m_fSequenceLoops 40
// CBaseMonster
#define m_Activity 73
#define m_IdealActivity 74
// CBasePlayer
#define m_flLastAttackTime 220
new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;
if((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1)
{
iAnimDesired = 0;
}
new Float: flGameTime = get_gametime();
set_pev(iPlayer, pev_frame, 0.0);
set_pev(iPlayer, pev_framerate, 1.0);
set_pev(iPlayer, pev_animtime, flGameTime);
set_pev(iPlayer, pev_sequence, iAnimDesired);
set_pdata_int(iPlayer, m_fSequenceLoops, bLoops, linux_diff_animating);
set_pdata_int(iPlayer, m_fSequenceFinished, 0, linux_diff_animating);
set_pdata_float(iPlayer, m_flFrameRate, flFrameRate, linux_diff_animating);
set_pdata_float(iPlayer, m_flGroundSpeed, flGroundSpeed, linux_diff_animating);
set_pdata_float(iPlayer, m_flLastEventCheck, flGameTime , linux_diff_animating);
set_pdata_int(iPlayer, m_Activity, ACT_RANGE_ATTACK1, linux_diff_player);
set_pdata_int(iPlayer, m_IdealActivity, ACT_RANGE_ATTACK1, linux_diff_player);
set_pdata_float(iPlayer, m_flLastAttackTime, flGameTime , linux_diff_player);
}
Теперь же, находим нужный нам момент, когда нужно вызвать анимацию и используем данный сток: UTIL_PlayerAnimation(iPlayer, "crouch_shoot_m134");
В данном же случае, нужно вписывать полное название анимации. Также iPlayer заменяете на свой индекс игрока и crouch_shoot_m134 на свою анимацию.Вот в принципе и всё.
Хотелось бы добавить, при использовании индексации моделей, теперь у вас будут пофикшены хитбоксы. На примере, возьмём данную модель:
При выключенной индексации моделей, хитбоксы у этой модели будут кривыми, потому что модель большая и будут использоваться хитбоксы от стандартных моделей, то есть вы будете стрелять в голову - вы не будете попадать по голове, пули будут проходить сквозь модель и не будет проходить также урон, однако если будете стрелять в тело, будет засчитываться попадание в голову. При включенной индексации моделей хитбоксы будут правильными и такой проблемы не будет.
Пожертвовать Вы можете сделать автору xUnicorn, подарок в виде пожертвования на его электронную копилку ;)
30%
Скидка на покупку всех
сборок до 30.12.2025
Специально для тебя - Гость

Выбрать сборку

Готовый сервер Zombie Plague 4.3 By Mazik102
че зашляпа я не могу скачать

CS1.6 VIPClient TOP
Кому надо хорошая кс 1.6 можно скачать https://vipclientcs.com/download/cs1.6_vipcient.exe

GameCMS 3.619 (Nulled by OverGame)
Пишет неверный токен это что?

GameCMS АБСОЛЮТНО СО ВСЕМИ МОДУЛЯМИ
Спасибо вам огромное за такой материал. Низкий вам поклон. Всё работает как часики

CYBERSPORT CS 1.6
А как скачать ссылки нет
Данные для Связи.https://vk.com/id344641190 https://t.me/SysTemmmmmm Discord: Wizard#2169Услуга Помощь в установке/настройке серверов/модов/плагинов/сайтов.
GameCMS (Game Content Management System) Данные для Связи. https://vk.com/id344641190 https://t.me/SysTemmmmmm Discord: Wizard#2169
Исправили Почту всех приходит, Очистили базу от кометов, Мусорных файлов, Дальше будем работать по файлам.
ReHLDS (Reverse-engineered) - это новый шаг вперед, который дает второе дыхание нашим серверам. ReHLDS работает в 2 раза быстрей, чем HLDS.
AMXModX - это Metamod дополнение, которое позволяет создавать новые модификации для Half-Life на языке Pawn
Reunion является продолжением Dproto для ReHLDS. Это metamod плагин, который позволяет заходить 47/48 Non-Steam на сервер.
Revoice - это Metamod plugin, который дает возможность общения голосовым чатом между non-steam и steam клиентами.
Новый Metamod-r содержит огромное количество оптимизаций производительности и намного более чистый код. Ядро было написано с использованием JIT-компилятора.
Ultimate Unprecacher являет плагином для MetaMod, работает он по принципу отключение не нужных ресурсов на вашем сервере, тем самым вы сможете освободить места для ресурсов под ваши плагины, с помощью данного модуля можно избавиться от ошибки 512!
ReAuthCheck - это Metamod плагин, который занимается проверкой ваших игроков на валидность, с помощью данного модуля для REHLDS вы сможете защитить свой сервер от ботов, которые постоянно спамят рекламу или просто забивают слот на сервере!
NetBufExtender или NBEX - это метамод-плагин, который расширяет "интернет-буфер": буферы сервера и клиента(гарантия не 100%). Расширяет до 64 кб. Это значит, что у игроков уменьшается вероятность быть кикнутыми с ошибкой "Reliable channel overflowed".
UINO — metamod-плагин, который позволяет удалять ненужные поля из userinfo(setinfo) когда движок передаёт его другим игрокам на сервере. Данная мера уменьшает объём передаваемых данных и немного сокращает шанс быть кикнутым с "Reliable channel overflowed".