aboutsummaryrefslogtreecommitdiff
path: root/gamemode/server/saveworld.lua
blob: 25dd04839305e1af17a6cfdb1d48ea974a5fcc93 (plain)
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 == "" 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)