aboutsummaryrefslogtreecommitdiff
path: root/gamemode/shared/loadprayers.lua
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/shared/loadprayers.lua')
-rw-r--r--gamemode/shared/loadprayers.lua120
1 files changed, 120 insertions, 0 deletions
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.")