mirror of
https://github.com/akaAgar/the-universal-mission-for-dcs-world.git
synced 2025-11-25 19:31:01 +00:00
Initial commit
This commit is contained in:
153
Script/Script.lua
Normal file
153
Script/Script.lua
Normal file
@@ -0,0 +1,153 @@
|
||||
env.setErrorMessageBoxEnabled(true) -- Enable messageboxes for Lua errors
|
||||
|
||||
DCSEx = {}
|
||||
Library = {}
|
||||
TUM = {}
|
||||
|
||||
TUM.VERSION_NUMBER = 1
|
||||
TUM.VERSION_STRING = "0.1.250722"
|
||||
|
||||
TUM.DEBUG_MODE = __DEBUG_MODE__
|
||||
|
||||
TUM.logLevel = {
|
||||
INFO = 0,
|
||||
WARNING = 1,
|
||||
ERROR = 2
|
||||
}
|
||||
|
||||
-------------------------------------
|
||||
-- Prints and logs a debug message
|
||||
-- @param message The message
|
||||
-- @param logLevel Is it a warning, error or info messages (as defined in TUM.logLevel). Info messages are not printed out unless debug mode is enabled.
|
||||
-------------------------------------
|
||||
function TUM.log(message, logLevel)
|
||||
logLevel = logLevel or TUM.logLevel.INFO
|
||||
|
||||
if logLevel == TUM.logLevel.ERROR then
|
||||
trigger.action.outText("ERROR: "..message, 3600)
|
||||
env.warning("TUM - ERROR: "..message, false)
|
||||
elseif logLevel == TUM.logLevel.WARNING then
|
||||
trigger.action.outText("WARNING: "..message, 10)
|
||||
env.warning("TUM - WARNING: "..message, false)
|
||||
else
|
||||
if TUM.DEBUG_MODE then -- Info messages are only printed out if debug mode is enabled
|
||||
trigger.action.outText(message, 3)
|
||||
end
|
||||
|
||||
env.info("TUM: "..message, false)
|
||||
end
|
||||
end
|
||||
|
||||
--[[DCS EXTENSIONS]]--
|
||||
|
||||
--[[LIBRARY]]--
|
||||
|
||||
--[[THE UNIVERSAL MISSION]]--
|
||||
|
||||
--------------------
|
||||
-- Module startup --
|
||||
--------------------
|
||||
|
||||
do
|
||||
local function startUpMission()
|
||||
TUM.hasStarted = false
|
||||
|
||||
local coreSettings = {
|
||||
multiplayer = false
|
||||
}
|
||||
|
||||
if #DCSEx.envMission.getPlayerGroups() == 0 then
|
||||
TUM.log("No \"Player\" or \"Client\" aircraft slots have been found. Please fix this problem in the mission editor.", TUM.logLevel.ERROR)
|
||||
return nil
|
||||
end
|
||||
|
||||
if world:getPlayer() then
|
||||
coreSettings.multiplayer = false
|
||||
|
||||
if #DCSEx.envMission.getPlayerGroups() > 1 then
|
||||
TUM.log("Multiple players slots have been found in addition to the single-player \"Player\" aircraft. Please fix this problem in the mission editor.", TUM.logLevel.ERROR)
|
||||
return nil
|
||||
end
|
||||
else
|
||||
coreSettings.multiplayer = true
|
||||
|
||||
if #DCSEx.envMission.getPlayerGroups(coalition.side.BLUE) == 0 and #DCSEx.envMission.getPlayerGroups(coalition.side.RED) == 0 then
|
||||
TUM.log("Neither BLUE nor RED coalitions have player slots. Please make sure one coalition has player slots in the mission editor.", TUM.logLevel.ERROR)
|
||||
return nil
|
||||
end
|
||||
|
||||
if #DCSEx.envMission.getPlayerGroups(coalition.side.BLUE) > 0 and #DCSEx.envMission.getPlayerGroups(coalition.side.RED) > 0 then
|
||||
TUM.log("Both coalitions have player slots. The Universal Mission is a purely singleplayer/PvE experience and does not support PvP. Please make sure only one coalition has player slots in the mission editor.", TUM.logLevel.ERROR)
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
if not TUM.territories.onStartUp() then return nil end
|
||||
if not TUM.settings.onStartUp(coreSettings) then return nil end -- Must be called after TUM.territories.onStartUp()
|
||||
if not TUM.playerCareer.onStartUp() then return nil end
|
||||
if not TUM.intermission.onStartUp() then return nil end
|
||||
if not TUM.airForce.onStartUp() then return nil end
|
||||
|
||||
TUM.hasStarted = true
|
||||
|
||||
return coreSettings
|
||||
end
|
||||
|
||||
if not startUpMission() then
|
||||
trigger.action.outText("A critical error has happened, cannot start the mission.", 3600)
|
||||
end
|
||||
end
|
||||
|
||||
-------------------
|
||||
-- Event handler --
|
||||
-------------------
|
||||
do
|
||||
local eventHandler = {}
|
||||
|
||||
function eventHandler:onEvent(event)
|
||||
if not event then return end -- No event
|
||||
|
||||
TUM.ambientRadio.onEvent(event) -- Must be first so other (more important) radio messages with interrupt the "ambient" ones
|
||||
TUM.ambientWorld.onEvent(event)
|
||||
TUM.objectives.onEvent(event)
|
||||
TUM.playerScore.onEvent(event)
|
||||
TUM.mission.onEvent(event)
|
||||
end
|
||||
|
||||
function TUM.onEvent(event)
|
||||
eventHandler:onEvent(event)
|
||||
end
|
||||
|
||||
if TUM.hasStarted then
|
||||
world.addEventHandler(eventHandler)
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------
|
||||
-- Game clock, called every 10-20 seconds --
|
||||
--------------------------------------------
|
||||
do
|
||||
local clockTick = -1
|
||||
|
||||
function TUM.onClockTick(arg, time)
|
||||
local nextTickTime = time + math.random(10, 20)
|
||||
clockTick = clockTick + 1
|
||||
|
||||
if clockTick % 4 == 0 then
|
||||
if TUM.playerScore.onClockTick() then return nextTickTime end
|
||||
if TUM.mission.onClockTick() then return nextTickTime end
|
||||
elseif clockTick % 4 == 1 then
|
||||
if TUM.airForce.onClockTick(TUM.settings.getPlayerCoalition()) then return nextTickTime end
|
||||
elseif clockTick % 4 == 2 then
|
||||
if TUM.supportAWACS.onClockTick() then return nextTickTime end
|
||||
else
|
||||
if TUM.airForce.onClockTick(TUM.settings.getEnemyCoalition()) then return nextTickTime end
|
||||
end
|
||||
|
||||
return nextTickTime
|
||||
end
|
||||
|
||||
if TUM.hasStarted then
|
||||
timer.scheduleFunction(TUM.onClockTick, nil, timer.getTime() + math.random(10, 15))
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user