From 28affa22541b9ef251707793f6b1c1a26d663592 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sat, 3 Nov 2018 18:23:45 -0400 Subject: Started on new npc system Started work on the new npc system --- .../inventorysystem/abilities/cl_abilities.lua | 96 ++++++++++++++++++++++ .../inventorysystem/abilities/sh_abilities.lua | 69 ++++++++++++++++ gamemode/inventorysystem/cl_common.lua | 1 + gamemode/inventorysystem/prayers/cl_prayers.lua | 96 ---------------------- gamemode/inventorysystem/prayers/sh_prayers.lua | 69 ---------------- gamemode/inventorysystem/skills/cl_skills.lua | 1 + 6 files changed, 167 insertions(+), 165 deletions(-) create mode 100644 gamemode/inventorysystem/abilities/cl_abilities.lua create mode 100644 gamemode/inventorysystem/abilities/sh_abilities.lua delete mode 100644 gamemode/inventorysystem/prayers/cl_prayers.lua delete mode 100644 gamemode/inventorysystem/prayers/sh_prayers.lua (limited to 'gamemode/inventorysystem') 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) diff --git a/gamemode/inventorysystem/cl_common.lua b/gamemode/inventorysystem/cl_common.lua index bf9fb6f..a83deb1 100644 --- a/gamemode/inventorysystem/cl_common.lua +++ b/gamemode/inventorysystem/cl_common.lua @@ -63,6 +63,7 @@ function com.generatereceiver() if posequal then return end local item = frominv:Get(frompos) + if not item then return end --Fake remove the item, in case the position we want to move it to overlaps with where it is now. frominv:Remove(frompos) local cf = toinv:CanFitIn(topos,item) diff --git a/gamemode/inventorysystem/prayers/cl_prayers.lua b/gamemode/inventorysystem/prayers/cl_prayers.lua deleted file mode 100644 index e28db63..0000000 --- a/gamemode/inventorysystem/prayers/cl_prayers.lua +++ /dev/null @@ -1,96 +0,0 @@ - -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/prayers/sh_prayers.lua b/gamemode/inventorysystem/prayers/sh_prayers.lua deleted file mode 100644 index 9d8ff3b..0000000 --- a/gamemode/inventorysystem/prayers/sh_prayers.lua +++ /dev/null @@ -1,69 +0,0 @@ ---[[ - 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 = "Prayers" -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) diff --git a/gamemode/inventorysystem/skills/cl_skills.lua b/gamemode/inventorysystem/skills/cl_skills.lua index b5e4620..208cc73 100644 --- a/gamemode/inventorysystem/skills/cl_skills.lua +++ b/gamemode/inventorysystem/skills/cl_skills.lua @@ -24,6 +24,7 @@ inv.DrawOnDPanel = function(self,panel) local label = vgui.Create("DLabel",ipanel) label:Dock(TOP) label:SetDark(true) + label:SetWrap(true) local bar = vgui.Create("DProgress",ipanel) bar:Dock(TOP) elements[j] = { -- cgit v1.2.3-70-g09d2