aboutsummaryrefslogtreecommitdiff
path: root/gamemode/inventorysystem/abilities
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2018-11-03 18:23:45 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2018-11-03 18:23:45 -0400
commit28affa22541b9ef251707793f6b1c1a26d663592 (patch)
tree622754894d75c74dc5e8516ccf184ad4bf328fef /gamemode/inventorysystem/abilities
parentc639e7c7c6ab1595fdce39f56312e3d6a886bbe8 (diff)
downloadartery-28affa22541b9ef251707793f6b1c1a26d663592.tar.gz
artery-28affa22541b9ef251707793f6b1c1a26d663592.tar.bz2
artery-28affa22541b9ef251707793f6b1c1a26d663592.zip
Started on new npc system
Started work on the new npc system
Diffstat (limited to 'gamemode/inventorysystem/abilities')
-rw-r--r--gamemode/inventorysystem/abilities/cl_abilities.lua96
-rw-r--r--gamemode/inventorysystem/abilities/sh_abilities.lua69
2 files changed, 165 insertions, 0 deletions
diff --git a/gamemode/inventorysystem/abilities/cl_abilities.lua b/gamemode/inventorysystem/abilities/cl_abilities.lua
new file mode 100644
index 0000000..e28db63
--- /dev/null
+++ b/gamemode/inventorysystem/abilities/cl_abilities.lua
@@ -0,0 +1,96 @@
+
+local pray = {}
+
+local explain
+pray.activeprayers = {}
+function pray:DrawOnDPanel(panel)
+ print("Attempted to draw prayer panel")
+ --Active grid
+ local agrid = vgui.Create("DGrid",panel)
+ agrid:SetCols(4)
+ local w = ((ScrW() / 4) - 10) / 4
+ agrid:SetHeight(w)
+ agrid:SetColWide(w)
+ agrid:SetRowHeight(w)
+ for i=1,4 do
+ local rec = vgui.Create("DImageButton",agrid)
+ rec:SetText("F"..i)
+ rec:SetSize(w,w)
+ rec.DoClick = function(s)
+ 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
+ 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)
+ end
+ agrid:Dock(TOP)
+ --Explanation of spells
+ local explainpanel = vgui.Create("DPanel",panel)
+ explainpanel:SetHeight(w*2)
+ explainpanel:Dock(TOP)
+ explainpanel:SetText("This panel will explain information about a hovered skill")
+ explain = vgui.Create("DLabel",explainpanel)
+ explain:Dock(FILL)
+ explain:SetDark(true)
+ --All spells we know
+ local scroll = vgui.Create( "DScrollPanel", panel )
+ scroll:Dock( FILL )
+ local grid = vgui.Create("DGrid",scroll)
+ grid:SetCols(4)
+ grid:SetColWide(w)
+ grid:SetRowHeight(w)
+ local function drawprayer(prayer)
+ local rec = vgui.Create("DImageButton",grid)
+ rec:SetText(prayer.Name)
+ rec:SetSize(w,w)
+ 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")
+ debug.Trace()
+ 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
+local prayerhooks = {
+ ["gm_showhelp"] = 1,
+ ["gm_showteam"] = 2,
+ ["gm_showspare1"] = 3,
+ ["gm_showspare2"] = 4
+}
+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()
+end)
+
+return pray
diff --git a/gamemode/inventorysystem/abilities/sh_abilities.lua b/gamemode/inventorysystem/abilities/sh_abilities.lua
new file mode 100644
index 0000000..fc6cd82
--- /dev/null
+++ b/gamemode/inventorysystem/abilities/sh_abilities.lua
@@ -0,0 +1,69 @@
+--[[
+ prayers must have a "Pray" method,
+ a "Name" string,
+ a "Description" string
+
+]]
+local reg = nrequire("inventory/inventory.lua")
+local itm = nrequire("item.lua")
+local inv = {}
+if CLIENT then
+ inv = nrequire("cl_prayers.lua")
+end
+
+inv.Name = "Abilities"
+inv.track = {}
+function inv:FindPlaceFor(item)
+ if item.Pray ~= 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)
+ 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)