Skip to content

Commit 382acd1

Browse files
committed
non-functional but new saveloadhandler MO parsing
1 parent e7b648b commit 382acd1

File tree

3 files changed

+20
-256
lines changed

3 files changed

+20
-256
lines changed

Data/Base.rte/Activities/Utility/SaveLoadHandler.lua

Lines changed: 19 additions & 178 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,8 @@
3131
-- a UniqueID is just a number, so SaveLoadHandler will save it as such instead of using its special MO method. UniqueIDs reset on game load too,
3232
-- so they are no longer the same anyway.
3333

34-
-- Also, SaveLoadHandler's MO parsing method relies on trawling through entities owned by MovableMan, which means entities that actually exist in the simulation,
35-
-- including those in the inventory of Actors that exist in the simulation.
36-
-- Yes, this means that valid entities that only exist in the lua state and not in the simulation can't really be saved and loaded. Those are wiped
37-
-- as soon a the lua state is deleted (i.e. you save and quit a game).
34+
-- Note that still-valid entities that nonetheless only exist in the lua state and not in the simulation can't really be saved and loaded. Those are wiped
35+
-- as soon as the lua state is deleted (i.e. you save and quit a game).
3836

3937
local SaveLoadHandler = {}
4038

@@ -93,7 +91,6 @@ function SaveLoadHandler:SerializeTable(val, name, skipnewlines, depth)
9391
elseif val.Magnitude then -- ghetto vector check
9492
tmp = tmp .. string.format("%q", "Vector(" .. val.X .. "," .. val.Y .. ")")
9593
elseif val.PresetName and IsMOSRotating(val) then -- IsMOSRotating freaks out if we give it something that isn't a preset at all... ghetto here too
96-
val:SetNumberValue("saveLoadHandlerUniqueID", val.UniqueID);
9794
tmp = tmp .. string.format("%q", "SAVELOADHANDLERUNIQUEID_" .. tostring(val.UniqueID))
9895
elseif val.FirstBox then -- ghetto area check
9996
tmp = tmp .. string.format("%q", "SAVELOADHANDLERAREA_" .. tostring(val.Name))
@@ -112,109 +109,14 @@ function SaveLoadHandler:SerializeTable(val, name, skipnewlines, depth)
112109
return tmp
113110
end
114111

