AddCSLuaFile()



if CLIENT then

	SWEP.PrintName = "'Annabelle' Rifle"

	SWEP.Description = "This modified hunting rifle's bullets will explode in to smaller bullets upon hitting a hard surface."

	SWEP.Slot = 3

	SWEP.SlotPos = 0

	

	SWEP.ViewModelFlip = false



	SWEP.HUD3DBone = "ValveBiped.Gun"

	SWEP.HUD3DPos = Vector(1.75, 1, -5)

	SWEP.HUD3DAng = Angle(180, 0, 0)

	SWEP.HUD3DScale = 0.015

end



SWEP.Base = "weapon_zs_base"



SWEP.HoldType = "ar2"



SWEP.ViewModel = "models/weapons/v_annabelle.mdl"

SWEP.WorldModel = "models/weapons/w_annabelle.mdl"



SWEP.CSMuzzleFlashes = false



SWEP.Primary.Sound = Sound("Weapon_Shotgun.Single")

SWEP.Primary.Damage = 90

SWEP.Primary.NumShots = 1

SWEP.Primary.Delay = 1

SWEP.ReloadDelay = 0.4



SWEP.Primary.ClipSize = 4

SWEP.Primary.Automatic = false

SWEP.Primary.Ammo = "357"

SWEP.Primary.DefaultClip = 24



SWEP.ConeMax = 0.1

SWEP.ConeMin = 0.015



SWEP.WalkSpeed = SPEED_SLOW



SWEP.reloadtimer = 0

SWEP.nextreloadfinish = 0



SWEP.IronSightsPos = Vector(-8.8, 10, 4.32)

SWEP.IronSightsAng = Vector(1.4,0.1,5)



function SWEP:Reload()

	if self.reloading then return end



	if self:Clip1() < self.Primary.ClipSize and 0 < self.Owner:GetAmmoCount(self.Primary.Ammo) then

		self:SetNextPrimaryFire(CurTime() + self.ReloadDelay)

		self.reloading = true

		self.reloadtimer = CurTime() + self.ReloadDelay

		self:SendWeaponAnim(ACT_SHOTGUN_RELOAD_START)

		self.Owner:DoReloadEvent()

	end

end



if SERVER then

function SWEP:Think()

	if self.reloading and self.reloadtimer < CurTime() then

		self.reloadtimer = CurTime() + self.ReloadDelay

		self:SendWeaponAnim(ACT_VM_RELOAD)



		self.Owner:RemoveAmmo(1, self.Primary.Ammo, false)

		self:SetClip1(self:Clip1() + 1)

		self:EmitSound("Weapon_Shotgun.Reload")



		if self.Primary.ClipSize <= self:Clip1() or self.Owner:GetAmmoCount(self.Primary.Ammo) <= 0 then

			self.nextreloadfinish = CurTime() + self.ReloadDelay

			self.reloading = false

			self:SetNextPrimaryFire(CurTime() + self.Primary.Delay)

		end

	end



	local nextreloadfinish = self.nextreloadfinish

	if nextreloadfinish ~= 0 and nextreloadfinish < CurTime() then

		self:SendWeaponAnim(ACT_SHOTGUN_PUMP)

		self:EmitSound("Weapon_Shotgun.Special1")

		self.nextreloadfinish = 0

	end



	if self.IdleAnimation and self.IdleAnimation <= CurTime() then

		self.IdleAnimation = nil

		self:SendWeaponAnim(ACT_VM_IDLE)

	end



	if self:GetIronsights() and not self.Owner:KeyDown(IN_ATTACK2) then

		self:SetIronsights(false)

	end

end

end



if CLIENT then

function SWEP:Think()

	if self.reloading and self.reloadtimer < CurTime() then

		self.reloadtimer = CurTime() + self.ReloadDelay

		self:SendWeaponAnim(ACT_VM_RELOAD)



		self.Owner:RemoveAmmo(1, self.Primary.Ammo, false)

		self:SetClip1(self:Clip1() + 1)

		self:EmitSound("Weapon_Shotgun.Reload")



		if self.Primary.ClipSize <= self:Clip1() or self.Owner:GetAmmoCount(self.Primary.Ammo) <= 0 then

			self.nextreloadfinish = CurTime() + self.ReloadDelay

			self.reloading = false

			self:SetNextPrimaryFire(CurTime() + self.Primary.Delay)

		end

	end



	local nextreloadfinish = self.nextreloadfinish

	if nextreloadfinish ~= 0 and nextreloadfinish < CurTime() then

		self:SendWeaponAnim(ACT_SHOTGUN_PUMP)

		self:EmitSound("Weapon_Shotgun.Special1")

		self.nextreloadfinish = 0

	end



	if self:GetIronsights() and not self.Owner:KeyDown(IN_ATTACK2) then

		self:SetIronsights(false)

	end

end

end



function SWEP:CanPrimaryAttack()

	if self.Owner:IsHolding() or self.Owner:GetBarricadeGhosting() then return false end



	if self:Clip1() <= 0 then

		self:EmitSound("Weapon_Shotgun.Empty")

		self:SetNextPrimaryFire(CurTime() + 0.25)

		return false

	end



	if self.reloading then

		if 0 < self:Clip1() then

			self:SendWeaponAnim(ACT_SHOTGUN_PUMP)

			self:EmitSound("Weapon_Shotgun.Special1")

		else

			self:SendWeaponAnim(ACT_SHOTGUN_RELOAD_FINISH)

		end

		self.reloading = false

		self:SetNextPrimaryFire(CurTime() + 0.25)

		return false

	end



	return true

end



local function DoRicochet(attacker, hitpos, hitnormal, normal, damage)

	attacker.RicochetBullet = true

	attacker:FireBullets({Num = 8, Src = hitpos, Dir = hitnormal, Spread = Vector(0.2, 0.2, 0), Tracer = 1, TracerName = "rico_trace", Force = damage * 0.15, Damage = damage, Callback = GenericBulletCallback})

	attacker.RicochetBullet = nil

end

function SWEP.BulletCallback(attacker, tr, dmginfo)

	if SERVER and tr.HitWorld and not tr.HitSky then

		local hitpos, hitnormal, normal, dmg = tr.HitPos, tr.HitNormal, tr.Normal, dmginfo:GetDamage() / 5

		timer.Simple(0, function() DoRicochet(attacker, hitpos, hitnormal, normal, dmg) end)

	end



	GenericBulletCallback(attacker, tr, dmginfo)

end

