diff options
Diffstat (limited to 'gamemode/server/saveworld.lua')
| -rw-r--r-- | gamemode/server/saveworld.lua | 43 |
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) |
