Benny/gamemodes/benny/gamemode/items.lua

153 lines
2.8 KiB
Lua

---------------------
-- 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