|
PresetSquadCheatSquads = {} |
|
|
|
function ExtractSquadFromGame(id) |
|
if not id then return end |
|
|
|
local currentSquads = GetSquadsInSector(gv_CurrentSectorId, true, false, true) |
|
local unitData = {} |
|
for i, s in ipairs(currentSquads) do |
|
local unitsInThisSquad = GetMercArrayUnitData(s.units) |
|
unitData[#unitData + 1] = unitsInThisSquad |
|
end |
|
local objShape = { |
|
id = id, |
|
Name = Untranslated(id), |
|
Data = TableToLuaCode(unitData) |
|
} |
|
|
|
local objSerialized = TableToLuaCode(objShape) |
|
objSerialized = "PresetSquadCheatSquads[#PresetSquadCheatSquads + 1] = " .. objSerialized |
|
SaveSVNFile("svnProject/Lua/Dev/PresetSquadCheat/PresetSquadCheat_" .. id .. ".lua", objSerialized) |
|
end |
|
|
|
function LocalReplaceCurrentSquadWithPresetSquad(presetSquadId) |
|
local presetSquad = table.find_value(PresetSquadCheatSquads, "id", presetSquadId) |
|
if not presetSquad then |
|
return |
|
end |
|
|
|
local squadIdsHere = {} |
|
local unitPositions = {} |
|
local squadsOnMap = GetSquadsInSector(gv_CurrentSectorId, true, false, true) |
|
for i, s in ipairs(squadsOnMap) do |
|
squadIdsHere[#squadIdsHere + 1] = s.UniqueId |
|
|
|
for i, u in ipairs(s.units) do |
|
local ud = gv_UnitData[u] |
|
ud.HireStatus = "Available" |
|
ud.HiredUntil = false |
|
ud.Squad = false |
|
ud.already_spawned_on_map = false |
|
|
|
local unit = g_Units[u] |
|
if unit then |
|
unit.already_spawned_on_map = false |
|
unitPositions[#unitPositions + 1] = unit:GetPos() |
|
end |
|
end |
|
|
|
s.units = {} |
|
end |
|
|
|
|
|
local dataFunc = load("return " .. presetSquad.Data) |
|
local data = dataFunc() |
|
local newUnitsFlat = {} |
|
for i, squad in ipairs(data) do |
|
for _, unit in ipairs(squad) do |
|
newUnitsFlat[#newUnitsFlat + 1] = unit |
|
|
|
local sessionId = unit.session_id |
|
local squadId = squadIdsHere[i] or squadIdsHere[1] |
|
unit.Squad = squadId |
|
unit.HiredUntil = Game.CampaignTime + 7 * const.Scale.day |
|
local squad = gv_Squads[squadId] |
|
squad.units[#squad.units + 1] = sessionId |
|
gv_UnitData[sessionId] = unit |
|
|
|
|
|
unit.already_spawned_on_map = false |
|
end |
|
end |
|
LocalCheckUnitsMapPresence() |
|
|
|
for i, pos in ipairs(unitPositions) do |
|
local unit = newUnitsFlat[i] |
|
local mapUnit = unit and g_Units[unit.session_id] |
|
if mapUnit then |
|
mapUnit:SetPos(pos) |
|
end |
|
end |
|
end |
|
|
|
function NetSyncEvents.ReplaceCurrentSquadWithPresetSquad(presetSquadId) |
|
LocalReplaceCurrentSquadWithPresetSquad(presetSquadId) |
|
end |