aboutsummaryrefslogtreecommitdiff
path: root/gamemode/server/saveworld.lua
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2016-11-17 17:11:15 -0500
committerAlexander Pickering <alexandermpickering@gmail.com>2016-11-17 17:11:15 -0500
commit52fb13ef163bcea7f1409e17fd62509703de9f69 (patch)
tree12df9ec09392b561d4a2604544f200635130c8b8 /gamemode/server/saveworld.lua
parent50537786ae45d0e12a1dc4265e0d40d2fd4fbc4b (diff)
downloadwintersurvival2-52fb13ef163bcea7f1409e17fd62509703de9f69.tar.gz
wintersurvival2-52fb13ef163bcea7f1409e17fd62509703de9f69.tar.bz2
wintersurvival2-52fb13ef163bcea7f1409e17fd62509703de9f69.zip
Added persistance
Diffstat (limited to 'gamemode/server/saveworld.lua')
-rw-r--r--gamemode/server/saveworld.lua43
1 files changed, 43 insertions, 0 deletions
diff --git a/gamemode/server/saveworld.lua b/gamemode/server/saveworld.lua
new file mode 100644
index 0000000..25dd048
--- /dev/null
+++ b/gamemode/server/saveworld.lua
@@ -0,0 +1,43 @@
+--[[
+ Saves all player-made items in the world before shutdown
+]]
+
+local savedents = {
+ "ws_alter","ws_barrel","ws_campfire","ws_grave","ws_infuser","ws_prop","ws_researchtable","ws_rune"
+}
+
+hook.Add("ShutDown","save_playermade_ents",function()
+ local ppe = {}
+ for k,v in pairs(savedents) do
+ ppe[v] = true
+ end
+
+ --Make sure each entity that should be saved implements a Serialize(self) and Deserialize(self,str) function
+ local savecontent = {}
+ for k,v in pairs(ents.GetAll()) do
+ local class = v:GetClass()
+ if ppe[class] then
+ local ssc = #savecontent
+ savecontent[ssc + 1] = class
+ savecontent[ssc + 2] = ":"
+ savecontent[ssc + 3] = v:Serialize()
+ savecontent[ssc + 4] = "\n"
+ end
+ end
+
+ file.Write("ws_save.dat",table.concat(savecontent))
+end)
+
+hook.Add("InitPostEntity","load_playermade_ents",function()
+ local filesstr = file.Read("ws_save.dat","DATA")
+ if filesstr == "" then return end
+ local lines = string.Explode("\n",filesstr)
+ local _,ee = lines[1]:find("^.-:")
+ local entname = lines[1]:sub(1,ee - 1)
+ local entdata = lines[1]:sub(ee + 1)
+ print("Loading entity ", entname, "with data",entdata)
+ local ent = ents.Create(entname)
+ ent:Spawn()
+ ent:Deserialize(entdata)
+ print("ent spawned",ent)
+end)