115-
function SaveLoadHandler:FindMOWithId(id)
116-
for act in MovableMan.AddedActors do
117-
if math.abs(act:GetNumberValue("saveLoadHandlerUniqueID")) == id then
118-
--act:removeNumberValue("saveLoadHandlerUniqueID");
119-
return act;
120-
end
121-
for item in act.Inventory do
122-
if math.abs(item:GetNumberValue("saveLoadHandlerUniqueID")) == id then
123-
--item:removeNumberValue("saveLoadHandlerUniqueID");
124-
return item;
125-
end
126-
end
127-
for att in ToMOSRotating(act).Attachables do
128-
if math.abs(att:GetNumberValue("saveLoadHandlerUniqueID")) == id then
129-
--item:removeNumberValue("saveLoadHandlerUniqueID");
130-
return att;
131-
end
132-
end
133-
end
134-
for act in MovableMan.Actors do
135-
if math.abs(act:GetNumberValue("saveLoadHandlerUniqueID")) == id then
136-
--act:removeNumberValue("saveLoadHandlerUniqueID");
137-
return act;
138-
end
139-
for item in act.Inventory do
140-
if math.abs(item:GetNumberValue("saveLoadHandlerUniqueID")) == id then
141-
--item:removeNumberValue("saveLoadHandlerUniqueID");
142-
return item;
143-
end
144-
end
145-
for att in ToMOSRotating(act).Attachables do
146-
if math.abs(att:GetNumberValue("saveLoadHandlerUniqueID")) == id then
147-
--item:removeNumberValue("saveLoadHandlerUniqueID");
148-
return att;
149-
end
150-
end
151-
end
152-
153-
for item in MovableMan.AddedItems do
154-
if math.abs(item:GetNumberValue("saveLoadHandlerUniqueID")) == id then
155-
--item:removeNumberValue("saveLoadHandlerUniqueID");
156-
return item;
157-
end
158-
for att in ToMOSRotating(item).Attachables do
159-
if math.abs(att:GetNumberValue("saveLoadHandlerUniqueID")) == id then
160-
--item:removeNumberValue("saveLoadHandlerUniqueID");
161-
return att;
162-
end
163-
end
164-
end
165-
for item in MovableMan.Items do
166-
if math.abs(item:GetNumberValue("saveLoadHandlerUniqueID")) == id then
167-
--item:removeNumberValue("saveLoadHandlerUniqueID");
168-
return item;
169-
end
170-
for att in ToMOSRotating(item).Attachables do
171-
if math.abs(att:GetNumberValue("saveLoadHandlerUniqueID")) == id then
172-
--item:removeNumberValue("saveLoadHandlerUniqueID");
173-
return att;
174-
end
175-
end
176-
end
177-
178-
for particle in MovableMan.AddedParticles do
179-
if math.abs(particle:GetNumberValue("saveLoadHandlerUniqueID")) == id then
180-
--particle:removeNumberValue("saveLoadHandlerUniqueID");
181-
return particle;
182-
end
183-
if IsMOSRotating(particle) then
184-
for att in ToMOSRotating(particle).Attachables do
185-
if math.abs(att:GetNumberValue("saveLoadHandlerUniqueID")) == id then
186-
--item:removeNumberValue("saveLoadHandlerUniqueID");
187-
return att;
188-
end
189-
end
190-
end
191-
end
192-
for particle in MovableMan.Particles do
193-
if math.abs(particle:GetNumberValue("saveLoadHandlerUniqueID")) == id then
194-
--particle:removeNumberValue("saveLoadHandlerUniqueID");
195-
return particle;
196-
end
197-
if IsMOSRotating(particle) then
198-
for att in ToMOSRotating(particle).Attachables do
199-
if math.abs(att:GetNumberValue("saveLoadHandlerUniqueID")) == id then
200-
--item:removeNumberValue("saveLoadHandlerUniqueID");
201-
return att;
202-
end
203-
end
204-
end
205-
end
206-
207-
return nil;
208-
end
209-
210112
function SaveLoadHandler:ParseTableForMOs(tab)
211113
for k, v in pairs(tab) do
212114
if type(v) == "string" and string.find(v, "SAVELOADHANDLERUNIQUEID_") then
213115
local id = math.abs(tonumber(string.sub(v, 25, -1)));
214116
if SaveLoadHandler.verboseLogging then
215-
print("INFO: SaveLoadHandler is parsing looking for this ID: " .. id)
117+
print("INFO: SaveLoadHandler is looking for this ID: " .. id)
216118
end
217-
local mo = self:FindMOWithId(id);
119+
local mo = MovableMan:FindObjectByUniqueID(id);
218120
if mo then
219121
tab[k] = mo;
220122
if SaveLoadHandler.verboseLogging then
@@ -223,7 +125,7 @@ function SaveLoadHandler:ParseTableForMOs(tab)
223125
end
224126
else
225127
print("ERROR: SaveLoadHandler could not resolve a saved MO UniqueID! A loaded table is likely broken.");
226-
print("The saved ID was: " .. v)
128+
print("The saved ID including SaveLoadHandler prefix was: " .. v)
227129
end
228130
elseif type(v) == "table" then
229131
self:ParseTableForMOs(v);
@@ -278,6 +180,13 @@ end
278180

279181
function SaveLoadHandler:DeserializeTable(serializedTable, name)
280182

183+
-- for mo in MovableMan.AddedParticles do
184+
-- print(mo.UniqueID)
185+
-- end
186+
-- for mo in MovableMan.AddedActors do
187+
-- print(mo.UniqueID)
188+
-- end
189+
281190
local tab = loadstring("return " .. serializedTable)()
282191
-- Parse for saved MOSRotatings
283192
-- Very mildly inefficient in terms of looping even after resolving a value, but it happens once on startup
@@ -318,92 +227,24 @@ function SaveLoadHandler:SaveTableAsString(name, tab)
318227
end
319228

320229
function SaveLoadHandler:SaveMOLocally(self, name, mo)
321-
mo:SetNumberValue("saveLoadHandlerUniqueID", mo.UniqueID);
322-
self:SetStringValue(name, "SAVELOADHANDLERUNIQUEID_" .. tostring(mo.UniqueID));
230+
self:SetNumberValue(name, mo.UniqueID);
323231
end
324232

