--------------------- -- Your Name is Benny --------------------- ITEMS = {} local itemmeta = {} function itemmeta:__tostring() return "ItemDef [" .. self.ClassName .. "]" end local ITEMHELPER = { Get = function( self, key ) return self.key end, GetRaw = function( self, key ) return rawget( self, key ) end, } function itemmeta.__index( self, key ) if ITEMHELPER[key] then return ITEMHELPER[key] end if rawget(self, "BaseClass") then return rawget(self, "BaseClass")[key] end end function AddItem( itemname, item ) if item then ITEMS[itemname] = item item.ClassName = itemname item.BaseClass = ITEMS[item.Base] setmetatable( item, itemmeta ) else return ITEMS[itemname] end end AddItem( "base", { PrintName = "Base Item", Description = "Beginning item base.", Category = "base", Vars = { ["Float"] = { "Acquisition", }, }, ["Initialize"] = function( class, ent, handler ) print( class, "Initialized base initialization" ) end, ["Deploy"] = function( class, ent, handler ) end, ["Holster"] = function( class, ent, handler ) end, ["Attack"] = function( class, ent, handler ) end, ["Think"] = function( class, ent, handler ) end, ["Reload"] = function( class, ent, handler ) end, }) AddItem( "base_firearm", { PrintName = "Base Firearm", Description = "Item base for firearms.", Category = "base", Base = "base", Vars = { ["Int"] = { "Clip", "BurstCount", }, ["Float"] = { "Delay", "DelayBurst", "RefillTime", "Accuracy_Reset", "Accuracy_Amount", "DelayReload", }, }, Delay = 0.1, Pellets = 1, ClipSize = 15, BurstCount = math.huge, BurstRunaway = false, BurstAuto = false, BurstDelay = 0, ["Initialize"] = function( class, ent, handler ) ITEMS["base"].Initialize( class, ent, handler ) ent:SetClip( class.ClipSize ) print( class, "Initialized a firearm" ) end, ["Attack"] = function( class, ent, handler ) if ent:GetClip() <= 0 then return end if ent:GetDelay() > CurTime() then return end ent:SetClip( ent:GetClip() - 1 ) ent:SetDelay( CurTime() + class.Delay ) end, ["Reload"] = function( class, ent, handler ) ent:SetClip( class.ClipSize ) end, }) AddItem( "mk23", { PrintName = "#Item.mk23.Name", Description = "#Item.mk23.Description", Category = "pistol", Base = "base_firearm", Model = "models/weapons/w_pist_elite_single.mdl", ClipSize = 12, Delay = (60/300), FireSound = "weapons/usp/usp_unsil-1.wav", Accuracy = 5/60, BurstCount = 1, Accuracy_Add = 0.5, Accuracy_Reset = 0.4, Accuracy_Decay = 5, }) for ID, Data in pairs(ITEMS) do local tent = {} tent.Base = "b-itembase" tent.PrintName = Data.PrintName or ID tent.ID = ID tent.Class = ITEMS[ID] tent.Spawnable = true tent.AdminOnly = false tent.Category = "Other" -- print("aei_" .. ID) scripted_ents.Register( tent, "b-item_" .. ID ) end