1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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 == "" or filesstr == nil 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)
|