Hi,
I think ai_enabled answered my question somehow on this post
https://forums.atomictorch.com/index.php?topic=989.msg6198#msg6198 but i don't remember even seeing the post where he says:
Another problem with global variables - we cannot serialize them easily and write into the savegame. So even if we had global variables (shared across all the scripts), it will be very easy to write bad code (which will prevent the game from properly saving the game state). So, we have storage scripting API instead. It's also very limited, but for the most cases, it was enough to get the things done.
So, every global variables that i am creating in my scripts, cannot be serialized and saved during a savegame if i understand correctly? do i need to empty the global variables before a savegame happens, or should i just from now on use the storage API instead for storing the global variables that i need? There is a lot of global variables in the AI scripts i developed in the libs section of my mod and i am currently trying to fix my galaxy market mod, and after that i am jumping on my AI scripts logic. I am not familiar with serialization of code and will go read a bit on that soon.
Thank you for your time answering,
9
Edit: It is not just my galaxy market the issue, it might not even be. I've set my globals variables to be inside of functions instead, so they are local variables for arrays, and the rest is using storage.SetGlobal... Thank you for understanding my frustration here.

I am using storage.SetGlobal for all of my variables that i need to access from other scripts or npcs. Should i use storage.Set instead? Is there a limit to the number of variables that i can storage.SetGlobal to in Void Expanse? It is
easy to debug which script or variable is causing issues when you have the source code. When you don't it's a needle in a haystack with that kind of error that doesn't point to anything precise on where to look for the issue.
For instance, i use 4 scripts for the salvaging device. 1 script for the device, 1 script for storing the salvageable items in a global variable, 1 script for checking the player inventory, 1 script for activating the device with a library on specified coordinates.
using(npc);
using(console);
using(timer);
var SC_Salvage_Object_Storage =
{
AddSpaceObjectToStorage: function (system_id, SpaceObjectID, randomYieldToStartOff)
{
if (storage.IsSetGlobal("systemid_" + system_id + "_salvage"))
{
var toReceiveData = storage.GetGlobal("systemid_" + system_id + "_salvage");
var objectdata = { sys_id: system_id, id: SpaceObjectID, yield: randomYieldToStartOff, GameTime: timer.GetGameTime() };
toReceiveData.push(objectdata);
storage.SetGlobal("systemid_" + system_id + "_salvage", toReceiveData);
/*var someTest;
var toReceiveData = storage.GetGlobal("drone_mining_added_" + chosenPosition);
var droneData = { id: droneid, index: droneIndex };
toReceiveData[droneIndex] = droneData;
storage.SetGlobal("drone_mining_added_" + chosenPosition, toReceiveData);*/
}
else
{
var toSendData = [];
var objectdata = { sys_id: system_id, id: SpaceObjectID, yield: randomYieldToStartOff, GameTime: timer.GetGameTime()};
toSendData.push(objectdata);
storage.SetGlobal("systemid_" + system_id + "_salvage", toSendData);
}
},
GetSpaceObjectStorageLength: function (system_id)
{
if (storage.IsSetGlobal("systemid_" + system_id + "_salvage"))
{
var toReceiveData = storage.GetGlobal("systemid_" + system_id + "_salvage");
return toReceiveData.length;
}
else
{
return 0;
}
},
RemoveFromYield: function (system_id, SpaceObjectID, currentYieldMinus)
{
if (storage.IsSetGlobal("systemid_" + system_id + "_salvage"))
{
var toReceiveData = storage.GetGlobal("systemid_" + system_id + "_salvage");
for (var s = 0; s < toReceiveData.length;s++)
{
if (toReceiveData[s].id == SpaceObjectID)
{
toReceiveData[s].yield = toReceiveData[s].yield - currentYieldMinus;
break;
}
}
storage.SetGlobal("systemid_" + system_id + "_salvage", toReceiveData);
}
else
{
console.PrintError("the space object doesn't exist in the global array and this message is never supposed to print even with a console debug_reinit. If it prints, tell me. 0");
}
},
SetDepleted: function (system_id, SpaceObjectID)
{
if (storage.IsSetGlobal("systemid_" + system_id + "_salvage"))
{
var toReceiveData = storage.GetGlobal("systemid_" + system_id + "_salvage");
var s = 0
for (s = 0; s < toReceiveData.length; s++)
{
if (toReceiveData[s].id == SpaceObjectID)
{
toReceiveData[s] = null;
break;
}
}
toReceiveData.splice(s, 1);
storage.SetGlobal("systemid_" + system_id + "_salvage", toReceiveData);
}
else
{
console.PrintError("the space object doesn't exist in the global array and this message is never supposed to print even with a console debug_reinit. If it prints, tell me. 1");
}
},
GetSpaceObjectYield: function (system_id, SpaceObjectID)
{
if (storage.IsSetGlobal("systemid_" + system_id + "_salvage"))
{
var toReceiveData = storage.GetGlobal("systemid_" + system_id + "_salvage");
for (var s = 0; s < toReceiveData.length; s++)
{
if (toReceiveData[s].id == SpaceObjectID)
{
return toReceiveData[s].yield;
}
}
}
else
{
console.PrintError("the space object doesn't exist in the global array and this message is never supposed to print even with a console debug_reinit. If it prints, tell me. 2");
}
},
};
using(npc);
using(console);
using(timer);
var counterFrame = 0;
var counterDevice = 0;
var SC_Salvage_Object_Timer =
{
ClearCurrentDevice: function (sys_id, device_id, ship_id, slot_id) //IsWorking
{
game.IsShipPlayerControlled(ship_id);
var playerName = game.GetShipOwner(ship_id);
if (storage.IsSetGlobal("GlobalIndex_Player_" + playerName))
{
var someGlobalIndex = storage.GetGlobal("GlobalIndex_Player_" + playerName);
if (!storage.IsSetGlobal("systemid_" + sys_id + "_ship_" + ship_id + "_salvage_device_" + device_id))
{
storage.SetGlobal("systemid_" + sys_id + "_ship_" + ship_id + "_salvage_device_" + device_id, { swtch: 1, ship_id: ship_id, device_id: device_id, slot_id: slot_id, timer_id: null, reset: 1 });
}
else
{
var globalSalvageStorage = storage.GetGlobal("systemid_" + sys_id + "_ship_" + ship_id + "_salvage_device_" + device_id);
if (globalSalvageStorage != null) {
if (globalSalvageStorage.timer_id != null)
{
//timer.AddOrUpdate("CustomOnFrame", null);
//timer.AddOrUpdate(0.25, "CustomOnFrame", null, 1); //
game.ShipStopSound(ship_id, "mining_process_" + slot_id);
visual.DeviceDeactivateEffect(ship_id, device_id, "mining_visual_effect");
timer.ClearTimer(globalSalvageStorage.timer_id);
var data = { swtch: 1, ship_id: ship_id, device_id: device_id, slot_id: slot_id, timer_id: null, reset: 0 };
storage.SetGlobal("systemid_" + sys_id + "_ship_" + ship_id + "_salvage_device_" + device_id, data);
//console.PrintError("cleared device timer: " + globalSalvageStorage.timer_id);
return 1;
}
else
{
//console.PrintError("null timer0");
return 0;
}
}
else
{
//console.PrintError("null globalSalvageStorage");
return 0;
}
}
}
},
SetDevice: function (sys_id, device_id, ship_id, timer_id) //IsWorking
{
game.IsShipPlayerControlled(ship_id);
var playerName = game.GetShipOwner(ship_id);
if (storage.IsSetGlobal("GlobalIndex_Player_" + playerName))
{
var someGlobalIndex = storage.GetGlobal("GlobalIndex_Player_" + playerName);
}
},
AddDeviceID: function (sys_id, device_id, slot_id, ship_id, timer_id)
{
game.IsShipPlayerControlled(ship_id);
var playerName = game.GetShipOwner(ship_id);
if (storage.IsSetGlobal("GlobalIndex_Player_" + playerName))
{
var someGlobalIndex = storage.GetGlobal("GlobalIndex_Player_" + playerName);
//storage.GetGlobal("systemid_" + sys_id + "_ship_" + ship_id + "_salvage_device_" + device_id); //, { swtch: 1, ship_id: ship_id, device_id: device_id, slot_id: slot_id, timer_id: timer_id}
var globalSalvageStorage = storage.GetGlobal("systemid_" + sys_id + "_ship_" + ship_id + "_salvage_device_" + device_id);
if (globalSalvageStorage != null) {
if (globalSalvageStorage.timer_id != null)
{
timer.ClearTimer(globalSalvageStorage.timer_id);
//console.PrintError("cleared device timer: " + globalSalvageStorage.timer_id);
}
else {
//console.PrintError("null timer1");
}
}
else {
//console.PrintError("null globalSalvageStorage");
}
var data = { swtch: 1, ship_id: ship_id, device_id: device_id, slot_id: slot_id, timer_id: timer_id, reset: 0 };
storage.SetGlobal("systemid_" + sys_id + "_ship_" + ship_id + "_salvage_device_" + device_id, data );
}
var deviceArray = [];
if (deviceArray == null)
{
deviceArray = [];
}
var objectData = { sys_id: sys_id, device_id: device_id, ship_id: ship_id };
deviceArray.push(objectData);
var arrayData = { index: deviceArray.length - 1, length: deviceArray.length };
return arrayData;
},
AddCounterFrame: function ()
{
counterFrame++;
return counterFrame;
},
GetCounterFrame: function () {
return counterFrame;
},
ResetCounterFrame: function ()
{
counterFrame = 0;
return counterFrame;
},
AddCounterDevice: function () {
counterDevice++;
return counterDevice;
},
GetCounterDevice: function () {
return counterDevice;
},
ResetCounterDevice: function () {
counterDevice = 0;
return counterDevice;
}
};