This commit is contained in:
spencer-ki 2022-02-06 09:26:20 -08:00
parent d2f413a126
commit fc83ebdc1d
16 changed files with 68 additions and 27 deletions

Binary file not shown.

View File

@ -167,6 +167,7 @@ class Window(QMainWindow, Ui_MainWindow):
"slots": self.slot_template_comboBox.currentText(), "slots": self.slot_template_comboBox.currentText(),
"zone_protect_sams": self.zone_sams_checkBox.isChecked(), "zone_protect_sams": self.zone_sams_checkBox.isChecked(),
"zone_farps": self.farp_buttonGroup.checkedButton().objectName(), "zone_farps": self.farp_buttonGroup.checkedButton().objectName(),
"inf_spawn_msgs": self.inf_spawn_voiceovers_checkBox.isChecked(),
} }
os.chdir(self.m.home_dir + '/Generator') os.chdir(self.m.home_dir + '/Generator')
n = ROps.RotorOpsMission() n = ROps.RotorOpsMission()

View File

@ -93,7 +93,7 @@ class Ui_MainWindow(object):
font.setPointSize(12) font.setPointSize(12)
self.blueqty_spinBox.setFont(font) self.blueqty_spinBox.setFont(font)
self.blueqty_spinBox.setMinimum(0) self.blueqty_spinBox.setMinimum(0)
self.blueqty_spinBox.setMaximum(50) self.blueqty_spinBox.setMaximum(8)
self.blueqty_spinBox.setProperty("value", 3) self.blueqty_spinBox.setProperty("value", 3)
self.blueqty_spinBox.setObjectName("blueqty_spinBox") self.blueqty_spinBox.setObjectName("blueqty_spinBox")
self.redqty_spinBox = QtWidgets.QSpinBox(self.centralwidget) self.redqty_spinBox = QtWidgets.QSpinBox(self.centralwidget)
@ -102,7 +102,7 @@ class Ui_MainWindow(object):
font.setPointSize(12) font.setPointSize(12)
self.redqty_spinBox.setFont(font) self.redqty_spinBox.setFont(font)
self.redqty_spinBox.setMinimum(0) self.redqty_spinBox.setMinimum(0)
self.redqty_spinBox.setMaximum(50) self.redqty_spinBox.setMaximum(8)
self.redqty_spinBox.setProperty("value", 2) self.redqty_spinBox.setProperty("value", 2)
self.redqty_spinBox.setObjectName("redqty_spinBox") self.redqty_spinBox.setObjectName("redqty_spinBox")
self.scenario_label_4 = QtWidgets.QLabel(self.centralwidget) self.scenario_label_4 = QtWidgets.QLabel(self.centralwidget)
@ -161,7 +161,7 @@ class Ui_MainWindow(object):
font.setPointSize(12) font.setPointSize(12)
self.inf_spawn_spinBox.setFont(font) self.inf_spawn_spinBox.setFont(font)
self.inf_spawn_spinBox.setMinimum(0) self.inf_spawn_spinBox.setMinimum(0)
self.inf_spawn_spinBox.setMaximum(50) self.inf_spawn_spinBox.setMaximum(20)
self.inf_spawn_spinBox.setProperty("value", 2) self.inf_spawn_spinBox.setProperty("value", 2)
self.inf_spawn_spinBox.setObjectName("inf_spawn_spinBox") self.inf_spawn_spinBox.setObjectName("inf_spawn_spinBox")
self.scenario_label_5 = QtWidgets.QLabel(self.centralwidget) self.scenario_label_5 = QtWidgets.QLabel(self.centralwidget)
@ -216,7 +216,7 @@ class Ui_MainWindow(object):
font.setPointSize(12) font.setPointSize(12)
self.e_attack_helos_spinBox.setFont(font) self.e_attack_helos_spinBox.setFont(font)
self.e_attack_helos_spinBox.setMinimum(0) self.e_attack_helos_spinBox.setMinimum(0)
self.e_attack_helos_spinBox.setMaximum(50) self.e_attack_helos_spinBox.setMaximum(8)
self.e_attack_helos_spinBox.setProperty("value", 2) self.e_attack_helos_spinBox.setProperty("value", 2)
self.e_attack_helos_spinBox.setObjectName("e_attack_helos_spinBox") self.e_attack_helos_spinBox.setObjectName("e_attack_helos_spinBox")
self.scenario_label_7 = QtWidgets.QLabel(self.centralwidget) self.scenario_label_7 = QtWidgets.QLabel(self.centralwidget)
@ -237,7 +237,7 @@ class Ui_MainWindow(object):
font.setPointSize(12) font.setPointSize(12)
self.e_attack_planes_spinBox.setFont(font) self.e_attack_planes_spinBox.setFont(font)
self.e_attack_planes_spinBox.setMinimum(0) self.e_attack_planes_spinBox.setMinimum(0)
self.e_attack_planes_spinBox.setMaximum(50) self.e_attack_planes_spinBox.setMaximum(8)
self.e_attack_planes_spinBox.setProperty("value", 1) self.e_attack_planes_spinBox.setProperty("value", 1)
self.e_attack_planes_spinBox.setObjectName("e_attack_planes_spinBox") self.e_attack_planes_spinBox.setObjectName("e_attack_planes_spinBox")
self.zone_sams_checkBox = QtWidgets.QCheckBox(self.centralwidget) self.zone_sams_checkBox = QtWidgets.QCheckBox(self.centralwidget)
@ -257,6 +257,7 @@ class Ui_MainWindow(object):
font = QtGui.QFont() font = QtGui.QFont()
font.setPointSize(10) font.setPointSize(10)
self.inf_spawn_voiceovers_checkBox.setFont(font) self.inf_spawn_voiceovers_checkBox.setFont(font)
self.inf_spawn_voiceovers_checkBox.setChecked(True)
self.inf_spawn_voiceovers_checkBox.setObjectName("inf_spawn_voiceovers_checkBox") self.inf_spawn_voiceovers_checkBox.setObjectName("inf_spawn_voiceovers_checkBox")
self.farp_never = QtWidgets.QRadioButton(self.centralwidget) self.farp_never = QtWidgets.QRadioButton(self.centralwidget)
self.farp_never.setGeometry(QtCore.QRect(950, 500, 95, 20)) self.farp_never.setGeometry(QtCore.QRect(950, 500, 95, 20))

