add sborka
This commit is contained in:
143
garrysmod/addons/molotok/lua/entities/item_scrapbox1.lua
Normal file
143
garrysmod/addons/molotok/lua/entities/item_scrapbox1.lua
Normal file
@@ -0,0 +1,143 @@
|
||||
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
|
||||
Reference in New Issue
Block a user