aboutsummaryrefslogtreecommitdiff
path: root/gamemode/inventorysystem/skills/cl_skills.lua
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/inventorysystem/skills/cl_skills.lua')
-rw-r--r--gamemode/inventorysystem/skills/cl_skills.lua115
1 files changed, 115 insertions, 0 deletions
diff --git a/gamemode/inventorysystem/skills/cl_skills.lua b/gamemode/inventorysystem/skills/cl_skills.lua
new file mode 100644
index 0000000..c324a49
--- /dev/null
+++ b/gamemode/inventorysystem/skills/cl_skills.lua
@@ -0,0 +1,115 @@
+
+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",
+ },
+}
+]]
+--the gui elements
+local elements = {}
+
+--return level, frac
+local xpmult = 1.5 --the lower, the more lvl per xp
+local levelfunc = function(val)
+ local curlvl = math.log(val,xpmult)
+ local prevlvlxp = xpmult ^ math.floor(curlvl)
+ local nextlvlxp = xpmult ^ (math.floor(curlvl) + 1)
+ local sp = nextlvlxp - prevlvlxp
+ local frac = (val - prevlvlxp) / ((sp ~= 0) and sp or 1) --don't divide by 0
+ return math.floor(curlvl), frac
+end
+
+local set_xp_of = function(name,ammt)
+ local lvl,frac = levelfunc(ammt)
+ elements[name].label:SetText(string.format("%s : %d (%d%%)",name,lvl,frac))
+ elements[name].bar:SetFraction(frac)
+end
+
+inv.DrawOnDPanel = function(self,panel)
+ print("Drawing skills on panel")
+ local sheet = vgui.Create( "DColumnSheet", panel )
+ sheet:Dock( FILL )
+
+ for k,v in pairs(self.allskills) do
+ local spanel = vgui.Create("DPanel", sheet)
+ spanel:Dock(FILL)
+ local layout = vgui.Create("DListLayout", spanel)
+ layout:MakeDroppable("skill_layout")
+ 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])
+ 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)
+ set_xp_of(position[1],s[position[1]])
+ end
+
+ prox.Remove = function(s,position)
+ set_xp_of(position[1],s[position[1]])
+ end
+
+ return prox
+end
+
+return inv