diff options
Diffstat (limited to 'entities/weapons/rad_firegun/shared.lua')
| -rw-r--r-- | entities/weapons/rad_firegun/shared.lua | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/entities/weapons/rad_firegun/shared.lua b/entities/weapons/rad_firegun/shared.lua new file mode 100644 index 0000000..a8e3ae8 --- /dev/null +++ b/entities/weapons/rad_firegun/shared.lua @@ -0,0 +1,190 @@ +if SERVER then + + AddCSLuaFile("shared.lua") + +end + +if CLIENT then + + SWEP.ViewModelFlip = false + + SWEP.ViewModelFOV = 60 + + SWEP.PrintName = "HEAT Cannon" + SWEP.IconLetter = "m" + SWEP.Slot = 4 + SWEP.Slotpos = 2 + +end + +SWEP.HoldType = "physgun" + +SWEP.Base = "rad_base" + +SWEP.UseHands = true + +SWEP.ViewModel = "models/weapons/c_physcannon.mdl" +SWEP.WorldModel = "models/weapons/w_physics.mdl" + +//SWEP.SprintPos = Vector (4.9288, -2.4157, 2.2032) +//SWEP.SprintAng = Vector (0.8736, 40.1165, 28.0526) + +SWEP.SprintPos = Vector(5.36, -0.401, 2.88) +SWEP.SprintAng = Vector(-3.201, 26.799, 5.4) + +SWEP.IsSniper = false +SWEP.AmmoType = "Prototype" +SWEP.LaserOffset = Angle( -90, -0.9, 0 ) +SWEP.LaserScale = 0.25 +//SWEP.IronsightsFOV = 60 + +SWEP.Burn = Sound( "ambient/fire/ignite.wav" ) +SWEP.Burn2 = Sound( "Weapon_Mortar.Impact" ) + +SWEP.Primary.Sound = Sound( "Weapon_mortar.single" ) +SWEP.Primary.Sound2 = Sound( "weapons/physcannon/physcannon_charge.wav" ) +SWEP.Primary.Recoil = 15.5 +SWEP.Primary.Damage = 80 +SWEP.Primary.NumShots = 1 +SWEP.Primary.Cone = 0.015 +SWEP.Primary.Delay = 1.700 + +SWEP.Primary.ClipSize = 1 +SWEP.Primary.Automatic = true + +function SWEP:ShootEffects() + + if IsFirstTimePredicted() then + + self.Owner:ViewPunch( Angle( math.Rand( -0.2, -0.1 ) * self.Primary.Recoil, math.Rand( -0.05, 0.05 ) * self.Primary.Recoil, 0 ) ) + + end + + self.Owner:MuzzleFlash() + self.Owner:SetAnimation( PLAYER_ATTACK1 ) + + self.Weapon:SendWeaponAnim( ACT_VM_SECONDARYATTACK ) + +end + +function SWEP:PrimaryAttack() + + if not self.Weapon:CanPrimaryAttack() then + + self.Weapon:SetNextPrimaryFire( CurTime() + 0.5 ) + return + + end + + self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay ) + self.Weapon:EmitSound( self.Primary.Sound, 100, math.random(90,100) ) + //self.Weapon:EmitSound( self.Primary.Sound3, 100, 80 ) + self.Weapon:ShootBullets( self.Primary.Damage, self.Primary.NumShots, self.Primary.Cone, self.Weapon:GetZoomMode() ) + self.Weapon:TakePrimaryAmmo( 1 ) + self.Weapon:ShootEffects() + + if SERVER then + + self.Owner:AddAmmo( self.AmmoType, -1 ) + self.Owner:EmitSound( self.Primary.Sound2 ) + + end + + self.ReloadTime = CurTime() + self.Primary.Delay + +end + +function SWEP:ReloadThink() + + if self.ReloadTime and self.ReloadTime <= CurTime() then + + self.ReloadTime = nil + self.Weapon:SetClip1( self.Primary.ClipSize ) + + end + +end + +function SWEP:Reload() + +end + +SWEP.Decals = { "Scorch", "SmallScorch" } + +function SWEP:ShootBullets( damage, numbullets, aimcone, zoommode ) + + if SERVER then + + self.Owner:AddStat( "Bullets", numbullets ) + + end + + local scale = aimcone + + if self.Owner:KeyDown( IN_FORWARD ) or self.Owner:KeyDown( IN_BACK ) or self.Owner:KeyDown( IN_MOVELEFT ) or self.Owner:KeyDown( IN_MOVERIGHT ) then + + scale = aimcone * 1.75 + + elseif self.Owner:KeyDown( IN_DUCK ) or self.Owner:KeyDown( IN_WALK ) then + + scale = math.Clamp( aimcone / 1.75, 0, 10 ) + + end + + local bullet = {} + bullet.Num = numbullets + bullet.Src = self.Owner:GetShootPos() + bullet.Dir = self.Owner:GetAimVector() + bullet.Spread = Vector( scale, scale, 0 ) + bullet.Tracer = 1 + bullet.Force = damage * 2 + bullet.Damage = 1 + bullet.AmmoType = "Pistol" + bullet.TracerName = "fire_tracer" + + bullet.Callback = function ( attacker, tr, dmginfo ) + + if IsValid( tr.Entity ) and IsValid( self ) and IsValid( self.Owner ) and SERVER then + + if tr.Entity:IsPlayer() then + + tr.Entity:TakeDamage( self.Primary.Damage, self.Owner ) + + else + + tr.Entity:TakeDamage( math.Clamp( math.min( 20, tr.Entity:Health() - 5 ), 1, 20 ), self.Owner ) + + end + + if tr.Entity.NextBot or ( tr.Entity:IsPlayer() and tr.Entity:Team() != TEAM_ARMY ) then + + tr.Entity:DoIgnite( self.Owner ) + tr.Entity:EmitSound( self.Burn, 100, math.random(90,110) ) + + end + + end + + sound.Play( self.Burn2, tr.HitPos ) + + local ed = EffectData() + ed:SetOrigin( tr.HitPos ) + ed:SetNormal( tr.HitNormal ) + util.Effect( "fire_explosion", ed, true, true ) + + if tr.HitNormal.z > 0.5 and tr.HitWorld then + + local ed = EffectData() + ed:SetOrigin( tr.HitPos ) + ed:SetMagnitude( 0.5 ) + util.Effect( "smoke_crater", ed, true, true ) + + end + + util.Decal( table.Random( self.Decals ), tr.HitPos + tr.HitNormal, tr.HitPos - tr.HitNormal ) + + end + + self.Owner:FireBullets( bullet ) + +end |
