@jtff/miztemplate-lib 3.7.5 → 3.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -434,12 +434,24 @@ function deleteSubRangeUnits(param)
434
434
  local subRangeConfig = param[3]
435
435
  local radioCommandSubRange = param[4]
436
436
  local blnMute = param[5]
437
- for i = 1, #groupsToSpawn do
438
- destroyGroup(groupsToSpawn[i])
439
- end
440
-
441
437
  local subRangeName = subRangeConfig.name
442
438
  local staticsToDelete = subRangeConfig.staticsToSpawn
439
+ if (subRangeConfig.groupsToSpawn ~= nil) then
440
+ for i = 1, #groupsToSpawn do
441
+ destroyGroup(groupsToSpawn[i])
442
+ end
443
+ else
444
+ jtff_log.warn(string.format("No Groups in %s", subRangeName), "RANGE")
445
+ end
446
+ if (subRangeConfig.randomGroupsToSpawn ~= nil) then
447
+ local groupsToDestroy = subRangeConfig.randomGroupsToSpawn
448
+ for i = 1, #groupsToDestroy do
449
+ destroyGroup(subRangeConfig.randomGroupsToSpawn[i])
450
+ end
451
+ else
452
+ jtff_log.warn(string.format("No random*W Groups in %s", subRangeName), "RANGE")
453
+ end
454
+
443
455
  if (staticsToDelete ~= nil)then
444
456
  destroyStatics(staticsToDelete, subRangeName)
445
457
  else
@@ -715,8 +727,8 @@ end
715
727
  function markGroupOnMap(param)
716
728
  local groupsToSpawn = param[1]
717
729
  local side = param[2]
718
- for i = 2, #groupsToSpawn do
719
- local group_name = string.format("%s", groupsToSpawn[i])
730
+ for index = 1, #groupsToSpawn do
731
+ local group_name = string.format("%s", groupsToSpawn[index])
720
732
  jtff_log.info(string.format("Mark on map all groups with name prefix %s", group_name),"MARK")
721
733
  local dcs_groups = SET_GROUP:New():FilterPrefixes(group_name):FilterOnce()
