Как добавить 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

Hello, Our administration publishes only cannon content, put like under the post below and write the top comment, we are preparing the material just for you, Darling Гость.

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

    не for any a for all weapons.
    • 2 May 2018 08:40
  5. r1chicorejz
    Довольно полезная статья, спасибо =3
    • 2 May 2018 10:18
  6. PaXaN-ZOMBIE
    вроде код корда
    Barboss=Барыга
    • 2 May 2018 11:48
Users belonging to group Guests cannot add comments to this article.
Base for Your Build
Information

Welcome to TB-TEAM.COM!

To become a full-fledged user of our portal, you need to register.
Register
Create your own account!

Register Now
Log In
Already registered? Go ahead and log in!

Log In