- Статьи
- 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%
Скидка на покупку всех
сборок до 08.09.2024
Специально для тебя - Гость
Выбрать сборку
Паблик Сборка кс 1.6
За деньги можем поставить что бы работал !
Бэкап сайта Zombie-mod.ru (Около 1000+ новостей)
спасибо, мой друг
Паблик Сборка кс 1.6
не работает
CS-Bans 1.3.4 Последние версии CS:Bans
Добавили новую версию !
Плагин « Свинорез / Svinorez » для CS 1.6
файлы местами поменяйте, 2.1 со скином игрока
GameCMS (Game Content Management System) Данные для Связи. https://vk.com/id344641190 https://t.me/SysTemmmmmm Discord: Wizard#2169
Данные для Связи.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".