217 lines
4.1 KiB
Lua
217 lines
4.1 KiB
Lua
|
|
---------------------
|
|
-- Your Name is Benny
|
|
---------------------
|
|
|
|
local PT = FindMetaTable("Player")
|
|
|
|
function PT:GetItems()
|
|
return
|
|
end
|
|
|
|
function PT:HandlerCheck()
|
|
return self:GetActiveWeapon().AEItemHandler and self:GetActiveWeapon()
|
|
end
|
|
|
|
InventoryMeta = {}
|
|
|
|
function InventoryMeta:Destroy()
|
|
local p = self[0].Owner
|
|
p.Inventory = nil
|
|
p:GetInventory()
|
|
end
|
|
|
|
function InventoryMeta:BugCheck()
|
|
for i, v in pairs(self) do
|
|
if i != 0 and !i:IsValid() then
|
|
self[i] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
function InventoryMeta:GetWeighted()
|
|
local itemlist = {}
|
|
|
|
for i, v in pairs(self) do
|
|
if i == 0 then continue end
|
|
table.insert( itemlist, i )
|
|
end
|
|
|
|
table.sort( itemlist, function( a, b )
|
|
return a:GetAcquisition() < b:GetAcquisition()
|
|
end)
|
|
|
|
return itemlist
|
|
end
|
|
|
|
function InventoryMeta:Sync()
|
|
if SERVER then
|
|
net.Start("AEINV_InvSync")
|
|
local count = table.Count( self )-1 -- The header is included
|
|
net.WriteUInt( count, 8 )
|
|
for key, _ in pairs( self ) do
|
|
if key == 0 then continue end
|
|
net.WriteEntity( key )
|
|
end
|
|
net.Send( self[0].Owner )
|
|
end
|
|
end
|
|
|
|
InventoryMeta.__index = InventoryMeta
|
|
|
|
function PT:GetInventory()
|
|
if !self.Inventory then
|
|
print("Creating new inventory for", self)
|
|
self.Inventory = {}
|
|
self.Inventory[0] = { Owner = self }
|
|
setmetatable( self.Inventory, InventoryMeta )
|
|
|
|
if SERVER then
|
|
for i, v in pairs( self:GetChildren() ) do
|
|
if v.AEItem then
|
|
print( "Regen, adding", v, "to inventory")
|
|
self.Inventory[v] = true
|
|
end
|
|
end
|
|
self.Inventory:Sync()
|
|
end
|
|
end
|
|
|
|
self.Inventory:BugCheck()
|
|
|
|
return self.Inventory
|
|
end
|
|
|
|
|
|
gameevent.Listen( "OnRequestFullUpdate" )
|
|
hook.Add( "OnRequestFullUpdate", "OnRequestFullUpdate_example", function( data )
|
|
local name = data.name // Same as Player:Nick()
|
|
local steamid = data.networkid // Same as Player:SteamID()
|
|
local id = data.userid // Same as Player:UserID()
|
|
local index = data.index // Same as Entity:EntIndex() minus one
|
|
|
|
if SERVER then
|
|
Player(id):GetInventory():Sync()
|
|
end
|
|
end )
|
|
|
|
if SERVER then
|
|
util.AddNetworkString("AEINV_InvSync")
|
|
else
|
|
net.Receive("AEINV_InvSync", function()
|
|
print("Destroyed old inventory")
|
|
local p = LocalPlayer()
|
|
p.Inventory = nil
|
|
if p.GetInventory then
|
|
local inv = p:GetInventory()
|
|
local count = net.ReadUInt(8)
|
|
for i=1, count do
|
|
local key = net.ReadEntity()
|
|
print( "Added", key)
|
|
inv[key] = true
|
|
end
|
|
else
|
|
print("TOO EARLY!!!!!!!!!!!!!!!!")
|
|
end
|
|
end)
|
|
end
|
|
|
|
|
|
do
|
|
local qt = {
|
|
["slot1"] = true,
|
|
["slot2"] = true,
|
|
["slot3"] = true,
|
|
["slot4"] = true,
|
|
["slot5"] = true,
|
|
["slot6"] = true,
|
|
["slot7"] = true,
|
|
["slot8"] = true,
|
|
["slot9"] = true,
|
|
["slot0"] = true,
|
|
|
|
["invprev"] = true,
|
|
["invnext"] = true,
|
|
}
|
|
|
|
hook.Add( "PlayerBindPress", "Benny_PlayerBindPress_Original", function( ply, bind, pressed, code )
|
|
if qt[bind] and pressed then
|
|
return true
|
|
end
|
|
end)
|
|
end
|
|
|
|
|
|
local dads = {
|
|
[KEY_1] = 1,
|
|
[KEY_2] = 2,
|
|
[KEY_3] = 3,
|
|
[KEY_4] = 4,
|
|
[KEY_5] = 5,
|
|
[KEY_6] = 6,
|
|
[KEY_7] = 7,
|
|
[KEY_8] = 8,
|
|
[KEY_9] = 9,
|
|
[KEY_0] = 0,
|
|
}
|
|
|
|
local mwheel = {
|
|
[MOUSE_WHEEL_DOWN] = 1,
|
|
[MOUSE_WHEEL_UP] = -1
|
|
}
|
|
|
|
local function beatup( ply, num )
|
|
local inv = ply:GetInventory():GetWeighted()
|
|
local wep = ply:BennyCheck()
|
|
|
|
local ent = inv[num]
|
|
if ent then
|
|
if ent == wep:GetActiveR() then
|
|
wep:Deactive()
|
|
else
|
|
wep:SetActive(ent)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function boba( ply, mwheel )
|
|
if mwheel != 0 then
|
|
print("Test", math.Round( CurTime()%60, 4 ), mwheel )
|
|
local inv = ply:GetInventory():GetWeighted()
|
|
local wep = ply:BennyCheck()
|
|
|
|
local inf = table.Flip( inv )
|
|
local currpos = inf[wep:GetActiveR()]
|
|
if !currpos then
|
|
if mwheel > 0 then
|
|
currpos = 0
|
|
else
|
|
currpos = #inv+1
|
|
end
|
|
end
|
|
|
|
local want = currpos+mwheel
|
|
|
|
if want > #inv then
|
|
want = want - #inv
|
|
elseif want <= 0 then
|
|
want = want + #inv
|
|
end
|
|
|
|
local ent = inv[want]
|
|
if ent then
|
|
wep:SetActive(ent)
|
|
end
|
|
end
|
|
end
|
|
|
|
hook.Add( "PlayerButtonDown", "Benny_PlayerButtonDown_Inv", function( ply, button )
|
|
local wep = ply:HandlerCheck()
|
|
|
|
if dads[button] then
|
|
beatup( ply, dads[button] )
|
|
elseif mwheel[button] then
|
|
boba( ply, mwheel[button] )
|
|
end
|
|
end)
|