--=== Hornet Gun by Qiler ===-- --=== DEFINES===-- MyIndex = 0 Owner = 0 Time = _CurTime(); local Hornets = {} --===============-- --Edit this if you want HornetMass = 1; Delay = 0.15; MaxHornets = 10; HornetDamage = 4 -- List of Npcs what for hornets, origin will be 32 units above their reall origin. local NpcHeightMod = { "npc_alyx", "npc_antlionguard", "npc_barney", "npc_breen", "npc_citizen", "npc_combine_s", "npc_combine_e", "npc_turret_floor", "npc_dog", "npc_eli", "npc_fastzombie", "npc_gman", "npc_kleiner", "npc_metropolice", "npc_monk", "npc_mossman", "npc_poisonzombie", "npc_sniper", "npc_stalker", "npc_vortigaunt", "npc_zombie" } function onInit() _EntFire (MyIndex,"addoutput","materialoverride models/props_wasteland/dirtwall001a",0) end function SortEnemies (HornetID,Range) local EnemyTable = _EntitiesFindInSphere(_EntGetPos(HornetID),Range) local Enemies = {} local Enemy = 0; for E in EnemyTable do if EnemyTable[E] ~= Owner then local enemy = string.lower(_EntGetType ( EnemyTable[E] )) if enemy == "player" or string.find( enemy, "npc_" ) then table.insert( Enemies, EnemyTable[E] ); end end end if table.getn(Enemies) > 0 then local Random = math.random(1,table.getn(Enemies)) Enemy = Enemies[Random]; end return Enemy; end function MakeTrail (Entity,color) --Trail making function, i bet you will use it :P. local Nade = _EntCreate("npc_grenade_frag"); _EntSetPos( Nade, vector3(0,0,-10000) ); _EntSpawn( Nade ); local Trails =_EntitiesFindByClass("env_spritetrail"); for t in Trails do if _EntGetParent(Trails[t]) == Nade then _EntSetParent( Trails[t], Entity ) _EntFire(Trails[t],"color",color,0) _EntFire( Nade, "kill", "1", 0.1) end end end function onThink() for i in Hornets do if Hornets[i].Enemy ~= nil then if not _EntExists ( Hornets[i].Enemy ) then Hornets[i].Enemy = nil; end end if not _EntExists ( Hornets[i].Id ) then table.remove( Hornets, i ); if _swep.GetClipAmmo( MyIndex, 0 ) < 10 then _swep.SetClipAmmo( MyIndex, 0, _swep.GetClipAmmo( MyIndex, 0 ) + 1 ); end end end if _CurTime() > Time then for H in Hornets do if Hornets[H] ~= nil then if _EntExists ( Hornets[H].Id ) then if Hornets[H].Enemy == 0 or Hornets[H].Enemy == nil then Hornets[H].Enemy = SortEnemies (Hornets[H].Id,300); end local EnemyPos = vector3(0,0,0) if Hornets[H].Enemy ~= 0 and Hornets[H].Enemy ~= nil then EnemyPos = _EntGetPos(Hornets[H].Enemy) if _EntGetType ( Hornets[H].Enemy ) == "player" then if not _PlayerIsKeyDown ( Hornets[H].Enemy, 4 ) then EnemyPos.z = EnemyPos.z + 32; else EnemyPos.z = EnemyPos.z + 16 end else for npc in NpcHeightMod do if _EntGetType ( Hornets[H].Enemy ) == NpcHeightMod[npc] then EnemyPos.z = EnemyPos.z + 32; end end end end if Hornets[H].Enemy ~= 0 and Hornets[H].Enemy ~= nil then _TraceLine (_EntGetPos(Hornets[H].Id), vecNormalize(vecSub(_EntGetPos(Hornets[H].Id), EnemyPos)), -300, Hornets[H].Id) if _TraceHitNonWorld() then if _TraceGetEnt() == Hornets[H].Enemy then if vecLength(vecSub(_EntGetPos(Hornets[H].Id), _TraceEndPos())) < 10 then _TraceAttack(Hornets[H].Enemy, MyIndex, Owner, HornetDamage ); _EntRemove ( Hornets[H].Id ); else _PhysApplyForce(Hornets[H].Id, vecMul( vecNormalize(vecSub(_EntGetPos(Hornets[H].Id), EnemyPos)), vector3(-700, -700, -700))) end else Hornets[H].Enemy = 0; end else Hornets[H].Enemy = 0; end end if math.random( 0, 10 ) == 5 then _EntEmitSoundEx( Hornets[H].Id, "weapons/bugbait/bugbait_squeeze"..math.random(1,2)..".wav", 1, 2.5 ); end end end end Time = _CurTime() end end function onPrimaryAttack( ) if ( _PlayerInfo( Owner, "alive" ) == false ) then return; end _EntEmitSoundEx(MyIndex, "weapons/bugbait/bugbait_squeeze"..math.random(1,2)..".wav", 1, 2); local Hornet = _EntCreate( "prop_physics" ); local RandomColor = ("255 "..math.random(0,100).." 0") MakeTrail(Hornet,RandomColor) MakeTrail(Hornet,RandomColor) MakeTrail(Hornet,RandomColor) _EntSetOwner( Hornet, Owner ); _PhysSetMass( Hornet, HornetMass ); _EntSetPos( Hornet, vecAdd( vecAdd( _PlayerGetShootPos( Owner ), vecMul( _EntGetRightVector( Owner ), 10 ) ), vecMul( _EntGetUpVector( Owner ), -10 ) ) ); _EntSetKeyValue( Hornet, "rendermode", 10 ); _EntSetKeyValue( Hornet, "angles", math.random(0,360).." "..math.random(0,360).." "..math.random(0,360) ); _EntSetKeyValue( Hornet, "model", "models/props_junk/watermelon01_chunk02c.mdl" ); _EntSetParent( trail, particle); _EntSpawn( Hornet ); local Htable = {} Htable.Id = Hornet; Htable.Enemy = 0; table.insert(Hornets,Htable) _PhysEnableGravity( Hornet, false ) _EntSetMoveCollide( Hornet, 3 ); _PhysApplyForce( Hornet, vecMul( vecAdd(_PlayerGetShootAng( Owner ),vector3((math.random()-0.5)/15,(math.random()-0.5)/15,(math.random()-0.5)/15)), vector3(5000, 5000, 5000) ) ) _PhysSetMass( Hornet, HornetMass ); _EntFire( Hornet,"addoutput","onhealthchanged !self,kill,1,1",0 ) --_EntFire( Hornet,"addoutput","onhealthchanged !self,addoutput,minhealthdmg 1000",0 ) --_EntFire( Hornet,"addoutput","onhealthchanged !self,addoutput,minhealthdmg 0,1",0 ) --_EntFire( Hornet,"addoutput","onhealthchanged !activator,removehealth,1,01",0 ) _EntFire( Hornet,"addoutput","physdamagescale 1000",0 ) _EntFire( Hornet,"kill","1", 5 ) _SWEPUseAmmo(MyIndex, 0, 1); end function Holster() if _swep.GetClipAmmo( MyIndex, 0 ) == 0 then _swep.SetClipAmmo( MyIndex, 0, 1 ) end end function onSecondaryAttack() return false; end function onReload() return false; end function getWeaponSwapHands() return false; end function getWeaponFOV() return 65; end function getWeaponSlot() return 5; end function getWeaponSlotPos() return 5; end function getFiresUnderwater() return true; end function getReloadsSingly() return false; end function getDamage() return 0; end function getPrimaryShotDelay() return Delay; end function getSecondaryShotDelay() return 0; end function getPrimaryIsAutomatic() return true; end function getSecondaryIsAutomatic() return false; end function getPrimaryAmmoType() return "AirboatGun"; end function getSecondaryAmmoType() return "none"; end function getMaxClipPrimary() return MaxHornets; end function getMaxClipSecondary() return -1; end function getDefClipPrimary() return MaxHornets; end function getDefClipSecondary() return 0; end function getPrimaryScriptOverride() return 2; end function getSecondaryScriptOverride() return 3; end function getViewModel( ) return "models/weapons/v_irifle.mdl"; end function getWorldModel() return "models/weapons/w_irifle.mdl"; end function getClassName() return "weapon_Hornet"; end function getAnimPrefix() return "ar2"; end function getPrintName() return "Hornet Gun"; end