325233
function SaveLoadHandler:LoadLocallySavedMO(self, name)
326-
local v = self:GetStringValue(name);
327-
local didNotFindAnMO = false;
234+
local id = self:GetNumberValue(name);
235+
self:RemoveNumberValue(name);
328236

329-
local notFound = true;
330237
if SaveLoadHandler.verboseLogging then
331238
print("INFO: SaveLoadHandler is finding this locally saved MO: " .. name);
332239
end
333-
local id = math.abs(tonumber(string.sub(v, 25, -1)));
334-
for particle in MovableMan.AddedParticles do
335-
if math.abs(particle:GetNumberValue("saveLoadHandlerUniqueID")) == id then
336-
--particle:removeNumberValue("saveLoadHandlerUniqueID");
337-
v = particle;
338-
notFound = false;
339-
break;
340-
end
341-
end
342-
for act in MovableMan.AddedActors do
343-
if math.abs(act:GetNumberValue("saveLoadHandlerUniqueID")) == id then
344-
--act:removeNumberValue("saveLoadHandlerUniqueID");
345-
v = act;
346-
notFound = false;
347-
break;
348-
end
349-
for item in act.Inventory do
350-
if math.abs(item:GetNumberValue("saveLoadHandlerUniqueID")) == id then
351-
--item:removeNumberValue("saveLoadHandlerUniqueID");
352-
v = item;
353-
notFound = false;
354-
break;
355-
end
356-
end
357-
end
358-
for item in MovableMan.AddedItems do
359-
if math.abs(item:GetNumberValue("saveLoadHandlerUniqueID")) == id then
360-
--item:removeNumberValue("saveLoadHandlerUniqueID");
361-
v = item;
362-
notFound = false;
363-
break;
364-
end
365-
end
366-
for particle in MovableMan.Particles do
367-
if math.abs(particle:GetNumberValue("saveLoadHandlerUniqueID")) == id then
368-
--particle:removeNumberValue("saveLoadHandlerUniqueID");
369-
v = particle;
370-
notFound = false;
371-
break;
372-
end
373-
end
374-
for act in MovableMan.Actors do
375-
if math.abs(act:GetNumberValue("saveLoadHandlerUniqueID")) == id then
376-
--act:removeNumberValue("saveLoadHandlerUniqueID");
377-
v = act;
378-
notFound = false;
379-
break;
380-
end
381-
for item in act.Inventory do
382-
if math.abs(item:GetNumberValue("saveLoadHandlerUniqueID")) == id then
383-
--item:removeNumberValue("saveLoadHandlerUniqueID");
384-
v = item;
385-
notFound = false;
386-
break;
387-
end
388-
end
389-
end
390-
for item in MovableMan.Items do
391-
if math.abs(item:GetNumberValue("saveLoadHandlerUniqueID")) == id then
392-
--item:removeNumberValue("saveLoadHandlerUniqueID");
393-
v = item;
394-
notFound = false;
395-
break;
396-
end
397-
end
240+
local mo = MovableMan:FindObjectByUniqueID(id);
398241

399-
if notFound then
242+
if mo then
243+
return mo;
244+
else
400245
print("ERROR: SaveLoadHandler could not resolve a locally saved MO!");
401246
return false;
402247
end
403-
404-
self:RemoveStringValue(name);
405-
406-
return v;
407248

408249
end
409250

Data/Base.rte/Activities/Utility/TacticsHandler.lua

Lines changed: 0 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -128,23 +128,6 @@ function TacticsHandler:OnLoad(saveLoadHandler)
128128
print("INFO: TacticsHandler loading...");
129129

130130
self.saveTable = saveLoadHandler:ReadSavedStringAsTable("tacticsHandlerSaveTable");
131-
for team = 0, #self.saveTable.teamList do
132-
for squad = 1, #self.saveTable.teamList[team].squadList do
133-
for actorIndex = 1, #self.saveTable.teamList[team].squadList[squad].Actors do
134-
-- note that if it IS a number then it's probably a stale UniqueID with no actor
135-
-- that we didn't convert when saving... but that's fine, we deal with stale IDs constantly.
136-
if type(self.saveTable.teamList[team].squadList[squad].Actors[actorIndex]) ~= "number" then
137-
print("tacticshandler converted following actor to following uniqueid:")
138-
print(self.saveTable.teamList[team].squadList[squad].Actors[actorIndex])
139-
self.saveTable.teamList[team].squadList[squad].Actors[actorIndex] = self.saveTable.teamList[team].squadList[squad].Actors[actorIndex].UniqueID;
140-
print(self.saveTable.teamList[team].squadList[squad].Actors[actorIndex])
141-
else
142-
print("tacticshandler removed stale uniqueID on load");
143-
self.saveTable.teamList[team].squadList[squad].Actors[actorIndex] = -1;
144-
end
145-
end
146-
end
147-
end
148131

