56 lines
1.4 KiB
Lua
56 lines
1.4 KiB
Lua
|
INC_SERVER()
|
||
|
|
||
|
SWEP.Primary.Projectile = "projectile_arrow"
|
||
|
|
||
|
function SWEP:EntModify(ent)
|
||
|
end
|
||
|
|
||
|
function SWEP:PhysModify(physobj)
|
||
|
end
|
||
|
|
||
|
function SWEP:ShootBullets(damage, numshots, cone)
|
||
|
local owner = self:GetOwner()
|
||
|
self:SendWeaponAnimation()
|
||
|
owner:DoAttackEvent()
|
||
|
|
||
|
if self.Recoil > 0 then
|
||
|
local r = math.Rand(0.8, 1)
|
||
|
owner:ViewPunch(Angle(r * -self.Recoil, 0, (1 - r) * (math.random(2) == 1 and -1 or 1) * self.Recoil))
|
||
|
end
|
||
|
|
||
|
local ssfw, ssup
|
||
|
if self.SameSpread then
|
||
|
ssfw, ssup = math.Rand(0, 360), math.Rand(-cone, cone)
|
||
|
end
|
||
|
|
||
|
for i = 0,numshots-1 do
|
||
|
local ent = ents.Create(self.Primary.Projectile)
|
||
|
if ent:IsValid() then
|
||
|
ent:SetPos(owner:GetShootPos())
|
||
|
ent:SetAngles(owner:EyeAngles())
|
||
|
ent:SetOwner(owner)
|
||
|
ent.ProjDamage = self.Primary.Damage * (owner.ProjectileDamageMul or 1)
|
||
|
ent.ProjSource = self
|
||
|
ent.ShotMarker = i
|
||
|
ent.Team = owner:Team()
|
||
|
|
||
|
self:EntModify(ent)
|
||
|
ent:Spawn()
|
||
|
|
||
|
local phys = ent:GetPhysicsObject()
|
||
|
if phys:IsValid() then
|
||
|
phys:Wake()
|
||
|
|
||
|
local angle = owner:GetAimVector():Angle()
|
||
|
angle:RotateAroundAxis(angle:Forward(), ssfw or math.Rand(0, 360))
|
||
|
angle:RotateAroundAxis(angle:Up(), ssup or math.Rand(-cone, cone))
|
||
|
|
||
|
ent.PreVel = angle:Forward() * self.Primary.ProjVelocity * (owner.ProjectileSpeedMul or 1)
|
||
|
phys:SetVelocityInstantaneous(ent.PreVel)
|
||
|
|
||
|
self:PhysModify(phys)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|