View File

@ -255,7 +255,7 @@ p, li { white-space: pre-wrap; }
<number>0</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>50</number> <number>8</number>
</property> </property>
<property name="value"> <property name="value">
<number>3</number> <number>3</number>
@ -282,7 +282,7 @@ p, li { white-space: pre-wrap; }
<number>0</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>50</number> <number>8</number>
</property> </property>
<property name="value"> <property name="value">
<number>2</number> <number>2</number>
@ -471,7 +471,7 @@ p, li { white-space: pre-wrap; }
<number>0</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>50</number> <number>20</number>
</property> </property>
<property name="value"> <property name="value">
<number>2</number> <number>2</number>
@ -647,7 +647,7 @@ p, li { white-space: pre-wrap; }
<number>0</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>50</number> <number>8</number>
</property> </property>
<property name="value"> <property name="value">
<number>2</number> <number>2</number>
@ -710,7 +710,7 @@ p, li { white-space: pre-wrap; }
<number>0</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>50</number> <number>8</number>
</property> </property>
<property name="value"> <property name="value">
<number>1</number> <number>1</number>
@ -775,6 +775,9 @@ p, li { white-space: pre-wrap; }
<property name="text"> <property name="text">
<string>Voiceovers on Infantry Spawn</string> <string>Voiceovers on Infantry Spawn</string>
</property> </property>
<property name="checked">
<bool>true</bool>
</property>
</widget> </widget>
<widget class="QRadioButton" name="farp_never"> <widget class="QRadioButton" name="farp_never">
<property name="geometry"> <property name="geometry">

View File

@ -445,7 +445,7 @@ class RotorOpsMission:
russia, "Enemy Attack Planes", plane["type"], russia, "Enemy Attack Planes", plane["type"],
airport=enemy_airport, airport=enemy_airport,
maintask=dcs.task.CAS, maintask=dcs.task.CAS,
start_type=dcs.mission.StartType.Warm, start_type=dcs.mission.StartType.Cold,
group_size=2) group_size=2)
zone_attack(afg, plane) zone_attack(afg, plane)
@ -471,6 +471,7 @@ class RotorOpsMission:
"RotorOps.force_offroad = " + lb("force_offroad") + "\n\n" + "RotorOps.force_offroad = " + lb("force_offroad") + "\n\n" +
"RotorOps.voice_overs = " + lb("voiceovers") + "\n\n" + "RotorOps.voice_overs = " + lb("voiceovers") + "\n\n" +
"RotorOps.zone_status_display = " + lb("game_display") + "\n\n" + "RotorOps.zone_status_display = " + lb("game_display") + "\n\n" +
"RotorOps.inf_spawn_messages = " + lb("inf_spawn_msgs") + "\n\n" +
"RotorOps.inf_spawns_per_zone = " + lb("inf_spawn_qty") + "\n\n" + "RotorOps.inf_spawns_per_zone = " + lb("inf_spawn_qty") + "\n\n" +
"RotorOps.apcs_spawn_infantry = " + lb("apc_spawns_inf") + " \n\n")))) "RotorOps.apcs_spawn_infantry = " + lb("apc_spawns_inf") + " \n\n"))))
self.m.triggerrules.triggers.append(trig) self.m.triggerrules.triggers.append(trig)

Binary file not shown.

View File

