Как добавить MuzzleFlash к оружию?
Как добавить MuzzleFlash к оружию?

В данной статье я покажу как добавить на оружие кастомный MuzzleFlash

Ну для начала, нужно знать что такое Muzzle Flash. Muzzle Flash это спрайт перед дулом оружия при выстреле. Всё :^)

NB! Для того, чтобы Muzzle Flash кастомный показывался хорошо в игре, нужно убрать дефолтный с v_ и p_ модельки, чтобы стандартный Muzzle Flash не перекрывал наш кастомный. Для этого достаточно убрать эвенты в модельках. В данной статье я не буду это всё показывать, делается это всё достаточно просто.
Сразу говорю, вариант не мой, брал его с кода оружий KORD'a и gubka3d.

В начале кода добавляем данный код

#define CustomMuzzle(%0) (pev(%0, pev_impulse) == g_iszMuzzleKey)
#define Sprite_SetScale(%0,%1) set_pev(%0, pev_scale, %1)

// CSprite
#define m_maxFrame 35

// Muzzle Flash
#define MUZZLE_TIME 0.06 // Время обновления спрайта Muzzle Flash
#define MUZZLE_SPRITE "sprites/x/muzzleflash_plasma.spr" // Это наш Muzzle Flash. Меняете его на свой
#define MUZZLE_CLASSNAME "ent_mf_wpn" // Сюда пишем название для нашей энтити с Muzzle Flash'ом
#define MUZZLE_INTOLERANCE 100

new g_iszMuzzleKey;

В public plugin_init() добавляем следующий код
Служит он для регистрации синка нашего Muzzle Flash'a (обновления спрайта)

RegisterHam(Ham_Think, "env_sprite", "CMuzzleFlash_Think_Pre", false);

В public plugin_precache() добавляем следующий код
// Muzzle Flash
engfunc(EngFunc_PrecacheModel, MUZZLE_SPRITE);

g_iszMuzzleKey = engfunc(EngFunc_AllocString, MUZZLE_CLASSNAME);

Дальше в конце кода добавляем следующие стоки для создания Muzzle Flash'a
stock Sprite_SetTransparency(const iSprite, const iRendermode, const Float: flAmt, const iFx = kRenderFxNone)
{
	set_pev(iSprite, pev_rendermode, iRendermode);
	set_pev(iSprite, pev_renderamt, flAmt);
	set_pev(iSprite, pev_renderfx, iFx);
}

stock Weapon_MuzzleFlash(const iPlayer, const szMuzzleSprite[], const Float: flScale, const Float: flBrightness, const iAttachment)
{
	if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < MUZZLE_INTOLERANCE)
	{
		return FM_NULLENT;
	}
	
	static iSprite, iszAllocStringCached;
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "env_sprite")))
	{
		iSprite = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
	}
	
	if(pev_valid(iSprite) != 2)
	{
		return FM_NULLENT;
	}
	
	set_pev(iSprite, pev_model, szMuzzleSprite);
	set_pev(iSprite, pev_spawnflags, SF_SPRITE_ONCE);
	
	set_pev(iSprite, pev_classname, MUZZLE_CLASSNAME);
	set_pev(iSprite, pev_impulse, g_iszMuzzleKey);
	set_pev(iSprite, pev_owner, iPlayer);
	
	set_pev(iSprite, pev_aiment, iPlayer);
	set_pev(iSprite, pev_body, iAttachment);
	
	Sprite_SetTransparency(iSprite, kRenderTransAdd, flBrightness);
	Sprite_SetScale(iSprite, flScale);
	
	dllfunc(DLLFunc_Spawn, iSprite)

	return iSprite;
}

Под/над ними добавляем следующий код, который отвечает за анимацию и удаление Muzzle Flash'a
public CMuzzleFlash_Think_Pre(const iSprite)
{
	static Float: flFrame;
	
	if (pev_valid(iSprite) != 2 || !CustomMuzzle(iSprite))
	{
		return HAM_IGNORED;
	}
	
	if (pev(iSprite, pev_frame, flFrame) && ++flFrame - 1.0 < get_pdata_float(iSprite, m_maxFrame, 4))
	{
		set_pev(iSprite, pev_frame, flFrame);
		set_pev(iSprite, pev_nextthink, get_gametime() + MUZZLE_TIME);
		
		return HAM_SUPERCEDE;
	}

	set_pev(iSprite, pev_flags, FL_KILLME);
	return HAM_SUPERCEDE;
}

