//projectile used for weapon_tobow. #include "data_classlevels_data" class ArrowProjectile : ScriptBaseEntity { private CSprite@ cShoot; float m_yawCenter; float m_pitchCenter; void Spawn() { Precache(); self.pev.movetype = MOVETYPE_FLY; self.pev.solid = SOLID_BBOX; g_EntityFuncs.SetModel( self, "models/torre/weapons/arrow.mdl" ); self.pev.body = 1; m_yawCenter = pev.angles.y; m_pitchCenter = pev.angles.x; g_EntityFuncs.SetSize( self.pev, g_vecZero, g_vecZero ); } void Precache() { } void Think() { self.pev.angles.z = -Math.VecToAngles( self.pev.velocity ).x; if( !self.IsInWorld() ) { g_EntityFuncs.Remove( self ); return; } } void Touch( CBaseEntity@ pOther ) { self.SUB_StartFadeOut(); if( g_EngineFuncs.PointContents( self.pev.origin ) == CONTENTS_SKY ) { g_EntityFuncs.Remove( self ); return; } TraceResult tr; tr = g_Utility.GetGlobalTrace(); float tobow_dmg = 70 + (classvector[CLASSVECTOR_DAMAGE] * 3) + (classlevels_file_array[1] * (classvector[CLASSVECTOR_DAMAGE] + 10) * 0.5); entvars_t@ pevOwner = self.pev.owner.vars; g_WeaponFuncs.RadiusDamage( self.pev.origin, self.pev, pevOwner, tobow_dmg, tobow_RADIUS_NONE, CLASS_NONE, DMG_BULLET | DMG_NEVERGIB ); self.pev.nextthink = g_Engine.time + 0.1f; SetTouch( null ); g_EntityFuncs.Remove( self ); } } ArrowProjectile ShootArrowProjectile( entvars_t@ pevOwner, Vector vecStart, Vector vecVelocity ) { int r = 250; int g = 0; int b = 0; int br = 250; CBaseEntity@ cbearrow = g_EntityFuncs.CreateEntity( "toarrow", null, false); ArrowProjectile@ pArrow = cast(CastToScriptClass(cbearrow)); g_EntityFuncs.SetOrigin( pArrow.self, vecStart ); g_EntityFuncs.DispatchSpawn( pArrow.self.edict() ); pArrow.pev.solid = SOLID_BBOX; g_EntityFuncs.SetSize( pArrow.pev, g_vecZero, g_vecZero ); @pArrow.pev.owner = pevOwner.pContainingEntity; pArrow.pev.velocity = vecVelocity; pArrow.pev.angles = Math.VecToAngles( pArrow.pev.velocity ); const Vector vecAngles = Math.VecToAngles( pArrow.pev.velocity ); pArrow.pev.angles.x = vecAngles.x; pArrow.pev.angles.y = vecAngles.y; pArrow.pev.angles.z = vecAngles.z; pArrow.SetThink( ThinkFunction( pArrow.Think ) ); pArrow.pev.nextthink = g_Engine.time + 0.1f; pArrow.SetTouch( TouchFunction( pArrow.Touch ) ); pArrow.pev.gravity = 0.2f; pArrow.pev.dmg = tobow_DAMAGE1; return pArrow; } void RegisterArrowProjectile() { g_CustomEntityFuncs.RegisterCustomEntity( "ArrowProjectile", "toarrow" ); }