aboutsummaryrefslogtreecommitdiff
path: root/gamemode/core/inventory
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-01-08 22:28:08 -0500
committerAlexander Pickering <alexandermpickering@gmail.com>2017-01-08 22:28:08 -0500
commit98e0462e4f6b13ff26af5211409352d45dd9453e (patch)
treefbff14dc9a0fffdda409d9989f2e34cd4bb265f6 /gamemode/core/inventory
parent4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99 (diff)
downloadartery-98e0462e4f6b13ff26af5211409352d45dd9453e.tar.gz
artery-98e0462e4f6b13ff26af5211409352d45dd9453e.tar.bz2
artery-98e0462e4f6b13ff26af5211409352d45dd9453e.zip
Add a ton of icons, more work on refactoring
Diffstat (limited to 'gamemode/core/inventory')
-rw-r--r--gamemode/core/inventory/inventory.lua14
-rw-r--r--gamemode/core/inventory/item.lua4
-rw-r--r--gamemode/core/inventory/sv_invtracker.lua80
3 files changed, 91 insertions, 7 deletions
diff --git a/gamemode/core/inventory/inventory.lua b/gamemode/core/inventory/inventory.lua
index 59c2bba..f6e8f9c 100644
--- a/gamemode/core/inventory/inventory.lua
+++ b/gamemode/core/inventory/inventory.lua
@@ -50,8 +50,8 @@ local inventories = {} --Master list
local function DefaultAddObserver(self,tbl)
if self.observers == nil then self.observers = {} end
- self.observers[#observers + 1] = tbl
- return #observers
+ self.observers[#self.observers + 1] = tbl
+ return #self.observers
end
local function DefaultRemoveObserver(self,observer_id)
for i = observer_id, #self.observers do
@@ -98,7 +98,7 @@ function inv.RegisterInventory(tbl)
string.format("Attempted to register inventory with field %q of type %q when it should have been %q",v[1],type(tbl[v[1]]),v[2]))
end
assert(inventories[tbl.Name] == nil,
- "Attempted to register 2 inventories with the same name")
+ "Attempted to register 2 inventories with the same name:" .. tbl.Name)
assert((tbl.AddObserver == nil and tbl.RemoveObserver == nil) or
(tbl.AddObserver ~= nil and tbl.RemoveObserver ~= nil),
"AddObserver and RemoveObserver must be defined in pairs")
@@ -106,17 +106,19 @@ function inv.RegisterInventory(tbl)
SetDefaultObservers(tbl)
end
inventories[tbl.Name] = tbl
- log.debug("Registered item: " .. tbl.Name)
+ log.debug("Registered inventory: " .. tbl.Name .. "\n")
end
--Create an inventory
function inv.CreateInventory(name)
- return table_copy(inventories[name])
+ print("Createing inventory", name)
+ assert(inventories[name] ~= nil, string.format("Tried to create a copy of inventory that does not exist:%s\nValid inventories are:\n\t%s",name,table.concat(table.GetKeys(inventories),"\n\t")))
+ return TableCopy(inventories[name])
end
--Recreates an inventory from data
function inv.CreateInventoryFromData(name,data)
- return create_inventory(name):DeSerialize(data)
+ return inv.CreateInventory(name):DeSerialize(data)
end
--Must be called in a coroutine.
diff --git a/gamemode/core/inventory/item.lua b/gamemode/core/inventory/item.lua
index ef6ec1d..86bd105 100644
--- a/gamemode/core/inventory/item.lua
+++ b/gamemode/core/inventory/item.lua
@@ -18,6 +18,8 @@
Items may also have methods from one or more interfaces registered with RegisterInterface
]]
local log = nrequire("log.lua")
+print("in item.lua, log is:")
+PrintTable(log)
local itm = {}
local required_fields = {
@@ -30,7 +32,7 @@ function itm.RegisterItem(tbl)
assert(tbl[v] ~= nil, string.format("Attempted to register item without field %q",v))
end
assert(items[tbl.Name] == nil, string.format("Attempted to register 2 items with the same name %q",tbl.Name))
- log.debug("Registered item: " .. tbl.Name)
+ log.debug("Registered item: " .. tbl.Name .. "\n")
end
function itm.GetItemByName(name)
diff --git a/gamemode/core/inventory/sv_invtracker.lua b/gamemode/core/inventory/sv_invtracker.lua
new file mode 100644
index 0000000..3bb2b37
--- /dev/null
+++ b/gamemode/core/inventory/sv_invtracker.lua
@@ -0,0 +1,80 @@
+--[[
+ some accessability functions
+]]
+
+local inv = nrequire("inventory/inventory.lua")
+local itm = nrequire("item.lua")
+
+for k,v in pairs({
+ "art_ObserveInventory",
+ "art_UpdateInventory",
+ "art_CloseInventory",
+ "art_load_player_data",
+ "art_RequestInvMove",
+}) do util.AddNetworkString(v) end
+--[[
+net.Receive("art_ObserveInventory",function()
+ local id = net.ReadUInt(32)
+ local inv_type = net.ReadString()
+ local inital_data = net.ReadData(net.ReadUInt(32))
+ known_inventories[id] = inv.CreateInventoryFromData(inv_type,initaldata)
+end)
+]]
+
+--[[
+ Moves an item from one position to another, format:
+ froment ::entity
+ toent ::entity
+ frominvid ::int32
+ toinvid ::int32
+ frompos ::table
+ topos ::table
+]]
+net.Receive("art_RequestInvMove",function(len,ply)
+ print("ply",ply,"requested inv move")
+ local froment,toent = net.ReadEntity(),net.ReadEntity()
+ local frominvid,toinvid = net.ReadUInt(32),net.ReadUInt(32)
+ local frompos,topos = net.ReadTable(),net.ReadTable()
+ --Make sure the player is not stealing!
+ assert(not (froment:IsPlayer() and toent:IsPlayer()), "Tried to move item between players!")
+ assert(froment.data ~= nil and froment.data.inventories ~= nil and froment.data.inventories[frominvid] ~= nil, "From entity did not have that inventory!")
+ assert(toent.data ~= nil and toent.data.inventories ~= nil and toent.data.inventories[toinvid] ~= nil, "To entity did not have that inventory!")
+ local frominv = froment.data.inventories[frominvid]
+ local toinv = toent.data.inventories[toinvid]
+ local item = frominv:Get(frompos)
+ assert(item ~= nil, "Could not find an item at that position!")
+ assert(toinv:CanFitIn(topos,item), "Could not fit the item in that position!")
+ --If we've gotten here without error, we're all good! Move the item!
+ frominv:Remove(frompos)
+ toinv:Put(topos)
+end)
+
+local slots = {
+ "inv_Head",
+ "inv_Shoulders",
+ "inv_Chest",
+ "inv_Arms",
+ "inv_Hands",
+ "inv_Legs",
+ "inv_Belt",
+ "inv_Feet",
+ "inv_Back",
+}
+
+concommand.Add("SendMeData",function(ply,cmd,args)
+ local i = inv.CreateInventory("Equipment")
+ if not ply.data then ply.data = {} end
+ if not ply.data.inventories then ply.data.inventories = {} end
+ ply.data.inventories[1] = i
+ net.Start("art_ObserveInventory")
+ net.WriteUInt(1,32)
+ net.WriteString("Equipment")
+ local data = i:Serialize()
+ net.WriteUInt(#data,32)
+ net.WriteData(data,#data)
+ net.Send(ply)
+
+ net.Start("art_load_player_data")
+ net.WriteTable({})
+ net.Send(ply)
+end)