mirror of
https://github.com/spencershepard/RotorOps.git
synced 2025-11-10 15:45:30 +00:00
..
This commit is contained in:
parent
d2f413a126
commit
fc83ebdc1d
BIN
Generator/Forces/red/RED Armor, Infantry & Artillery (Med).miz
Normal file
BIN
Generator/Forces/red/RED Armor, Infantry & Artillery (Med).miz
Normal file
Binary file not shown.
Binary file not shown.
BIN
Generator/Forces/red/RED Trucks & Infantry (Easy).miz
Normal file
BIN
Generator/Forces/red/RED Trucks & Infantry (Easy).miz
Normal file
Binary file not shown.
@ -167,6 +167,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
"slots": self.slot_template_comboBox.currentText(),
|
||||
"zone_protect_sams": self.zone_sams_checkBox.isChecked(),
|
||||
"zone_farps": self.farp_buttonGroup.checkedButton().objectName(),
|
||||
"inf_spawn_msgs": self.inf_spawn_voiceovers_checkBox.isChecked(),
|
||||
}
|
||||
os.chdir(self.m.home_dir + '/Generator')
|
||||
n = ROps.RotorOpsMission()
|
||||
|
||||
@ -93,7 +93,7 @@ class Ui_MainWindow(object):
|
||||
font.setPointSize(12)
|
||||
self.blueqty_spinBox.setFont(font)
|
||||
self.blueqty_spinBox.setMinimum(0)
|
||||
self.blueqty_spinBox.setMaximum(50)
|
||||
self.blueqty_spinBox.setMaximum(8)
|
||||
self.blueqty_spinBox.setProperty("value", 3)
|
||||
self.blueqty_spinBox.setObjectName("blueqty_spinBox")
|
||||
self.redqty_spinBox = QtWidgets.QSpinBox(self.centralwidget)
|
||||
@ -102,7 +102,7 @@ class Ui_MainWindow(object):
|
||||
font.setPointSize(12)
|
||||
self.redqty_spinBox.setFont(font)
|
||||
self.redqty_spinBox.setMinimum(0)
|
||||
self.redqty_spinBox.setMaximum(50)
|
||||
self.redqty_spinBox.setMaximum(8)
|
||||
self.redqty_spinBox.setProperty("value", 2)
|
||||
self.redqty_spinBox.setObjectName("redqty_spinBox")
|
||||
self.scenario_label_4 = QtWidgets.QLabel(self.centralwidget)
|
||||
@ -161,7 +161,7 @@ class Ui_MainWindow(object):
|
||||
font.setPointSize(12)
|
||||
self.inf_spawn_spinBox.setFont(font)
|
||||
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.setObjectName("inf_spawn_spinBox")
|
||||
self.scenario_label_5 = QtWidgets.QLabel(self.centralwidget)
|
||||
@ -216,7 +216,7 @@ class Ui_MainWindow(object):
|
||||
font.setPointSize(12)
|
||||
self.e_attack_helos_spinBox.setFont(font)
|
||||
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.setObjectName("e_attack_helos_spinBox")
|
||||
self.scenario_label_7 = QtWidgets.QLabel(self.centralwidget)
|
||||
@ -237,7 +237,7 @@ class Ui_MainWindow(object):
|
||||
font.setPointSize(12)
|
||||
self.e_attack_planes_spinBox.setFont(font)
|
||||
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.setObjectName("e_attack_planes_spinBox")
|
||||
self.zone_sams_checkBox = QtWidgets.QCheckBox(self.centralwidget)
|
||||
@ -257,6 +257,7 @@ class Ui_MainWindow(object):
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(10)
|
||||
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.farp_never = QtWidgets.QRadioButton(self.centralwidget)
|
||||
self.farp_never.setGeometry(QtCore.QRect(950, 500, 95, 20))
|
||||
|
||||
@ -255,7 +255,7 @@ p, li { white-space: pre-wrap; }
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>3</number>
|
||||
@ -282,7 +282,7 @@ p, li { white-space: pre-wrap; }
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>2</number>
|
||||
@ -471,7 +471,7 @@ p, li { white-space: pre-wrap; }
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>2</number>
|
||||
@ -647,7 +647,7 @@ p, li { white-space: pre-wrap; }
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>2</number>
|
||||
@ -710,7 +710,7 @@ p, li { white-space: pre-wrap; }
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>1</number>
|
||||
@ -775,6 +775,9 @@ p, li { white-space: pre-wrap; }
|
||||
<property name="text">
|
||||
<string>Voiceovers on Infantry Spawn</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QRadioButton" name="farp_never">
|
||||
<property name="geometry">
|
||||
|
||||
@ -445,7 +445,7 @@ class RotorOpsMission:
|
||||
russia, "Enemy Attack Planes", plane["type"],
|
||||
airport=enemy_airport,
|
||||
maintask=dcs.task.CAS,
|
||||
start_type=dcs.mission.StartType.Warm,
|
||||
start_type=dcs.mission.StartType.Cold,
|
||||
group_size=2)
|
||||
zone_attack(afg, plane)
|
||||
|
||||
@ -471,6 +471,7 @@ class RotorOpsMission:
|
||||
"RotorOps.force_offroad = " + lb("force_offroad") + "\n\n" +
|
||||
"RotorOps.voice_overs = " + lb("voiceovers") + "\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.apcs_spawn_infantry = " + lb("apc_spawns_inf") + " \n\n"))))
|
||||
self.m.triggerrules.triggers.append(trig)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
67
RotorOps.lua
67
RotorOps.lua
@ -64,7 +64,10 @@ local initial_stage_units
|
||||
local apcs = {} --table to keep track of infantry vehicles
|
||||
local low_units_message_fired = false
|
||||
local inf_spawn_zones = {}
|
||||
|
||||
local cooldown = {
|
||||
["attack_helo_msg"] = 0,
|
||||
["attack_plane_msg"] = 0,
|
||||
}
|
||||
|
||||
|
||||
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',},
|
||||
}
|
||||
|
||||
function RotorOps.eventHandler:onEvent(event)
|
||||
|
||||
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()
|
||||
if RotorOps.defending then
|
||||
trigger.action.outSoundForGroup(initaitor , RotorOps.gameMsgs.enemy_pushing[RotorOps.active_zone_index + 1][2])
|
||||
else
|
||||
trigger.action.outSoundForGroup(initaitor , RotorOps.gameMsgs.push[RotorOps.active_zone_index + 1][2])
|
||||
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
|
||||
local initiator = event.initiator:getGroup():getID()
|
||||
|
||||
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)
|
||||
if RotorOps.defending then
|
||||
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
|
||||
|
||||
---TAKEOFF EVENTS
|
||||
if (world.event.S_EVENT_TAKEOFF == event.id) then
|
||||
local initiator_name = event.initiator:getGroup()
|
||||
if initiator_name == "Enemy Attack Helicopters" then
|
||||
RotorOps.gameMsg(RotorOps.gameMsgs.attack_helos)
|
||||
elseif initiator_name == "Enemy Attack Planes" then
|
||||
RotorOps.gameMsg(RotorOps.gameMsgs.attack_planes)
|
||||
local initiator_name = event.initiator:getGroup():getName()
|
||||
|
||||
if (initiator_name == "Enemy Attack Helicopters") 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
|
||||
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
|
||||
|
||||
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
|
||||
@ -535,7 +565,12 @@ function RotorOps.chargeEnemy(vars)
|
||||
|
||||
|
||||
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_unit
|
||||
for index, unit in pairs(units_in_zone) do
|
||||
@ -904,13 +939,13 @@ function RotorOps.assessUnitsInZone(var)
|
||||
local staged_units_remaining = {}
|
||||
for index, unit in pairs(RotorOps.staged_units) do
|
||||
if unit:isExist() then
|
||||
staged_units_remaining[#staged_units_remaining] = unit
|
||||
staged_units_remaining[#staged_units_remaining + 1] = unit
|
||||
end
|
||||
end
|
||||
local percent_staged_remain = 0
|
||||
percent_staged_remain = math.floor((#staged_units_remaining / #RotorOps.staged_units) * 100)
|
||||
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?
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user