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