Доброго времени суток друзья,сегодня я расскажу вам как сделать пистолет(например) который будет стрелять лазером,при котором так же имеется эффект исчезновения нпс как от выстрела энергетическим шаром(незнаю как по-другому объяснить) =)
Итак приступим,для примера как раз таки возьмём пистолет.
На сервере откроем файл weapon_pistol.cpp
И под includes gamestat.h
Добавим
Code
#include "beam_shared.h"
#include "ammodef.h"
#define PHYSCANNON_BEAM_SPRITE "sprites/orangelight1.vmt"
Далее в public(под DECLARE_ACTTABLE();) добавим
Теперь после BEGIN_DATADESC( CWeaponPistol ) добавим
Code
DEFINE_FIELD( m_nBulletType, FIELD_INTEGER ),
И поменяем
Code
void PrimaryAttack( void );
На
Code
void PrimaryAttack( trace_t &tr, int nDamageType, CBaseCombatCharacter *pOperator );
Теперь идём к
Code
CWeaponPistol::CWeaponPistol( void )
И добавляем
Далее спускаемся до
Code
void CWeaponPistol::PrimaryAttack( void )
И меняем на
Code
void CWeaponPistol::PrimaryAttack( trace_t &tr, int nDamageType, CBaseCombatCharacter *pOperator )
Теперь после
Code
m_iPrimaryAttacks++;
gamestats->Event_WeaponFired( pOwner, true, GetClassname() );
Добавляем
Code
Vector vecShootOrigin, vecShootDir;
vecShootOrigin = pOperator->Weapon_ShootPosition();
DrawBeam( vecShootOrigin, tr.endpos, 15.5 );
И теперь в самом конце файла добавляем
Code
//-----------------------------------------------------------------------------
// Purpose:
// Input : &startPos -
// &endPos -
// width -
// useMuzzle -
//-----------------------------------------------------------------------------
void CWeaponPistol::DrawBeam( const Vector &startPos, const Vector &endPos, float width )
{
//Tracer down the middle
UTIL_Tracer( startPos, endPos, 0, TRACER_DONT_USE_ATTACHMENT, 6500, false, "GaussTracer" );
//Draw the main beam shaft
CBeam *pBeam = CBeam::BeamCreate( PHYSCANNON_BEAM_SPRITE, 15.5 );
pBeam->SetStartPos( startPos );
pBeam->PointEntInit( endPos, this );
pBeam->SetEndAttachment( LookupAttachment("Muzzle") );
pBeam->SetWidth( width );
// pBeam->SetEndWidth( 0.05f );
pBeam->SetBrightness( 255 );
pBeam->SetColor( 255, 185+random->RandomInt( -16, 16 ), 40 );
pBeam->RelinkBeam();
pBeam->LiveForTime( 0.1f );
}
//-----------------------------------------------------------------------------
// Purpose:
// Input : &tr -
// nDamageType -
//-----------------------------------------------------------------------------
void CWeaponPistol::DoImpactEffect( trace_t &tr, int nDamageType )
{
//Draw our beam
DrawBeam( tr.startpos, tr.endpos, 15.5 );
if ( (tr.surface.flags & SURF_SKY) == false )
{
CPVSFilter filter( tr.endpos );
te->GaussExplosion( filter, 0.0f, tr.endpos, tr.plane.normal, 0 );
m_nBulletType = GetAmmoDef()->Index("GaussEnergy");
UTIL_ImpactTrace( &tr, m_nBulletType );
}
}
Далее ищём файл hl2_gamerules.cpp и меняем
Code
def.AddAmmoType("Pistol", DMG_BULLET, TRACER_LINE_AND_WHIZ, "sk_plr_dmg_pistol", "sk_npc_dmg_pistol", "sk_max_pistol", BUL LET_IMPULSE(200, 1225), 0 );
На
Code
def.AddAmmoType("Pistol", DMG_DISSOLVE, TRACER_NONE, "sk_plr_dmg_pistol", "sk_npc_dmg_pistol", "sk_max_pistol", BULLET_IMPUL SE(200, 1225), 0 );
Всё готово,теперь можете открывать skills.cfg и менять как вам хочется дамаг от оружия.