147 lines
4.3 KiB
Lua
147 lines
4.3 KiB
Lua
function SWEP:OnRestore()
|
|
end
|
|
|
|
function SWEP:GetHeadshotMultiplier(victim, dmginfo)
|
|
return 1 -- Hey hey hey, don't forget about me!!!
|
|
end
|
|
|
|
function SWEP:IsEquipment()
|
|
return WEPS.IsEquipment(self)
|
|
end
|
|
|
|
SWEP.IsSilent = false
|
|
|
|
-- The OnDrop() hook is useless for this as it happens AFTER the drop. OwnerChange
|
|
-- does not occur when a drop happens for some reason. Hence this thing.
|
|
function SWEP:PreDrop()
|
|
if SERVER and IsValid(self:GetOwner()) and self.Primary.Ammo != "none" and self.Primary.Ammo != "" then
|
|
local ammo = self:Ammo1()
|
|
|
|
-- Do not drop ammo if we have another gun that uses this type
|
|
for _, w in ipairs(self:GetOwner():GetWeapons()) do
|
|
if IsValid(w) and w != self and w:GetPrimaryAmmoType() == self:GetPrimaryAmmoType() then
|
|
ammo = 0
|
|
end
|
|
end
|
|
|
|
self.StoredAmmo = ammo
|
|
|
|
if ammo > 0 then
|
|
self:GetOwner():RemoveAmmo(ammo, self.Primary.Ammo)
|
|
end
|
|
end
|
|
end
|
|
|
|
function SWEP:DampenDrop()
|
|
-- For some reason gmod drops guns on death at a speed of 400 units, which
|
|
-- catapults them away from the body. Here we want people to actually be able
|
|
-- to find a given corpse's weapon, so we override the velocity here and call
|
|
-- this when dropping guns on death.
|
|
local phys = self:GetPhysicsObject()
|
|
if IsValid(phys) then
|
|
phys:SetVelocityInstantaneous(Vector(0,0,-75) + phys:GetVelocity() * 0.001)
|
|
phys:AddAngleVelocity(phys:GetAngleVelocity() * -0.99)
|
|
end
|
|
end
|
|
|
|
SWEP.StoredAmmo = 0
|
|
|
|
-- Picked up by player. Transfer of stored ammo and such.
|
|
|
|
function SWEP:Equip(newowner)
|
|
if SERVER then
|
|
if self:IsOnFire() then
|
|
self:Extinguish()
|
|
end
|
|
|
|
self.fingerprints = self.fingerprints or {}
|
|
|
|
if !table.HasValue(self.fingerprints, newowner) then
|
|
table.insert(self.fingerprints, newowner)
|
|
end
|
|
|
|
if newowner:GetActiveWeapon() != self and self:GetValue("HolsterVisible") then
|
|
net.Start("TacRP_updateholster")
|
|
net.WriteEntity(self:GetOwner())
|
|
net.WriteEntity(self)
|
|
net.Broadcast()
|
|
end
|
|
end
|
|
|
|
if SERVER and IsValid(newowner) and self.Primary.ClipMax and self.StoredAmmo > 0 and self.Primary.Ammo != "none" and self.Primary.Ammo != "" then
|
|
local ammo = newowner:GetAmmoCount(self.Primary.Ammo)
|
|
local given = math.min(self.StoredAmmo, self.Primary.ClipMax - ammo)
|
|
|
|
newowner:GiveAmmo(given, self.Primary.Ammo)
|
|
self.StoredAmmo = 0
|
|
end
|
|
|
|
self:SetHolsterTime(0)
|
|
self:SetHolsterEntity(NULL)
|
|
self:SetReloadFinishTime(0)
|
|
end
|
|
|
|
-- other guns may use this function to setup stuff
|
|
function SWEP:TTTBought(buyer)
|
|
end
|
|
|
|
function SWEP:WasBought(buyer)
|
|
if buyer:GetActiveWeapon() != self and self:GetValue("HolsterVisible") then
|
|
net.Start("TacRP_updateholster")
|
|
net.WriteEntity(self:GetOwner())
|
|
net.WriteEntity(self)
|
|
net.Broadcast()
|
|
end
|
|
|
|
self:TTTBought(buyer)
|
|
end
|
|
|
|
function SWEP:TTT_PostAttachments()
|
|
end
|
|
|
|
function SWEP:TTT_Init()
|
|
if engine.ActiveGamemode() != "terrortown" then return end
|
|
|
|
if SERVER then
|
|
self.fingerprints = {}
|
|
|
|
|
|
local att_chance = TacRP.ConVars["ttt_atts_random"]:GetFloat()
|
|
local att_max = TacRP.ConVars["ttt_atts_max"]:GetFloat()
|
|
local added = 0
|
|
|
|
if att_chance > 0 then
|
|
for i, slot in pairs(self.Attachments) do
|
|
if math.random() > att_chance then continue end
|
|
|
|
local atts = TacRP.GetAttsForCats(slot.Category or "", self)
|
|
local ind = math.random(1, #atts)
|
|
slot.Installed = atts[ind]
|
|
added = added + 1
|
|
|
|
if att_max > 0 and added >= att_max then break end
|
|
end
|
|
|
|
self:InvalidateCache()
|
|
self:SetBaseSettings()
|
|
|
|
if added > 0 then
|
|
self:NetworkWeapon()
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.PrimaryGrenade then
|
|
self.Primary.ClipMax = 1
|
|
return
|
|
end
|
|
|
|
self.Primary.ClipMax = TacRP.TTTAmmoToClipMax[string.lower(self.AmmoTTT or self.Ammo)] or self.Primary.ClipSize * 2
|
|
self:SetClip1(self.Primary.ClipSize)
|
|
self.GaveDefaultAmmo = true
|
|
end
|
|
|
|
--- TTT2 uses this to populate custom convars in the equip menu
|
|
function SWEP:AddToSettingsMenu(parent)
|
|
end
|