722
734
  dcs_groups:ForEachGroupAlive(function(group_alive)
@@ -844,6 +856,8 @@ function SpawnRanges(param)
844
856
  local subRangeConfig = param[3]
845
857
  local subRangeName = subRangeConfig.name
846
858
  local groupsToSpawn = subRangeConfig.groupsToSpawn
859
+ local randomGroupsToSpawn = subRangeConfig.randomGroupsToSpawn
860
+ local nbRandomGroupsToSpawn = subRangeConfig.nbRandomGroupsToSpawn or 1
847
861
  local staticsToSpawn = subRangeConfig.staticsToSpawn
848
862
  local holdFire = subRangeConfig.holdFire
849
863
  local engageAirWeapons = subRangeConfig.engageAirWeapons
@@ -851,7 +865,7 @@ function SpawnRanges(param)
851
865
  local redAlert = subRangeConfig.redAlert
852
866
 
853
867
  jtff_log.info(string.format("SpawnRanges : Range %s - Targets %s", rangeName, subRangeName),"RANGE")
854
- if (staticsToSpawn ~= nil)then
868
+ if (staticsToSpawn ~= nil) then
855
869
  for index, staticToSpawn in ipairs(staticsToSpawn) do
856
870
  local spawnStatic = nil
857
871
  if (staticToSpawn.name ~= nil) then
@@ -910,46 +924,107 @@ function SpawnRanges(param)
910
924
  jtff_log.warn(string.format("No static in %s", subRangeName),"RANGE")
911
925
  end
912
926
 
913
- for i = 1, #groupsToSpawn do
914
- local groupNameToSpawn = string.format("%s", groupsToSpawn[i])
915
- if (GROUP:FindByName(groupNameToSpawn) ~= nil) then
916
- local spawnGroup = SPAWN:New(groupNameToSpawn)
917
- jtff_log.info(string.format("SPAWN %s", groupNameToSpawn), "RANGE")
918
- local groupSpawning
919
- if (subRangeConfig.spawnZone) then
920
- groupSpawning = spawnGroup:SpawnInZone(ZONE:New(subRangeConfig.spawnZone),true)
921
- else
922
- groupSpawning = spawnGroup:Spawn()
927
+ if (randomGroupsToSpawn ~= nil) then
928
+ local availableRandomGroupsList = randomGroupsToSpawn
929
+ nbRandomGroupsToSpawn = math.min(nbRandomGroupsToSpawn,#availableRandomGroupsList)
930
+ --math.randomseed(os.time())
931
+ for i = 1, nbRandomGroupsToSpawn do
932
+ local randomIndex = math.random(1, #availableRandomGroupsList)
933
+ local groupNameToSpawn = string.format("%s", availableRandomGroupsList[randomIndex])
934
+ local finalList = {}
935
+ for index, value in ipairs(availableRandomGroupsList) do
936
+ if index ~= randomIndex then
937
+ table.insert(finalList, value)
938
+ end
923
939
  end
924
- if (holdFire) then
925
- groupSpawning:OptionROEHoldFire()
940
+ availableRandomGroupsList = finalList
941
+
942
+ if (GROUP:FindByName(groupNameToSpawn) ~= nil) then
943
+ local spawnGroup = SPAWN:New(groupNameToSpawn)
944
+ jtff_log.info(string.format("SPAWN %s", groupNameToSpawn), "RANGE")
945
+ local groupSpawning
946
+ if (subRangeConfig.spawnZone) then
947
+ groupSpawning = spawnGroup:SpawnInZone(ZONE:New(subRangeConfig.spawnZone),true)
948
+ else
949
+ groupSpawning = spawnGroup:Spawn()
950
+ end
951
+ markGroupOnMap({{groupNameToSpawn}, rangeConfig.benefit_coalition})
952
+ if (holdFire) then
953
+ groupSpawning:OptionROEHoldFire()
954
+ else
955
+ groupSpawning:OptionROEOpenFire()
956
+ end
957
+ if (engageAirWeapons) then
958
+ groupSpawning:SetOption(AI.Option.Ground.id.ENGAGE_AIR_WEAPONS, true)
959
+ end
960
+ if (activateAI == true or activateAI == false) then
961
+ groupSpawning:SetAIOnOff(activateAI)
962
+ end
963
+ if (redAlert == true or redAlert == false) then
964
+ if (redAlert == true) then
965
+ groupSpawning:OptionAlarmStateRed()
966
+ else
967
+ groupSpawning:OptionAlarmStateGreen()
968
+ end
969
+ else
970
+ groupSpawning:OptionAlarmStateAuto()
971
+ end
972
+ if (string.find(groupNameToSpawn, "SAM") ~= nil) then
973
+ sead:UpdateSet(groupNameToSpawn)
974
+ jtff_log.info(string.format("SEAD for %s", groupNameToSpawn),"RANGE")
975
+ end
926
976
  else
927
- groupSpawning:OptionROEOpenFire()
977
+ jtff_log.error(string.format("GROUP to spawn %s not found in mission", groupNameToSpawn),"RANGE")
928
978
  end
929
- if (engageAirWeapons) then
930
- groupSpawning:SetOption(AI.Option.Ground.id.ENGAGE_AIR_WEAPONS, true)
931
- end
932
- if (activateAI == true or activateAI == false) then
933
- groupSpawning:SetAIOnOff(activateAI)
934
- end
935
- if (redAlert == true or redAlert == false) then
936
- if (redAlert == true) then
937
- groupSpawning:OptionAlarmStateRed()
979
+ end
980
+ end
981
+
982
+ if (groupsToSpawn ~= nil) then
983
+ for i = 1, #groupsToSpawn do
984
+ local groupNameToSpawn = string.format("%s", groupsToSpawn[i])
985
+ if (GROUP:FindByName(groupNameToSpawn) ~= nil) then
986
+ local spawnGroup = SPAWN:New(groupNameToSpawn)
987
+ jtff_log.info(string.format("SPAWN %s", groupNameToSpawn), "RANGE")
988
+ local groupSpawning
989
+ if (subRangeConfig.spawnZone) then
990
+ groupSpawning = spawnGroup:SpawnInZone(ZONE:New(subRangeConfig.spawnZone),true)
991
+ else
992
+ groupSpawning = spawnGroup:Spawn()
993
+ end
994
+ if (holdFire) then
995
+ groupSpawning:OptionROEHoldFire()
996
+ else
997
+ groupSpawning:OptionROEOpenFire()
998
+ end
999
+ if (engageAirWeapons) then
1000
+ groupSpawning:SetOption(AI.Option.Ground.id.ENGAGE_AIR_WEAPONS, true)
1001
+ end
1002
+ if (activateAI == true or activateAI == false) then
1003
+ groupSpawning:SetAIOnOff(activateAI)
1004
+ end
1005
+ if (redAlert == true or redAlert == false) then
1006
+ if (redAlert == true) then
1007
+ groupSpawning:OptionAlarmStateRed()
1008
+ else
1009
+ groupSpawning:OptionAlarmStateGreen()
1010
+ end
938
1011
  else
939
- groupSpawning:OptionAlarmStateGreen()
1012
+ groupSpawning:OptionAlarmStateAuto()
1013
+ end
1014
+ if (string.find(groupNameToSpawn, "SAM") ~= nil) then
1015
+ sead:UpdateSet(groupNameToSpawn)
1016
+ jtff_log.info(string.format("SEAD for %s", groupNameToSpawn),"RANGE")
940
1017
  end
941
1018
  else
942
- groupSpawning:OptionAlarmStateAuto()
943
- end
944
- if (string.find(groupNameToSpawn, "SAM") ~= nil) then
945
- sead:UpdateSet(groupNameToSpawn)
946
- jtff_log.info(string.format("SEAD for %s", groupNameToSpawn),"RANGE")
1019
+ jtff_log.error(string.format("GROUP to spawn %s not found in mission", groupNameToSpawn),"RANGE")
947
1020
  end
948
- else
949
- jtff_log.error(string.format("GROUP to spawn %s not found in mission", groupNameToSpawn),"RANGE")
950
1021
  end
1022
+ markGroupOnMap({groupsToSpawn, rangeConfig.benefit_coalition})
1023
+ else
1024
+ jtff_log.warn(string.format("No GROUP to spawn in subRange %s settings !",subRangeName),"RANGE")
951
1025
  end
952
1026
 
1027
+
953
1028
  radioCommandSubRange:RemoveSubMenus()
954
1029
  local CommandZoneDetroy = MENU_COALITION_COMMAND:New(rangeConfig.benefit_coalition, "Delete", radioCommandSubRange,
955
1030
  deleteSubRangeUnits, {groupsToSpawn, rangeConfig, subRangeConfig, radioCommandSubRange, true})
@@ -982,7 +1057,6 @@ function SpawnRanges(param)
982
1057
  radioCommandSubRange, giveListOfUnitsAliveInGroup, {groupsToSpawn, rangeConfig.benefit_coalition, 5})
983
1058
  MESSAGE:NewType(string.format("Units in range %s(%s) in place", rangeName, subRangeName), MESSAGE.Type.Information)
984
1059
  :ToCoalition(rangeConfig.benefit_coalition)
985
- markGroupOnMap({groupsToSpawn, rangeConfig.benefit_coalition})
986
1060
  end
987
1061
 
988
1062
  function SpawnFacRangesDelay(param)
@@ -87,7 +87,7 @@ for index, capzoneconfig in ipairs(TrainingCAPConfig) do
87
87
  end
88
88
  end
89
89
  if capzoneconfig.coalitionCAP == coalition.side.RED then
90
- if capzoneconfig.drawzone then
90
+ if ((capzoneconfig.drawzone == true) or false) then
91
91
  objCapZone.objEngageZone:DrawZone(
92
92
  coalition.side.BLUE,
93
93
  {1,0,0},
@@ -98,19 +98,19 @@ for index, capzoneconfig in ipairs(TrainingCAPConfig) do
98
98
  true,
99
99
  nil
100
100
  )
101
+ objCapZone.objEngageZone:GetCoordinate():TextToAll(
102
+ "CAP Training " .. capzoneconfig.name,
103
+ coalition.side.BLUE,
104
+ {1,0,0},
105
+ 1,
106
+ {1,0,0},
107
+ 0,
108
+ 20,
109
+ true
110
+ )
101
111
  end
102
- objCapZone.objEngageZone:GetCoordinate():TextToAll(
103
- "CAP Training " .. capzoneconfig.name,
104
- coalition.side.BLUE,
105
- {1,0,0},
106
- 1,
107
- {1,0,0},
108
- 0,
109
- 20,
110
- true
111
- )
112
112
  else
113
- if capzoneconfig.drawzone then
113
+ if ((capzoneconfig.drawzone == true) or false) then
114
114
  objCapZone.objEngageZone:DrawZone(
115
115
  coalition.side.RED,
116
116
  {1,0,0},
@@ -121,17 +121,17 @@ for index, capzoneconfig in ipairs(TrainingCAPConfig) do
121
121
  true,
122
122
  nil
123
123
  )
124
+ objCapZone.objEngageZone:GetCoordinate():TextToAll(
125
+ "CAP Training " .. capzoneconfig.name,
126
+ coalition.side.RED,
127
+ {1,0,0},
128
+ 1,
129
+ {1,0,0},
130
+ 0,
131
+ 20,
132
+ true
133
+ )
124
134
  end
125
- objCapZone.objEngageZone:GetCoordinate():TextToAll(
126
- "CAP Training " .. capzoneconfig.name,
127
- coalition.side.RED,
128
- {1,0,0},
129
- 1,
130
- {1,0,0},
131
- 0,
132
- 20,
133
- true
134
- )
135
135
  end
136
136
  objCapZone.customconfig = capzoneconfig
137
137
  CAPZoneArray[compteur] = objCapZone
@@ -115,7 +115,7 @@ function startCapWarZone(objCapWarZone)
115
115
  end
116
116
  end
117
117
  if objCapWarZone.customconfig.coalitionCAP == coalition.side.RED then
118
- if objCapWarZone.customconfig.drawzone then
118
+ if ((objCapWarZone.customconfig.drawzone == true) or false) then
119
119
  CapZone:DrawZone(
120
120
  coalition.side.BLUE,
121
121
  {1,0,1},
@@ -126,19 +126,19 @@ function startCapWarZone(objCapWarZone)
126
126
  true,
127
127
  nil
128
128
  )
129
+ CapZone:GetCoordinate():TextToAll(
130
+ "CAP Warzone " .. objCapWarZone.customconfig.name,
131
+ coalition.side.BLUE,
132
+ {1,0,0},
133
+ 1,
134
+ {1,0,0},
135
+ 0,
136
+ 20,
137
+ true
138
+ )
129
139
  end
130
- CapZone:GetCoordinate():TextToAll(
131
- "CAP Warzone " .. objCapWarZone.customconfig.name,
132
- coalition.side.BLUE,
133
- {1,0,0},
134
- 1,
135
- {1,0,0},
136
- 0,
137
- 20,
138
- true
139
- )
140
140
  else
141
- if objCapWarZone.customconfig.drawzone then
141
+ if ((objCapWarZone.customconfig.drawzone == true) or false) then
142
142
  CapZone:DrawZone(
143
143
  coalition.side.RED,
144
144
  {1,0,1},
@@ -149,17 +149,17 @@ function startCapWarZone(objCapWarZone)
149
149
  true,
150
150
  nil
151
151
  )
152
+ CapZone:GetCoordinate():TextToAll(
153
+ "CAP Warzone " .. objCapWarZone.customconfig.name,
154
+ coalition.side.RED,
155
+ {1,0,0},
156
+ 1,
157
+ {1,0,0},
158
+ 0,
159
+ 20,
160
+ true
161
+ )
152
162
  end
153
- CapZone:GetCoordinate():TextToAll(
154
- "CAP Warzone " .. objCapWarZone.customconfig.name,
155
- coalition.side.RED,
156
- {1,0,0},
157
- 1,
158
- {1,0,0},
159
- 0,
160
- 20,
161
- true
162
- )
163
163
  end
164
164
  jtff_log.info(string.format("Assigned Squadron %s to %s patrol Zone...", CAPSquadronName, CapZoneName),"CAP_WAR_ZONE")
165
165
  objCapWarZone.objDispatcher:SetSquadronCap(
@@ -26,7 +26,7 @@ for index, foxzoneconfig in ipairs(FoxRangesConfig) do
26
26
  end
27
27
  end
28
28
  jtff_log.info('Launch zone Polygon created : '.. objFoxZone.objLaunchZone:GetName() ..'...',"FOX_ZONE")
29
- if foxzoneconfig.drawzone then
29
+ if ((foxzoneconfig.drawzone == true) or false) then
30
30
  objFoxZone.objLaunchZone:DrawZone(
31
31
  -1,
32
32
  {1,0,0},
@@ -37,17 +37,17 @@ for index, foxzoneconfig in ipairs(FoxRangesConfig) do
37
37
  true,
38
38
  nil
39
39
  )
40
+ objFoxZone.objLaunchZone:GetCoordinate():TextToAll(
41
+ "Missile trainer " .. foxzoneconfig.name,
42
+ -1,
43
+ {1,0,0},
44
+ 1,
45
+ {1,0,0},
46
+ 0,
47
+ 20,
48
+ true
49
+ )
40
50
  end
41
- objFoxZone.objLaunchZone:GetCoordinate():TextToAll(
42
- "Missile trainer " .. foxzoneconfig.name,
43
- -1,
44
- {1,0,0},
45
- 1,
46
- {1,0,0},
47
- 0,
48
- 20,
49
- true
50
- )
51
51
  if foxzoneconfig.safeZoneGroupName then
52
52
  objFoxZone.objSafeZone = ZONE_POLYGON:New(
53
53
  'FOX_SAFE_ZONE_'..foxzoneconfig.name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jtff/miztemplate-lib",
3
- "version": "3.7.5",
3
+ "version": "3.7.7",
4
4
  "description": "JTFF mission template library",
5
5
  "main": "index.js",
6
6
  "files": [