Теперь осталось отоброзить Muzzle Flash. Ищем функцию с выстрелом оружия (ну или просто ищите анимацию выстрела)
Так как я использую код оружий на базе batcoh'a, то если искать функцию выстрела то она выглядит так public CWeapon__PrimaryAttack_Pre(iItem)
Ну и теперь добавляем данный код в нашу функцию выстрела. Обычно я добавляю её до Анимации выстрела

Weapon_MuzzleFlash(iPlayer, MUZZLE_SPRITE, 0.1, 255.0, 1); // Индекс игрока, Спрайт, Размер, Яркость, Аттачмент выстрела (от 0 до 3, подбирайте сами)

Вот в принципе и всё, вся магия :^)

Автор:

Статья была написана специально для сайта Zombie-Amxx.Ru

Привет, наша адмнистрация публикует только пушечный контент, поставь лайк под постом ниже и напишите самый топовый комментарий, мы готовим материал только для тебя, любимый Гость.

Комментариев 11
  1. Mort3m
    Mort3m
    • 0
    Годная статья, не знал раньше как сделать.
    Олег, спасибо <3
    • 2 мая 2018 02:19
  2. LuXo KING Gaming
    Is it for all weapons or what?
    • 2 мая 2018 05:34
  3. xUnicorn
    LuXo KING Gaming, yes, for any weapon
    • 2 мая 2018 08:02
  4. anonymous
    Цитата: xUnicorn
    LuXo KING Gaming, yes, for any weapon

    не for any a for all weapons.
    • 2 мая 2018 08:40
  5. r1chicorejz
    Довольно полезная статья, спасибо =3
    • 2 мая 2018 10:18
  6. PaXaN-ZOMBIE
    вроде код корда
    Barboss=Барыга
    • 2 мая 2018 11:48
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Сайт был обновлен, нажми CTRL+F5
Основа для вашей сборки
ReHLDS 3.7.0.698

ReHLDS (Reverse-engineered) - это новый шаг вперед, который дает второе дыхание нашим серверам. ReHLDS работает в 2 раза быстрей, чем HLDS.

AmxModx 5.2.7.1

AMXModX - это Metamod дополнение, которое позволяет создавать новые модификации для Half-Life на языке Pawn

Reunion 0.1.92

Reunion является продолжением Dproto для ReHLDS. Это metamod плагин, который позволяет заходить 47/48 Non-Steam на сервер.

Revoice 0.1.0.34

Revoice - это Metamod plugin, который дает возможность общения голосовым чатом между non-steam и steam клиентами.

Metamod-r 1.3.128

Новый Metamod-r содержит огромное количество оптимизаций производительности и намного более чистый код. Ядро было написано с использованием JIT-компилятора.

Ultimate Unprecacher 1.1

Ultimate Unprecacher являет плагином для MetaMod, работает он по принципу отключение не нужных ресурсов на вашем сервере, тем самым вы сможете освободить места для ресурсов под ваши плагины, с помощью данного модуля можно избавиться от ошибки 512!

ReAuthCheck 0.1.6

ReAuthCheck - это Metamod плагин, который занимается проверкой ваших игроков на валидность, с помощью данного модуля для REHLDS вы сможете защитить свой сервер от ботов, которые постоянно спамят рекламу или просто забивают слот на сервере!

NetBufExtender (NBEX) 1.0

NetBufExtender или NBEX - это метамод-плагин, который расширяет "интернет-буфер": буферы сервера и клиента(гарантия не 100%). Расширяет до 64 кб. Это значит, что у игроков уменьшается вероятность быть кикнутыми с ошибкой "Reliable channel overflowed".

UserInfoNetOptimizer (UINO) 1.0

UINO — metamod-плагин, который позволяет удалять ненужные поля из userinfo(setinfo) когда движок передаёт его другим игрокам на сервере. Данная мера уменьшает объём передаваемых данных и немного сокращает шанс быть кикнутым с "Reliable channel overflowed".

Информация

Добро пожаловать на WIZARD-CS.RU!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт