aboutsummaryrefslogtreecommitdiff
path: root/gamemode/inventorysystem
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/inventorysystem')
-rw-r--r--gamemode/inventorysystem/equipment/sh_equipment.lua10
-rw-r--r--gamemode/inventorysystem/equipment/sv_equipment.lua16
-rw-r--r--gamemode/inventorysystem/prayers/cl_prayers.lua20
-rw-r--r--gamemode/inventorysystem/prayers/sh_prayers.lua9
-rw-r--r--gamemode/inventorysystem/quests/cl_quests.lua62
-rw-r--r--gamemode/inventorysystem/quests/sh_quests.lua69
-rw-r--r--gamemode/inventorysystem/shapedinventory/cl_shaped.lua3
-rw-r--r--gamemode/inventorysystem/shapedinventory/sh_shaped.lua7
-rw-r--r--gamemode/inventorysystem/skills/sh_skills.lua10
9 files changed, 180 insertions, 26 deletions
diff --git a/gamemode/inventorysystem/equipment/sh_equipment.lua b/gamemode/inventorysystem/equipment/sh_equipment.lua
index 5bea682..b27dd08 100644
--- a/gamemode/inventorysystem/equipment/sh_equipment.lua
+++ b/gamemode/inventorysystem/equipment/sh_equipment.lua
@@ -117,16 +117,14 @@ inv.Serialize = function(self)
end
inv.DeSerialize = function(self,data)
- if data == nil or data == '' then
- return table.Copy(self)
- end
+ self.equiped = {}
local tbl = util.JSONToTable(data)
- local cpy = table.Copy(self)
+ tbl = tbl or {}
for k,v in pairs(tbl) do
local te = itm.GetItemByName(v[1]):DeSerialize(v[2])
- cpy:Put({k},te)
+ self:Put({k},te)
end
- return cpy
+ return self
end
inventory.RegisterInventory(inv)
diff --git a/gamemode/inventorysystem/equipment/sv_equipment.lua b/gamemode/inventorysystem/equipment/sv_equipment.lua
index 2189122..6c28674 100644
--- a/gamemode/inventorysystem/equipment/sv_equipment.lua
+++ b/gamemode/inventorysystem/equipment/sv_equipment.lua
@@ -1,5 +1,21 @@
--[[
Needed so the includer dosn't freak out
]]
+for k,v in pairs({
+ "materials/svg/delapouite/originals/svg/000000/transparent/ring.svg",
+ "materials/svg/lorc/originals/svg/000000/transparent/cracked-helm.svg",
+ "materials/svg/skoll/originals/svg/000000/transparent/pauldrons.svg",
+ "materials/svg/willdabeast/deviations/svg/000000/transparent/chain-mail.svg",
+ "materials/svg/lorc/originals/svg/000000/transparent/knapsack.svg",
+ "materials/svg/skoll/originals/svg/000000/transparent/bracers.svg",
+ "materials/svg/lucasms/equipment/svg/000000/transparent/belt.svg",
+ "materials/svg/delapouite/originals/svg/000000/transparent/gloves.svg",
+ "materials/svg/sbed/originals/svg/000000/transparent/shield.svg",
+ "materials/svg/delapouite/originals/svg/000000/transparent/thor-hammer.svg",
+ "materials/svg/irongamer/originals/svg/000000/transparent/armored-pants.svg",
+ "materials/svg/lorc/originals/svg/000000/transparent/boots.svg",
+}) do
+ resource.AddSingleFile(v)
+end
return {}
diff --git a/gamemode/inventorysystem/prayers/cl_prayers.lua b/gamemode/inventorysystem/prayers/cl_prayers.lua
index afea1cc..e28db63 100644
--- a/gamemode/inventorysystem/prayers/cl_prayers.lua
+++ b/gamemode/inventorysystem/prayers/cl_prayers.lua
@@ -8,7 +8,7 @@ function pray:DrawOnDPanel(panel)
--Active grid
local agrid = vgui.Create("DGrid",panel)
agrid:SetCols(4)
- local w = ((ScrW()/4) - 10) / 4
+ local w = ((ScrW() / 4) - 10) / 4
agrid:SetHeight(w)
agrid:SetColWide(w)
agrid:SetRowHeight(w)
@@ -17,14 +17,19 @@ function pray:DrawOnDPanel(panel)
rec:SetText("F"..i)
rec:SetSize(w,w)
rec.DoClick = function(s)
- local ap = self.activeprayers[i]
+ local ap = pray.activeprayers[i]
explain:SetText(ap ~= nil and ap.Description or "Select a prayer")
end
rec:Receiver("prayer",function(s,tbl,dropped,mi,x,y)
if not dropped then return end
- self.activeprayers[i] = tbl.item
- if tbl.item.DoOnPanel then
- tbl.item.DoOnPanel(s)
+ pray.activeprayers[i] = tbl[1].item
+ if tbl[1].item == nil then
+ print("Failed to get item, tbl was")
+ PrintTable(tbl)
+ error("Failed to get item")
+ end
+ if tbl[1].item.DoOnPanel then
+ tbl[1].item:DoOnPanel(rec)
end
end,{})
agrid:AddItem(rec)
@@ -64,6 +69,7 @@ function pray:DrawOnDPanel(panel)
local observer = {}
observer.Put = function(obs,pos,item)
print("Prayer observer got request to put")
+ debug.Trace()
drawprayer(item)
end
observer.Remove = function(obs,pos,item)
@@ -79,12 +85,12 @@ local prayerhooks = {
["gm_showspare1"] = 3,
["gm_showspare2"] = 4
}
-hook.Add("PlayerBindPress", function( ply, bind, pressed )
+hook.Add("PlayerBindPress", "pray_hook", function( ply, bind, pressed )
local phn = prayerhooks[bind]
if phn == nil then return end
local pap = pray.activeprayers[phn]
if pap == nil then return end
- pap:pray()
+ pap:Pray()
end)
return pray
diff --git a/gamemode/inventorysystem/prayers/sh_prayers.lua b/gamemode/inventorysystem/prayers/sh_prayers.lua
index e1e7347..9d8ff3b 100644
--- a/gamemode/inventorysystem/prayers/sh_prayers.lua
+++ b/gamemode/inventorysystem/prayers/sh_prayers.lua
@@ -14,7 +14,7 @@ end
inv.Name = "Prayers"
inv.track = {}
function inv:FindPlaceFor(item)
- if item.isprayer then
+ if item.Pray ~= nil then
return {#self.track}
end
return nil
@@ -54,14 +54,15 @@ function inv:Serialize()
end
function inv:DeSerialize(str)
- local cpy = table.Copy(self)
+ self.track = {}
local tbl = util.JSONToTable(str)
+ tbl = tbl or {}
local i = 1
for k,v in pairs(tbl) do
local this_prayer = itm.GetItemByName(k):DeSerialize(v)
- cpy:Put({i},this_prayer)
+ self:Put({i},this_prayer)
end
- return cpy
+ return self
end
diff --git a/gamemode/inventorysystem/quests/cl_quests.lua b/gamemode/inventorysystem/quests/cl_quests.lua
new file mode 100644
index 0000000..2052e19
--- /dev/null
+++ b/gamemode/inventorysystem/quests/cl_quests.lua
@@ -0,0 +1,62 @@
+
+local inv = {}
+--the gui elements
+local elements = {}
+
+local questlist = nil
+local questlog = nil
+local function add_quest(panel,quest)
+
+end
+
+inv.DrawOnDPanel = function(self,panel)
+ local spanel = vgui.Create("DPanel", panel)
+ spanel:Dock(FILL)
+ local halfs = vgui.Create("DVerticalDivider",spanel)
+ questlist = vgui.Create("DListLayout", spanel)
+ questlog = vgui.Create("DLabel",spanel)
+ halfs:SetBottom(questlist)
+ halfs:SetTop(questlog)
+ questlist:Dock(FILL)
+ questlog:Dock(FILL)
+ for k,v in pairs(self.track) do
+ local questbutton = vgui.Create("DButton",questlist)
+ questbutton:SetText(v.QuestName)
+ questbutton.DoClick = function()
+ questlog:SetText(v:GetText())
+ end
+ for i,j in pairs(v) do
+ local ipanel = vgui.Create("DListLayout",layout)
+ local label = vgui.Create("DLabel",ipanel)
+ label:Dock(TOP)
+ label:SetDark(true)
+ local bar = vgui.Create("DProgress",ipanel)
+ bar:Dock(TOP)
+ elements[j] = {
+ ["label"] = label,
+ ["bar" ] = bar,
+ }
+ set_xp_of(j,self.skills[j] or 0)
+ ipanel:Add(label)
+ ipanel:Add(bar)
+ ipanel:InvalidateLayout()
+ ipanel:SizeToChildren(true,true)
+ layout:Add(ipanel)
+ end
+ layout:Dock(FILL)
+ sheet:AddSheet(k, spanel, "icon16/cross.png")
+ end
+
+ local prox = {}
+ prox.Put = function(s,position,item)
+ --Observer might be called before our put()
+ end
+
+ prox.Remove = function(s,position)
+ --
+ end
+
+ return prox
+end
+
+return inv
diff --git a/gamemode/inventorysystem/quests/sh_quests.lua b/gamemode/inventorysystem/quests/sh_quests.lua
new file mode 100644
index 0000000..3515d61
--- /dev/null
+++ b/gamemode/inventorysystem/quests/sh_quests.lua
@@ -0,0 +1,69 @@
+--[[
+ Quests must have an Arcs field
+
+]]
+local reg = nrequire("inventory/inventory.lua")
+local itm = nrequire("item.lua")
+local inv = {}
+if CLIENT then
+ inv = nrequire("cl_quests.lua")
+end
+
+inv.Name = "Quests"
+inv.track = {}
+function inv:FindPlaceFor(item)
+ if item.Arcs ~= nil then
+ return {#self.track}
+ end
+ return nil
+end
+function inv:CanFitIn(pos,item)
+ return pos[1] == #self.track
+end
+function inv:Put(pos,item)
+ print("Added a quest:")
+ PrintTable(item)
+ self.track[pos[1]] = item
+end
+function inv:Has(a)
+ if type(a) == "string" then
+ for k,v in pairs(self.track) do
+ if v == a then return {k} end
+ end
+ elseif type(a) == "function" then
+ for k,v in pairs(self.track) do
+ if a(v) then return {k} end
+ end
+ end
+ return nil
+end
+function inv:Remove(pos)
+ for i = 1,pos[1] do
+ self.track[i] = self.track[i + 1]
+ end
+end
+function inv:Get(pos)
+ return self.track[pos[1]]
+end
+function inv:Serialize()
+ local ret = {}
+ for k,v in pairs(self.track) do
+ ret[v.Name] = v:Serialize()
+ end
+ return util.TableToJSON(ret)
+end
+
+function inv:DeSerialize(str)
+ self.track = {}
+ local tbl = util.JSONToTable(str)
+ tbl = tbl or {}
+ local i = 1
+ for k,v in pairs(tbl) do
+ local this_prayer = itm.GetItemByName(k):DeSerialize(v)
+ self:Put({i},this_prayer)
+ end
+ return self
+end
+
+
+reg.RegisterInventory(inv)
diff --git a/gamemode/inventorysystem/shapedinventory/cl_shaped.lua b/gamemode/inventorysystem/shapedinventory/cl_shaped.lua
index 7c60156..d9a4a08 100644
--- a/gamemode/inventorysystem/shapedinventory/cl_shaped.lua
+++ b/gamemode/inventorysystem/shapedinventory/cl_shaped.lua
@@ -46,6 +46,9 @@ end
--Draw the item in a position
local function drawitemat(self,x,y,item)
+ assert(self ~= nil, "I am nil!")
+ assert(self.gridpanels ~= nil, "My gridpanels were nil!")
+ assert(self.gridpanels[x] ~= nil, "Could not find that row!")
local tp = self.gridpanels[x][y]
if tp == nil then
error("Unable to continue, could not find item at (" .. x .. "," .. y .. ")")
diff --git a/gamemode/inventorysystem/shapedinventory/sh_shaped.lua b/gamemode/inventorysystem/shapedinventory/sh_shaped.lua
index 5de6272..42edaa6 100644
--- a/gamemode/inventorysystem/shapedinventory/sh_shaped.lua
+++ b/gamemode/inventorysystem/shapedinventory/sh_shaped.lua
@@ -119,17 +119,18 @@ function inv:Serialize()
end
function inv:DeSerialize(str)
- local ret = table.Copy(self)
+ self.tracker = {}
local tbl = util.JSONToTable(str)
+ tbl = tbl or {}
for k,v in pairs(tbl) do
local name = k
local pos = v[1]
local data = v[2]
local item = itm.GetItemFromData(name,data)
- ret:Put(pos,item)
+ self:Put(pos,item)
--ret.tracker[pos] = itm.GetItemFromData(name,data)
end
- return ret
+ return self
end
diff --git a/gamemode/inventorysystem/skills/sh_skills.lua b/gamemode/inventorysystem/skills/sh_skills.lua
index a1c878f..3c212bf 100644
--- a/gamemode/inventorysystem/skills/sh_skills.lua
+++ b/gamemode/inventorysystem/skills/sh_skills.lua
@@ -140,16 +140,14 @@ inv.Serialize = function(self)
end
inv.DeSerialize = function(self,data)
- if data == nil or data == '' then
- return table.Copy(inv)
- end
calculate_skills()
- local cpy = table.Copy(self)
+ self.skills = {}
local gen = util.JSONToTable(data)
+ gen = gen or {}
for k,v in pairs(gen) do
- cpy.skills[k] = v
+ self.skills[k] = v
end
- return cpy
+ return self
end
inventory.RegisterInventory(inv)