@ -64,7 +64,10 @@ local initial_stage_units
local apcs = {} --table to keep track of infantry vehicles local apcs = {} --table to keep track of infantry vehicles
local low_units_message_fired = false local low_units_message_fired = false
local inf_spawn_zones = {} local inf_spawn_zones = {}
local cooldown = {
["attack_helo_msg"] = 0,
["attack_plane_msg"] = 0,
}
RotorOps.gameMsgs = { RotorOps.gameMsgs = {
@ -171,24 +174,51 @@ local sound_effects = {
["troop_dropoff"] = {'troops_unload_thanks.ogg', 'troops_unload_everybody_off.ogg', 'troops_unload_get_off.ogg', 'troops_unload_here_we_go.ogg', 'troops_unload_moving_out.ogg',}, ["troop_dropoff"] = {'troops_unload_thanks.ogg', 'troops_unload_everybody_off.ogg', 'troops_unload_get_off.ogg', 'troops_unload_here_we_go.ogg', 'troops_unload_moving_out.ogg',},
} }
function RotorOps.eventHandler:onEvent(event)
function RotorOps.getTime()
return timer.getAbsTime() - timer.getTime0() --time since mission started
end
function RotorOps.eventHandler:onEvent(event)
---ENGINE STARTUP EVENTS
if (world.event.S_EVENT_ENGINE_STARTUP == event.id) then --play some sound files when a player starts engines if (world.event.S_EVENT_ENGINE_STARTUP == event.id) then --play some sound files when a player starts engines
local initaitor = event.initiator:getGroup():getID() local initiator = event.initiator:getGroup():getID()
if RotorOps.defending then
trigger.action.outSoundForGroup(initaitor , RotorOps.gameMsgs.enemy_pushing[RotorOps.active_zone_index + 1][2]) if #event.initiator:getGroup():getUnits() == 1 then --if there are no other units in the player flight group (preventing duplicated messages for ai wingman flights)
else if RotorOps.defending then
trigger.action.outSoundForGroup(initaitor , RotorOps.gameMsgs.push[RotorOps.active_zone_index + 1][2]) trigger.action.outSoundForGroup(initiator , RotorOps.gameMsgs.enemy_pushing[RotorOps.active_zone_index + 1][2])
else
trigger.action.outSoundForGroup(initiator , RotorOps.gameMsgs.push[RotorOps.active_zone_index + 1][2])
end
end end
end end
---TAKEOFF EVENTS
if (world.event.S_EVENT_TAKEOFF == event.id) then if (world.event.S_EVENT_TAKEOFF == event.id) then
local initiator_name = event.initiator:getGroup() local initiator_name = event.initiator:getGroup():getName()
if initiator_name == "Enemy Attack Helicopters" then
RotorOps.gameMsg(RotorOps.gameMsgs.attack_helos) if (initiator_name == "Enemy Attack Helicopters") then
elseif initiator_name == "Enemy Attack Planes" then --we use flights of two aircraft which triggers two events, but we only want to use one event so we use a cooldown timer
RotorOps.gameMsg(RotorOps.gameMsgs.attack_planes) if ((RotorOps.getTime() - cooldown["attack_helo_msg"]) > 90) then
RotorOps.gameMsg(RotorOps.gameMsgs.attack_helos)
cooldown["attack_helo_msg"] = RotorOps.getTime()
else
env.warning("RotorOps attack helo message skipped")
end
end end
if initiator_name == "Enemy Attack Planes" then
if ((RotorOps.getTime() - cooldown["attack_plane_msg"]) > 90) then
RotorOps.gameMsg(RotorOps.gameMsgs.attack_planes)
cooldown["attack_plane_msg"] = RotorOps.getTime()
else
env.warning("RotorOps attack plane message skipped")
end
end
end end
end end
@ -535,7 +565,12 @@ function RotorOps.chargeEnemy(vars)
if vars.zone then ---mist getUnitsInZones method if vars.zone then ---mist getUnitsInZones method
local units_in_zone = mist.getUnitsInZones(mist.makeUnitTable({'[red][vehicle]'}), {vars.zone}, "spherical") local units_in_zone
if enemy_coal == 1 then
units_in_zone = mist.getUnitsInZones(mist.makeUnitTable({'[red][vehicle]'}), {vars.zone}, "spherical")
elseif enemy_coal == 2 then
units_in_zone = mist.getUnitsInZones(mist.makeUnitTable({'[blue][vehicle]'}), {vars.zone}, "spherical")
end
local closest_dist = 10000 local closest_dist = 10000
local closest_unit local closest_unit
for index, unit in pairs(units_in_zone) do for index, unit in pairs(units_in_zone) do
@ -904,13 +939,13 @@ function RotorOps.assessUnitsInZone(var)
local staged_units_remaining = {} local staged_units_remaining = {}
for index, unit in pairs(RotorOps.staged_units) do for index, unit in pairs(RotorOps.staged_units) do
if unit:isExist() then if unit:isExist() then
staged_units_remaining[#staged_units_remaining] = unit staged_units_remaining[#staged_units_remaining + 1] = unit
end end
end end
local percent_staged_remain = 0 local percent_staged_remain = 0
percent_staged_remain = math.floor((#staged_units_remaining / #RotorOps.staged_units) * 100) percent_staged_remain = math.floor((#staged_units_remaining / #RotorOps.staged_units) * 100)
trigger.action.setUserFlag(RotorOps.staged_units_flag, percent_staged_remain) trigger.action.setUserFlag(RotorOps.staged_units_flag, percent_staged_remain)
debug("Staged units remaining: " + percent_staged_remain + "%") debugMsg("Staged units remaining: "..percent_staged_remain.."%")
--is the game finished? --is the game finished?