Skip to content

Commit de8d6b5

Browse files
committed
Revert "non-functional but new saveloadhandler MO parsing"
This reverts commit 382acd1.
1 parent c25b7d2 commit de8d6b5

File tree

3 files changed

+256
-20
lines changed

3 files changed

+256
-20
lines changed

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

Lines changed: 178 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@
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-
-- 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).
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).
3638

3739
local SaveLoadHandler = {}
3840

@@ -91,6 +93,7 @@ function SaveLoadHandler:SerializeTable(val, name, skipnewlines, depth)
9193
elseif val.Magnitude then -- ghetto vector check
9294
tmp = tmp .. string.format("%q", "Vector(" .. val.X .. "," .. val.Y .. ")")
9395
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);
9497
tmp = tmp .. string.format("%q", "SAVELOADHANDLERUNIQUEID_" .. tostring(val.UniqueID))
9598
elseif val.FirstBox then -- ghetto area check
9699
tmp = tmp .. string.format("%q", "SAVELOADHANDLERAREA_" .. tostring(val.Name))
@@ -109,14 +112,109 @@ function SaveLoadHandler:SerializeTable(val, name, skipnewlines, depth)
109112
return tmp
110113
end
111114

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+
112210
function SaveLoadHandler:ParseTableForMOs(tab)
113211
for k, v in pairs(tab) do
114212
if type(v) == "string" and string.find(v, "SAVELOADHANDLERUNIQUEID_") then
115213
local id = math.abs(tonumber(string.sub(v, 25, -1)));
116214
if SaveLoadHandler.verboseLogging then
117-
print("INFO: SaveLoadHandler is looking for this ID: " .. id)
215+
print("INFO: SaveLoadHandler is parsing looking for this ID: " .. id)
118216
end
119-
local mo = MovableMan:FindObjectByUniqueID(id);
217+
local mo = self:FindMOWithId(id);
120218
if mo then
121219
tab[k] = mo;
122220
if SaveLoadHandler.verboseLogging then
@@ -125,7 +223,7 @@ function SaveLoadHandler:ParseTableForMOs(tab)
125223
end
126224
else
127225
print("ERROR: SaveLoadHandler could not resolve a saved MO UniqueID! A loaded table is likely broken.");
128-
print("The saved ID including SaveLoadHandler prefix was: " .. v)
226+
print("The saved ID was: " .. v)
129227
end
130228
elseif type(v) == "table" then
131229
self:ParseTableForMOs(v);
@@ -180,13 +278,6 @@ end
180278

181279
function SaveLoadHandler:DeserializeTable(serializedTable, name)
182280

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-
190281
local tab = loadstring("return " .. serializedTable)()
191282
-- Parse for saved MOSRotatings
192283
-- Very mildly inefficient in terms of looping even after resolving a value, but it happens once on startup
@@ -227,24 +318,92 @@ function SaveLoadHandler:SaveTableAsString(name, tab)
227318
end
228319

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

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

329+
local notFound = true;
237330
if SaveLoadHandler.verboseLogging then
238331
print("INFO: SaveLoadHandler is finding this locally saved MO: " .. name);
239332
end
240-
local mo = MovableMan:FindObjectByUniqueID(id);
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
241398

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

249408
end
250409

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

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,23 @@ 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
131148

132149
print("INFO: TacticsHandler loaded!");
133150

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

138155
function TacticsHandler:OnSave(saveLoadHandler)
139156
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
140204

141205
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
142219

143220
print("INFO: TacticsHandler saved!");
144221
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.saveLoadHandler:LoadLocallySavedMO(self, "savedDockedCraft");
24+
self.craft = self.saveLoadHandled:LoadLocallySavedMO(self, "savedDockedCraft");
2525
end
2626
end
2727

0 commit comments

Comments
 (0)