AddCSLuaFile() DEFINE_BASECLASS("weapon_zs_base") SWEP.PrintName = "'Ricochete' Magnum" SWEP.Description = "This gun's bullets will bounce off of walls which will then deal extra damage." SWEP.Slot = 1 SWEP.SlotPos = 0 if CLIENT then SWEP.ViewModelFlip = false SWEP.ViewModelFOV = 60 SWEP.HUD3DBone = "Python" SWEP.HUD3DPos = Vector(0.85, 0, -2.5) SWEP.HUD3DScale = 0.015 end SWEP.Base = "weapon_zs_base" SWEP.HoldType = "revolver" SWEP.ViewModel = "models/weapons/c_357.mdl" SWEP.WorldModel = "models/weapons/w_357.mdl" SWEP.UseHands = true SWEP.CSMuzzleFlashes = false SWEP.Primary.Sound = Sound("Weapon_357.Single") SWEP.Primary.Delay = 0.7 SWEP.Primary.Damage = 59 SWEP.Primary.NumShots = 1 SWEP.Primary.ClipSize = 6 SWEP.Primary.Automatic = false SWEP.Primary.Ammo = "pistol" SWEP.Primary.Gesture = ACT_HL2MP_GESTURE_RANGE_ATTACK_PISTOL GAMEMODE:SetupDefaultClip(SWEP.Primary) SWEP.Tier = 2 SWEP.ConeMax = 3.75 SWEP.ConeMin = 2 SWEP.BounceMulti = 1.5 SWEP.IronSightsPos = Vector(-4.65, 4, 0.25) SWEP.IronSightsAng = Vector(0, 0, 1) GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_MAX_SPREAD, -0.7, 1) GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_MIN_SPREAD, -0.35, 1) GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_FIRE_DELAY, -0.07, 1) GAMEMODE:AddNewRemantleBranch(SWEP, 1, "'Backlash' Magnum", "Gets more accurate for each direct hit, but less damage on non-bounced shots", function(wept) wept.Primary.Damage = wept.Primary.Damage * 0.85 wept.BounceMulti = 1.764 wept.GetCone = function(self) return BaseClass.GetCone(self) * (1 - self:GetDTInt(9)/13) end wept.FinishReload = function(self) self:SetDTInt(9, 0) BaseClass.FinishReload(self) end end) local function DoRicochet(attacker, hitpos, hitnormal, normal, damage) local RicoCallback = function(att, tr, dmginfo) local ent = tr.Entity local wep = att:GetActiveWeapon() if wep.Branch == 1 and ent:IsValidZombie() then wep:SetDTInt(9, wep:GetDTInt(9) + 2) end end attacker.RicochetBullet = true if attacker:IsValid() then attacker:FireBulletsLua(hitpos, 2 * hitnormal * hitnormal:Dot(normal * -1) + normal, 0, 1, damage, nil, nil, "tracer_rico", RicoCallback, nil, nil, nil, nil, attacker:GetActiveWeapon()) end attacker.RicochetBullet = nil end function SWEP.BulletCallback(attacker, tr, dmginfo) local ent = tr.Entity if SERVER and tr.HitWorld and not tr.HitSky then local hitpos, hitnormal, normal, dmg = tr.HitPos, tr.HitNormal, tr.Normal, dmginfo:GetDamage() * attacker:GetActiveWeapon().BounceMulti timer.Simple(0, function() DoRicochet(attacker, hitpos, hitnormal, normal, dmg) end) end if SERVER then local wep = attacker:GetActiveWeapon() if wep.Branch == 1 and ent:IsValidZombie() then wep:SetDTInt(9, wep:GetDTInt(9) + 1) end end end