Files
VnUtest/garrysmod/addons/molotok/lua/entities/item_scrapbox1.lua
2026-03-31 10:27:04 +03:00

144 lines
3.4 KiB
Lua

AddCSLuaFile()
ENT.Type = "anim"
ENT.Base = "base_anim"
ENT.PrintName = "Scrap Box"
ENT.Category = "Other"
ENT.Spawnable = true
ENT.AdminOnly = false
ENT.DoNotDuplicate = false
ENT.AlreadyUsed = false
function ENT:SetupDataTables()
self:NetworkVar( "Int", 0, "Scrap" )
end
function ENT:SpawnFunction(ply, tr, cls)
if (!tr.Hit) then return end
local SpawnPos = tr.HitPos + tr.HitNormal * 20
local SpawnAng = ply:EyeAngles()
local ent = ents.Create(cls)
ent:SetPos(SpawnPos)
ent:SetAngles(SpawnAng)
ent:Spawn()
ent:Activate()
return ent
end
function ENT:Initialize()
if CLIENT then return end
self:SetModel("models/static/nmrih_tool_box_01.mdl")
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
self:DrawShadow(true)
self:SetTrigger(true)
self:UseTriggerBounds(true,14)
self:SetCollisionGroup(COLLISION_GROUP_WEAPON)
self:SetUseType(SIMPLE_USE)
local phys = self:GetPhysicsObject()
if IsValid(phys) then
phys:Wake()
phys:SetMass(35)
phys:SetMaterial( "metal" )
end
self:SetScrap( 0 )
--SafeRemoveEntityDelayed( self, 30 )
end
function ENT:OnTakeDamage( damage )
self:TakePhysicsDamage(damage)
end
function ENT:PhysicsCollide(data, phys)
if data.DeltaTime > 0.2 then
self:EmitSound(data.Speed > 250 and "Metal_Box.ImpactHard" or "Metal_Box.ImpactSoft")
end
end
function ENT:StartTouch( activator )
if activator:IsPlayer() then self:Use( activator ) end
end
function ENT:Use(activator, caller)
if self.AlreadyUsed then return end
if activator:IsPlayer() then
activator:SetNWInt("Scrap",activator:GetNWInt("Scrap")+self:GetScrap())
self:EmitSound("ui/item_metal_scrap_pickup.wav")
self:EmitSound("misc/scrap_sound/scrap_rebel.wav",75,math.random(95,105))
self:Remove()
net.Start("DisplayScrap")
net.WriteInt(1000,11)
net.Send(activator)
self.AlreadyUsed = true
end
end
if CLIENT then
function ENT:OnRemove()
local ed = EffectData()
ed:SetOrigin(self:GetPos())
ed:SetEntity(self)
util.Effect( "entity_remove", ed, true, true )
end
function ENT:BeingLookedAtByLocalPlayer()
local lp = LocalPlayer()
local trace = util.TraceHull( {
start = lp:GetShootPos(),
endpos = lp:GetShootPos() + lp:GetAimVector() * 200,
filter = lp,
mins = Vector( -3, -3, -3 ),
maxs = Vector( 3, 3, 3 ),
mask = MASK_SHOT,
} )
if trace.Entity ~= self then return false end
if trace.HitPos:Distance(LocalPlayer():GetShootPos()) > 200 then return false end
return true
end
local halos = {}
local halos_inv = {}
function ENT:DrawEntityOutline()
if halos_inv[self] then return end
halos[#halos+1] = self
halos_inv[self] = true
end
local Mat = Material( "sprites/light_ignorez" )
function ENT:Draw()
self:DrawModel()
if self:BeingLookedAtByLocalPlayer() then
if self.RenderGroup == RENDERGROUP_OPAQUE then
self.OldRenderGroup = self.RenderGroup
self.RenderGroup = RENDERGROUP_TRANSLUCENT
end
self:DrawEntityOutline()
self:DrawModel()
AddWorldTip( self:EntIndex(), "Scraps: "..self:GetScrap(), nil, self:WorldSpaceCenter(), nil )
else
if self.OldRenderGroup then
self.RenderGroup = self.OldRenderGroup
self.OldRenderGroup = nil
end
self:DrawModel()
render.SetMaterial( Mat ) render.DrawSprite( self:WorldSpaceCenter(), 32 +math.sin( SysTime()*2 )*4, 32 +math.sin( SysTime()*2 )*4, Color( 255, 64, 92, 192 ) )
render.DrawSprite( self:WorldSpaceCenter(), 8 +math.cos( SysTime()*2 )*2, 64 +math.cos( SysTime()*2 )*4, Color( 255, 64, 92, 192 ) )
end
end
end