Merge pull request #385 from FlightControl-Master/master-release-prep
Release 2.0!!!! Note that this is the DYNAMIC loading Moose.lua that is published here!!!!
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${system_path:luadocumentor.bat}"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""Moose\Core\*.lua" "Moose\Wrapper\*.lua" "Moose\Actions\*.lua" "Moose\Functional\*.lua" "Moose\Tasking\*.lua" "Moose\Utilities\*.lua" "Moose\AI\*.lua" --dir "${workspace_loc:/Moose_Framework/docs/Documentation} --style ${workspace_loc:/Moose_Framework/docs/Stylesheet/stylesheet.css}"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/Moose_Framework/Moose Development}"/>
|
||||
</launchConfiguration>
|
||||
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="C:\Program Files\lua\5.1\bin\luadocumentor.bat"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""Moose\Core\*.lua" "Moose\Wrapper\*.lua" "Moose\Actions\*.lua" "Moose\Functional\*.lua" "Moose\Tasking\*.lua" "Moose\Utilities\*.lua" "Moose\AI\*.lua" --dir "${project_loc:}/docs/Documentation" --style "${project_loc:}/docs/Stylesheet/stylesheet.css""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc:}/Moose Development"/>
|
||||
</launchConfiguration>
|
||||
@ -3,7 +3,7 @@
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${project_loc:}/Moose Mission Setup\Moose_Create.bat"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""${project_loc:}/Moose Development" "${current_date}" "${project_loc:}/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT" "D""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc:}/Moose Mission Setup"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${system_path:lua.exe}"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""Moose_Create.lua" "D" "${current_date}" "${workspace_loc:/Moose_Framework//Moose Development/Moose}" "${workspace_loc:/Moose_Framework/Moose Mission Setup}""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/Moose_Framework/Moose Mission Setup}"/>
|
||||
</launchConfiguration>
|
||||
@ -3,7 +3,7 @@
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${project_loc:}/Moose Mission Setup\Moose_Create.bat"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""${project_loc:}/Moose Development/Moose" "${current_date}" "${project_loc:}/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT" "S""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc:}/Moose Mission Setup"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${system_path:lua.exe}"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""Moose_Create.lua" "S" "${current_date}" "${workspace_loc:/Moose_Framework//Moose Development/Moose}" "${workspace_loc:/Moose_Framework/Moose Mission Setup}""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/Moose_Framework/Moose Mission Setup}"/>
|
||||
</launchConfiguration>
|
||||
@ -3,7 +3,7 @@
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${project_loc:}/Moose Mission Setup/Moose Mission Update\Moose_Update_Missions.bat"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""${selected_resource_loc}""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc:}/Moose Mission Setup/Moose Mission Update"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/Moose_Framework/Moose Mission Setup/Moose Mission Update/Moose_Update_Missions.bat}"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""${workspace_loc:/Moose_Framework/Moose Test Missions}""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/Moose_Framework/Moose Mission Setup/Moose Mission Update}"/>
|
||||
</launchConfiguration>
|
||||
@ -3,7 +3,7 @@
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${project_loc:}/Moose Mission Setup/Moose Mission Update\Moose_Update_Missions.bat"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""${selected_resource_loc}""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc:}/Moose Mission Setup/Moose Mission Update"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/Moose_Framework/Moose Mission Setup/Moose Mission Update/Moose_Update_Missions.bat}"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="${selected_resource_loc}"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/Moose_Framework/Moose Mission Setup/Moose Mission Update}"/>
|
||||
</launchConfiguration>
|
||||
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${project_loc:}/Moose Mission Setup/Moose Mission Update\Moose_Update_Missions.bat"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""${project_loc:}/Moose Test Missions""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc:}/Moose Mission Setup/Moose Mission Update"/>
|
||||
</launchConfiguration>
|
||||
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${project_loc:}/Moose Mission Setup/Moose Mission Update\Moose_Update_Missions.bat"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""${resource_loc:}""/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc:}/Moose Mission Setup/Moose Mission Update"/>
|
||||
</launchConfiguration>
|
||||
@ -86,7 +86,6 @@
|
||||
|
||||
do -- FSM
|
||||
|
||||
--- FSM class
|
||||
--- @type FSM
|
||||
-- @extends Core.Base#BASE
|
||||
|
||||
@ -1102,7 +1101,7 @@ do -- FSM_TASK
|
||||
--- FSM_TASK class
|
||||
-- @type FSM_TASK
|
||||
-- @field Tasking.Task#TASK Task
|
||||
-- @extends Core.Fsm#FSM
|
||||
-- @extends #FSM
|
||||
|
||||
--- # FSM_TASK, extends @{#FSM}
|
||||
--
|
||||
|
||||
@ -729,7 +729,8 @@ function SCORING:OnEventPlayerLeaveUnit( Event )
|
||||
if Event.IniUnit then
|
||||
local Menu = self:GetState( Event.IniUnit, "ScoringMenu" ) -- Core.Menu#MENU_GROUP
|
||||
if Menu then
|
||||
Menu:Remove()
|
||||
-- TODO: Check if this fixes #281.
|
||||
--Menu:Remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,69 +1,3 @@
|
||||
--- The main include file for the MOOSE system.
|
||||
-- Test of permissions
|
||||
|
||||
--- Core Routines
|
||||
Include.File( "Utilities/Routines" )
|
||||
Include.File( "Utilities/Utils" )
|
||||
|
||||
--- Core Classes
|
||||
Include.File( "Core/Base" )
|
||||
Include.File( "Core/Scheduler" )
|
||||
Include.File( "Core/ScheduleDispatcher")
|
||||
Include.File( "Core/Event" )
|
||||
Include.File( "Core/Menu" )
|
||||
Include.File( "Core/Zone" )
|
||||
Include.File( "Core/Database" )
|
||||
Include.File( "Core/Set" )
|
||||
Include.File( "Core/Point" )
|
||||
Include.File( "Core/Message" )
|
||||
Include.File( "Core/Fsm" )
|
||||
Include.File( "Core/Radio" )
|
||||
|
||||
--- Wrapper Classes
|
||||
Include.File( "Wrapper/Object" )
|
||||
Include.File( "Wrapper/Identifiable" )
|
||||
Include.File( "Wrapper/Positionable" )
|
||||
Include.File( "Wrapper/Controllable" )
|
||||
Include.File( "Wrapper/Group" )
|
||||
Include.File( "Wrapper/Unit" )
|
||||
Include.File( "Wrapper/Client" )
|
||||
Include.File( "Wrapper/Static" )
|
||||
Include.File( "Wrapper/Airbase" )
|
||||
Include.File( "Wrapper/Scenery" )
|
||||
|
||||
--- Functional Classes
|
||||
Include.File( "Functional/Scoring" )
|
||||
Include.File( "Functional/CleanUp" )
|
||||
Include.File( "Functional/Spawn" )
|
||||
Include.File( "Functional/Movement" )
|
||||
Include.File( "Functional/Sead" )
|
||||
Include.File( "Functional/Escort" )
|
||||
Include.File( "Functional/MissileTrainer" )
|
||||
Include.File( "Functional/AirbasePolice" )
|
||||
Include.File( "Functional/Detection" )
|
||||
|
||||
--- AI Classes
|
||||
Include.File( "AI/AI_Balancer" )
|
||||
Include.File( "AI/AI_Patrol" )
|
||||
Include.File( "AI/AI_Cap" )
|
||||
Include.File( "AI/AI_Cas" )
|
||||
Include.File( "AI/AI_Cargo" )
|
||||
|
||||
--- Actions
|
||||
Include.File( "Actions/Act_Assign" )
|
||||
Include.File( "Actions/Act_Route" )
|
||||
Include.File( "Actions/Act_Account" )
|
||||
Include.File( "Actions/Act_Assist" )
|
||||
|
||||
--- Task Handling Classes
|
||||
Include.File( "Tasking/CommandCenter" )
|
||||
Include.File( "Tasking/Mission" )
|
||||
Include.File( "Tasking/Task" )
|
||||
Include.File( "Tasking/DetectionManager" )
|
||||
Include.File( "Tasking/Task_A2G_Dispatcher")
|
||||
Include.File( "Tasking/Task_A2G" )
|
||||
|
||||
|
||||
-- The order of the declarations is important here. Don't touch it.
|
||||
|
||||
--- Declare the event dispatcher based on the EVENT class
|
||||
|
||||
@ -1,9 +1,28 @@
|
||||
--- This module contains the TASK class.
|
||||
--- **Tasking** -- This module contains the TASK class.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- ### Authors: FlightControl - Design and Programming
|
||||
--
|
||||
-- @module Task
|
||||
|
||||
--- @type TASK
|
||||
-- @field Core.Scheduler#SCHEDULER TaskScheduler
|
||||
-- @field Tasking.Mission#MISSION Mission
|
||||
-- @field Core.Set#SET_GROUP SetGroup The Set of Groups assigned to the Task
|
||||
-- @field Core.Fsm#FSM_PROCESS FsmTemplate
|
||||
-- @field Tasking.Mission#MISSION Mission
|
||||
-- @field Tasking.CommandCenter#COMMANDCENTER CommandCenter
|
||||
-- @extends Core.Fsm#FSM_TASK
|
||||
|
||||
---
|
||||
-- # TASK class, extends @{Base#BASE}
|
||||
--
|
||||
-- ## The TASK class implements the methods for task orchestration within MOOSE.
|
||||
--
|
||||
-- 1) @{#TASK} class, extends @{Base#BASE}
|
||||
-- ============================================
|
||||
-- 1.1) The @{#TASK} class implements the methods for task orchestration within MOOSE.
|
||||
-- ----------------------------------------------------------------------------------------
|
||||
-- The class provides a couple of methods to:
|
||||
--
|
||||
-- * @{#TASK.AssignToGroup}():Assign a task to a group (of players).
|
||||
@ -16,8 +35,8 @@
|
||||
-- * @{#TASK.UnAssignFromUnit}(): Unassign the task from a unit.
|
||||
-- * @{#TASK.SetTimeOut}(): Set timer in seconds before task gets cancelled if not assigned.
|
||||
--
|
||||
-- 1.2) Set and enquire task status (beyond the task state machine processing).
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- ## 1.2) Set and enquire task status (beyond the task state machine processing).
|
||||
--
|
||||
-- A task needs to implement as a minimum the following task states:
|
||||
--
|
||||
-- * **Success**: Expresses the successful execution and finalization of the task.
|
||||
@ -35,30 +54,17 @@
|
||||
-- The status of tasks can be set by the methods **State** followed by the task status. An example is `StateAssigned()`.
|
||||
-- The status of tasks can be enquired by the methods **IsState** followed by the task status name. An example is `if IsStateAssigned() then`.
|
||||
--
|
||||
-- 1.3) Add scoring when reaching a certain task status:
|
||||
-- -----------------------------------------------------
|
||||
-- ## 1.3) Add scoring when reaching a certain task status:
|
||||
--
|
||||
-- Upon reaching a certain task status in a task, additional scoring can be given. If the Mission has a scoring system attached, the scores will be added to the mission scoring.
|
||||
-- Use the method @{#TASK.AddScore}() to add scores when a status is reached.
|
||||
--
|
||||
-- 1.4) Task briefing:
|
||||
-- -------------------
|
||||
-- ## 1.4) Task briefing:
|
||||
--
|
||||
-- A task briefing can be given that is shown to the player when he is assigned to the task.
|
||||
--
|
||||
-- ===
|
||||
-- @field #TASK TASK
|
||||
--
|
||||
-- ### Authors: FlightControl - Design and Programming
|
||||
--
|
||||
-- @module Task
|
||||
|
||||
--- The TASK class
|
||||
-- @type TASK
|
||||
-- @field Core.Scheduler#SCHEDULER TaskScheduler
|
||||
-- @field Tasking.Mission#MISSION Mission
|
||||
-- @field Core.Set#SET_GROUP SetGroup The Set of Groups assigned to the Task
|
||||
-- @field Core.Fsm#FSM_PROCESS FsmTemplate
|
||||
-- @field Tasking.Mission#MISSION Mission
|
||||
-- @field Tasking.CommandCenter#COMMANDCENTER CommandCenter
|
||||
-- @extends Core.Fsm#FSM_TASK
|
||||
TASK = {
|
||||
ClassName = "TASK",
|
||||
TaskScheduler = nil,
|
||||
|
||||
@ -368,10 +368,7 @@ do -- TASK_SEAD
|
||||
-- @param Tasking.Mission#MISSION Mission
|
||||
-- @param Set#SET_GROUP SetGroup The set of groups for which the Task can be assigned.
|
||||
-- @param #string TaskName The name of the Task.
|
||||
-- @param Set#SET_UNIT UnitSetTargets
|
||||
-- @param #number TargetDistance The distance to Target when the Player is considered to have "arrived" at the engagement range.
|
||||
-- @param Core.Zone#ZONE_BASE TargetZone The target zone, if known.
|
||||
-- If the TargetZone parameter is specified, the player will be routed to the center of the zone where all the targets are assumed to be.
|
||||
-- @param Set#SET_UNIT TargetSetUnit
|
||||
-- @return #TASK_SEAD self
|
||||
function TASK_SEAD:New( Mission, SetGroup, TaskName, TargetSetUnit )
|
||||
local self = BASE:Inherit( self, TASK_A2G:New( Mission, SetGroup, TaskName, TargetSetUnit, "SEAD" ) ) -- #TASK_SEAD
|
||||
|
||||
@ -1,246 +0,0 @@
|
||||
--- Provides a logging of statistics in a running DCS Mission.
|
||||
-- @script eStatHandler
|
||||
|
||||
|
||||
|
||||
|
||||
--Handler table
|
||||
local eStatHandler = {}
|
||||
local _StatRunID
|
||||
|
||||
--Neccessary tables for string instead of integers
|
||||
SETCoalition =
|
||||
{
|
||||
[1] = "red",
|
||||
[2] = "blue",
|
||||
}
|
||||
|
||||
SETGroupCat =
|
||||
{
|
||||
[1] = "AIRPLANE",
|
||||
[2] = "HELICOPTER",
|
||||
[3] = "GROUND",
|
||||
[4] = "SHIP",
|
||||
[5] = "STRUCTURE",
|
||||
}
|
||||
|
||||
SETWeaponCatName =
|
||||
{
|
||||
[0] = "SHELL",
|
||||
[1] = "MISSILE",
|
||||
[2] = "ROCKET",
|
||||
[3] = "BOMB",
|
||||
}
|
||||
|
||||
wEvent = {
|
||||
"S_EVENT_SHOT",
|
||||
"S_EVENT_HIT",
|
||||
"S_EVENT_TAKEOFF",
|
||||
"S_EVENT_LAND",
|
||||
"S_EVENT_CRASH",
|
||||
"S_EVENT_EJECTION",
|
||||
"S_EVENT_REFUELING",
|
||||
"S_EVENT_DEAD",
|
||||
"S_EVENT_PILOT_DEAD",
|
||||
"S_EVENT_BASE_CAPTURED",
|
||||
"S_EVENT_MISSION_START",
|
||||
"S_EVENT_MISSION_END",
|
||||
"S_EVENT_TOOK_CONTROL",
|
||||
"S_EVENT_REFUELING_STOP",
|
||||
"S_EVENT_BIRTH",
|
||||
"S_EVENT_HUMAN_FAILURE",
|
||||
"S_EVENT_ENGINE_STARTUP",
|
||||
"S_EVENT_ENGINE_SHUTDOWN",
|
||||
"S_EVENT_PLAYER_ENTER_UNIT",
|
||||
"S_EVENT_PLAYER_LEAVE_UNIT",
|
||||
"S_EVENT_PLAYER_COMMENT",
|
||||
"S_EVENT_SHOOTING_START",
|
||||
"S_EVENT_SHOOTING_END",
|
||||
"S_EVENT_MAX",
|
||||
}
|
||||
|
||||
statEventsTable = {}
|
||||
|
||||
|
||||
function SecondsToClock(sSeconds)
|
||||
local nSeconds = sSeconds
|
||||
if nSeconds == 0 then
|
||||
--return nil;
|
||||
return "00:00:00";
|
||||
else
|
||||
nHours = string.format("%02.f", math.floor(nSeconds/3600));
|
||||
nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60)));
|
||||
nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60));
|
||||
return nHours..":"..nMins..":"..nSecs
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function eStatHandler:onEvent(e)
|
||||
local InitID_ = ""
|
||||
local InitName = ""
|
||||
local WorldEvent = wEvent[e.id]
|
||||
local InitCoa = ""
|
||||
local InitGroupCat = ""
|
||||
local InitType = ""
|
||||
local InitPlayer = ""
|
||||
local eWeaponCat = ""
|
||||
local eWeaponName = ""
|
||||
local TargID_ = ""
|
||||
local TargName = ""
|
||||
local TargType = ""
|
||||
local TargPlayer = ""
|
||||
local TargCoa = ""
|
||||
local TargGroupCat = ""
|
||||
|
||||
if e.initiator and Object.getCategory(e.initiator) == Object.Category.UNIT then
|
||||
--Initiator variables
|
||||
local InitGroup = e.initiator:getGroup()
|
||||
InitID_ = e.initiator.id_
|
||||
if e.initiator:getName() then
|
||||
InitName = e.initiator:getName()
|
||||
end
|
||||
if InitGroup:getCoalition() then
|
||||
InitCoa = SETCoalition[InitGroup:getCoalition()]
|
||||
end
|
||||
if InitGroup:getCategory() then
|
||||
InitGroupCat = SETGroupCat[InitGroup:getCategory() + 1]
|
||||
end
|
||||
InitType = e.initiator:getTypeName()
|
||||
|
||||
--Get initiator player name or AI if NIL
|
||||
if e.initiator:getPlayerName() == nil then
|
||||
InitPlayer = "AI"
|
||||
else
|
||||
InitPlayer = e.initiator:getPlayerName()
|
||||
end
|
||||
else
|
||||
if e.initiator then
|
||||
local InitGroup = e.initiator:getGroup()
|
||||
InitID_ = e.initiator.id_
|
||||
if e.initiator:getName() then
|
||||
InitName = e.initiator:getName()
|
||||
end
|
||||
InitCoa = SETCoalition[InitGroup:getCoalition()]
|
||||
InitGroupCat = SETGroupCat[InitGroup:getCategory() + 1]
|
||||
InitType = e.initiator:getTypeName()
|
||||
|
||||
--Get initiator player name or AI if NIL
|
||||
if e.initiator:getPlayerName() == nil then
|
||||
InitPlayer = "AI"
|
||||
else
|
||||
InitPlayer = e.initiator:getPlayerName()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Weapon variables
|
||||
if e.weapon == nil then
|
||||
eWeaponCat = ""
|
||||
eWeaponName = ""
|
||||
else
|
||||
local eWeaponDesc = e.weapon:getDesc()
|
||||
eWeaponCat = SETWeaponCatName[eWeaponDesc.category]
|
||||
eWeaponName = eWeaponDesc.displayName
|
||||
end
|
||||
|
||||
--Target variables
|
||||
if e.target == nil then
|
||||
TargID_ = ""
|
||||
TargName = ""
|
||||
TargType = ""
|
||||
TargPlayer = ""
|
||||
TargCoa = ""
|
||||
TargGroupCat = ""
|
||||
elseif Object.getCategory(e.target) == Object.Category.UNIT then
|
||||
local TargGroup = e.target:getGroup()
|
||||
TargID_ = e.target.id_
|
||||
if e.target:getName() then
|
||||
TargName = e.target:getName()
|
||||
end
|
||||
TargType = e.target:getTypeName()
|
||||
TargCoa = SETCoalition[TargGroup:getCoalition()]
|
||||
TargGroupCat = SETGroupCat[TargGroup:getCategory() + 1]
|
||||
|
||||
--Get target player name or AI if NIL
|
||||
if not e.target:getPlayerName() then
|
||||
TargPlayer = "AI"
|
||||
else
|
||||
TargPlayer = e.target:getPlayerName()
|
||||
end
|
||||
else
|
||||
TargType = e.target:getTypeName()
|
||||
TargID_ = ""
|
||||
TargName = ""
|
||||
TargPlayer = ""
|
||||
TargCoa = ""
|
||||
TargGroupCat = ""
|
||||
end
|
||||
|
||||
--write events to table
|
||||
statEventsTable[#statEventsTable + 1] =
|
||||
{
|
||||
[1] = _StatRunID,
|
||||
[2] = SecondsToClock(timer.getTime()),
|
||||
[3] = WorldEvent,
|
||||
[4] = InitID_,
|
||||
[5] = InitName,
|
||||
[6] = InitCoa,
|
||||
[7] = InitGroupCat,
|
||||
[8] = InitType,
|
||||
[9] = InitPlayer,
|
||||
[10] = eWeaponCat,
|
||||
[11] = eWeaponName,
|
||||
[12] = TargID_,
|
||||
[13] = TargName,
|
||||
[14] = TargCoa,
|
||||
[15] = TargGroupCat,
|
||||
[16] = TargType,
|
||||
[17] = TargPlayer,
|
||||
}
|
||||
env.info( 'Event: ' .. _StatRunID .. '~ ' .. SecondsToClock(timer.getTime()) .. '~ ' .. WorldEvent .. '~ ' .. InitID_ .. '~ ' .. InitName .. '~ ' .. InitCoa .. '~ ' .. InitGroupCat .. '~ ' .. InitType .. '~ ' .. InitPlayer ..
|
||||
'~ ' .. eWeaponCat .. '~ ' .. eWeaponName .. '~ ' .. TargID_ .. '~ ' .. TargName .. '~ ' .. TargCoa .. '~ ' .. TargGroupCat .. '~ ' .. TargType .. '~ ' .. TargPlayer )
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
do
|
||||
|
||||
local StatFile,err
|
||||
|
||||
|
||||
function StatOpen()
|
||||
local fdir = lfs.writedir() .. [[Logs\]] .. "Events_" .. os.date( "%Y-%m-%d_%H-%M-%S" ) .. ".csv"
|
||||
StatFile,err = io.open(fdir,"w+")
|
||||
if not StatFile then
|
||||
local errmsg = 'Error: No Logs folder found in the User\\Saved Games\\DCS\\Logs directory...' .. 'Save_stat . sample: C:\\Users\\youname\\Saved Games\\DCS\\Logs'
|
||||
trigger.action.outText(errmsg, 10)
|
||||
return print(err)
|
||||
end
|
||||
StatFile:write("RunID~Time~Event~Initiator ID~Initiator Name~Initiator Coalition~Initiator Group Category~Initiator Type~Initiator Player~Weapon Category~Weapon Name~Target ID~Target Name~Target Coalition~Target Group Category~Target Type~Target Player\n")
|
||||
|
||||
_StatRunID = os.date("%y-%m-%d_%H-%M-%S")
|
||||
routines.scheduleFunction( StatSave, { }, timer.getTime() + 1, 1)
|
||||
end
|
||||
|
||||
function StatSave()
|
||||
--write statistic information to file
|
||||
for Index, eDetails in ipairs(statEventsTable) do
|
||||
for eInfoName, eInfoData in ipairs(eDetails) do
|
||||
StatFile:write(eInfoData.."~")
|
||||
end
|
||||
StatFile:write("\n")
|
||||
end
|
||||
statEventsTable = {}
|
||||
end
|
||||
|
||||
function StatClose()
|
||||
StatFile:close()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
world.addEventHandler(eStatHandler)
|
||||
StatOpen()
|
||||
|
||||
@ -549,14 +549,22 @@ end
|
||||
--- Returns true if some units of the group are within a @{Zone}.
|
||||
-- @param #GROUP self
|
||||
-- @param Core.Zone#ZONE_BASE Zone The zone to test.
|
||||
-- @return #boolean Returns true if the Group is completely within the @{Zone#ZONE_BASE}
|
||||
-- @return #boolean Returns true if the Group is partially within the @{Zone#ZONE_BASE}
|
||||
function GROUP:IsPartlyInZone( Zone )
|
||||
self:F2( { self.GroupName, Zone } )
|
||||
|
||||
local PartlyInZone = false
|
||||
|
||||
for UnitID, UnitData in pairs( self:GetUnits() ) do
|
||||
local Unit = UnitData -- Wrapper.Unit#UNIT
|
||||
if Zone:IsVec3InZone( Unit:GetVec3() ) then
|
||||
return true
|
||||
PartlyInZone = true
|
||||
else
|
||||
-- So, if there were groups in the zone found, and suddenly one NOT in the zone,
|
||||
-- then the group is partialy in the zone :-)
|
||||
if PartlyInZone == true then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -566,7 +574,7 @@ end
|
||||
--- Returns true if none of the group units of the group are within a @{Zone}.
|
||||
-- @param #GROUP self
|
||||
-- @param Core.Zone#ZONE_BASE Zone The zone to test.
|
||||
-- @return #boolean Returns true if the Group is completely within the @{Zone#ZONE_BASE}
|
||||
-- @return #boolean Returns true if the Group is not within the @{Zone#ZONE_BASE}
|
||||
function GROUP:IsNotInZone( Zone )
|
||||
self:F2( { self.GroupName, Zone } )
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 456 KiB |
|
Before Width: | Height: | Size: 503 KiB |
|
Before Width: | Height: | Size: 602 KiB |
|
Before Width: | Height: | Size: 399 KiB |
|
Before Width: | Height: | Size: 860 KiB |
|
Before Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 389 KiB |
|
Before Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 27 KiB |
@ -1,26 +1,21 @@
|
||||
|
||||
local base = _G
|
||||
|
||||
Include = {}
|
||||
__Moose = {}
|
||||
|
||||
Include.File = function( IncludeFile )
|
||||
if not Include.Files[ IncludeFile ] then
|
||||
Include.Files[IncludeFile] = IncludeFile
|
||||
env.info( "Include:" .. IncludeFile .. " from " .. Include.ProgramPath )
|
||||
local f = assert( base.loadfile( Include.ProgramPath .. IncludeFile .. ".lua" ) )
|
||||
__Moose.Include = function( IncludeFile )
|
||||
if not __Moose.Includes[ IncludeFile ] then
|
||||
__Moose.Includes[IncludeFile] = IncludeFile
|
||||
local f = assert( base.loadfile( __Moose.ProgramPath .. IncludeFile ) )
|
||||
if f == nil then
|
||||
error ("Could not load MOOSE file " .. IncludeFile .. ".lua" )
|
||||
error ("Moose: Could not load Moose file " .. IncludeFile )
|
||||
else
|
||||
env.info( "Include:" .. IncludeFile .. " loaded from " .. Include.ProgramPath )
|
||||
env.info( "Moose: " .. IncludeFile .. " dynamically loaded from " .. __Moose.ProgramPath )
|
||||
return f()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Include.ProgramPath = "Scripts/Moose/"
|
||||
__Moose.ProgramPath = "Scripts/Moose/"
|
||||
|
||||
env.info( "Include.ProgramPath = " .. Include.ProgramPath)
|
||||
|
||||
Include.Files = {}
|
||||
|
||||
Include.File( "Moose" )
|
||||
__Moose.Includes = {}
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
|
||||
BASE:TraceOnOff( true )
|
||||
@ -1,7 +1 @@
|
||||
local base = _G
|
||||
|
||||
Include = {}
|
||||
Include.Files = {}
|
||||
Include.File = function( IncludeFile )
|
||||
end
|
||||
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
|
||||
BASE:TraceOnOff( false )
|
||||
@ -8,16 +8,16 @@ echo Path to Mission Files: %1
|
||||
rem For /R %1 %%G IN (*.miz) do 7z u "%%G" "l10n\DEFAULT\Moose.lua"
|
||||
For /R %1 %%M IN (*.miz) do (
|
||||
echo off
|
||||
cd
|
||||
cd > NUL:
|
||||
echo "Mission: %%M"
|
||||
mkdir Temp
|
||||
cd Temp
|
||||
mkdir l10n
|
||||
mkdir l10n\DEFAULT
|
||||
copy ..\..\Moose.lua l10n\DEFAULT
|
||||
copy "%%~pM%%~nM.lua" l10n\DEFAULT\*.*
|
||||
dir l10n\DEFAULT
|
||||
7z -bb0 u "%%M" "l10n\DEFAULT\*.lua"
|
||||
copy ..\..\Moose.lua l10n\DEFAULT > NUL:
|
||||
copy "%%~pM%%~nM.lua" l10n\DEFAULT\*.* > NUL:
|
||||
rem dir l10n\DEFAULT
|
||||
7z -bb0 u "%%M" "l10n\DEFAULT\*.lua" > NUL:
|
||||
cd ..
|
||||
rmdir /S /Q Temp
|
||||
)
|
||||
56
Moose Mission Setup/Moose.files
Normal file
@ -0,0 +1,56 @@
|
||||
Utilities/Routines.lua
|
||||
Utilities/Utils.lua
|
||||
|
||||
Core/Base.lua
|
||||
Core/Scheduler.lua
|
||||
Core/ScheduleDispatcher.lua
|
||||
Core/Event.lua
|
||||
Core/Menu.lua
|
||||
Core/Zone.lua
|
||||
Core/Database.lua
|
||||
Core/Set.lua
|
||||
Core/Point.lua
|
||||
Core/Message.lua
|
||||
Core/Fsm.lua
|
||||
Core/Radio.lua
|
||||
|
||||
Wrapper/Object.lua
|
||||
Wrapper/Identifiable.lua
|
||||
Wrapper/Positionable.lua
|
||||
Wrapper/Controllable.lua
|
||||
Wrapper/Group.lua
|
||||
Wrapper/Unit.lua
|
||||
Wrapper/Client.lua
|
||||
Wrapper/Static.lua
|
||||
Wrapper/Airbase.lua
|
||||
Wrapper/Scenery.lua
|
||||
|
||||
Functional/Scoring.lua
|
||||
Functional/CleanUp.lua
|
||||
Functional/Spawn.lua
|
||||
Functional/Movement.lua
|
||||
Functional/Sead.lua
|
||||
Functional/Escort.lua
|
||||
Functional/MissileTrainer.lua
|
||||
Functional/AirbasePolice.lua
|
||||
Functional/Detection.lua
|
||||
|
||||
AI/AI_Balancer.lua
|
||||
AI/AI_Patrol.lua
|
||||
AI/AI_Cap.lua
|
||||
AI/AI_Cas.lua
|
||||
AI/AI_Cargo.lua
|
||||
|
||||
Actions/Act_Assign.lua
|
||||
Actions/Act_Route.lua
|
||||
Actions/Act_Account.lua
|
||||
Actions/Act_Assist.lua
|
||||
|
||||
Tasking/CommandCenter.lua
|
||||
Tasking/Mission.lua
|
||||
Tasking/Task.lua
|
||||
Tasking/DetectionManager.lua
|
||||
Tasking/Task_A2G_Dispatcher.lua
|
||||
Tasking/Task_A2G.lua
|
||||
|
||||
Moose.lua
|
||||
@ -1,113 +0,0 @@
|
||||
ECHO OFF
|
||||
|
||||
REM Create Moose.lua File
|
||||
|
||||
ECHO Path to Moose *.lua files: %1
|
||||
ECHO Current Date: %2
|
||||
ECHO Path to Update Missions: %3
|
||||
ECHO Dynamic or Static: %4
|
||||
|
||||
DEL Moose.lua
|
||||
|
||||
IF %4 == D GOTO Dynamic
|
||||
IF %4 == S GOTO Static
|
||||
|
||||
GOTO End
|
||||
|
||||
:Dynamic
|
||||
|
||||
ECHO Dynamic Moose.lua
|
||||
|
||||
REM Create a timestamp with is logged in the DCS.log file.
|
||||
ECHO env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) > Moose.lua
|
||||
ECHO env.info( 'Moose Generation Timestamp: %2' ) >> Moose.lua
|
||||
|
||||
COPY /b Moose.lua + "Moose Create Dynamic\Moose_Dynamic_Loader.lua" Moose.lua
|
||||
COPY /b Moose.lua + "Moose Create Dynamic\Moose_Trace_On.lua" Moose.lua
|
||||
|
||||
GOTO End
|
||||
|
||||
:Static
|
||||
|
||||
ECHO Static Moose.lua
|
||||
|
||||
REM Create a timestamp with is logged in the DCS.log file.
|
||||
ECHO env.info( '*** MOOSE STATIC INCLUDE START *** ' ) > Moose.lua
|
||||
ECHO env.info( 'Moose Generation Timestamp: %2' ) >> Moose.lua
|
||||
|
||||
COPY /b Moose.lua + "Moose Create Static\Moose_Static_Loader.lua" Moose.lua
|
||||
|
||||
|
||||
rem Core Routines
|
||||
COPY /b Moose.lua + %1\Utilities\Routines.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Utilities\Utils.lua Moose.lua
|
||||
|
||||
rem Core Classes
|
||||
COPY /b Moose.lua + %1\Core\Base.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Scheduler.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\ScheduleDispatcher.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Event.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Menu.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Zone.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Database.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Set.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Point.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Message.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Fsm.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Core\Radio.lua Moose.lua
|
||||
|
||||
rem Wrapper Classes
|
||||
COPY /b Moose.lua + %1\Wrapper\Object.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Wrapper\Identifiable.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Wrapper\Positionable.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Wrapper\Controllable.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Wrapper\Group.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Wrapper\Unit.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Wrapper\Client.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Wrapper\Static.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Wrapper\Airbase.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Wrapper\Scenery.lua Moose.lua
|
||||
|
||||
rem Functional Classes
|
||||
COPY /b Moose.lua + %1\Functional\Scoring.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Functional\CleanUp.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Functional\Spawn.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Functional\Movement.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Functional\Sead.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Functional\Escort.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Functional\MissileTrainer.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Functional\AirbasePolice.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Functional\Detection.lua Moose.lua
|
||||
|
||||
rem AI Classes
|
||||
COPY /b Moose.lua + %1\AI\AI_Balancer.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\AI\AI_Patrol.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\AI\AI_Cas.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\AI\AI_Cap.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\AI\AI_Cargo.lua Moose.lua
|
||||
|
||||
|
||||
rem Actions
|
||||
COPY /b Moose.lua + %1\Actions\Act_Assign.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Actions\Act_Route.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Actions\Act_Account.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Actions\Act_Assist.lua Moose.lua
|
||||
|
||||
rem Task Handling Classes
|
||||
COPY /b Moose.lua + %1\Tasking\CommandCenter.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Tasking\Mission.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Tasking\Task.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Tasking\DetectionManager.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Tasking\Task_A2G_Dispatcher.lua Moose.lua
|
||||
COPY /b Moose.lua + %1\Tasking\Task_A2G.lua Moose.lua
|
||||
|
||||
COPY /b Moose.lua + %1\Moose.lua Moose.lua
|
||||
|
||||
COPY /b Moose.lua + "Moose Create Static\Moose_Trace_Off.lua" Moose.lua
|
||||
|
||||
GOTO End
|
||||
|
||||
:End
|
||||
|
||||
ECHO env.info( '*** MOOSE INCLUDE END *** ' ) >> Moose.lua
|
||||
COPY Moose.lua %3
|
||||
78
Moose Mission Setup/Moose_Create.lua
Normal file
@ -0,0 +1,78 @@
|
||||
-- This routine is called from the LDT environment to create the Moose.lua file stub for use in .miz files.
|
||||
|
||||
local MooseDynamicStatic = arg[1]
|
||||
local MooseDate = arg[2]
|
||||
local MooseDevelopmentPath = arg[3]
|
||||
local MooseSetupPath = arg[4]
|
||||
|
||||
print( "Moose (D)ynamic (S)tatic : " .. MooseDynamicStatic )
|
||||
print( "Current Date : " .. MooseDate )
|
||||
print( "Moose development path : " .. MooseDevelopmentPath )
|
||||
print( "Moose setup path : " .. MooseSetupPath )
|
||||
|
||||
local MooseSourcesFilePath = MooseSetupPath .. "/Moose.files"
|
||||
local MooseFilePath = MooseSetupPath .. "/Moose.lua"
|
||||
|
||||
print( "Reading Moose source list : " .. MooseSourcesFilePath )
|
||||
|
||||
local MooseFile = io.open( MooseFilePath, "w" )
|
||||
|
||||
if MooseDynamicStatic == "D" then
|
||||
MooseFile:write( "env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' )\n" )
|
||||
end
|
||||
if MooseDynamicStatic == "S" then
|
||||
MooseFile:write( "env.info( '*** MOOSE STATIC INCLUDE START *** ' )\n" )
|
||||
end
|
||||
|
||||
MooseFile:write( "env.info( 'Moose Generation Timestamp: " .. MooseDate .. "' )\n" )
|
||||
|
||||
local MooseLoaderPath
|
||||
if MooseDynamicStatic == "D" then
|
||||
MooseLoaderPath = MooseSetupPath .. "/Moose Create Dynamic/Moose_Dynamic_Loader.lua"
|
||||
end
|
||||
if MooseDynamicStatic == "S" then
|
||||
MooseLoaderPath = MooseSetupPath .. "/Moose Create Static/Moose_Static_Loader.lua"
|
||||
end
|
||||
|
||||
local MooseLoader = io.open( MooseLoaderPath, "r" )
|
||||
local MooseLoaderText = MooseLoader:read( "*a" )
|
||||
MooseLoader:close()
|
||||
|
||||
MooseFile:write( MooseLoaderText )
|
||||
|
||||
|
||||
local MooseSourcesFile = io.open( MooseSourcesFilePath, "r" )
|
||||
local MooseSource = MooseSourcesFile:read("*l")
|
||||
|
||||
while( MooseSource ) do
|
||||
|
||||
if MooseSource ~= "" then
|
||||
local MooseFilePath = MooseDevelopmentPath .. "/" .. MooseSource
|
||||
if MooseDynamicStatic == "D" then
|
||||
print( "Load dynamic: " .. MooseSource )
|
||||
MooseFile:write( "__Moose.Include( '" .. MooseSource .. "' )\n" )
|
||||
end
|
||||
if MooseDynamicStatic == "S" then
|
||||
print( "Load static: " .. MooseSource )
|
||||
local MooseSourceFile = io.open( MooseFilePath, "r" )
|
||||
local MooseSourceFileText = MooseSourceFile:read( "*a" )
|
||||
MooseSourceFile:close()
|
||||
|
||||
MooseFile:write( MooseSourceFileText )
|
||||
end
|
||||
end
|
||||
|
||||
MooseSource = MooseSourcesFile:read("*l")
|
||||
end
|
||||
|
||||
if MooseDynamicStatic == "D" then
|
||||
MooseFile:write( "BASE:TraceOnOff( true )\n" )
|
||||
end
|
||||
if MooseDynamicStatic == "S" then
|
||||
MooseFile:write( "BASE:TraceOnOff( false )\n" )
|
||||
end
|
||||
|
||||
MooseFile:write( "env.info( '*** MOOSE INCLUDE END *** ' )\n" )
|
||||
|
||||
MooseSourcesFile:close()
|
||||
MooseFile:close()
|
||||
|
Before Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 254 KiB |
@ -1,3 +0,0 @@
|
||||
|
||||
local PlanesClientSet = SET_CLIENT:New():FilterCategories( "plane" ):FilterStart()
|
||||
local AirbasePolice = AIRBASEPOLICE_CAUCASUS:New( PlanesClientSet )
|
||||
@ -1,3 +0,0 @@
|
||||
|
||||
local PlanesClientSet = SET_CLIENT:New():FilterCategories( "plane" ):FilterStart()
|
||||
local AirbasePolice = AIRBASEPOLICE_NEVADA:New( PlanesClientSet )
|
||||
@ -1,10 +0,0 @@
|
||||
|
||||
|
||||
|
||||
|
||||
Clean = CLEANUP:New( 'CLEAN_BATUMI', 180 )
|
||||
|
||||
SpawnRU = SPAWN:New( 'RU Attack Heli Batumi'):InitLimit( 2, 20 ):SpawnScheduled( 2, 0.2 )
|
||||
|
||||
SpawnUS = SPAWN:New( 'US Attack Heli Batumi'):InitLimit( 2, 20 ):SpawnScheduled( 2, 0.2 )
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
---
|
||||
-- Name: AIB-001 - Spawned AI
|
||||
-- Author: FlightControl
|
||||
-- Date Created: 07 Dec 2016
|
||||
--
|
||||
-- # Situation:
|
||||
--
|
||||
-- For the red coalition, 2 client slots are foreseen.
|
||||
-- We test the AI spawning frequency, validating the number of spawned AI,
|
||||
-- matching the amount of players that not have joined the mission.
|
||||
-- When players join, AI should fly to the nearest home base.
|
||||
--
|
||||
-- # Test cases:
|
||||
--
|
||||
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
|
||||
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
|
||||
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
|
||||
|
||||
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||
|
||||
-- Define the SPAWN object for the red AI plane template.
|
||||
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
||||
-- If a blocked plane exists, this red plane will be ReSpawned.
|
||||
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
|
||||
|
||||
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
|
||||
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
|
||||
@ -1,43 +0,0 @@
|
||||
-- Name: AIB-002 - Patrol AI.lua
|
||||
-- Author: FlightControl
|
||||
-- Date Created: 7 December 2016
|
||||
--
|
||||
-- # Situation:
|
||||
--
|
||||
-- For the red coalition, 2 client slots are foreseen.
|
||||
-- For those players that have not joined the mission, red AI is spawned.
|
||||
-- The red AI should start patrolling an area until fuel is empty and return to the home base.
|
||||
--
|
||||
-- # Test cases:
|
||||
--
|
||||
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
|
||||
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
|
||||
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
|
||||
-- 4. Spawned AI should take-off from the airbase, and start patrolling the area around Anapa.
|
||||
-- 5. When the AI is out-of-fuel, it should report it is returning to the home base, and land at Anapa.
|
||||
|
||||
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||
|
||||
-- Define the SPAWN object for the red AI plane template.
|
||||
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
||||
-- If a blocked plane exists, this red plane will be ReSpawned.
|
||||
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
|
||||
|
||||
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
|
||||
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
|
||||
|
||||
local PatrolZones = {}
|
||||
|
||||
function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
|
||||
|
||||
local PatrolZoneGroup = GROUP:FindByName( "PatrolZone" )
|
||||
local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup )
|
||||
|
||||
|
||||
PatrolZones[AIGroup] = AI_PATROL_ZONE:New( PatrolZone, 3000, 6000, 400, 600 )
|
||||
PatrolZones[AIGroup]:ManageFuel( 0.2, 60 )
|
||||
PatrolZones[AIGroup]:SetControllable( AIGroup )
|
||||
PatrolZones[AIGroup]:__Start( 5 )
|
||||
|
||||
end
|
||||
@ -1,24 +0,0 @@
|
||||
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
|
||||
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
|
||||
|
||||
RU_AirbasesSet = SET_AIRBASE:New():FilterCoalitions("red"):FilterStart()
|
||||
RU_AirbasesSet:Flush()
|
||||
RU_AI_Balancer:ReturnToNearestAirbases( 10000, RU_AirbasesSet )
|
||||
|
||||
|
||||
US_PlanesClientSet = SET_CLIENT:New():FilterCountries( "USA" ):FilterCategories( "plane" )
|
||||
US_PlanesSpawn = SPAWN:New( "AI US" ):InitCleanUp( 20 )
|
||||
US_AI_Balancer = AI_BALANCER:New( US_PlanesClientSet, US_PlanesSpawn )
|
||||
|
||||
--RU_AI_Balancer:ReturnToHomeAirbase( 10000 )
|
||||
|
||||
--local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone Blue" )
|
||||
--local PatrolZoneBlue = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup )
|
||||
--local PatrolZoneB = AI_PATROL_ZONE:New( PatrolZoneBlue, 3000, 6000, 900, 1100 ):ManageFuel( 0.2, 180 )
|
||||
--US_AI_Balancer:SetPatrolZone( PatrolZoneB )
|
||||
--
|
||||
--local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone Red" )
|
||||
--local PatrolZoneRed = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup )
|
||||
--local PatrolZoneR = AI_PATROL_ZONE:New( PatrolZoneRed, 3000, 6000, 900, 1100 ):ManageFuel( 0.2, 180 )
|
||||
--RU_AI_Balancer:SetPatrolZone( PatrolZoneR )
|
||||
@ -1,47 +0,0 @@
|
||||
-- Name: AIB-004 - Respawn Test when Destroyed.lua
|
||||
-- Author: FlightControl
|
||||
-- Date Created: 7 January 2017
|
||||
--
|
||||
-- # Situation:
|
||||
--
|
||||
-- For the red coalition, 2 client slots are foreseen.
|
||||
-- For those players that have not joined the mission, red AI is spawned.
|
||||
-- The red AI should start patrolling an area.
|
||||
--
|
||||
-- The blue side has SAMs nearby.
|
||||
-- Once the red AI takes off, the red AI is attacked by the blue SAMs.
|
||||
-- Red AI should be killed and once that happens, a Respawn of the group should happen!
|
||||
-- The Respawn happens through the InitCleanUp() API of SPAWN.
|
||||
--
|
||||
-- # Test cases:
|
||||
--
|
||||
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
|
||||
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
|
||||
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
|
||||
-- 4. Monitor that once a red AI is destroyed, that it ReSpawns...
|
||||
|
||||
|
||||
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||
|
||||
-- Define the SPAWN object for the red AI plane template.
|
||||
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
||||
-- If a blocked plane exists, this red plane will be ReSpawned.
|
||||
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
|
||||
|
||||
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
|
||||
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
|
||||
|
||||
function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
|
||||
|
||||
local PatrolZoneGroup = GROUP:FindByName( "PatrolZone" )
|
||||
local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup )
|
||||
|
||||
|
||||
local Patrol = AI_PATROL_ZONE:New( PatrolZone, 3000, 6000, 400, 600 )
|
||||
Patrol:ManageFuel( 0.2, 60 )
|
||||
Patrol:SetControllable( AIGroup )
|
||||
Patrol:__Start( 5 )
|
||||
|
||||
end
|
||||
|
||||