144 lines
3.7 KiB
Lua
144 lines
3.7 KiB
Lua
AddCSLuaFile()
|
|
|
|
ENT.Type = "anim"
|
|
ENT.Base = "base_entity"
|
|
ENT.RenderGroup = RENDERGROUP_TRANSLUCENT
|
|
|
|
ENT.PrintName = "Dropped Magazine"
|
|
ENT.Category = ""
|
|
|
|
ENT.Spawnable = false
|
|
ENT.Model = ""
|
|
ENT.FadeTime = 5
|
|
ENT.CanHavePrints = true -- TTT
|
|
|
|
ENT.ImpactSounds = {
|
|
["pistol"] = {
|
|
"TacRP/weapons/drop_magazine_pistol-1.wav",
|
|
"TacRP/weapons/drop_magazine_pistol-2.wav",
|
|
"TacRP/weapons/drop_magazine_pistol-3.wav",
|
|
"TacRP/weapons/drop_magazine_pistol-4.wav",
|
|
"TacRP/weapons/drop_magazine_pistol-5.wav",
|
|
},
|
|
["metal"] = {
|
|
"TacRP/weapons/drop_magazine_metal-1.wav",
|
|
"TacRP/weapons/drop_magazine_metal-2.wav",
|
|
"TacRP/weapons/drop_magazine_metal-3.wav",
|
|
"TacRP/weapons/drop_magazine_metal-4.wav",
|
|
},
|
|
["plastic"] = {
|
|
"TacRP/weapons/drop_magazine_plastic-1.wav",
|
|
"TacRP/weapons/drop_magazine_plastic-2.wav"
|
|
},
|
|
["bullet"] = {
|
|
"player/pl_shell1.wav",
|
|
"player/pl_shell2.wav",
|
|
"player/pl_shell3.wav"
|
|
},
|
|
["shotgun"] = {
|
|
"weapons/fx/tink/shotgun_shell1.wav",
|
|
"weapons/fx/tink/shotgun_shell2.wav",
|
|
"weapons/fx/tink/shotgun_shell3.wav",
|
|
},
|
|
["spoon"] = {
|
|
"TacRP/weapons/grenade/spoon_bounce-1.wav",
|
|
"TacRP/weapons/grenade/spoon_bounce-2.wav",
|
|
"TacRP/weapons/grenade/spoon_bounce-3.wav",
|
|
}
|
|
}
|
|
|
|
ENT.ImpactType = "pistol"
|
|
|
|
ENT.AmmoType = nil
|
|
ENT.AmmoCount = nil
|
|
|
|
function ENT:Initialize()
|
|
self:SetModel(self.Model)
|
|
|
|
if SERVER then
|
|
self:PhysicsInit(SOLID_VPHYSICS)
|
|
self:SetMoveType(MOVETYPE_VPHYSICS)
|
|
self:SetSolid(SOLID_VPHYSICS)
|
|
self:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
|
|
self:SetUseType(SIMPLE_USE)
|
|
|
|
self:PhysWake()
|
|
|
|
local phys = self:GetPhysicsObject()
|
|
if !phys:IsValid() then
|
|
self:PhysicsInitBox(Vector(-1, -1, -1), Vector(1, 1, 1))
|
|
end
|
|
end
|
|
|
|
self.SpawnTime = CurTime()
|
|
if engine.ActiveGamemode() == "terrortown" and TacRP.ConVars["ttt_magazine_dna"]:GetBool() then
|
|
self.FadeTime = 600
|
|
if SERVER then
|
|
self.fingerprints = {}
|
|
table.insert(self.fingerprints, self:GetOwner())
|
|
end
|
|
end
|
|
|
|
if self.AmmoType and self.AmmoCount then
|
|
self.FadeTime = math.max(self.FadeTime, 120)
|
|
self:SetOwner(NULL) -- Owner can't +USE their own entities
|
|
end
|
|
end
|
|
|
|
function ENT:PhysicsCollide(colData, collider)
|
|
if colData.DeltaTime < 0.5 then return end
|
|
|
|
local tbl = self.ImpactSounds[self.ImpactType]
|
|
|
|
local snd = ""
|
|
|
|
if tbl then
|
|
snd = table.Random(tbl)
|
|
end
|
|
|
|
self:EmitSound(snd)
|
|
end
|
|
|
|
function ENT:Think()
|
|
if !self.SpawnTime then
|
|
self.SpawnTime = CurTime()
|
|
end
|
|
|
|
if SERVER and (self.SpawnTime + self.FadeTime) <= CurTime() then
|
|
|
|
self:SetRenderFX( kRenderFxFadeFast )
|
|
|
|
if (self.SpawnTime + self.FadeTime + 1) <= CurTime() then
|
|
|
|
if IsValid(self:GetPhysicsObject()) then
|
|
self:GetPhysicsObject():EnableMotion(false)
|
|
end
|
|
|
|
if SERVER then
|
|
if (self.SpawnTime + self.FadeTime + 1.5) <= CurTime() then
|
|
self:Remove()
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function ENT:Use(ply)
|
|
if self.AmmoType and (self.AmmoCount or 0) > 0 and (self.SpawnTime + 0.5 <= CurTime()) then
|
|
local given = ply:GiveAmmo(self.AmmoCount, self.AmmoType)
|
|
self.AmmoCount = self.AmmoCount - given
|
|
if self.AmmoCount <= 0 then
|
|
self:Remove()
|
|
end
|
|
end
|
|
end
|
|
|
|
function ENT:DrawTranslucent()
|
|
self:Draw()
|
|
end
|
|
|
|
function ENT:Draw()
|
|
self:DrawModel()
|
|
end
|