2023-06-16 11:32:26 +02:00

2256 lines
62 KiB
Lua

--TRANSPORT CAPACITIES
--BTR-80,BTR-81A,BMP-2,BMP-3: 7 Troops
--BMP-1: 8 Troops
--MTLB: 11 Troops
--M2A2 Bradley: 7 Troops
--Stryker: 9 Troops
--LAV-25: 6 Troops
--BMD-1 and BTR-RD: 6 Troops
--Marder with Milan: 6, without 7
--Warrior: 7
--M-113: 11
--AAV-7: 21 (hoooly schmallies!)
--Tpz Fuchs: 10
--Sdkfz 251
--M2 Halftrack
--Sdkfz 7
--Country IDs: 17 = Insurgents 81 = CJTF Red
--Questioned: Merkava? M6 Linebacker?
do
local missionTransports = {}
local weaponTransports = {}
local groupsWithRoutes = {}
local groupsWithRoutesUpdated = {}
local removeFromWeaponTransports = {}
dismountsInitiated = 0
transportCapacities =
{
["BMP-1"] = 8,
["BMP-2"] = 7,
["BMP-3"] = 7,
["BTR-82A"] = 7,
["BTR-80"] = 7,
["BMD-1"] = 6,
["BTR_D"] = 6,
["GAZ-66"] = 7,
["KAMAZ Truck"] = 7,
["ZBD04A"] = 7,
["M-2 Bradley"] = 7,
["Marder"] = 7,
["MCV-80"] = 7,
["LAV-25"] = 6,
["M 818"] = 7,
["M-113"] = 11,
["M1126 Stryker ICV"] = 9,
["AAV7"] = 21,
["TPZ"] = 10,
["MTLB"] = 11,
--["M 818"] = 7,
}
--START Squads
russianModernSquadBTR_BMP2_BMP3 =
{
"Infantry AK",
"Infantry AK",
"Infantry AK ver2",
"Infantry AK ver3",
"Infantry AK ver2",
"SA-18 Igla-S manpad",
"Infantry AK ver3"
}--end of russianModernSquadBTR_BMP2_BMP3
russianRifleSquadBTR_BMP2_BMP3 =
{
"Infantry AK",
"Infantry AK ver2",
"Infantry AK",
"Infantry AK ver3",
"Infantry AK ver2",
"Infantry AK ver3",
"Infantry AK ver3"
}--end of russianRifleSquadBTR_BMP2_BMP3
russianManpadsCmdSquadBTR_BMP2_BMP3 =
{
"SA-18 Igla-S comm",
"Infantry AK",
"SA-18 Igla-S manpad",
"Infantry AK ver2",
"Infantry AK ver3",
"SA-18 Igla-S manpad",
"Infantry AK ver3"
}--end of russianManpadsCmdSquadBTR_BMP2_BMP3
russianSquadBMP1 =
{
"Infantry AK",
"Infantry AK ver2",
"Infantry AK",
"Infantry AK ver3",
"Infantry AK ver2",
"Infantry AK ver3",
"Infantry AK ver3",
"Infantry AK ver2"
}--end of russianSquadBMP1
russianSquadManpadsBMP1 =
{
"Infantry AK",
"Infantry AK ver2",
"SA-18 Igla-S manpad",
"Infantry AK ver3",
"Infantry AK ver2",
"Infantry AK ver3",
"Infantry AK ver3",
"Infantry AK ver2"
}--end of russianSquadManpadsBMP1
russianSquadManpadsCmdBMP1 =
{
"SA-18 Igla-S comm",
"Infantry AK ver2",
"SA-18 Igla-S manpad",
"Infantry AK ver3",
"Infantry AK ver2",
"SA-18 Igla-S manpad",
"Infantry AK ver3",
"Infantry AK ver2"
}--end of russianSquadManpadsCmdBMP1
russianVDVBMD1 =
{
"Paratrooper AKS-74",
"Paratrooper RPG-16",
"Paratrooper AKS-74",
"Paratrooper AKS-74",
"Paratrooper RPG-16",
"Paratrooper AKS-74"
}--end of russianVDVBMD1
russianSquadMTLB =
{
"Infantry AK",
"Infantry AK",
"Infantry AK ver3",
"Infantry AK ver2",
"Infantry AK ver3",
"Infantry AK ver3",
"Infantry AK ver2",
"Infantry AK ver2",
"Infantry AK",
"Infantry AK ver2",
"Infantry AK ver3"
}
russianSquadManpadsMTLB =
{
"Infantry AK ver3",
"Infantry AK",
"Infantry AK ver2",
"Infantry AK",
"SA-18 Igla-S manpad",
"Infantry AK ver3",
"Infantry AK ver2",
"Infantry AK ver2",
"Infantry AK",
"Infantry AK ver3",
"Infantry AK"
}
russianSquadRPGMTLB =
{
"Infantry AK",
"Infantry AK",
"Infantry AK ver3",
"Paratrooper RPG-16",
"Infantry AK ver3",
"Infantry AK ver2",
"Paratrooper RPG-16",
"Infantry AK ver3",
"Paratrooper RPG-16",
"Infantry AK ver2",
"Infantry AK ver3"
}
russianSquadRPGIglaMTLB =
{
"Infantry AK",
"Infantry AK",
"Infantry AK ver3",
"Paratrooper RPG-16",
"SA-18 Igla-S manpad",
"Infantry AK ver2",
"Paratrooper RPG-16",
"Infantry AK ver3",
"Infantry AK ver2",
"Infantry AK",
"Infantry AK ver3"
}
russianSquadAntiAirMTLB =
{
"Infantry AK ver3",
"Infantry AK ver2",
"Infantry AK",
"SA-18 Igla-S manpad",
"Infantry AK ver3",
"Infantry AK ver2",
"SA-18 Igla-S manpad",
"Infantry AK ver3",
"Infantry AK",
"Infantry AK ver2",
"SA-18 Igla-S manpad"
}
usaSquadLAV25 =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M249"
}
usaSquadManpadsLAV25 =
{
"Soldier M4",
"Soldier M4",
"Soldier stinger",
"Soldier M4",
"Soldier M4",
"Soldier M249"
}
usaSquadManpadsBradleyMarder =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier stinger",
"Soldier M4"
}
usaSquadBradleyMarderWarrior =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4"
}
usaSquadStryker =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M4"
}
usaSquadManpadsStryker =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier stinger",
"Soldier M4",
"Soldier M4",
"Soldier M249"
}
usaFireteamStryker =
{
"Soldier M4",
"Soldier M249",
"Soldier M249",
"Soldier M249",
"Soldier M4",
"Soldier stinger",
"Soldier M4",
"Soldier stinger",
"Soldier M249"
}
usaSquadManpadsM113 =
{
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier stinger",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M249"
}
usaSquadM113 =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M249"
}
usaSquadAAV7USMC =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M249",
"Soldier M4"
}
usaSquadManpadsAAV7USMC =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier stinger",
"Soldier M249",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier stinger",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier stinger",
"Soldier M249",
"Soldier M249",
"Soldier M4"
}
gerSquadTPz =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4"
}
gerSquadManpadsTPz =
{
"Soldier M4",
"Soldier M4",
"Soldier M249",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier stinger",
"Soldier M4"
}
insRifleSquadBTR_BMP2 =
{
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins"
}
insSquadBTR_BMP2 =
{
"Infantry AK Ins",
"Soldier AK",
"Soldier RPG",
"Infantry AK Ins",
"Soldier AK",
"Infantry AK Ins",
"Soldier AK"
}
insSquadManpadsBTR_BMP2 =
{
"Infantry AK Ins",
"Infantry AK Ins",
"Igla manpad INS",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins"
}
insSquadAntiAirBTR_BMP2 =
{
"SA-18 Igla comm",
"Soldier AK",
"Igla manpad INS",
"Infantry AK Ins",
"Soldier AK",
"Infantry AK Ins",
"SA-18 Igla manpad"
}
insSquadRpgBTR_BMP2 =
{
"Infantry AK Ins",
"Soldier AK",
"Soldier RPG",
"Infantry AK Ins",
"Soldier AK",
"Soldier RPG",
"Soldier RPG"
}
insRifleSquadBMP1 =
{
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins"
}
insSquadBMP1 =
{
"Infantry AK Ins",
"Soldier AK",
"Soldier RPG",
"Infantry AK Ins",
"Soldier AK",
"Infantry AK Ins",
"Soldier AK",
"Soldier AK",
}
insSquadManpadsBMP1 =
{
"Infantry AK Ins",
"Infantry AK Ins",
"Igla manpad INS",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"SA-18 Igla manpad"
}
insSquadAntiAirBMP1 =
{
"SA-18 Igla comm",
"Soldier AK",
"Igla manpad INS",
"Infantry AK Ins",
"Soldier AK",
"Infantry AK Ins",
"SA-18 Igla manpad",
"Igla manpad INS"
}
insSquadRpgBMP1 =
{
"Infantry AK Ins",
"Soldier AK",
"Soldier RPG",
"Infantry AK Ins",
"Soldier AK",
"Soldier RPG",
"Soldier RPG",
"Infantry AK Ins"
}
insSquadMTLB =
{
"Infantry AK Ins",
"Infantry AK Ins",
"Soldier RPG",
"Infantry AK Ins",
"Soldier AK",
"Infantry AK Ins",
"Soldier RPG",
"Soldier AK",
"Soldier AK",
"Infantry AK Ins",
"Soldier AK"
}
insRifleSquadMTLB =
{
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins",
"Infantry AK Ins"
}
insSquadManpadsMTLB =
{
"Infantry AK Ins",
"Infantry AK Ins",
"SA-18 Igla manpad",
"Infantry AK Ins",
"Soldier AK",
"Infantry AK Ins",
"Soldier RPG",
"Soldier AK",
"Soldier AK",
"Infantry AK Ins",
"Soldier AK"
}
insSquadAntiAirMTLB =
{
"Infantry AK Ins",
"SA-18 Igla manpad",
"Igla manpad INS",
"Infantry AK Ins",
"Soldier AK",
"Infantry AK Ins",
"SA-18 Igla comm",
"Soldier AK",
"Igla manpad INS",
"Infantry AK Ins",
"Soldier AK"
}
insSquadRpgMTLB =
{
"Soldier AK",
"Infantry AK Ins",
"Soldier RPG",
"Infantry AK Ins",
"Soldier AK",
"Infantry AK Ins",
"Soldier RPG",
"Soldier RPG",
"Soldier AK",
"Infantry AK Ins",
"Soldier RPG"
}
insSquadMixedMTLB =
{
"Infantry AK Ins",
"Infantry AK Ins",
"Soldier RPG",
"Infantry AK Ins",
"Soldier AK",
"Infantry AK Ins",
"Soldier RPG",
"SA-18 Igla manpad",
"Soldier AK",
"Infantry AK Ins",
"Soldier AK"
}
insSquadBMD1 =
{
"Soldier RPG",
"Infantry AK Ins",
"Soldier AK",
"SA-18 Igla manpad",
"Soldier AK",
"Infantry AK Ins"
}
westMortarTeam =
{
"Soldier M4",
"Soldier M4",
"2B11 mortar",
"Soldier M4",
"Soldier M4",
"2B11 mortar"
}
eastMortarTeam =
{
"Infantry AK ver3",
"Infantry AK",
"2B11 mortar",
"Infantry AK",
"Infantry AK ver2",
"2B11 mortar"
}
insMortarTeam =
{
"Soldier AK",
"Soldier AK",
"2B11 mortar",
"Soldier AK",
"Soldier AK",
"2B11 mortar"
}
ww2Wehrmacht =
{
"soldier_mauser98",
"soldier_mauser98",
"soldier_mauser98",
"soldier_mauser98",
"soldier_mauser98",
"soldier_mauser98",
"soldier_mauser98"
}
ww2UKTroops =
{
"soldier_wwii_br_01",
"soldier_wwii_br_01",
"soldier_wwii_br_01",
"soldier_wwii_br_01",
"soldier_wwii_br_01",
"soldier_wwii_br_01",
"soldier_wwii_br_01"
}
ww2USTroops =
{
"soldier_wwii_us",
"soldier_wwii_us",
"soldier_wwii_us",
"soldier_wwii_us",
"soldier_wwii_us",
"soldier_wwii_us",
"soldier_wwii_us"
}
--END squads
--MOD squads
westMortarTeamFrenchPack =
{
"Soldier M4",
"Soldier M4",
"Soldier M4",
"Soldier M4",
"M120",
"M120"
}
--END MOD squads
--Transports for weapon positions
ukRapierSiteTransport =
{
"",
}
--END Transports for weapon positions
--Weapon sites
weaponSiteTemplate =
{
["SpawnedUnitType"] = "", -- Unit Type string for the type of unit to spawn after setup time (SAM launcher or radar, AA gun, field gun etc)
["SpawnerTransportTypes"] = {"",""}, -- Suitable vehicle types for the script to assign this cargo to
["SetupTime"] = 0, -- How many ticks does it take to deploy this system from the transport (ticks are 5 secs each)
["WorkerCount"] = 0, -- How many riflemen will spawn when the deployment sequence starts before the system is deployed
["CarrierVehicleNamePrefix"] = "", -- If a vehicle in the group has a name starting with this prefix, this cargo type will be added to it
["Optional"] = false, -- If true, the script will not populate any vehicle with this cargo type, unless vehicle name is assigned it through use of above prefix
}
weaponSiteTransportItemTemplate =
{
["TransportingVehicleName"] = "",
["TransportedItem"] = "",
["WorkerCount"] = 0,
}
ruAAASiteTemplate =
{
["RDR"] =
{
["SpawnedUnitType"] = "SON_9",
["SpawnerTransportTypes"] = {"TRUCKRU"},
["SetupTime"] = 60,
["WorkerCount"] = 4,
["CarrierVehicleNamePrefix"] = "RDR"
},
["KS19s"] =
{
["SpawnedUnitType"] = "KS-19",
["SpawnerTransportTypes"] = {"TRUCKRU"},
["SetupTime"] = 60,
["WorkerCount"] = 4,
["CarrierVehicleNamePrefix"] = "KS",
},
["S60s"] =
{
["SpawnedUnitType"] = "S-60_Type59_Artillery",
["SpawnerTransportTypes"] = {"TRUCKRU"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "S60"
},
["ZU23s"] =
{
["SpawnedUnitType"] = "ZU-23 Emplacement",
["SpawnerTransportTypes"] = {"TRUCKRU"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "ZU"
},
["STF"] =
{
["SpawnedUnitType"] = "SQ_russianModernSquadBTR_BMP2_BMP3",
["SpawnerTransportTypes"] = {"TRUCKRU","BMP-1","BMP-2","BTR-80","UAZ"},
["SetupTime"] = 0,
["WorkerCount"] = 0,
["CarrierVehicleNamePrefix"] = "STF"
},
}
ukRapierSiteTemplate =
{
["RDR"] =
{
["SpawnedUnitType"] = "rapier_fsa_blindfire_radar",
["SpawnerTransportTypes"] = {"Land_Rover_101_FC"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "RDR"
},
["OPT"] =
{
["SpawnedUnitType"] = "rapier_fsa_optical_tracker_unit",
["SpawnerTransportTypes"] = {"Land_Rover_101_FC"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "OPT"
},
["MSL"] =
{
["SpawnedUnitType"] = "rapier_fsa_launcher",
["SpawnerTransportTypes"] = {"Land_Rover_101_FC"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "MSL"
},
["STF"] =
{
["SpawnedUnitType"] = "SQ_usaSquadManpadsLAV25",
["SpawnerTransportTypes"] = {"Land_Rover_101_FC","Land_Rover_109_S3"},
["SetupTime"] = 0,
["WorkerCount"] = 0,
["CarrierVehicleNamePrefix"] = "STF"
},
}
ww2GerLeFHSiteTemplate =
{
["GUN1"] =
{
["SpawnedUnitType"] = "LeFH_18-40-105",
["SpawnerTransportTypes"] = {"Blitz_36-6700A","Sd_Kfz_7"},
["SetupTime"] = 60,
["WorkerCount"] = 4,
["CarrierVehicleNamePrefix"] = "GUN"
},
["GUN2"] =
{
["SpawnedUnitType"] = "LeFH_18-40-105",
["SpawnerTransportTypes"] = {"Blitz_36-6700A","Sd_Kfz_7"},
["SetupTime"] = 60,
["WorkerCount"] = 4,
["CarrierVehicleNamePrefix"] = "GN2"
},
["GUN3"] =
{
["SpawnedUnitType"] = "LeFH_18-40-105",
["SpawnerTransportTypes"] = {"Blitz_36-6700A","Sd_Kfz_7"},
["SetupTime"] = 60,
["WorkerCount"] = 4,
["CarrierVehicleNamePrefix"] = "GN3"
},
["GUN4"] =
{
["SpawnedUnitType"] = "LeFH_18-40-105",
["SpawnerTransportTypes"] = {"Blitz_36-6700A","Sd_Kfz_7"},
["SetupTime"] = 60,
["WorkerCount"] = 4,
["CarrierVehicleNamePrefix"] = "GN4"
},
["STF"] =
{
["SpawnedUnitType"] = "SQ_ww2Wehrmacht",
["SpawnerTransportTypes"] = {"Blitz_36-6700A","Sd_Kfz_251"},
["SetupTime"] = 0,
["WorkerCount"] = 0,
["CarrierVehicleNamePrefix"] = "STF"
},
}
ww2USAAATemplate =
{
["M37"] =
{
["SpawnedUnitType"] = "M1_37mm",
["SpawnerTransportTypes"] = {"CCKW_353"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "M37"
},
["M372"] =
{
["SpawnedUnitType"] = "M1_37mm",
["SpawnerTransportTypes"] = {"CCKW_353"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "M372"
},
["M45"] =
{
["SpawnedUnitType"] = "M45_Quadmount",
["SpawnerTransportTypes"] = {"CCKW_353"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "M45"
},
["M373"] =
{
["SpawnedUnitType"] = "M1_37mm",
["SpawnerTransportTypes"] = {"CCKW_353"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "M373"
},
["M451"] =
{
["SpawnedUnitType"] = "M45_Quadmount",
["SpawnerTransportTypes"] = {"CCKW_353"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "M451"
},
["M452"] =
{
["SpawnedUnitType"] = "M45_Quadmount",
["SpawnerTransportTypes"] = {"CCKW_353"},
["SetupTime"] = 60,
["WorkerCount"] = 2,
["CarrierVehicleNamePrefix"] = "M452"
},
["STF"] =
{
["SpawnedUnitType"] = "SQ_ww2USTroops",
["SpawnerTransportTypes"] = {"CCKW_353","M2A1_halftrack"},
["SetupTime"] = 0,
["WorkerCount"] = 0,
["CarrierVehicleNamePrefix"] = "STF"
},
}
missionWeaponSiteTransports = {}
--END Weapon sites
--Script options
dismountsOptions =
{
['LeaveDeployed'] = false,
['WWIIAssets'] = false,
['FrenchPack'] = false,
['TroopsFollowSlowTransport'] = false,
['GorgeousGeorgians'] = false,
['VehiclesToIgnore'] = {},
['RandomizeRussianTroops'] = false,
['NoManpads'] = false,
['WPNSitesAddMoreWPNToFreeVehicles'] = false,
}
function setOptions(optionsList)
for key,value in pairs(dismountsOptions) do
if optionsList[key] ~= nil then
dismountsOptions[key] = optionsList[key]
end
end
trigger.action.outText(mist.utils.tableShow(dismountsOptions),25)
end
function georgify(origSquad)
local newSquad = mist.utils.deepCopy(origSquad)
for i=1,#newSquad do
if newSquad[i] == 'Soldier M4' then
newSquad[i] = 'Soldier M4 GRG'
end
end
return newSquad
end
function randomizeRussianTroops(origSquad)
-- TO BE IMPLEMENTED
end
function randomizeInsurgentManpads(origSquad)
-- TO BE IMPLEMENTED
end
local function replaceManpadsWithRiflemen(squad)
for i=1,#squad do
local rifleSoldierType = ''
if squad[i] == 'SA-18 Igla-S manpad' then
local riflemanTypeSeed = mist.random(3)
if riflemanTypeSeed == 1 then
rifleSoldierType = 'Infantry AK'
elseif riflemanTypeSeed == 2 then
rifleSoldierType = 'Infantry AK ver2'
else
rifleSoldierType = 'Infantry AK ver3'
end
squad[i] = rifleSoldierType
elseif squad[i] == 'Igla manpad INS' or squad[i] == 'SA-18 Igla manpad' then
rifleSoldierType = 'Infantry AK Ins'
squad[i] = rifleSoldierType
elseif squad[i] == 'Soldier stinger' then
rifleSoldierType = 'Soldier M4'
if dismountsOptions['GorgeousGeorgians'] == true then
rifleSoldierType = georgify({[1] = rifleSoldierType})[1]
end
squad[i] = rifleSoldierType
end
end
return squad
end
function newCoordFromDistanceBearing(initPosVec2,bearing,dist)
local bearingRad = math.rad(bearing)
local dept = dist * math.sin(bearingRad)
local lat = dist * math.cos(bearingRad)
return { x= initPosVec2.x + dept, y = initPosVec2.y + lat }
end
local function checkForMarkers(hostVehicle)
--local markersForUnit = mist.marker.get(hostVehicle)
local markersForUnit = {}
--trigger.action.outText('markers check for vehichle: ' .. hostVehicle, 2)
local allMarkers = world.getMarkPanels()
--trigger.action.outText('total markers: ' .. #markersForUnit, 2)
if allMarkers ~= nil and #allMarkers > 0 then
for i=1,#allMarkers do
if allMarkers[i].text == hostVehicle then
table.insert(markersForUnit,allMarkers[i])
end
end
end
if markersForUnit ~= nil and #markersForUnit > 0 then
return markersForUnit
else
return 0
end
end
local function getHeading(Pos3)
if (Pos3.x.x > 0) and (Pos3.x.z == 0) then
return 0
elseif (Pos3.x.x > 0) and (Pos3.x.z > 0) then
return math.atan(Pos3.x.z / Pos3.x.x)
elseif (Pos3.x.x == 0) and (Pos3.x.z > 0) then
return math.rad(90)
elseif (Pos3.x.x < 0) and (Pos3.x.z > 0) then
return math.rad(90) - math.atan(Pos3.x.x / Pos3.x.z)
elseif (Pos3.x.x < 0) and (Pos3.x.z == 0) then
return math.rad(180)
elseif (Pos3.x.x < 0) and (Pos3.x.z < 0) then
return math.rad(180) + math.atan(Pos3.x.z / Pos3.x.x)
elseif (Pos3.x.x == 0) and (Pos3.x.z < 0) then
return math.rad(270)
elseif (Pos3.x.x > 0) and (Pos3.x.z < 0) then
return math.rad(270) - math.atan(Pos3.x.x / Pos3.x.z)
end
end
local function addWaypointToGroup(groupName,waypointsPos3)
local squadPath = {}
local groupDismounts = 'Dismounts_' .. groupName
squadPath[1] = mist.ground.buildWP(mist.getLeadPos(groupDismounts))
local wpToAdd = mist.ground.buildWP(waypointsPos3[1].pos)
table.insert(squadPath,wpToAdd)
mist.goRoute(groupDismounts,squadPath)
end
local function addWaypointToVehicles(groupName,waypointVec2)
local squadPath = {}
squadPath[1] = mist.ground.buildWP(mist.getLeadPos(groupName))
local wpToAdd = mist.ground.buildWP(waypointVec2)
table.insert(squadPath,wpToAdd)
mist.goRoute(groupName,squadPath)
end
local function createTargetPoint(groupName,waypointsPos3,radiusOfAttack)
local radiusOfBoom = 5
if radiusOfAttack ~= nil then
radiusOfBoom = radiusOfAttack
end
local groupDismounts = 'Dismounts_' .. groupName
local tgt = {
id = 'FireAtPoint',
params = {
x = waypointsPos3[1].pos.x,
y = waypointsPos3[1].pos.z,
radius = radiusOfBoom,
expendQty = 20,
expendQtyEnabled = false,
weaponType = 3221225470,
altitude = 0,
alt_type = 1,
}
}
Group.getByName(groupDismounts):getController():setTask(tgt)
end
--This is for when there is no country specific squad type definition for given vehicle is available, or when you want to populate a vehicle that isn't supported in the script by default. In that case, we will create a random squad based on countryID being east/insurgent/west, as well as the squad having a manpad or being rifle only
local function randomizedSquadForTransport(transportType, squadType, countryID, troopCount)
local troopNumber = 7 --default to 7
if troopCount ~= nil then --if a certain number for transports is provided in troopCount parameter, use that
troopNumber = troopCount
elseif transportCapacities[transportType] ~= nil then --if not, and if it is a vehicle we know the troop capacity of, then use that instead
troopNumber = transportCapacities[transportType]
end
if squadType == nil then
local squadTypeSeed = mist.random(3)
if squadTypeSeed < 3 then
squadType = 'rifle'
else
squadType = 'manpads'
end
end
local squadComposition = {}
local manpadsSoldierType = ''
local rifleSoldierType = ''
if countryID == 0 or countryID == 1 or countryID == 16 or countryID == 18 or countryID == 19 or countryID == 68 or countryID == 81 then --east/Ru
manpadsSoldierType = 'SA-18 Igla-S manpad'
local riflemanTypeSeed = mist.random(3)
if riflemanTypeSeed == 1 then
rifleSoldierType = 'Infantry AK'
elseif riflemanTypeSeed == 2 then
rifleSoldierType = 'Infantry AK ver2'
else
rifleSoldierType = 'Infantry AK ver3'
end
elseif countryID == 17 then --Insurgent
local insManpadsTypeSeed = mist.random(2)
if insManpadsTypeSeed == 1 then
manpadsSoldierType = 'Igla manpad INS'
else
manpadsSoldierType = 'SA-18 Igla manpad'
end
rifleSoldierType = 'Infantry AK Ins'
else --west
manpadsSoldierType = 'Soldier stinger'
rifleSoldierType = 'Soldier M4'
end
if squadType == 'manpads' then
table.insert(squadComposition,manpadsSoldierType)
troopNumber = troopNumber - 1
end
for i=1,troopNumber do
table.insert(squadComposition,rifleSoldierType)
end
if dismountsOptions["NoManpads"] == true then
squadComposition = replaceManpadsWithRiflemen(squadComposition)
end
return squadComposition
end
local function initializeTransport(unitName,cargoSquad)
unitId = Unit.getByName(unitName):getID()
if dismountsOptions["GorgeousGeorgians"] == true then
cargoSquad = georgify(cargoSquad)
end
missionTransports[unitName] = {
countryID = Unit.getByName(unitName):getCountry(),
UnitID = Unit.getByName(unitName):getID(),
cargo = cargoSquad,
cargo_status = "mounted"
}
end
local function checkTransportForWeaponSite(transportType, allowedTypes)
for i=1,#allowedTypes do
if allowedTypes[i] == transportType then
return true
elseif allowedTypes[i] == "TRUCKRU" and (transportType == "GAZ-66" or transportType == "KAMAZ Truck") then
return true
end
end
return false
end
function assignWeaponTransports(hostGroup,cargoType)
local transportGroup = Group.getByName(hostGroup)
local numberOfUnitsInGroup = transportGroup:getSize()
local unitsWithCargo = {}
local setupTicksMax = 0
local weaponTransportType = {}
--local groupRadars = {}
--local groupOpticsAndCommand = {}
--local groupWeapons = {}
--local groupStaffAndInfantry = {}
local alreadyLoadedVehicles = {} --key = vehicle name, value = cargo
local nonSensorCargoTypesInTemplate = {}
local templateType = cargoType .. 'Template'
if templateType == 'ww2GerLeFHSiteTemplate' and dismountsOptions['WWIIAssets'] == false then
--trigger.action.outText('NON!!',15)
return 0
end
--trigger.action.outText(templateType,15)
weaponTransportType = mist.utils.deepCopy(_G[templateType])
--trigger.action.outText(mist.utils.tableShow(weaponTransportType),15)
for transportedItemType, transportedItemInfo in pairs(weaponTransportType) do
if dismountsOptions["WPNSitesAddMoreWPNToFreeVehicles"] == true and (transportedItemType ~= "RDR" and transportedItemType ~= "OPT") then
table.insert(nonSensorCargoTypesInTemplate,transportedItemInfo)
end
for i=1,numberOfUnitsInGroup do
local unitToProcess = transportGroup:getUnit(i)
local unitType = unitToProcess:getTypeName()
local unitName = unitToProcess:getName()
if transportedItemInfo["CarrierVehicleNamePrefix"] == string.sub(unitName,1,#transportedItemInfo["CarrierVehicleNamePrefix"]) or checkTransportForWeaponSite(unitType,transportedItemInfo["SpawnerTransportTypes"]) then
if alreadyLoadedVehicles[unitName] == nil then
local itemToAdd = {
['TransportingVehicleName'] = unitName,
['TransportedItem'] = transportedItemInfo['SpawnedUnitType'],
['WorkerCount'] = transportedItemInfo['WorkerCount'],
['WorkerStatus'] = 0
}
table.insert(unitsWithCargo,itemToAdd)
if transportedItemInfo['SetupTime'] > setupTicksMax then
setupTicksMax = transportedItemInfo['SetupTime']
end
--Add the vehicle to "ignore to add squads into" list if any auto populate function is called after this one, then remove it from dismounts list if it was already populated with troops
table.insert(dismountsOptions['VehiclesToIgnore'],unitName)
if missionTransports[unitName] ~= nil then
missionTransports[unitName] = nil
end
alreadyLoadedVehicles[unitName] = transportedItemInfo['SpawnedUnitType']
break
end
end
end
end
--loop through the group again to check remaining non-assigned vehicles
for z=1,numberOfUnitsInGroup do
local unitToProcess = transportGroup:getUnit(z)
local unitType = unitToProcess:getTypeName()
local unitName = unitToProcess:getName()
if alreadyLoadedVehicles[unitName] == nil then
for cargoType, cargoInfo in pairs(weaponTransportType) do
local itemToAdd = {}
if cargoInfo["CarrierVehicleNamePrefix"] == string.sub(unitName,1,#cargoInfo["CarrierVehicleNamePrefix"]) then
if alreadyLoadedVehicles[unitName] == nil then
itemToAdd = {
['TransportingVehicleName'] = unitName,
['TransportedItem'] = cargoInfo['SpawnedUnitType'],
['WorkerCount'] = cargoInfo['WorkerCount'],
['WorkerStatus'] = 0
}
table.insert(unitsWithCargo,itemToAdd)
if cargoInfo['SetupTime'] > setupTicksMax then
setupTicksMax = cargoInfo['SetupTime']
end
--Add the vehicle to "ignore to add squads into" list if any auto populate function is called after this one, then remove it from dismounts list if it was already populated with troops
table.insert(dismountsOptions['VehiclesToIgnore'],unitName)
if missionTransports[unitName] ~= nil then
missionTransports[unitName] = nil
end
alreadyLoadedVehicles[unitName] = cargoInfo['SpawnedUnitType']
break
end
elseif dismountsOptions["WPNSitesAddMoreWPNToFreeVehicles"] == true and #nonSensorCargoTypesInTemplate > 0 then --and (cargoInfo["CarrierVehicleNamePrefix"] ~= "RDR" or cargoInfo["CarrierVehicleNamePrefix"] ~= "OPT") then
if alreadyLoadedVehicles[unitName] == nil then
--first, let's decide whether we'll give this particular vehicle any cargo or not
local emptyOrFull = mist.random(1,10)
if emptyOrFull < 8 then
break
end
--now we can go about giving this particular vehicle some random goodies, consideration for future: make vehicle type suitability check for the cargo!!
local seed = mist.random(1,#nonSensorCargoTypesInTemplate)
itemToAdd = {
['TransportingVehicleName'] = unitName,
['TransportedItem'] = nonSensorCargoTypesInTemplate[seed]['SpawnedUnitType'],
['WorkerCount'] = nonSensorCargoTypesInTemplate[seed]['WorkerCount'],
['WorkerStatus'] = 0
}
table.insert(unitsWithCargo,itemToAdd)
if nonSensorCargoTypesInTemplate[seed]['SetupTime'] > setupTicksMax then
setupTicksMax = nonSensorCargoTypesInTemplate[seed]['SetupTime']
end
--Add the vehicle to "ignore to add squads into" list if any auto populate function is called after this one, then remove it from dismounts list if it was already populated with troops
table.insert(dismountsOptions['VehiclesToIgnore'],unitName)
if missionTransports[unitName] ~= nil then
missionTransports[unitName] = nil
end
alreadyLoadedVehicles[unitName] = nonSensorCargoTypesInTemplate[seed]['SpawnedUnitType']
break
end
end
end
end
end
local weaponTransportGroupToAdd = { ['groupName'] = hostGroup, ['SetupTicksLeft'] = setupTicksMax, ['groupCargo'] = unitsWithCargo}
table.insert(weaponTransports,weaponTransportGroupToAdd)
--if #weaponTransports > 1 then
--trigger.action.outText(mist.utils.tableShow(weaponTransports),15)
--end
end
function determineRandomSquad(hostVehicle)
countryId = Unit.getByName(hostVehicle):getCountry()
vehichleType = Unit.getByName(hostVehicle):getTypeName()
if countryId == 0 or countryId == 1 or countryId == 16 or countryId == 18 or countryId == 19 or countryId == 68 or countryId == 81 or countryId == 17 then --East
if vehichleType == 'BTR-80' or vehichleType == 'BMP-2' then
--randomize a number, and determine squad type corresponding to nation and number for this vehicle type, in this case, 7 men squads
squadTypeSeed = mist.random(7) --1 to 5 = rifle squad, 5 and 6 = rifle squad with 1 manpads, 7 = air defense squad with manpads cmd+2 manpads+4 riflemen
if countryId == 17 then --Insurgents
if squadTypeSeed < 3 then
initializeTransport(hostVehicle,insRifleSquadBTR_BMP2)
elseif squadTypeSeed < 5 then
initializeTransport(hostVehicle,insSquadManpadsBTR_BMP2)
elseif squadTypeSeed < 6 then
initializeTransport(hostVehicle,insSquadBTR_BMP2)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,insSquadRpgBTR_BMP2)
else
initializeTransport(hostVehicle,insSquadAntiAirBTR_BMP2)
end
elseif countryId == 81 then --CJTF Red, dismounts can either be of Russian troops type, or Insurgent type
cjtfRedTroopTypeSeed = mist.random(2)
if cjtfRedTroopTypeSeed == 1 then
if squadTypeSeed < 3 then
initializeTransport(hostVehicle,insRifleSquadBTR_BMP2)
elseif squadTypeSeed < 5 then
initializeTransport(hostVehicle,insSquadManpadsBTR_BMP2)
elseif squadTypeSeed < 6 then
initializeTransport(hostVehicle,insSquadBTR_BMP2)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,insSquadRpgBTR_BMP2)
else
initializeTransport(hostVehicle,insSquadAntiAirBTR_BMP2)
end
else
if squadTypeSeed < 5 then
initializeTransport(hostVehicle,russianRifleSquadBTR_BMP2_BMP3)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,russianModernSquadBTR_BMP2_BMP3)
else
initializeTransport(hostVehicle,russianManpadsCmdSquadBTR_BMP2_BMP3)
end
end
else --Otherwise use just Russian troops
if squadTypeSeed < 5 then
initializeTransport(hostVehicle,russianRifleSquadBTR_BMP2_BMP3)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,russianModernSquadBTR_BMP2_BMP3)
else
initializeTransport(hostVehicle,russianManpadsCmdSquadBTR_BMP2_BMP3)
end
end
elseif vehichleType == 'ZBD04A' or vehichleType == 'BMP-3' or vehichleType == 'BTR-82A' then
squadTypeSeed = mist.random(7)
if squadTypeSeed < 5 then
initializeTransport(hostVehicle,russianRifleSquadBTR_BMP2_BMP3)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,russianModernSquadBTR_BMP2_BMP3)
else
initializeTransport(hostVehicle,russianManpadsCmdSquadBTR_BMP2_BMP3)
end
elseif vehichleType == 'GAZ-66' or vehichleType == 'KAMAZ Truck' then
--trucks may not get any dismounts, depending on randomizer
squadTypeSeed = mist.random(7)
if squadTypeSeed < 4 then
return 0
elseif squadTypeSeed < 7 then
if countryId == 17 then
initializeTransport(hostVehicle,insMortarTeam)
elseif countryId == 81 then
cjtfRedTroopTypeSeed = mist.random(2)
if cjtfRedTroopTypeSeed == 1 then
initializeTransport(hostVehicle,insMortarTeam)
else
initializeTransport(hostVehicle,eastMortarTeam)
end
else
initializeTransport(hostVehicle,eastMortarTeam)
end
else
if countryId == 17 then
initializeTransport(hostVehicle,insRifleSquadMTLB)
elseif countryId == 81 then
cjtfRedTroopTypeSeed = mist.random(2)
if cjtfRedTroopTypeSeed == 1 then
initializeTransport(hostVehicle,insRifleSquadMTLB)
else
initializeTransport(hostVehicle,russianSquadMTLB)
end
else
initializeTransport(hostVehicle,russianSquadMTLB)
end
end
elseif vehichleType == 'BMP-1' then
squadTypeSeed = mist.random(7)
--trigger.action.outText('seed:' .. squadTypeSeed, 20)
if countryId == 17 then
if squadTypeSeed < 3 then
initializeTransport(hostVehicle,insRifleSquadBMP1)
elseif squadTypeSeed < 5 then
initializeTransport(hostVehicle,insSquadBMP1)
elseif squadTypeSeed < 6 then
initializeTransport(hostVehicle,insSquadManpadsBMP1)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,insSquadRpgBMP1)
else
initializeTransport(hostVehicle,insSquadAntiAirBMP1)
end
elseif countryId == 81 then
cjtfRedTroopTypeSeed = mist.random(2)
if cjtfRedTroopTypeSeed == 1 then
if squadTypeSeed < 3 then
initializeTransport(hostVehicle,insRifleSquadBMP1)
elseif squadTypeSeed < 5 then
initializeTransport(hostVehicle,insSquadBMP1)
elseif squadTypeSeed < 6 then
initializeTransport(hostVehicle,insSquadManpadsBMP1)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,insSquadRpgBMP1)
else
initializeTransport(hostVehicle,insSquadAntiAirBMP1)
end
else
if squadTypeSeed < 5 then
initializeTransport(hostVehicle,russianSquadBMP1)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,russianSquadManpadsBMP1)
else
initializeTransport(hostVehicle,russianSquadManpadsCmdBMP1)
end
end
else
if squadTypeSeed < 5 then
initializeTransport(hostVehicle,russianSquadBMP1)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,russianSquadManpadsBMP1)
else
initializeTransport(hostVehicle,russianSquadManpadsCmdBMP1)
end
end
elseif vehichleType == 'BMD-1' or vehichleType == 'BTR_D' then
if countryId == 17 then
initializeTransport(hostVehicle,insSquadBMD1)
elseif countryId == 81 then
cjtfRedTroopTypeSeed = mist.random(2)
if cjtfRedTroopTypeSeed == 1 then
initializeTransport(hostVehicle,insSquadBMD1)
else
initializeTransport(hostVehicle,russianVDVBMD1)
end
else
initializeTransport(hostVehicle,russianVDVBMD1)
end
elseif vehichleType == 'MTLB' then
squadTypeSeed = mist.random(9)
if countryId == 17 then
if squadTypeSeed < 3 then
initializeTransport(hostVehicle,insRifleSquadMTLB)
elseif squadTypeSeed < 5 then
initializeTransport(hostVehicle,insSquadMTLB)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,insSquadManpadsMTLB)
elseif squadTypeSeed < 8 then
initializeTransport(hostVehicle,insSquadRpgBMP1)
elseif squadTypeSeed < 9 then
initializeTransport(hostVehicle,insSquadMixedMTLB)
else
initializeTransport(hostVehicle,insSquadAntiAirMTLB)
end
elseif countryId == 81 then
cjtfRedTroopTypeSeed = mist.random(2)
if cjtfRedTroopTypeSeed == 1 then
if squadTypeSeed < 3 then
initializeTransport(hostVehicle,insRifleSquadMTLB)
elseif squadTypeSeed < 5 then
initializeTransport(hostVehicle,insSquadMTLB)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,insSquadManpadsMTLB)
elseif squadTypeSeed < 8 then
initializeTransport(hostVehicle,insSquadRpgBMP1)
elseif squadTypeSeed < 9 then
initializeTransport(hostVehicle,insSquadMixedMTLB)
else
initializeTransport(hostVehicle,insSquadAntiAirMTLB)
end
else
if squadTypeSeed < 4 then
initializeTransport(hostVehicle,russianSquadMTLB)
elseif squadTypeSeed < 6 then
initializeTransport(hostVehicle,russianSquadManpadsMTLB)
elseif squadTypeSeed < 8 then
initializeTransport(hostVehicle,russianSquadRPGMTLB)
elseif squadTypeSeed < 9 then
initializeTransport(hostVehicle,russianSquadRPGIglaMTLB)
else
initializeTransport(hostVehicle,russianSquadAntiAirMTLB)
end
end
else
if squadTypeSeed < 4 then
initializeTransport(hostVehicle,russianSquadMTLB)
elseif squadTypeSeed < 6 then
initializeTransport(hostVehicle,russianSquadManpadsMTLB)
elseif squadTypeSeed < 8 then
initializeTransport(hostVehicle,russianSquadRPGMTLB)
elseif squadTypeSeed < 9 then
initializeTransport(hostVehicle,russianSquadRPGIglaMTLB)
else
initializeTransport(hostVehicle,russianSquadAntiAirMTLB)
end
end
else
initializeTransport(hostVehicle,randomizedSquadForTransport(vehichleType,nil,countryId))
end --END vehichle type if for east
else --West
if vehichleType == 'M-2 Bradley' or vehichleType == 'Marder' or vehichleType == 'MCV-80' then
--randomize a number, and determine squad type corresponding to nation and number for this vehicle type, in this case, 7 men squads
squadTypeSeed = mist.random(7) --1 to 4 = rifle squad, 5 and 6 = rifle squad with 1 manpads, 7 = air defense squad with manpads cmd+2 manpads+4 riflemen
if squadTypeSeed < 5 then
initializeTransport(hostVehicle,usaSquadBradleyMarderWarrior)
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,usaSquadManpadsBradleyMarder)
else
initializeTransport(hostVehicle,usaSquadManpadsBradleyMarder)
end
elseif vehichleType == 'M 818' then
--trucks may not get any dismounts, depending on randomizer
squadTypeSeed = mist.random(7)
if squadTypeSeed < 4 then
return 0
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,westMortarTeam)
else
initializeTransport(hostVehicle,usaSquadM113)
end
elseif vehichleType == 'LAV-25' then
squadTypeSeed = mist.random(7)
if squadTypeSeed < 4 then
initializeTransport(hostVehicle,usaSquadLAV25)
elseif squadTypeSeed < 6 then
initializeTransport(hostVehicle,usaSquadManpadsLAV25)
else
initializeTransport(hostVehicle,westMortarTeam)
end
elseif vehichleType == 'M-113' then
squadTypeSeed = mist.random(5)
if squadTypeSeed < 4 then
initializeTransport(hostVehicle,usaSquadM113)
else
initializeTransport(hostVehicle,usaSquadManpadsM113)
end
elseif vehichleType == 'M1126 Stryker ICV' then
squadTypeSeed = mist.random(9)
if squadTypeSeed < 5 then
initializeTransport(hostVehicle,usaSquadStryker)
elseif squadTypeSeed < 8 then
initializeTransport(hostVehicle,usaSquadManpadsStryker)
else
initializeTransport(hostVehicle,usaFireteamStryker)
end
elseif vehichleType == 'AAV7' then
squadTypeSeed = mist.random(5)
if squadTypeSeed < 4 then
initializeTransport(hostVehicle,usaSquadAAV7USMC)
else
initializeTransport(hostVehicle,usaSquadManpadsAAV7USMC)
end
elseif vehichleType == 'TPZ' then
squadTypeSeed = mist.random(5)
if squadTypeSeed < 4 then
initializeTransport(hostVehicle,gerSquadTPz)
else
initializeTransport(hostVehicle,gerSquadManpadsTPz)
end
else
initializeTransport(hostVehicle,randomizedSquadForTransport(vehichleType,nil,countryId))
end --END vehichle type if for west
end --END country type
if dismountsOptions["WWIIAssets"] == true then
if vehichleType == 'Blitz_36-6700A' or vehichleType == 'Sd_Kfz_251' or vehichleType == 'Sd_Kfz_7' then
initializeTransport(hostVehicle,ww2Wehrmacht)
elseif vehichleType == 'Bedford_MWD' then
initializeTransport(hostVehicle,ww2UKTroops)
elseif vehichleType == 'CCKW_353' or vehichleType == 'M2A1_halftrack' then
initializeTransport(hostVehicle,ww2USTroops)
end
end
if dismountsOptions["FrenchPack"] == true then
if vehichleType == 'VBCI' then --VBCI 8 troops capacity
squadTypeSeed = mist.random(7)
local pseudoFrenchySquad = {}
if squadTypeSeed < 5 then
pseudoFrenchySquad = mist.utils.deepCopy(usaSquadBradleyMarderWarrior)
table.insert(pseudoFrenchySquad,'Soldier M4')
elseif squadTypeSeed < 8 then
pseudoFrenchySquad = mist.utils.deepCopy(usaSquadManpadsBradleyMarder)
table.insert(pseudoFrenchySquad,'Soldier M4')
end
initializeTransport(hostVehicle,pseudoFrenchySquad)
elseif vehichleType == 'VAB_50' or vehichleType == 'VIB_VBR' or vehichleType == 'VAB_RADIO' then --VAB 10 troops capacity
squadTypeSeed = mist.random(5)
if squadTypeSeed < 4 then
initializeTransport(hostVehicle,gerSquadTPz)
else
initializeTransport(hostVehicle,gerSquadManpadsTPz)
end
elseif vehichleType == 'TRM2000' then
squadTypeSeed = mist.random(7)
if squadTypeSeed < 4 then
return 0
elseif squadTypeSeed < 7 then
initializeTransport(hostVehicle,westMortarTeamFrenchPack)
else
initializeTransport(hostVehicle,usaSquadM113)
end
end
end
if dismountsOptions["NoManpads"] == true then
missionTransports[hostVehicle].cargo = replaceManpadsWithRiflemen(missionTransports[hostVehicle].cargo)
end
end
function assignSetSquadTypeToVehicle(hostVehicle, squadType)
--squadType = mortarWest, mortarGrg, mortarRu, mortarIns, rifleWest, rifleGrg, rifleRu, rifleIns, manpadsWest, manpadsRu, manpadsIns, vdv, rpgIns, antiAir, special, specificGroupNameFromMEditor:
local vehicle = Unit.getByName(hostVehicle)
local vehichleType = Unit.getByName(hostVehicle):getTypeName()
if vehicle ~= nil then
--vehicles with 7 passenger capacity
--if vehichleType == 'BTR-80' or vehichleType == 'BMP-2' or vehichleType == 'BMP-3' or vehichleType == 'BTR-82A' or vehichleType == 'M-2 Bradley' or vehichleType == 'Marder' or vehichleType == 'MCV-80' then
-- if squadType == 'rifleWest' then
-- initializeTransport(hostVehicle,usaSquadBradleyMarderWarrior)
-- elseif squadType == 'rifleRu' then
-- initializeTransport(hostVehicle,russianRifleSquadBTR_BMP2_BMP3)
-- elseif squadType == 'rifleIns' then
-- initializeTransport(hostVehicle,insRifleSquadBTR_BMP2)
-- elseif squadType == 'manpadsWest' then
-- initializeTransport(hostVehicle,usaSquadManpadsBradleyMarder)
-- elseif squadType == 'manpadsRu' then
-- initializeTransport(hostVehicle,russianModernSquadBTR_BMP2_BMP3)
-- elseif squadType == 'manpadsIns' then
-- initializeTransport(hostVehicle,insSquadManpadsBTR_BMP2)
-- end
--vehicles with 11 passenger capacity
if vehichleType == 'M-113' or vehichleType == 'MTLB' then
if squadType == 'rifleWest' then
initializeTransport(hostVehicle,usaSquadM113)
elseif squadType == 'rifleRu' then
initializeTransport(hostVehicle,russianSquadMTLB)
elseif squadType == 'rifleIns' then
initializeTransport(hostVehicle,insRifleSquadMTLB)
elseif squadType == 'manpadsWest' then
initializeTransport(hostVehicle,usaSquadManpadsM113)
elseif squadType == 'manpadsRu' then
initializeTransport(hostVehicle,russianSquadManpadsMTLB)
elseif squadType == 'manpadsIns' then
initializeTransport(hostVehicle,insSquadManpadsMTLB)
end
else --else use 7 man squads for now
if squadType == 'rifleWest' then
initializeTransport(hostVehicle,usaSquadBradleyMarderWarrior)
elseif squadType == 'rifleRu' then
initializeTransport(hostVehicle,russianRifleSquadBTR_BMP2_BMP3)
elseif squadType == 'rifleIns' then
initializeTransport(hostVehicle,insRifleSquadBTR_BMP2)
elseif squadType == 'manpadsWest' then
initializeTransport(hostVehicle,usaSquadManpadsBradleyMarder)
elseif squadType == 'manpadsRu' then
initializeTransport(hostVehicle,russianModernSquadBTR_BMP2_BMP3)
elseif squadType == 'manpadsIns' then
initializeTransport(hostVehicle,insSquadManpadsBTR_BMP2)
end
end
end
end
function mechanizeAll(optionsList)
if optionsList ~= nil then
setOptions(optionsList)
end
local units = mist.makeUnitTable({'[all][vehicle]'})
local ignoreVehicleList = dismountsOptions['VehiclesToIgnore']
for i=1,#units do
local isVehicleInIgnoreList = false
if #ignoreVehicleList > 0 then
for ignoreItem = 1, #ignoreVehicleList do
if ignoreVehicleList[ignoreItem] == units[i] then
isVehicleInIgnoreList = true
end
end
end
if isVehicleInIgnoreList == false then
local unit = Unit.getByName(units[i])
if unit ~= nil then
local unitType = unit:getTypeName()
if unitType == 'BTR-80' or unitType == 'BMP-2' or unitType == 'BMP-3' or unitType == 'BMP-1' or unitType == 'BTR-82A' or
unitType == 'BMD-1' or unitType == 'BTR_D' or unitType == 'MTLB' or unitType == 'M-2 Bradley' or unitType == 'Marder' or
unitType == 'MCV-80' or unitType == 'LAV-25' or unitType == 'M-113' or unitType == 'M1126 Stryker ICV' or unitType == 'AAV7'
or unitType == 'M 818' or unitType == 'KAMAZ Truck' or unitType == 'GAZ-66' or unitType == 'TPZ' or unitType == 'ZBD04A' or string.sub(units[i],1,11) == 'TRANSPORT##' then
determineRandomSquad(units[i])
end
if dismountsOptions["WWIIAssets"] == true then
if unitType == 'Blitz_36-6700A' or unitType == 'Sd_Kfz_251' or unitType == 'Sd_Kfz_7'
or unitType == 'Bedford_MWD' or unitType == 'CCKW_353' or unitType == 'M2A1_halftrack'
then
determineRandomSquad(units[i])
end
end
if dismountsOptions["FrenchPack"] == true then
if unitType == 'VBCI' or unitType == 'VAB_50' or unitType == 'VIB_VBR'
or unitType == 'VBAE' or unitType == 'VBAE_MMP' or unitType == 'VBL50'
or unitType == 'VBLANF1' or unitType == 'TRM2000' or unitType == 'VAB_RADIO'
or unitType == 'VBL-Radio'
then
determineRandomSquad(units[i])
end
end
end
end
end
end
function addTransportType(transportType, troopCapacity)
local units = mist.makeUnitTable({'[all][vehicle]'})
local ignoreVehicleList = dismountsOptions['VehiclesToIgnore']
for i=1,#units do
local isVehicleInIgnoreList = false
if #ignoreVehicleList > 0 then
for ignoreItem = 1, #ignoreVehicleList do
if ignoreVehicleList[ignoreItem] == units[i] then
isVehicleInIgnoreList = true
end
end
end
vehichleType = Unit.getByName(units[i]):getTypeName()
if isVehicleInIgnoreList == false and vehichleType == transportType then
countryId = Unit.getByName(units[i]):getCountry()
initializeTransport(units[i],randomizedSquadForTransport('',nil,countryId,troopCapacity))
end
end
end
function spawnWeaponSite(groupName)
local groupDismounting = Group.getByName(groupName)
local countryId = 0
--trigger.action.outText('spawning weapon site from group: ' .. groupName,15)
if groupDismounting ~= nil then
countryId = groupDismounting:getUnit(1):getCountry()
else
return false
end
--trigger.action.outText(mist.utils.tableShow(groupDismounting),15)
--find in weaponTransports
local transportData = {}
local carrierPos = groupDismounting:getUnit(1):getPosition()
local dmVec2 = {
x = carrierPos.p.x + carrierPos.x.x * -5,
y = carrierPos.p.z + carrierPos.x.z * -5,
}
local newGroup = {
["visible"] = false,
["route"] =
{
}, -- end of ["route"]
["groupId"] = groupName .. 10000,
["tasks"] =
{
}, -- end of ["tasks"]
["hidden"] = false,
["units"] =
{
}, -- end of ["units"]
["y"] = dmVec2.y,
["x"] = dmVec2.x,
["name"] = "Site_" .. groupName,
["start_time"] = 0,
["task"] = "Ground Nothing",
}
local unitsInNewGroup = {}
local weaponTransportsId = 0
for i=1,#weaponTransports do
if weaponTransports[i]["groupName"] == groupName then
transportData = weaponTransports[i]
weaponTransportsId = i
i = #weaponTransports
end
end
--trigger.action.outText(mist.utils.tableShow(transportData["groupCargo"]),15)
--go through still alive units
for vhc=1,#transportData["groupCargo"] do
local vehicleName = transportData["groupCargo"][vhc]["TransportingVehicleName"]
local vehicleObj = Unit.getByName(vehicleName)
if vehicleObj ~= nil then
--(create a list of units to spawn first, with their coordinates being near their worker infantry, and then spawn this new group)
local workers = Group.getByName('Dismounts_'..vehicleName)
local workersPos = workers:getUnit(1):getPosition()
local workersPosVec2 = {
x = workersPos.p.x + workersPos.x.x * -5,
y = workersPos.p.z + workersPos.x.z * -5,
}
local objTypeToSpawn = transportData["groupCargo"][vhc]["TransportedItem"]
if string.sub(objTypeToSpawn,1,3) ~= 'SQ_' then
local newObjectToAdd = {
["y"] = workersPosVec2.y + 0.05,
["type"] = objTypeToSpawn,
["name"] = "WeaponSite_" .. groupName .. "_" .. vhc,
["unitId"] = "WeaponSite_" .. groupName .. '(' .. vhc .. ')',
["heading"] = 0,
["playerCanDrive"] = false,
["skill"] = "Average",
["x"] = workersPosVec2.x + 0.05,
}
table.insert(unitsInNewGroup,newObjectToAdd)
end
--add spawnable object to unitsInNewGroup
end
end
newGroup["units"] = unitsInNewGroup
--trigger.action.outText('CountryID = ' .. countryId,15)
--trigger.action.outText(mist.utils.tableShow(newGroup),15)
--spawn their cargo at the location of worker infantry, but only if worker infantry is still alive
coalition.addGroup(countryId, Group.Category.GROUND, newGroup)
--table.remove(weaponTransports,weaponTransportsId)
table.insert(removeFromWeaponTransports,groupName)
--move the column forward a bit and away from deployed things
local transportingGroupHdg = getHeading(Group.getByName(groupName):getUnit(1):getPosition())
local transportingGroupPos = mist.utils.makeVec2(Group.getByName(groupName):getUnit(1):getPoint())
local trasportingGroupNewPos3Wpt = newCoordFromDistanceBearing(transportingGroupPos,transportingGroupHdg,100)
addWaypointToVehicles(groupName,trasportingGroupNewPos3Wpt)
end
local function spawnSquad(hostVehicle,alternateCargo,initialWPVec2)
transportVehicle = missionTransports[hostVehicle]
if alternateCargo ~= nil then
local altCargoDataType = type(alternateCargo)
if altCargoDataType == 'string' and string.sub(alternateCargo,1,3) == 'SQ_' then
local classNameForCargo = string.sub(alternateCargo,4,-1)
alternateCargo = _G[classNameForCargo]
end
transportVehicle =
{
countryID = Unit.getByName(hostVehicle):getCountry(),
UnitID = Unit.getByName(hostVehicle):getID(),
cargo = alternateCargo
}
--trigger.action.outText(mist.utils.tableShow(transportVehicle),15)
end
if transportVehicle ~= nil then
local dismountingTransport = Unit.getByName(hostVehicle)
local carrierPos = dismountingTransport:getPosition()
local carrierUnitID = transportVehicle.UnitID
local heading = getHeading(carrierPos)
local choices = {-1, 1}
local side = choices[ math.random(#choices) ]
local spawnHeading = heading + math.pi / 2 * side
local dmVec2 = {
x = carrierPos.p.x + math.cos(spawnHeading) * 10,
y = carrierPos.p.z + math.sin(spawnHeading) * 10,
}
local dismountsWP2X = dmVec2.x + math.cos(spawnHeading) * 50
local dismountsWP2Y = dmVec2.y + math.sin(spawnHeading) * 50
local markDismountWP = checkForMarkers('infWP'..hostVehicle)
local zoneDismountWP = trigger.misc.getZone('WP_'..hostVehicle)
--if hostVehicle == 'Ground-1-7' then
-- trigger.action.outText('So this is our vehicle with zone...',15)
--
-- if zoneDismountWP ~= nil then
-- trigger.action.outText(mist.utils.tableShow(zoneDismountWP),15)
-- else
-- trigger.action.outText('AND YET ITS ZONE AINT FOUND... GGGRRRRRRRRRRRRRR',15)
-- end
--end
if markDismountWP ~= 0 and #markDismountWP > 0 then
--local dismountsWP2X = markDismountWP[1].pos.x
--local dismountsWP2Y = markDismountWP[1].pos.z
local routeToSchedule = { pos = markDismountWP[1].pos }
groupsWithRoutes[hostVehicle] = routeToSchedule
elseif zoneDismountWP ~= nil then
--trigger.action.outText(mist.utils.tableShow(zoneDismountWP),15)
--local dismountsWP2X = zoneDismountWP.point.x
--local dismountsWP2Y = zoneDismountWP.point.z
local routeToSchedule = { pos = zoneDismountWP.point }
groupsWithRoutes[hostVehicle] = routeToSchedule
--trigger.action.outText(mist.utils.tableShow(groupsWithRoutes),15)
end
local pointsForFirstWP =
{
[1] =
{
["alt"] = 0,
["type"] = "Turning Point",
["ETA"] = 0,
["alt_type"] = "BARO",
["formation_template"] = "",
["y"] = dismountsWP2Y,--dmVec2.y,
["x"] = dismountsWP2X,--dmVec2.x,
["ETA_locked"] = true,
["speed"] = 5.5555555555556,
["action"] = "Off Road",
["task"] =
{
["id"] = "ComboTask",
["params"] =
{
["tasks"] =
{
}, -- end of ["tasks"]
}, -- end of ["params"]
}, -- end of ["task"]
["speed_locked"] = true,
}, -- end of [1]
[2] =
{
["alt"] = 0,
["type"] = "Turning Point",
["ETA"] = 0,
["alt_type"] = "BARO",
["formation_template"] = "",
["y"] = dismountsWP2Y,
["x"] = dismountsWP2X,
["ETA_locked"] = false,
["speed"] = 5.5555555555556,
["action"] = "Off Road",
["task"] =
{
["id"] = "ComboTask",
["params"] =
{
["tasks"] =
{
}, -- end of ["tasks"]
}, -- end of ["params"]
}, -- end of ["task"]
["speed_locked"] = true,
}, -- end of [2]
}
if initialWPVec2 ~= nil then
if initialWPVec2.x == 0.0 and initialWPVec2.y == 0.0 then
pointsForFirstWP[2] = nil
else
pointsForFirstWP[2]["x"] = initialWPVec2.x
pointsForFirstWP[2]["y"] = initialWPVec2.y
end
end
if transportVehicle.cargo ~= nil then
local groupData = {
["visible"] = false,
["route"] =
{
["spans"] =
{
}, -- end of ["spans"]
["points"] =
{
pointsForFirstWP
}, -- end of ["points"]
}, -- end of ["route"]
["groupId"] = hostVehicle .. 10000,
["tasks"] =
{
}, -- end of ["tasks"]
["hidden"] = false,
["units"] =
{
}, -- end of ["units"]
["y"] = dmVec2.y,
["x"] = dmVec2.x,
["name"] = "Dismounts_" .. hostVehicle,
["start_time"] = 0,
["task"] = "Ground Nothing",
}
local vehiclesList = {}
for i=1,#transportVehicle.cargo do
vehiclesList[i] = {
["y"] = dmVec2.y + math.sin(spawnHeading) * i,
["type"] = transportVehicle.cargo[i],
["name"] = "Dismounts_" .. hostVehicle .. "_" .. i,
["unitId"] = "Dismounts_" .. hostVehicle .. '(' .. transportVehicle.cargo[i] .. ')',
["heading"] = heading,
["playerCanDrive"] = true,
["skill"] = "Average",
["x"] = dmVec2.x + math.cos(spawnHeading) * i,
}
end
groupData["units"] = vehiclesList
coalition.addGroup(transportVehicle.countryID, Group.Category.GROUND, groupData)
end
else
return 0;
end
end
local function despawnSquad(hostVehicle)
local g = Group.getByName("Dismounts_" .. hostVehicle)
local initialSize = g:getInitialSize()
local currentSize = g:getUnits()
if initialSize > #currentSize then
local remainingInfantry = {}
for i=1,#currentSize do
table.insert(remainingInfantry, currentSize[i]:getTypeName())
end
missionTransports[hostVehicle].cargo = remainingInfantry
end
end
local function checkMovement()
for unitName, transportData in pairs(missionTransports) do
local dismountingTransport = Unit.getByName(unitName)
if dismountingTransport ~= nil then
unitId = Unit.getByName(unitName):getID()
local v = dismountingTransport:getVelocity() --Velocity is a Vec3
local spd = mist.vec.mag(v)
if spd < 1 and dismountingTransport:isActive()==true then --Check if speed is zero
if transportData.cargo_status == "mounted" then
spawnSquad(unitName)
missionTransports[unitName].cargo_status = "dismounted"
elseif transportData.cargo_status == "dismounted" then
--local markers = checkForMarkers(unitName)
--if markers ~= 0 then
-- for i=1,#markers do
-- addWaypointToGroup(unitName,markers)
-- end
--else
-- trigger.action.outText('saddy mc sad face :( markers were 0 for vehichle:' .. unitName, 2)
--end
end
else --Else carrier is moving
if transportData.cargo_status == "dismounted" then
if spd > 2.3 then
local g = Group.getByName("Dismounts_" .. unitName)
if g ~= nil then --Check if the group is still alive
missionTransports[unitName].cargo_status = "mounted"
despawnSquad(unitName)
g:destroy()
else
missionTransports[unitName].cargo_status = "lost" --If the dismounted group is destroyed, set status of the carrier to lost to prevent it from deploying a new group
end
end
end
end
else
--trigger.action.outText('wow sth wrong for vehichle:' .. unitName, 2)
--TODO: remove this entry from missionTransports table
end
end
--ASSIGN ROUTES/TASKS FROM F10 MARKERS
--trigger.action.outText('grouops with routes are numbered as: '..#groupsWithRoutes,15)
for key, value in pairs(groupsWithRoutes) do
local dismountedGroupName = 'Dismounts_' .. key
local dismountedGroup = Group.getByName(dismountedGroupName)
if dismountedGroup ~= nil then
--trigger.action.outText('so this should really work.. '..key,35)
local newPath = {}
newPath[1] = value
--trigger.action.outText('WPT is: '..mist.utils.tableShow(newPath),35)
addWaypointToGroup(key,newPath)
if groupsWithRoutesUpdated[key] ~= nil then
groupsWithRoutesUpdated[key] = groupsWithRoutesUpdated[key] + 1
else
groupsWithRoutesUpdated[key] = 1
end
end
end
local removeRoutesUpdated = {}
for key, value in pairs(groupsWithRoutesUpdated) do
local cont = true
if groupsWithRoutes[key] == nil then
table.insert(removeRoutesUpdated,key)
cont = false
end
if cont and value > 1 then
groupsWithRoutes[key] = nil
end
end
for i=1,#removeRoutesUpdated do
groupsWithRoutesUpdated[removeRoutesUpdated[i]] = nil
end
--END ASSIGN ROUTES/TASKS FROM F10 MARKERS
--CHECK FOR WEAPON SITE TRANSPORTS
if #weaponTransports > 0 then
for i=1,#weaponTransports do
if weaponTransports[i]["SetupTicksLeft"] > 0 then
--TODO: first check if the first unit that is alive has stopped or not
local groupTransportingWeaponSite = weaponTransports[i]["groupName"]
local leaderVhc = Group.getByName(groupTransportingWeaponSite):getUnit(1)
local vel = leaderVhc:getVelocity()
local speed = mist.vec.mag(vel)
local leaderPos = leaderVhc:getPoint()
if speed < 1 then --Check if lead vehicle from our weapon site tranport column is stopped
--if so, let's see if it is near the group's final waypoint
local groupPath = mist.getGroupPoints(groupTransportingWeaponSite)
local distanceToFinalWP = mist.utils.get2DDist(mist.utils.makeVec2(leaderPos),groupPath[#groupPath])
if distanceToFinalWP < 101 then
--spawn the "worker" infantry first TODO
spawnTransportWorkers(groupTransportingWeaponSite)
--then start the ticks countdown
weaponTransports[i]["SetupTicksLeft"] = weaponTransports[i]["SetupTicksLeft"] - 1
end
end
elseif weaponTransports[i]["SetupTicksLeft"] == 0 then
--start spawning!
weaponTransports[i]["SetupTicksLeft"] = -1 --started spawning, don't keep doing it over and over again shall we?
spawnWeaponSite(weaponTransports[i]["groupName"])
end
end
end
if #removeFromWeaponTransports > 0 then
for toRemoveTransportsIdx=1,#removeFromWeaponTransports do
for wpnTransportIdx = #weaponTransports, 1, -1 do
if weaponTransports[wpnTransportIdx]["groupName"] == removeFromWeaponTransports[toRemoveTransportsIdx] then
table.remove(weaponTransports,wpnTransportIdx)
end
end
end
removeFromWeaponTransports = {}
end
--END CHECK FOR WEAPON SITE TRANSPORTS
return timer.getTime() + 5
end
function spawnTransportWorkers(groupName)
local countryId = Group.getByName(groupName):getUnit(1):getCountry()
local soldierType = "Infantry AK" --default red, Russian soldier
if countryId == 17 then --insurgents
soldierType = "Infantry AK Ins"
elseif (countryId > 1 and countryId < 16 and countryId ~= 7) then --blue
soldierType = "Soldier M4"
end
for i=1,#weaponTransports do
if weaponTransports[i]["groupName"] == groupName then
for cargoIndex = 1,#weaponTransports[i]["groupCargo"] do
local workerSquad = {}
local transportName = weaponTransports[i]["groupCargo"][cargoIndex]["TransportingVehicleName"]
local workersToSpawn = 0
if Unit.getByName(transportName) ~= nil and weaponTransports[i]["groupCargo"][cargoIndex]["WorkerStatus"] == 0 then
if string.sub(weaponTransports[i]["groupCargo"][cargoIndex]["TransportedItem"],1,3) == 'SQ_' then
--trigger.action.outText('STF SQ_ stuff sent',15)
spawnSquad(transportName,weaponTransports[i]["groupCargo"][cargoIndex]["TransportedItem"])
weaponTransports[i]["groupCargo"][cargoIndex]["WorkerStatus"] = 1
else
workersToSpawn = weaponTransports[i]["groupCargo"][cargoIndex]["WorkerCount"]
for idx = 1, workersToSpawn do
table.insert(workerSquad,soldierType)
end
spawnSquad(transportName,workerSquad,{x=0.0,y=0.0})
weaponTransports[i]["groupCargo"][cargoIndex]["WorkerStatus"] = 1
end
end
end
end
end
end
local function sanitizeMarkers(markerText, markerId)
--trigger.action.outText('Marker event hit, marker text:' .. markerText .. ' marker Id:' .. markerId, 5)
local mkrPfx = string.sub(markerText,1,5)
local markers = checkForMarkers(markerText)
local markerIdForWP = {}
if mkrPfx == 'infWP' or mkrPfx == 'infTG' then
--First find the marker with provided ID, which sadly takes an additional loop
local currentMarker = {}
for i=1,#markers do
if markers[i].idx == markerId then
currentMarker = markers[i]
end
end
local unitName = string.sub(markerText,6,#markerText)
--Check if the marker is created by a player from same side as the unit
local unitCoalition = Unit.getByName(unitName):getCoalition()
if currentMarker.coalition ~= unitCoalition then
mist.marker.remove(markerId)
return 0
end
if #markers > 1 then
for i=1,#markers do
if markers[i].idx ~= markerId then
mist.marker.remove(markers[i].idx)
else
table.insert(markerIdForWP, markers[i])
end
end
else
table.insert(markerIdForWP, markers[1])
end
if mkrPfx == 'infWP' then
addWaypointToGroup(unitName,markerIdForWP)
else
createTargetPoint(unitName,markerIdForWP)
end
end
end
local e = {}
function e:onEvent(event)
if event.id == world.event.S_EVENT_MARK_ADDED or event.id == world.event.S_EVENT_MARK_CHANGE then
local mkrText = event.text
local mkrPfx = string.sub(mkrText,1,5)
if mkrPfx == 'infWP' or mkrPfx == 'infTG' then
sanitizeMarkers(mkrText, event.idx)
end
end
end
world.addEventHandler(e)
timer.scheduleFunction(checkMovement, nil, timer.getTime() + 1)
end