2014-10-02 08:49:54 +08:00
|
|
|
SWEP.ViewModel = "models/weapons/c_grenade.mdl"
|
|
|
|
SWEP.WorldModel = "models/weapons/w_grenade.mdl"
|
|
|
|
SWEP.UseHands = true
|
|
|
|
|
|
|
|
SWEP.AmmoIfHas = true
|
|
|
|
|
|
|
|
SWEP.Primary.ClipSize = 1
|
|
|
|
SWEP.Primary.Automatic = false
|
|
|
|
SWEP.Primary.Ammo = "grenade"
|
|
|
|
SWEP.Primary.Delay = 1.25
|
|
|
|
SWEP.Primary.DefaultClip = 1
|
|
|
|
|
2015-04-19 13:54:47 +08:00
|
|
|
SWEP.Secondary.ClipSize = 1
|
|
|
|
SWEP.Secondary.DefaultClip = 1
|
|
|
|
SWEP.Secondary.Ammo = "dummy"
|
2014-10-02 08:49:54 +08:00
|
|
|
|
|
|
|
SWEP.WalkSpeed = SPEED_FAST
|
|
|
|
|
|
|
|
function SWEP:Initialize()
|
2014-11-12 08:15:49 +08:00
|
|
|
self:SetWeaponHoldType("grenade")
|
2014-10-02 08:49:54 +08:00
|
|
|
self:SetDeploySpeed(1.1)
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:Precache()
|
|
|
|
util.PrecacheSound("WeaponFrag.Throw")
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:CanPrimaryAttack()
|
|
|
|
if self.Owner:IsHolding() or self.Owner:GetBarricadeGhosting() then return false end
|
|
|
|
|
|
|
|
if self:GetPrimaryAmmoCount() <= 0 then
|
|
|
|
self:SetNextPrimaryFire(CurTime() + self.Primary.Delay)
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:PrimaryAttack()
|
|
|
|
if not self:CanPrimaryAttack() then return end
|
|
|
|
self:SetNextPrimaryFire(CurTime() + self.Primary.Delay)
|
|
|
|
|
|
|
|
local owner = self.Owner
|
|
|
|
self:SendWeaponAnim(ACT_VM_THROW)
|
|
|
|
owner:DoAttackEvent()
|
|
|
|
|
|
|
|
self:TakePrimaryAmmo(1)
|
|
|
|
self.NextDeploy = CurTime() + 1
|
|
|
|
|
|
|
|
if SERVER then
|
|
|
|
local ent = ents.Create("projectile_zsgrenade")
|
|
|
|
if ent:IsValid() then
|
|
|
|
ent:SetPos(owner:GetShootPos())
|
|
|
|
ent:SetOwner(owner)
|
|
|
|
ent:Spawn()
|
|
|
|
ent.GrenadeDamage = self.GrenadeDamage
|
|
|
|
ent.GrenadeRadius = self.GrenadeRadius
|
|
|
|
ent:EmitSound("WeaponFrag.Throw")
|
|
|
|
local phys = ent:GetPhysicsObject()
|
|
|
|
if phys:IsValid() then
|
|
|
|
phys:Wake()
|
|
|
|
phys:AddAngleVelocity(VectorRand() * 5)
|
|
|
|
phys:SetVelocityInstantaneous(self.Owner:GetAimVector() * 800)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:SecondaryAttack()
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:CanSecondaryAttack()
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:Reload()
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:Deploy()
|
|
|
|
GAMEMODE:WeaponDeployed(self.Owner, self)
|
|
|
|
|
|
|
|
if self:GetPrimaryAmmoCount() <= 0 then
|
|
|
|
self:SendWeaponAnim(ACT_VM_SECONDARYATTACK)
|
|
|
|
end
|
|
|
|
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:Holster()
|
|
|
|
self.NextDeploy = nil
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:Think()
|
|
|
|
if self.NextDeploy and self.NextDeploy <= CurTime() then
|
|
|
|
self.NextDeploy = nil
|
|
|
|
|
|
|
|
if 0 < self:GetPrimaryAmmoCount() then
|
|
|
|
self:SendWeaponAnim(ACT_VM_DRAW)
|
|
|
|
else
|
|
|
|
self:SendWeaponAnim(ACT_VM_SECONDARYATTACK)
|
|
|
|
|
|
|
|
if SERVER then
|
|
|
|
self:Remove()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
elseif SERVER and self:GetPrimaryAmmoCount() <= 0 then
|
|
|
|
self:Remove()
|
|
|
|
end
|
|
|
|
end
|