aboutsummaryrefslogtreecommitdiff
path: root/gamemode/inventorysystem
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-11-04 22:42:24 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2017-11-04 22:42:24 -0400
commit5d77d8475af7aff27eb026a4b56065387c024165 (patch)
treeccdd061e5654288ab53134be52e8b1ef194d5ebc /gamemode/inventorysystem
parent40080dcfde028c64c4f6f51792b928ee91677bc6 (diff)
downloadartery-5d77d8475af7aff27eb026a4b56065387c024165.tar.gz
artery-5d77d8475af7aff27eb026a4b56065387c024165.tar.bz2
artery-5d77d8475af7aff27eb026a4b56065387c024165.zip
Massive changes
* New error messages for missing dependencies * Removed useless art_serverchanger entity * Added a sweet ascii logo * Added Skills * Minor fixes to cl_inventory tracker * Changed a few prints to use logging module
Diffstat (limited to 'gamemode/inventorysystem')
-rw-r--r--gamemode/inventorysystem/prayers/cl_prayers.lua31
-rw-r--r--gamemode/inventorysystem/prayers/sh_prayers.lua5
-rw-r--r--gamemode/inventorysystem/shapedinventory/sh_shaped.lua4
-rw-r--r--gamemode/inventorysystem/skills/cl_skills.lua67
-rw-r--r--gamemode/inventorysystem/skills/sh_skillcommon.lua68
-rw-r--r--gamemode/inventorysystem/skills/sh_skills.lua76
6 files changed, 170 insertions, 81 deletions
diff --git a/gamemode/inventorysystem/prayers/cl_prayers.lua b/gamemode/inventorysystem/prayers/cl_prayers.lua
index aba778e..afea1cc 100644
--- a/gamemode/inventorysystem/prayers/cl_prayers.lua
+++ b/gamemode/inventorysystem/prayers/cl_prayers.lua
@@ -20,6 +20,13 @@ function pray:DrawOnDPanel(panel)
local ap = self.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)
+ end
+ end,{})
agrid:AddItem(rec)
end
agrid:Dock(TOP)
@@ -38,15 +45,31 @@ function pray:DrawOnDPanel(panel)
grid:SetCols(4)
grid:SetColWide(w)
grid:SetRowHeight(w)
- for k,v in pairs(self.track) do
+ local function drawprayer(prayer)
local rec = vgui.Create("DImageButton",grid)
- rec:SetText(v.Name)
+ rec:SetText(prayer.Name)
rec:SetSize(w,w)
- if(v.DoOnPanel) then
- v:DoOnPanel(rec)
+ if(prayer.DoOnPanel) then
+ prayer:DoOnPanel(rec)
end
+ rec.item = prayer
+ rec:Droppable("prayer")
grid:AddItem(rec)
end
+
+ for k,v in pairs(self.track) do
+ drawprayer(v)
+ end
+
+ local observer = {}
+ observer.Put = function(obs,pos,item)
+ print("Prayer observer got request to put")
+ drawprayer(item)
+ end
+ observer.Remove = function(obs,pos,item)
+ print("I should never remove a prayer!")
+ end
+ return observer
end
--Rebind f1, f2, f3, f4 to prayers
diff --git a/gamemode/inventorysystem/prayers/sh_prayers.lua b/gamemode/inventorysystem/prayers/sh_prayers.lua
index 15cd2af..e1e7347 100644
--- a/gamemode/inventorysystem/prayers/sh_prayers.lua
+++ b/gamemode/inventorysystem/prayers/sh_prayers.lua
@@ -14,7 +14,10 @@ end
inv.Name = "Prayers"
inv.track = {}
function inv:FindPlaceFor(item)
- return {#track}
+ if item.isprayer then
+ return {#self.track}
+ end
+ return nil
end
function inv:CanFitIn(pos,item)
return pos[1] == #self.track
diff --git a/gamemode/inventorysystem/shapedinventory/sh_shaped.lua b/gamemode/inventorysystem/shapedinventory/sh_shaped.lua
index 66aa24b..69e18ca 100644
--- a/gamemode/inventorysystem/shapedinventory/sh_shaped.lua
+++ b/gamemode/inventorysystem/shapedinventory/sh_shaped.lua
@@ -11,7 +11,7 @@ if CLIENT then inv = nrequire("cl_shaped.lua") end
inv.Name = "Shaped Inventory"
inv.tracker = {}
inv.width = 5
-inv.height = 5
+inv.height = 10
local function calcposition(width,height,row,col)
return ((row-1) * width) + col
@@ -32,6 +32,7 @@ local function canfitin(self,arow,acol,shape)
end
function inv:FindPlaceFor(item)
+ if item.Shape == nil then return nil end
for row = 1, self.height do
for col = 1, self.width do
if canfitin(self,row,col,item.Shape) then
@@ -43,6 +44,7 @@ function inv:FindPlaceFor(item)
end
function inv:CanFitIn(tbl,item)
+ if item.Shape == nil then return false end
if canfitin(self,tbl[1],tbl[2],item.Shape) then
return true
else
diff --git a/gamemode/inventorysystem/skills/cl_skills.lua b/gamemode/inventorysystem/skills/cl_skills.lua
index c324a49..d4dbf65 100644
--- a/gamemode/inventorysystem/skills/cl_skills.lua
+++ b/gamemode/inventorysystem/skills/cl_skills.lua
@@ -1,53 +1,6 @@
local inv = {}
---[[
-inv.allskills = {
- ["forageing"] = {
- "hunting",
- "butchering",
- "woodcutting",
- "plant identification",
- },
- ["farming"] = {
- "domestication",
- "sowing",
- "arboriculture",
- "apiarism",
- "reaping",
- "fishing",
- },
- ["artisanship"] = {
- "pottery",
- "glass blowing",
- "cooking",
- "tanning",
- "tailoring",
- "metalworking",
- "lockpicking",
- "herbalism",
- "alchemy",
- "jewlery",
- },
- ["culture"] = {
- "litteracy",
- "writeing",
- "speech",
- "negotiation",
- "painting",
- "performing",
- },
- ["adventuring"] = {
- "polearm",
- "axeplay",
- "swordplay",
- "knifeing",
- "fenceing",
- "lockpicking",
- "archery",
- "throwing",
- },
-}
-]]
+local sc = nrequire("sh_skillcommon.lua")
--the gui elements
local elements = {}
@@ -63,17 +16,21 @@ local levelfunc = function(val)
end
local set_xp_of = function(name,ammt)
+ print("setting xp of", name," to ", ammt)
local lvl,frac = levelfunc(ammt)
- elements[name].label:SetText(string.format("%s : %d (%d%%)",name,lvl,frac))
+ elements[name].label:SetText(string.format("%s : %d (%2.5f%%)",name,lvl,frac))
elements[name].bar:SetFraction(frac)
end
inv.DrawOnDPanel = function(self,panel)
print("Drawing skills on panel")
+ PrintTable(sc.SkillList())
+ print("with")
+ PrintTable(self.skills)
local sheet = vgui.Create( "DColumnSheet", panel )
sheet:Dock( FILL )
- for k,v in pairs(self.allskills) do
+ for k,v in pairs(sc.SkillList()) do
local spanel = vgui.Create("DPanel", sheet)
spanel:Dock(FILL)
local layout = vgui.Create("DListLayout", spanel)
@@ -89,7 +46,7 @@ inv.DrawOnDPanel = function(self,panel)
["label"] = label,
["bar" ] = bar,
}
- set_xp_of(j,self.skills[j])
+ set_xp_of(j,self.skills[j] or 0)
ipanel:Add(label)
ipanel:Add(bar)
ipanel:InvalidateLayout()
@@ -102,11 +59,15 @@ inv.DrawOnDPanel = function(self,panel)
local prox = {}
prox.Put = function(s,position,item)
- set_xp_of(position[1],s[position[1]])
+ print("Calling inventory's put")
+ print("At time of call, skill was")
+ PrintTable(self)
+ set_xp_of(position[1],self.skills[position[1]])
end
prox.Remove = function(s,position)
- set_xp_of(position[1],s[position[1]])
+ print("Calling inventory's remove")
+ set_xp_of(position[1],self.skills[position[1]])
end
return prox
diff --git a/gamemode/inventorysystem/skills/sh_skillcommon.lua b/gamemode/inventorysystem/skills/sh_skillcommon.lua
new file mode 100644
index 0000000..d48fb98
--- /dev/null
+++ b/gamemode/inventorysystem/skills/sh_skillcommon.lua
@@ -0,0 +1,68 @@
+--[[
+ Common functions since skills are a special inventory, adding skills need to be a special item
+]]
+local itm = nrequire("item.lua")
+
+--Common things
+--Make sure items have a "name" and "ammt" attribute
+local item = {}
+
+item.Name = "Skill"
+
+item.isskill = true
+
+item.Serialize = function(self)
+ return util.TableToJSON({
+ name = self.name,
+ ammt = self.ammt
+ })
+end
+
+item.DeSerialize = function(self,data)
+ local tbl = util.JSONToTable(data)
+ tbl.isskill = true
+ return tbl
+end
+
+itm.RegisterItem(item)
+
+local pmeta = FindMetaTable("Player")
+
+function pmeta:AddSkill(name, ammt)
+ local item = itm.GetItemByName("Skill")
+ item.name = name
+ item.ammt = ammt
+ self:GiveItem(item)
+end
+
+local lib = {}
+local skills = {}
+--Skillname is a table of {string_group,string_name}
+function lib.RegisterSkill(skillname)
+ print("funcs.RegisterSkill called with")
+ PrintTable(skillname)
+ local group,name = skillname[1],skillname[2]
+ if not skills[group] then
+ skills[group] = {}
+ end
+ local alin = false
+ for k,v in pairs(skills[group]) do
+ if v == name then
+ alin = true
+ break
+ end
+ end
+ if alin then
+ log.warn("Re-registering skill: " .. skillname)
+ else
+ skills[group][#skills[group] + 1] = name
+ end
+ print("After registering skill, skills is")
+ PrintTable(skills)
+end
+
+function lib.SkillList()
+ return skills
+end
+
+return lib
diff --git a/gamemode/inventorysystem/skills/sh_skills.lua b/gamemode/inventorysystem/skills/sh_skills.lua
index 27c3bad..9b6edd5 100644
--- a/gamemode/inventorysystem/skills/sh_skills.lua
+++ b/gamemode/inventorysystem/skills/sh_skills.lua
@@ -4,23 +4,29 @@
--local itm = nrequire("item.lua")
--local ste = nrequire("utility/stream.lua")
local inventory = nrequire("inventory/inventory.lua")
+local log = nrequire("log.lua")
--local col = nrequire("config/colortheme.lua")
+local sc = nrequire("skills/sh_skillcommon.lua")
local inv = {}
if CLIENT then inv = nrequire("cl_skills.lua") end
-inv.allskills = {
+--TODO: uncomment these as their minigames are implemented
+inv.allskills = {}
+--[[
["forageing"] = {
- "hunting",
- "butchering",
- "woodcutting",
- "plant identification",
- "archery",
+-- "Hunting",
+-- "Butchering",
+-- "Woodcutting",
+-- "plant identification",
+-- "archery",
+-- "fishing",
+-- "Mineing",
},
["farming"] = {
- "domestication",
- "sowing",
- "arboriculture",
- "apiarism",
- "reaping",
+-- "domestication",
+-- "sowing",
+-- "arboriculture",
+-- "apiarism",
+-- "reaping",
},
["artisanship"] = {
"pottery",
@@ -44,6 +50,8 @@ inv.allskills = {
"painting",
"performing",
"faith",
+ "engraving",
+ "architect",
},
["adventuring"] = {
"evasion",
@@ -51,6 +59,7 @@ inv.allskills = {
"lockpicking",
"willpower",
"dexterity",
+ "swimming",
"sailing",
},
["fighting"] = {
@@ -66,14 +75,20 @@ inv.allskills = {
"archery",
}
}
-
+]]
inv.Name = "Skills"
inv.skills = {}
-for k,v in pairs(inv.allskills) do
- for i,j in pairs(v) do
- inv.skills[j] = 0
+local function calculate_skills()
+ for k,v in pairs(sc.SkillList()) do
+ for i,j in pairs(v) do
+ print("settings inv's skills' ", j, " to 0")
+ inv.skills[j] = 0
+ end
end
+ print("After calculating skills, inv was")
+ PrintTable(inv)
end
+calculate_skills()
--[[
item should be
@@ -84,11 +99,16 @@ item should be
}
]]
inv.FindPlaceFor = function(self, item)
- if item.isskill == nil then
+ print("finding place for ")
+ PrintTable(item)
+ if not item.isskill then
return nil
end
-
- if self.skills[item.name] then
+ print("Skill inventory trying to find place for, looking in ")
+ PrintTable(inv.skills)
+ print("for")
+ print(item.name)
+ if inv.skills[item.name] then
return {item.name}
else
return nil
@@ -96,11 +116,13 @@ inv.FindPlaceFor = function(self, item)
end
inv.CanFitIn = function(self,position,item)
- return self.skills[position[1]] != nil
+ return sc.SkillList()[position[1]] != nil
end
inv.Put = function(self,position,item)
- self.skills[position[1]] = self.skills[position[1]] + item.ammt
+ print("item is")
+ PrintTable(item)
+ self.skills[position[1]] = (self.skills[position[1]] or 0) + item.ammt
end
inv.Has = function(self,string_or_compare_func)
@@ -130,10 +152,20 @@ end
inv.DeSerialize = function(self,data)
if data == nil or data == '' then
- return table.Copy(self)
+ return table.Copy(inv)
end
+ calculate_skills()
+ print("At the time we deserialized, sc.skilllist was")
+ PrintTable(sc.SkillList())
+ print("Before making a copy of, inv is")
+ PrintTable(inv)
local cpy = table.Copy(self)
- cpy.skills = util.JSONToTable(data)
+ local gen = util.JSONToTable(data)
+ for k,v in pairs(gen) do
+ cpy.skills[k] = v
+ end
+ print("AFter deserializing inventory, it is")
+ PrintTable(cpy)
return cpy
end