--[[ 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.")