149132
print("INFO: TacticsHandler loaded!");
150133

@@ -154,68 +137,8 @@ end
154137

155138
function TacticsHandler:OnSave(saveLoadHandler)
156139
print("INFO: TacticsHandler saving...");
157-
-- saving/loading destroys all not-in-sim entities forever
158-
-- fugg :DD
159-
-- salvage what we can, resolve our uniqueids into MOs that the saveloadhandler can handle at least
160-
161-
162-
for team = 0, #self.saveTable.teamList do
163-
for squad = 1, #self.saveTable.teamList[team].squadList do
164-
if self.verboseLogging then
165-
print("INFO: TacticsHandler is trying to save squad: " .. squad .. " of team " .. team);
166-
end
167-
for actorIndex = 1, #self.saveTable.teamList[team].squadList[squad].Actors do
168-
if type(self.saveTable.teamList[team].squadList[squad].Actors[actorIndex]) ~= "number" then
169-
print("ERROR: TacticsHandler UniqueID during saving was not a number! Something's very broken.");
170-
print("It was: ");
171-
print(self.saveTable.teamList[team].squadList[squad].Actors[actorIndex]);
172-
break;
173-
end
174-
local actor = MovableMan:FindObjectByUniqueID(self.saveTable.teamList[team].squadList[squad].Actors[actorIndex]);
175-
if actor then
176-
self.saveTable.teamList[team].squadList[squad].Actors[actorIndex] = actor;
177-
end
178-
end
179-
end
180-
end
181-
182-
-- for t, team in pairs(self.saveTable.teamList) do
183-
-- for sI, squad in pairs(team.squadList) do
184-
-- print("Trying to save squad: " .. sI .. " of team " .. t);
185-
-- print("This squad had task: " .. squad.taskName);
186-
-- for aI, uniqueID in pairs(squad.Actors) do
187-
-- print("tacticshandler tried to save the following actor:")
188-
-- print(uniqueID)
189-
-- if type(uniqueID) ~= "number" then
190-
-- print("ERROR: Tacticshandler UniqueID was not a number! Something's very broken.");
191-
-- print("It was: ");
192-
-- print(uniqueID);
193-
-- break;
194-
-- end
195-
-- local actor = MovableMan:FindObjectByUniqueID(uniqueID);
196-
-- if actor then
197-
-- squad.Actors[sI] = actor;
198-
-- else
199-
-- squad.Actors[sI] = nil;
200-
-- end
201-
-- end
202-
-- end
203-
-- end
204140

205141
saveLoadHandler:SaveTableAsString("tacticsHandlerSaveTable", self.saveTable);
206-
207-
-- and now so we can actually keep playing...
208-
-- turn them back, lol
209-
210-
for team = 0, #self.saveTable.teamList do
211-
for squad = 1, #self.saveTable.teamList[team].squadList do
212-
for actorIndex = 1, #self.saveTable.teamList[team].squadList[squad].Actors do
213-
if type(self.saveTable.teamList[team].squadList[squad].Actors[actorIndex]) ~= "number" and IsActor(self.saveTable.teamList[team].squadList[squad].Actors[actorIndex]) then
214-
self.saveTable.teamList[team].squadList[squad].Actors[actorIndex] = self.saveTable.teamList[team].squadList[squad].Actors[actorIndex].UniqueID;
215-
end
216-
end
217-
end
218-
end
219142

220143
print("INFO: TacticsHandler saved!");
221144
end

Data/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/TimedRocketDock.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ function Create(self)
2121
self.confirmCapture = true;
2222

2323
if self:StringValueExists("savedDockedCraft") then
24-
self.craft = self.saveLoadHandled:LoadLocallySavedMO(self, "savedDockedCraft");
24+
self.craft = self.saveLoadHandler:LoadLocallySavedMO(self, "savedDockedCraft");
2525
end
2626
end
2727

0 commit comments

Comments
 (0)