221 lines
13 KiB
Lua
221 lines
13 KiB
Lua
|
AddCSLuaFile()
|
||
|
DEFINE_BASECLASS("weapon_zs_base")
|
||
|
|
||
|
SWEP.PrintName = "'Amigo' Assault Rifle"
|
||
|
SWEP.Description = "The Amigo gets extra headshot damage, but has a slow fire rate for an assault rifle."
|
||
|
|
||
|
SWEP.Slot = 2
|
||
|
SWEP.SlotPos = 0
|
||
|
|
||
|
if CLIENT then
|
||
|
SWEP.ViewModelFlip = false
|
||
|
SWEP.ViewModelFOV = 55
|
||
|
|
||
|
SWEP.HUD3DBone = "v_weapon.sg552_Parent"
|
||
|
SWEP.HUD3DPos = Vector(-2.12, -6.25, -2)
|
||
|
SWEP.HUD3DAng = Angle(0, -6, 0)
|
||
|
SWEP.HUD3DScale = 0.015
|
||
|
end
|
||
|
|
||
|
SWEP.Base = "weapon_zs_base"
|
||
|
|
||
|
SWEP.HoldType = "ar2"
|
||
|
|
||
|
SWEP.ViewModel = "models/weapons/cstrike/c_rif_sg552.mdl"
|
||
|
SWEP.WorldModel = "models/weapons/w_rif_sg552.mdl"
|
||
|
SWEP.UseHands = true
|
||
|
|
||
|
SWEP.ReloadSound = Sound("Weapon_SG552.Clipout")
|
||
|
SWEP.Primary.Sound = Sound("Weapon_SG552.Single")
|
||
|
SWEP.Primary.Damage = 18.5
|
||
|
SWEP.Primary.NumShots = 1
|
||
|
SWEP.Primary.Delay = 0.15
|
||
|
|
||
|
SWEP.Primary.ClipSize = 25
|
||
|
SWEP.Primary.Automatic = true
|
||
|
SWEP.Primary.Ammo = "ar2"
|
||
|
GAMEMODE:SetupDefaultClip(SWEP.Primary)
|
||
|
|
||
|
SWEP.ConeMax = 2
|
||
|
SWEP.ConeMin = 0.8
|
||
|
SWEP.HeadshotMulti = 2.1
|
||
|
|
||
|
SWEP.ReloadSpeed = 0.9
|
||
|
|
||
|
SWEP.WalkSpeed = SPEED_SLOW
|
||
|
|
||
|
SWEP.Tier = 2
|
||
|
|
||
|
SWEP.IronSightsPos = Vector(-5, 1, 3)
|
||
|
SWEP.IronSightsAng = Vector(0, 0, 0)
|
||
|
|
||
|
GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_FIRE_DELAY, -0.01, 1)
|
||
|
GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_HEADSHOT_MULTI, 0.07)
|
||
|
GAMEMODE:AddNewRemantleBranch(SWEP, 1, "'Comrade' Micronaut Rifle", "Reduced accuracy, damage but increased clip size and fires additional projectiles", function(wept)
|
||
|
wept.ConeMax = wept.ConeMax * 1.5
|
||
|
wept.ConeMin = wept.ConeMin * 1.5
|
||
|
wept.Primary.Damage = wept.Primary.Damage * 0.8
|
||
|
wept.Primary.ClipSize = 35
|
||
|
|
||
|
wept.ShootBullets = function(self, dmg, numbul, cone)
|
||
|
local owner = self:GetOwner()
|
||
|
|
||
|
self:SendWeaponAnimation()
|
||
|
owner:DoAttackEvent()
|
||
|
|
||
|
if SERVER and self:Clip1() % 10 == 1 then
|
||
|
local ent = ents.Create("projectile_juggernaut")
|
||
|
if ent:IsValid() then
|
||
|
ent:SetPos(owner:GetShootPos())
|
||
|
|
||
|
local angle = owner:GetAimVector():Angle()
|
||
|
angle:RotateAroundAxis(angle:Up(), 90)
|
||
|
ent:SetAngles(angle)
|
||
|
|
||
|
ent:SetOwner(owner)
|
||
|
ent.ProjDamage = self.Primary.Damage * 1.75 * (owner.ProjectileDamageMul or 1)
|
||
|
ent.ProjSource = self
|
||
|
ent.Team = owner:Team()
|
||
|
|
||
|
ent:Spawn()
|
||
|
|
||
|
local phys = ent:GetPhysicsObject()
|
||
|
if phys:IsValid() then
|
||
|
phys:Wake()
|
||
|
|
||
|
angle = owner:GetAimVector():Angle()
|
||
|
angle:RotateAroundAxis(angle:Forward(), math.Rand(0, 360))
|
||
|
angle:RotateAroundAxis(angle:Up(), math.Rand(-cone/1.5, cone/1.5))
|
||
|
phys:SetVelocityInstantaneous(angle:Forward() * 700 * (owner.ProjectileSpeedMul or 1))
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
owner:LagCompensation(true)
|
||
|
owner:FireBulletsLua(owner:GetShootPos(), owner:GetAimVector(), cone, numbul, dmg, nil, self.Primary.KnockbackScale, self.TracerName, self.BulletCallback, self.Primary.HullSize, nil, self.Primary.MaxDistance, nil, self)
|
||
|
owner:LagCompensation(false)
|
||
|
end
|
||
|
end)
|
||
|
local branch = GAMEMODE:AddNewRemantleBranch(SWEP, 2, "'Horizon' Battle Rifle", "Extremely accurate, more damage and fires in slow bursts", function(wept)
|
||
|
wept.Primary.Damage = wept.Primary.Damage * 1.12
|
||
|
wept.Primary.Delay = wept.Primary.Delay * 6
|
||
|
wept.Primary.BurstShots = 3
|
||
|
wept.ConeMin = wept.ConeMin * 0.6
|
||
|
wept.ConeMax = wept.ConeMax * 0.85
|
||
|
|
||
|
wept.PrimaryAttack = function(self)
|
||
|
if not self:CanPrimaryAttack() then return end
|
||
|
|
||
|
self:SetNextPrimaryFire(CurTime() + self:GetFireDelay())
|
||
|
self:EmitFireSound()
|
||
|
|
||
|
self:SetNextShot(CurTime())
|
||
|
self:SetShotsLeft(self.Primary.BurstShots)
|
||
|
|
||
|
self.IdleAnimation = CurTime() + self:SequenceDuration()
|
||
|
end
|
||
|
|
||
|
wept.Think = function(self)
|
||
|
BaseClass.Think(self)
|
||
|
|
||
|
local shotsleft = self:GetShotsLeft()
|
||
|
if shotsleft > 0 and CurTime() >= self:GetNextShot() then
|
||
|
self:SetShotsLeft(shotsleft - 1)
|
||
|
self:SetNextShot(CurTime() + self:GetFireDelay()/12)
|
||
|
|
||
|
if self:Clip1() > 0 and self:GetReloadFinish() == 0 then
|
||
|
self:EmitFireSound()
|
||
|
self:TakeAmmo()
|
||
|
self:ShootBullets(self.Primary.Damage, self.Primary.NumShots, self:GetCone())
|
||
|
|
||
|
self.IdleAnimation = CurTime() + self:SequenceDuration()
|
||
|
else
|
||
|
self:SetShotsLeft(0)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
wept.ViewModel = "models/weapons/cstrike/c_rif_famas.mdl"
|
||
|
wept.WorldModel = "models/weapons/w_rif_famas.mdl"
|
||
|
|
||
|
wept.EmitFireSound = function(self)
|
||
|
self:EmitSound("weapons/famas/famas-1.wav", 75, math.random(80, 85), 0.8)
|
||
|
self:EmitSound("npc/sniper/echo1.wav", 75, math.random(81, 85), 1, CHAN_WEAPON+20)
|
||
|
end
|
||
|
|
||
|
if CLIENT then
|
||
|
wept.VElements = {
|
||
|
["underside"] = { type = "Model", model = "models/props_combine/combine_train02a.mdl", bone = "ValveBiped.Bip01_Spine4", rel = "scope", pos = Vector(0, 5.438, 8.074), angle = Angle(0, 0, 88), size = Vector(0.024, 0.021, 0.013), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["scopeback+"] = { type = "Model", model = "models/props_wasteland/laundry_basket001.mdl", bone = "ValveBiped.Bip01_Spine4", rel = "scope", pos = Vector(0, 0, 4.012), angle = Angle(0, 0, 0), size = Vector(0.025, 0.025, 0.017), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["mid"] = { type = "Model", model = "models/props_phx/trains/double_wheels.mdl", bone = "ValveBiped.Bip01_Spine4", rel = "scope", pos = Vector(0.726, 0.008, 1.82), angle = Angle(90, 90, -90), size = Vector(0.02, 0.02, 0.016), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["top"] = { type = "Model", model = "models/props_borealis/mooring_cleat01.mdl", bone = "ValveBiped.Bip01_Spine4", rel = "scope", pos = Vector(0, 0, 1.815), angle = Angle(0, 0, -90), size = Vector(0.048, 0.039, 0.034), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["scopeback"] = { type = "Model", model = "models/props_wasteland/laundry_basket001.mdl", bone = "ValveBiped.Bip01_Spine4", rel = "scope", pos = Vector(0, 0, -0.29), angle = Angle(180, 0, 0), size = Vector(0.025, 0.025, 0.017), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["glass"] = { type = "Model", model = "models/XQM/panel360.mdl", bone = "ValveBiped.Bip01_Spine4", rel = "scope", pos = Vector(0, 0, -0.285), angle = Angle(90, 0, 0), size = Vector(0.123, 0.023, 0.023), color = Color(0, 0, 115, 255), surpresslightning = false, material = "models/props/cs_office/snowmana", skin = 0, bodygroup = {} },
|
||
|
["scope"] = { type = "Model", model = "models/hunter/tubes/tube1x1x2.mdl", bone = "v_weapon.famas", rel = "", pos = Vector(0.082, -5.666, 9.55), angle = Angle(0, 0, 1.254), size = Vector(0.025, 0.025, 0.039), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["back"] = { type = "Model", model = "models/items/combine_rifle_cartridge01.mdl", bone = "v_weapon.famas", rel = "", pos = Vector(0.104, -1.573, 10.755), angle = Angle(90, 90.005, 0), size = Vector(0.361, 0.476, 0.597), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["hold"] = { type = "Model", model = "models/props_c17/playgroundTick-tack-toe_post01.mdl", bone = "ValveBiped.Bip01_Spine4", rel = "scope", pos = Vector(0, 0.694, 1.85), angle = Angle(0, 0, -90), size = Vector(0.152, 0.041, 0.009), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["midsection"] = { type = "Model", model = "models/props_combine/eli_pod_inner.mdl", bone = "ValveBiped.Bip01_Spine4", rel = "scope", pos = Vector(0, 3.048, 13.31), angle = Angle(0.15, 90, 180), size = Vector(0.15, 0.107, 0.194), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} }
|
||
|
}
|
||
|
wept.WElements = {
|
||
|
["underside"] = { type = "Model", model = "models/props_combine/combine_train02a.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0, 6.301, 10.373), angle = Angle(0, 0, 88), size = Vector(0.025, 0.027, 0.01), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["scopeback+"] = { type = "Model", model = "models/props_wasteland/laundry_basket001.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0, 0, 4.012), angle = Angle(0, 0, 0), size = Vector(0.025, 0.025, 0.017), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["mid"] = { type = "Model", model = "models/props_phx/trains/double_wheels.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0.811, -0.03, 1.82), angle = Angle(90, 90, -90), size = Vector(0.02, 0.02, 0.017), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["top"] = { type = "Model", model = "models/props_borealis/mooring_cleat01.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0, 0, 1.815), angle = Angle(0, 0, -90), size = Vector(0.048, 0.039, 0.034), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["scopeback"] = { type = "Model", model = "models/props_wasteland/laundry_basket001.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0, 0, -0.29), angle = Angle(180, 0, 0), size = Vector(0.025, 0.025, 0.017), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["glass"] = { type = "Model", model = "models/XQM/panel360.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0, 0, -0.424), angle = Angle(90, 0, 0), size = Vector(0.123, 0.023, 0.023), color = Color(0, 0, 115, 255), surpresslightning = false, material = "models/props/cs_office/snowmana", skin = 0, bodygroup = {} },
|
||
|
["scope"] = { type = "Model", model = "models/hunter/tubes/tube1x1x2.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(-0.99, 0.794, -8.33), angle = Angle(0, -90, -99.326), size = Vector(0.025, 0.025, 0.039), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["back"] = { type = "Model", model = "models/items/combine_rifle_cartridge01.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0, 4.708, 1.435), angle = Angle(90, 90.005, 0), size = Vector(0.361, 0.583, 0.708), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["hold"] = { type = "Model", model = "models/props_c17/playgroundTick-tack-toe_post01.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0, 0.694, 1.85), angle = Angle(0, 0, -90), size = Vector(0.152, 0.041, 0.009), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["midsection"] = { type = "Model", model = "models/props_combine/eli_pod_inner.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0, 3.368, 17.281), angle = Angle(0.15, 90, 180), size = Vector(0.185, 0.151, 0.245), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/metal_combinebridge001", skin = 0, bodygroup = {} },
|
||
|
["glass+"] = { type = "Model", model = "models/XQM/panel360.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "scope", pos = Vector(0, 0, 4.243), angle = Angle(90, 0, 0), size = Vector(0.123, 0.023, 0.023), color = Color(0, 0, 115, 255), surpresslightning = false, material = "models/props/cs_office/snowmana", skin = 0, bodygroup = {} }
|
||
|
}
|
||
|
|
||
|
wept.HUD3DBone = "v_weapon.famas"
|
||
|
wept.HUD3DPos = Vector(-0.2, -4, 8.6)
|
||
|
wept.HUD3DAng = BaseClass.HUD3DAng
|
||
|
|
||
|
wept.IronsightsMultiplier = 0.25
|
||
|
|
||
|
wept.GetViewModelPosition = function(self, pos, ang)
|
||
|
if GAMEMODE.DisableScopes then return end
|
||
|
|
||
|
if self:IsScoped() then
|
||
|
return pos + ang:Up() * 256, ang
|
||
|
end
|
||
|
|
||
|
return BaseClass.GetViewModelPosition(self, pos, ang)
|
||
|
end
|
||
|
|
||
|
wept.DrawHUDBackground = function(self)
|
||
|
if GAMEMODE.DisableScopes then return end
|
||
|
|
||
|
if self:IsScoped() then
|
||
|
self:DrawRegularScope()
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
branch.Colors = {Color(110, 160, 170), Color(90, 140, 150), Color(70, 120, 130)}
|
||
|
branch.NewNames = {"Focused", "Transfixed", "Orphic"}
|
||
|
branch.Killicon = "weapon_zs_battlerifle"
|
||
|
|
||
|
function SWEP:IsScoped()
|
||
|
return self:GetIronsights() and self.fIronTime and self.fIronTime + 0.25 <= CurTime()
|
||
|
end
|
||
|
|
||
|
function SWEP:SetNextShot(nextshot)
|
||
|
self:SetDTFloat(5, nextshot)
|
||
|
end
|
||
|
|
||
|
function SWEP:GetNextShot()
|
||
|
return self:GetDTFloat(5)
|
||
|
end
|
||
|
|
||
|
function SWEP:SetShotsLeft(shotsleft)
|
||
|
self:SetDTInt(1, shotsleft)
|
||
|
end
|
||
|
|
||
|
function SWEP:GetShotsLeft()
|
||
|
return self:GetDTInt(1)
|
||
|
end
|