ACF_CustomMod/lua/weapons/torch/shared.lua

222 lines
7.9 KiB
Lua

AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )
--include('shared.lua')
SWEP.Weight = 5
SWEP.AutoSwitchTo = false
SWEP.AutoSwitchFrom = false
SWEP.AdminSpawnable = true
SWEP.Author = "Lazermaniac"
SWEP.Contact = "lazermaniac@gmail.com"
SWEP.Instructions = "Primary to repair.\nSecondary to damage."
SWEP.Primary.Ammo = "none"
SWEP.Primary.Automatic = true
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Purpose = "Used to clear baricades and repair vehicles."
SWEP.Secondary.Ammo = "none"
SWEP.Secondary.Automatic = true
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = -1
SWEP.Spawnable = true
SWEP.ViewModelFlip = false
SWEP.ViewModelFOV = 55
SWEP.ViewModel = "models/weapons/v_cuttingtorch.mdl"
SWEP.WorldModel = "models/weapons/w_cuttingtorch.mdl"
SWEP.PrintName = "ACF Cutting torch"
SWEP.Slot = 0
SWEP.SlotPos = 6
SWEP.IconLetter = "G"
SWEP.DrawAmmo = false
SWEP.DrawCrosshair = true
function SWEP:Initialize()
if ( SERVER ) then
self:SetWeaponHoldType("pistol")--"357 hold type doesnt exist, it's the generic pistol one" Kaf
end
util.PrecacheSound( "ambient/energy/NewSpark03.wav" )
util.PrecacheSound( "ambient/energy/NewSpark04.wav" )
util.PrecacheSound( "ambient/energy/NewSpark05.wav" )
util.PrecacheSound( "weapons/physcannon/superphys_small_zap1.wav" )
util.PrecacheSound( "weapons/physcannon/superphys_small_zap2.wav" )
util.PrecacheSound( "weapons/physcannon/superphys_small_zap3.wav" )
util.PrecacheSound( "weapons/physcannon/superphys_small_zap4.wav" )
util.PrecacheSound( "items/medshot4.wav" )
self.LastSend = 0
end
function SWEP:Think()
if SERVER then
local userid = self.Owner
local trace = {}
trace.start = userid:GetShootPos()
trace.endpos = userid:GetShootPos() + ( userid:GetAimVector() * 64 )
trace.filter = userid --Not hitting the owner's feet when aiming down
local tr = util.TraceLine( trace )
local ent = tr.Entity
if ent:IsValid() and self.LastSend < CurTime() then
if not ent:IsPlayer() and not ent:IsNPC() then
self.LastSend = CurTime() + 1
local Valid = ACF_Check( ent )
if Valid then
self.Weapon:SetNetworkedInt( "HP", ent.ACF.Health )
self.Weapon:SetNetworkedInt( "Armour", ent.ACF.Armour )
self.Weapon:SetNetworkedInt( "MaxHP", ent.ACF.MaxHealth )
self.Weapon:SetNetworkedInt( "MaxArmour", ent.ACF.MaxArmour )
end
end
end
self:NextThink(CurTime() + 0.2)
end
end
function SWEP:PrimaryAttack()
self.Weapon:SetNextPrimaryFire( CurTime() + 0.05 )
local userid = self.Owner
local userid = self.Owner
local trace = {}
trace.start = userid:GetShootPos()
trace.endpos = userid:GetShootPos() + ( userid:GetAimVector() * 64 )
trace.filter = userid --Not hitting the owner's feet when aiming down
local tr = util.TraceLine( trace )
if ( tr.HitWorld ) then return end
if CLIENT then return end
local ent = tr.Entity
if ent:IsValid() then
if ent:IsPlayer() || ent:IsNPC() then
local PlayerHealth = ent:Health() --get the health
local PlayerMaxHealth = ent:GetMaxHealth()--and max health too
local PlayerArmour = ent:Armor()
local PlayerMaxArmour = 100
if ( PlayerHealth >= PlayerMaxHealth ) then return end --if the player is healthy or somehow dead, move right along.
PlayerHealth = PlayerHealth + 1 --otherwise add 1 HP
ent:SetHealth( PlayerHealth ) --and boost the player's HP to that.
self.Weapon:SetNetworkedInt( "HP", PlayerHealth ) --Output to the HUD bar
self.Weapon:SetNetworkedInt( "Armour", PlayerArmour )
self.Weapon:SetNetworkedInt( "MaxHP", PlayerMaxHealth )
self.Weapon:SetNetworkedInt( "MaxArmour", PlayerMaxArmour )
local effect = EffectData()--then make some pretty effects :D ("Fixed that up a bit so it looks like it's actually emanating from the healing player, well mostly" Kaf)
local AngPos = userid:GetAttachment( 4 )
effect:SetOrigin( AngPos.Pos + userid:GetAimVector() * 10 )
effect:SetNormal( userid:GetAimVector() )
effect:SetEntity( self.Weapon )
util.Effect( "thruster_ring", effect, true, true ) --("The 2 booleans control clientside override, by default it doesn't display it since it'll lag a bit behind inputs in MP, same for sounds" Kaf)
ent:EmitSound( "items/medshot4.wav", true, true )--and play a sound.
else
local Valid = ACF_Check ( ent )
if ( Valid and ent.ACF.Health < ent.ACF.MaxHealth ) then
ent.ACF.Health = math.min(ent.ACF.Health + (30/ent.ACF.MaxArmour),ent.ACF.MaxHealth)
ent.ACF.Armour = ent.ACF.MaxArmour * (0.5 + ent.ACF.Health/ent.ACF.MaxHealth/2)
ent:EmitSound( "ambient/energy/NewSpark0" ..tostring( math.random( 3, 5 ) ).. ".wav", true, true )--Welding noise here, gotte figure out how to do a looped sound.
TeslaSpark(tr.HitPos , 1 )
end
self.Weapon:SetNetworkedInt( "HP", ent.ACF.Health )
self.Weapon:SetNetworkedInt( "Armour", ent.ACF.Armour )
self.Weapon:SetNetworkedInt( "MaxHP", ent.ACF.MaxHealth )
self.Weapon:SetNetworkedInt( "MaxArmour", ent.ACF.MaxArmour )
end
else
self.Weapon:SetNetworkedInt( "HP", 0 )
self.Weapon:SetNetworkedInt( "Armour", 0 )
self.Weapon:SetNetworkedInt( "MaxHP", 0 )
self.Weapon:SetNetworkedInt( "MaxArmour", 0 )
end
end
function SWEP:SecondaryAttack()
self.Weapon:SetNextPrimaryFire( CurTime() + 0.05 )
local userid = self.Owner
local userid = self.Owner
local trace = {}
trace.start = userid:GetShootPos()
trace.endpos = userid:GetShootPos() + ( userid:GetAimVector() * 64 )
trace.filter = userid
local tr = util.TraceLine( trace )
if ( tr.HitWorld ) then return end
if CLIENT then return end
local ent = tr.Entity
if ent:IsValid() then
local Valid = ACF_Check ( ent )
if Valid then
self.Weapon:SetNetworkedInt( "HP", ent.ACF.Health )
self.Weapon:SetNetworkedInt( "Armour", ent.ACF.Armour )
self.Weapon:SetNetworkedInt( "MaxHP", ent.ACF.MaxHealth )
self.Weapon:SetNetworkedInt( "MaxArmour", ent.ACF.MaxArmour )
local HitRes = {}
if(ent:IsPlayer()) then
HitRes = ACF_Damage ( ent , {Kinetic = 0.05,Momentum = 0,Penetration = 0.05} , 2 , 0 , self.Owner )--We can use the damage function instead of direct access here since no numbers are negative.
else
HitRes = ACF_Damage ( ent , {Kinetic = 5,Momentum = 0,Penetration = 5} , 2 , 0 , self.Owner )--We can use the damage function instead of direct access here since no numbers are negative.
end
if HitRes.Kill then
constraint.RemoveAll( ent )
ent:SetParent(nil)
ent:SetCollisionGroup( COLLISION_GROUP_NONE )
local Phys = ent:GetPhysicsObject()
Phys:EnableMotion( true )
Phys:Wake()
else
local effectdata = EffectData()
effectdata:SetMagnitude( 1.0 )
effectdata:SetRadius( 1.0 )
effectdata:SetScale( 1.0 )
effectdata:SetStart( userid:GetShootPos() )
effectdata:SetOrigin( tr.HitPos )
util.Effect( "Sparks", effectdata , true , true )
ent:EmitSound( "weapons/physcannon/superphys_small_zap" ..tostring( math.random( 1, 4 ) ).. ".wav", true , true ) --old annoyinly loud sounds
end
else
self.Weapon:SetNetworkedInt( "HP", 0 )
self.Weapon:SetNetworkedInt( "Armour", 0 )
self.Weapon:SetNetworkedInt( "MaxHP", 0 )
self.Weapon:SetNetworkedInt( "MaxArmour", 0 )
end
end
end
function SWEP:Reload()
end
function TeslaSpark(pos, magnitude)
zap = ents.Create("point_tesla")
zap:SetKeyValue("targetname", "teslab")
zap:SetKeyValue("m_SoundName" ,"null")
zap:SetKeyValue("texture" ,"sprites/laser.spr")
zap:SetKeyValue("m_Color" ,"200 200 255")
zap:SetKeyValue("m_flRadius" ,tostring(magnitude*10))
zap:SetKeyValue("beamcount_min" ,tostring(math.ceil(magnitude)))
zap:SetKeyValue("beamcount_max", tostring(math.ceil(magnitude)))
zap:SetKeyValue("thick_min", tostring(magnitude))
zap:SetKeyValue("thick_max", tostring(magnitude))
zap:SetKeyValue("lifetime_min" ,"0.05")
zap:SetKeyValue("lifetime_max", "0.1")
zap:SetKeyValue("interval_min", "0.05")
zap:SetKeyValue("interval_max" ,"0.08")
zap:SetPos(pos)
zap:Spawn()
zap:Fire("DoSpark","",0)
zap:Fire("kill","", 0.1)
end