Как добавить 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. xUnicorn
    PaXaN-ZOMBIE, в начале статьи даже написал об этом
    • 2 May 2018 11:56
  2. kHRYSTAL


    Годнота подъехала
    • 2 May 2018 12:02
  3. semisem
    Круто! Раньше не знал...
    • 2 May 2018 18:08
  4. Amerikanec
    хм круто я не знал


    • 2 May 2018 18:39
  5. Lunky
    Lunky
    • 0
    NB! Для того, чтобы Muzzle Flash кастомный показывался хорошо в игре, нужно убрать дефолтный с v_ и p_ модельки, чтобы стандартный Muzzle Flash не перекрывал наш кастомный. Для этого достаточно убрать эвенты в модельках. В данной статье я не буду это всё показывать, делается это всё достаточно просто. для кого просто? для новичков уж точно нет  - помогли бы уж
    • 11 March 2019 14:52
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