From 9adcb3c73a8d0e7ecfe66b30da630c6c2e67f03a Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sat, 27 Aug 2016 17:08:46 -0400 Subject: Moved prayers to their own system --- gamemode/shared/loadprayers.lua | 120 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 gamemode/shared/loadprayers.lua (limited to 'gamemode/shared/loadprayers.lua') diff --git a/gamemode/shared/loadprayers.lua b/gamemode/shared/loadprayers.lua new file mode 100644 index 0000000..53631c2 --- /dev/null +++ b/gamemode/shared/loadprayers.lua @@ -0,0 +1,120 @@ +--[[ + This file loads in all the prayers +]] +local concmd = include("concommands.lua") +--local autolua = include("../autolua.lua") +print("Hello from LoadItems.lua!") +ART.Prayer = {} +local requiredfields = { + "Name", + "Pray", +} +local defaultfields = { + ["Serialize"] = function(self) return "" end, + ["DeSerialize"] = function(self,string) return self end, + ["Shape"] = {{true}}, +} + +--- Adds the given prayer table to the global list of prayers. +-- Make sure that you do not accidentally register the same prayer twice, all prayers MUST have unique names +-- @param tbl The prayer to reigster +function ART.RegisterPrayer(tbl) + --print("Registering item:" .. tbl.Name) + for k,v in pairs(requiredfields) do + assert(tbl[v] ~= nil, "Attempted to register an prayer without field:" .. v) + end + assert(ART.Prayer[tbl.Name] == nil, "Attempted to register 2 Prayers with the same name!") + for k,v in pairs(defaultfields) do + if tbl[k] == nil then + tbl[k] = v + end + end + ART.Prayer[tbl.Name] = tbl + --print("Art is now:") + --PrintTable(ART) +end + +--autolua.AddLuaSHFolder("/shared/itemsystem") + +local meta = FindMetaTable("Player") + + +if SERVER then + meta.Inventory.Prayers = {} + + -- TODO:Make prayers limited or something + function meta:HasPrayer(prayername) + return self.Inventory.Prayers[prayername] + end + + function meta:RemovePrayer(prayername) + self.Inventory.Prayers[prayername] = nil + self:SynchPrayers() + end + + function ART.RemovePrayer(player,prayername) + player:RemovePrayer(prayername) + end + + function meta:GivePrayer(prayername) + print("Prayers are:") + PrintTable(ART.Prayer) + assert(ART.Prayer[prayername] ~= nil, "Attempted to give a nil prayer \"" .. prayername .. "\"") + self.Inventory.Prayers[prayername] = true + self:SynchPrayers() + end + + function ART.GivePrayer(player,prayername) + player:GivePrayer(prayername) + end + + util.AddNetworkString( "art_synch_prayers" ) + function meta:SynchPrayers() + print("Sending " .. table.Count(self.Inventory.Prayers) .. " prayers:") + PrintTable(self.Inventory.Prayers) + net.Start("art_synch_prayers") + net.WriteUInt(table.Count(self.Inventory.Prayers),16) + for k,v in pairs(self.Inventory.Prayers) do + print("Writeing " .. k) + net.WriteString(k) + end + net.Send(self) + end +end + +concommand.Add("artery_giveprayer",function(ply,cmd,args) + if not ply:IsAdmin() then return end + ply:GivePrayer(args[1]) +end, concmd.AutocompleteFunction(table.GetKeys(ART.Prayer)), "Give an instance of a prayer to yourself") + +if CLIENT then + ART.MyPrayer = {} + net.Receive("art_synch_prayers",function() + ART.MyPrayer = {} + for k = 1,net.ReadUInt(16) do + local pstr = net.ReadString() + print("Reading prayer " .. pstr) + ART.MyPrayer[pstr] = true + end + print("Recived prayers:") + PrintTable(ART.MyPrayer) + ART.RefreshDisplays() + end) +end + +function ART.GetPrayerByName(name) + assert(ART.Prayer[name] ~= nil,"Attempted to get a nil prayer:" .. name) + return ART.Prayer[name] +end + +concommand.Add("artery_printprayers",function(ply,cmd,args) + if not ply:IsAdmin() then return end + print("Items table:") + PrintTable(ART.Prayer) +end) + +concommand.Add("artery_giveprayer",function(ply,cmd,args) + if not ply:IsAdmin() then return end + print("Trying to give an prayer:" .. args[1]) + ART.GivePrayer(ply,args[1]) +end, concmd.AutocompleteFunction(table.GetKeys(ART.Prayer)), "Give an item to the specified player, or yourself if no player is specified.") -- cgit v1.2.3-70-g09d2