From 243009704d6af327825d93a175302091035b8eea Mon Sep 17 00:00:00 2001 From: FlightControl Date: Tue, 26 Apr 2016 12:16:54 +0200 Subject: [PATCH 1/6] Database rework. --- Moose/Database.lua | 755 +-------------------------------------------- Moose/Event.lua | 5 - Moose/Moose.lua | 13 + 3 files changed, 24 insertions(+), 749 deletions(-) create mode 100644 Moose/Moose.lua diff --git a/Moose/Database.lua b/Moose/Database.lua index 02fcb30d6..492dfc4e2 100644 --- a/Moose/Database.lua +++ b/Moose/Database.lua @@ -19,7 +19,9 @@ DATABASE = { NavPoints = {}, Statics = {}, Players = {}, - ActivePlayers = {}, + AliveUnits = {}, + DeadUnits = {}, + AlivePlayers = {}, ClientsByName = {}, ClientsByID = {}, } @@ -50,6 +52,14 @@ function DATABASE:New() -- Inherits from BASE local self = BASE:Inherit( self, BASE:New() ) + _EVENTDISPATCHER:OnBirth( self._EventBirth, self ) + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + return self +end + +function DATABASE:ScanEnvironment() + self.Navpoints = {} self.Units = {} --Build routines.db.units and self.Navpoints @@ -110,19 +120,8 @@ function DATABASE:New() end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then end --for coa_name, coa_data in pairs(mission.coalition) do - --self:AddEvent( world.event.S_EVENT_BIRTH, self.OnBirth ) - _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) - _EVENTDISPATCHER:OnHit( self._EventOnHit, self ) - - self.SchedulerId = routines.scheduleFunction( DATABASE._FollowPlayers, { self }, 0, 5 ) - - self:ScoreMenu() - - return self end - --- Instantiate new Groups within the DCSRTE. -- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: -- SpawnCountryID, SpawnCategoryID @@ -174,11 +173,6 @@ function DATABASE:GetStatusGroup( GroupName ) end end - ---- Private --- @section Private - - --- Registers new Group Templates within the DATABASE Object. function DATABASE:_RegisterGroup( GroupTemplate ) @@ -214,731 +208,4 @@ function DATABASE:_RegisterGroup( GroupTemplate ) end ---- Events --- @section Events - - ---- Track DCSRTE DEAD or CRASH events for the internal scoring. --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnDeadOrCrash( Event ) - self:F( { Event } ) - - local TargetUnit = nil - local TargetGroup = nil - local TargetUnitName = "" - local TargetGroupName = "" - local TargetPlayerName = "" - local TargetCoalition = nil - local TargetCategory = nil - local TargetType = nil - local TargetUnitCoalition = nil - local TargetUnitCategory = nil - local TargetUnitType = nil - - if Event.IniDCSUnit then - - TargetUnit = Event.IniDCSUnit - TargetUnitName = Event.IniDCSUnitName - TargetGroup = Event.IniDCSGroup - TargetGroupName = Event.IniDCSGroupName - TargetPlayerName = TargetUnit:getPlayerName() - - TargetCoalition = TargetUnit:getCoalition() - --TargetCategory = TargetUnit:getCategory() - TargetCategory = TargetUnit:getDesc().category -- Workaround - TargetType = TargetUnit:getTypeName() - - TargetUnitCoalition = _DATABASECoalition[TargetCoalition] - TargetUnitCategory = _DATABASECategory[T1argetCategory] - TargetUnitType = TargetType - - self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType } ) - end - - for PlayerName, PlayerData in pairs( self.Players ) do - if PlayerData then -- This should normally not happen, but i'll test it anyway. - self:T( "Something got killed" ) - - -- Some variables - local InitUnitName = PlayerData.UnitName - local InitUnitType = PlayerData.UnitType - local InitCoalition = PlayerData.UnitCoalition - local InitCategory = PlayerData.UnitCategory - local InitUnitCoalition = _DATABASECoalition[InitCoalition] - local InitUnitCategory = _DATABASECategory[InitCategory] - - self:T( { InitUnitName, InitUnitType, InitUnitCoalition, InitCoalition, InitUnitCategory, InitCategory } ) - - -- What is he hitting? - if TargetCategory then - if PlayerData and PlayerData.Hit and PlayerData.Hit[TargetCategory] and PlayerData.Hit[TargetCategory][TargetUnitName] then -- Was there a hit for this unit for this player before registered??? - if not PlayerData.Kill[TargetCategory] then - PlayerData.Kill[TargetCategory] = {} - end - if not PlayerData.Kill[TargetCategory][TargetType] then - PlayerData.Kill[TargetCategory][TargetType] = {} - PlayerData.Kill[TargetCategory][TargetType].Score = 0 - PlayerData.Kill[TargetCategory][TargetType].ScoreKill = 0 - PlayerData.Kill[TargetCategory][TargetType].Penalty = 0 - PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = 0 - end - - if InitCoalition == TargetCoalition then - PlayerData.Penalty = PlayerData.Penalty + 25 - PlayerData.Kill[TargetCategory][TargetType].Penalty = PlayerData.Kill[TargetCategory][TargetType].Penalty + 25 - PlayerData.Kill[TargetCategory][TargetType].PenaltyKill = PlayerData.Kill[TargetCategory][TargetType].PenaltyKill + 1 - MESSAGE:New( "Player '" .. PlayerName .. "' killed a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - PlayerData.Kill[TargetCategory][TargetType].PenaltyKill .. " times. Penalty: -" .. PlayerData.Kill[TargetCategory][TargetType].Penalty .. - ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, - "", 5, "/PENALTY" .. PlayerName .. "/" .. InitUnitName ):ToAll() - self:ScoreAdd( PlayerName, "KILL_PENALTY", 1, -125, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - else - PlayerData.Score = PlayerData.Score + 10 - PlayerData.Kill[TargetCategory][TargetType].Score = PlayerData.Kill[TargetCategory][TargetType].Score + 10 - PlayerData.Kill[TargetCategory][TargetType].ScoreKill = PlayerData.Kill[TargetCategory][TargetType].ScoreKill + 1 - MESSAGE:New( "Player '" .. PlayerName .. "' killed an enemy " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - PlayerData.Kill[TargetCategory][TargetType].ScoreKill .. " times. Score: " .. PlayerData.Kill[TargetCategory][TargetType].Score .. - ". Score Total:" .. PlayerData.Score - PlayerData.Penalty, - "", 5, "/SCORE" .. PlayerName .. "/" .. InitUnitName ):ToAll() - self:ScoreAdd( PlayerName, "KILL_SCORE", 1, 10, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - end - end - end - end - end -end - - ---- Scheduled --- @section Scheduled - - ---- Follows new players entering Clients within the DCSRTE. -function DATABASE:_FollowPlayers() - self:F3( "_FollowPlayers" ) - - local ClientUnit = 0 - local CoalitionsData = { AlivePlayersRed = coalition.getPlayers(coalition.side.RED), AlivePlayersBlue = coalition.getPlayers(coalition.side.BLUE) } - local unitId - local unitData - local AlivePlayerUnits = {} - - for CoalitionId, CoalitionData in pairs( CoalitionsData ) do - self:T3( { "_FollowPlayers", CoalitionData } ) - for UnitId, UnitData in pairs( CoalitionData ) do - self:_AddPlayerFromUnit( UnitData ) - end - end -end - - ---- Private --- @section Private - - ---- Add a new player entering a Unit. -function DATABASE:_AddPlayerFromUnit( UnitData ) - self:F( UnitData ) - - if UnitData:isExist() then - local UnitName = UnitData:getName() - local PlayerName = UnitData:getPlayerName() - local UnitDesc = UnitData:getDesc() - local UnitCategory = UnitDesc.category - local UnitCoalition = UnitData:getCoalition() - local UnitTypeName = UnitData:getTypeName() - - self:T( { PlayerName, UnitName, UnitCategory, UnitCoalition, UnitTypeName } ) - - if self.Players[PlayerName] == nil then -- I believe this is the place where a Player gets a life in a mission when he enters a unit ... - self.Players[PlayerName] = {} - self.Players[PlayerName].Hit = {} - self.Players[PlayerName].Kill = {} - self.Players[PlayerName].Mission = {} - - -- for CategoryID, CategoryName in pairs( DATABASECategory ) do - -- self.Players[PlayerName].Hit[CategoryID] = {} - -- self.Players[PlayerName].Kill[CategoryID] = {} - -- end - self.Players[PlayerName].HitPlayers = {} - self.Players[PlayerName].HitUnits = {} - self.Players[PlayerName].Score = 0 - self.Players[PlayerName].Penalty = 0 - self.Players[PlayerName].PenaltyCoalition = 0 - self.Players[PlayerName].PenaltyWarning = 0 - end - - if not self.Players[PlayerName].UnitCoalition then - self.Players[PlayerName].UnitCoalition = UnitCoalition - else - if self.Players[PlayerName].UnitCoalition ~= UnitCoalition then - self.Players[PlayerName].Penalty = self.Players[PlayerName].Penalty + 50 - self.Players[PlayerName].PenaltyCoalition = self.Players[PlayerName].PenaltyCoalition + 1 - MESSAGE:New( "Player '" .. PlayerName .. "' changed coalition from " .. _DATABASECoalition[self.Players[PlayerName].UnitCoalition] .. " to " .. _DATABASECoalition[UnitCoalition] .. - "(changed " .. self.Players[PlayerName].PenaltyCoalition .. " times the coalition). 50 Penalty points added.", - "", - 2, - "/PENALTYCOALITION" .. PlayerName - ):ToAll() - self:ScoreAdd( PlayerName, "COALITION_PENALTY", 1, -50, self.Players[PlayerName].UnitName, _DATABASECoalition[self.Players[PlayerName].UnitCoalition], _DATABASECategory[self.Players[PlayerName].UnitCategory], self.Players[PlayerName].UnitType, - UnitName, _DATABASECoalition[UnitCoalition], _DATABASECategory[UnitCategory], UnitData:getTypeName() ) - end - end - self.Players[PlayerName].UnitName = UnitName - self.Players[PlayerName].UnitCoalition = UnitCoalition - self.Players[PlayerName].UnitCategory = UnitCategory - self.Players[PlayerName].UnitType = UnitTypeName - - if self.Players[PlayerName].Penalty > 100 then - if self.Players[PlayerName].PenaltyWarning < 1 then - MESSAGE:New( "Player '" .. PlayerName .. "': WARNING! If you continue to commit FRATRICIDE and have a PENALTY score higher than 150, you will be COURT MARTIALED and DISMISSED from this mission! \nYour total penalty is: " .. self.Players[PlayerName].Penalty, - "", - 30, - "/PENALTYCOALITION" .. PlayerName - ):ToAll() - self.Players[PlayerName].PenaltyWarning = self.Players[PlayerName].PenaltyWarning + 1 - end - end - - if self.Players[PlayerName].Penalty > 150 then - ClientGroup = GROUP:NewFromDCSUnit( UnitData ) - ClientGroup:Destroy() - MESSAGE:New( "Player '" .. PlayerName .. "' committed FRATRICIDE, he will be COURT MARTIALED and is DISMISSED from this mission!", - "", - 10, - "/PENALTYCOALITION" .. PlayerName - ):ToAll() - end - - end -end - - ---- Registers Scores the players completing a Mission Task. -function DATABASE:_AddMissionTaskScore( PlayerUnit, MissionName, Score ) - self:F( { PlayerUnit, MissionName, Score } ) - - local PlayerName = PlayerUnit:getPlayerName() - - if not self.Players[PlayerName].Mission[MissionName] then - self.Players[PlayerName].Mission[MissionName] = {} - self.Players[PlayerName].Mission[MissionName].ScoreTask = 0 - self.Players[PlayerName].Mission[MissionName].ScoreMission = 0 - end - - self:T( PlayerName ) - self:T( self.Players[PlayerName].Mission[MissionName] ) - - self.Players[PlayerName].Score = self.Players[PlayerName].Score + Score - self.Players[PlayerName].Mission[MissionName].ScoreTask = self.Players[PlayerName].Mission[MissionName].ScoreTask + Score - - MESSAGE:New( "Player '" .. PlayerName .. "' has finished another Task in Mission '" .. MissionName .. "'. " .. - Score .. " Score points added.", - "", 20, "/SCORETASK" .. PlayerName ):ToAll() - - _Database:ScoreAdd( PlayerName, "TASK_" .. MissionName:gsub( ' ', '_' ), 1, Score, PlayerUnit:getName() ) -end - - ---- Registers Mission Scores for possible multiple players that contributed in the Mission. -function DATABASE:_AddMissionScore( MissionName, Score ) - self:F( { PlayerUnit, MissionName, Score } ) - - for PlayerName, PlayerData in pairs( self.Players ) do - - if PlayerData.Mission[MissionName] then - PlayerData.Score = PlayerData.Score + Score - PlayerData.Mission[MissionName].ScoreMission = PlayerData.Mission[MissionName].ScoreMission + Score - MESSAGE:New( "Player '" .. PlayerName .. "' has finished Mission '" .. MissionName .. "'. " .. - Score .. " Score points added.", - "", 20, "/SCOREMISSION" .. PlayerName ):ToAll() - _Database:ScoreAdd( PlayerName, "MISSION_" .. MissionName:gsub( ' ', '_' ), 1, Score ) - end - end -end - - ---- Events --- @section Events - - ---- Handles the OnHit event for the scoring. --- @param #DATABASE self --- @param Event#EVENTDATA Event -function DATABASE:_EventOnHit( Event ) - self:F( { Event } ) - - local InitUnit = nil - local InitUnitName = "" - local InitGroup = nil - local InitGroupName = "" - local InitPlayerName = "dummy" - - local InitCoalition = nil - local InitCategory = nil - local InitType = nil - local InitUnitCoalition = nil - local InitUnitCategory = nil - local InitUnitType = nil - - local TargetUnit = nil - local TargetUnitName = "" - local TargetGroup = nil - local TargetGroupName = "" - local TargetPlayerName = "" - - local TargetCoalition = nil - local TargetCategory = nil - local TargetType = nil - local TargetUnitCoalition = nil - local TargetUnitCategory = nil - local TargetUnitType = nil - - if Event.IniDCSUnit then - - InitUnit = Event.IniDCSUnit - InitUnitName = Event.IniDCSUnitName - InitGroup = Event.IniDCSGroup - InitGroupName = Event.IniDCSGroupName - InitPlayerName = InitUnit:getPlayerName() - - InitCoalition = InitUnit:getCoalition() - --TODO: Workaround Client DCS Bug - --InitCategory = InitUnit:getCategory() - InitCategory = InitUnit:getDesc().category - InitType = InitUnit:getTypeName() - - InitUnitCoalition = _DATABASECoalition[InitCoalition] - InitUnitCategory = _DATABASECategory[InitCategory] - InitUnitType = InitType - - self:T( { InitUnitName, InitGroupName, InitPlayerName, InitCoalition, InitCategory, InitType , InitUnitCoalition, InitUnitCategory, InitUnitType } ) - end - - - if Event.TgtDCSUnit then - - TargetUnit = Event.TgtDCSUnit - TargetUnitName = Event.TgtDCSUnitName - TargetGroup = Event.TgtDCSGroup - TargetGroupName = Event.TgtDCSGroupName - TargetPlayerName = TargetUnit:getPlayerName() - - TargetCoalition = TargetUnit:getCoalition() - --TODO: Workaround Client DCS Bug - --TargetCategory = TargetUnit:getCategory() - TargetCategory = TargetUnit:getDesc().category - TargetType = TargetUnit:getTypeName() - - TargetUnitCoalition = _DATABASECoalition[TargetCoalition] - TargetUnitCategory = _DATABASECategory[TargetCategory] - TargetUnitType = TargetType - - self:T( { TargetUnitName, TargetGroupName, TargetPlayerName, TargetCoalition, TargetCategory, TargetType, TargetUnitCoalition, TargetUnitCategory, TargetUnitType } ) - end - - if InitPlayerName ~= nil then -- It is a player that is hitting something - self:_AddPlayerFromUnit( InitUnit ) - if self.Players[InitPlayerName] then -- This should normally not happen, but i'll test it anyway. - if TargetPlayerName ~= nil then -- It is a player hitting another player ... - self:_AddPlayerFromUnit( TargetUnit ) - self.Players[InitPlayerName].HitPlayers = self.Players[InitPlayerName].HitPlayers + 1 - end - - self:T( "Hitting Something" ) - -- What is he hitting? - if TargetCategory then - if not self.Players[InitPlayerName].Hit[TargetCategory] then - self.Players[InitPlayerName].Hit[TargetCategory] = {} - end - if not self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] then - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName] = {} - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = 0 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = 0 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = 0 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = 0 - end - local Score = 0 - if InitCoalition == TargetCoalition then - self.Players[InitPlayerName].Penalty = self.Players[InitPlayerName].Penalty + 10 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty + 10 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit + 1 - MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a friendly " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].PenaltyHit .. " times. Penalty: -" .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Penalty .. - ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, - "", - 2, - "/PENALTY" .. InitPlayerName .. "/" .. InitUnitName - ):ToAll() - self:ScoreAdd( InitPlayerName, "HIT_PENALTY", 1, -25, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - else - self.Players[InitPlayerName].Score = self.Players[InitPlayerName].Score + 10 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score + 1 - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit = self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit + 1 - MESSAGE:New( "Player '" .. InitPlayerName .. "' hit a target " .. TargetUnitCategory .. " ( " .. TargetType .. " ) " .. - self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].ScoreHit .. " times. Score: " .. self.Players[InitPlayerName].Hit[TargetCategory][TargetUnitName].Score .. - ". Score Total:" .. self.Players[InitPlayerName].Score - self.Players[InitPlayerName].Penalty, - "", - 2, - "/SCORE" .. InitPlayerName .. "/" .. InitUnitName - ):ToAll() - self:ScoreAdd( InitPlayerName, "HIT_SCORE", 1, 1, InitUnitName, InitUnitCoalition, InitUnitCategory, InitUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - end - end - end - elseif InitPlayerName == nil then -- It is an AI hitting a player??? - - end -end - - -function DATABASE:ReportScoreAll() - - env.info( "Hello World " ) - - local ScoreMessage = "" - local PlayerMessage = "" - - self:T( "Score Report" ) - - for PlayerName, PlayerData in pairs( self.Players ) do - if PlayerData then -- This should normally not happen, but i'll test it anyway. - self:T( "Score Player: " .. PlayerName ) - - -- Some variables - local InitUnitCoalition = _DATABASECoalition[PlayerData.UnitCoalition] - local InitUnitCategory = _DATABASECategory[PlayerData.UnitCategory] - local InitUnitType = PlayerData.UnitType - local InitUnitName = PlayerData.UnitName - - local PlayerScore = 0 - local PlayerPenalty = 0 - - ScoreMessage = ":\n" - - local ScoreMessageHits = "" - - for CategoryID, CategoryName in pairs( _DATABASECategory ) do - self:T( CategoryName ) - if PlayerData.Hit[CategoryID] then - local Score = 0 - local ScoreHit = 0 - local Penalty = 0 - local PenaltyHit = 0 - self:T( "Hit scores exist for player " .. PlayerName ) - for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do - Score = Score + UnitData.Score - ScoreHit = ScoreHit + UnitData.ScoreHit - Penalty = Penalty + UnitData.Penalty - PenaltyHit = UnitData.PenaltyHit - end - local ScoreMessageHit = string.format( "%s:%d ", CategoryName, Score - Penalty ) - self:T( ScoreMessageHit ) - ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageHits ~= "" then - ScoreMessage = ScoreMessage .. " Hits: " .. ScoreMessageHits .. "\n" - end - - local ScoreMessageKills = "" - for CategoryID, CategoryName in pairs( _DATABASECategory ) do - self:T( "Kill scores exist for player " .. PlayerName ) - if PlayerData.Kill[CategoryID] then - local Score = 0 - local ScoreKill = 0 - local Penalty = 0 - local PenaltyKill = 0 - - for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do - Score = Score + UnitData.Score - ScoreKill = ScoreKill + UnitData.ScoreKill - Penalty = Penalty + UnitData.Penalty - PenaltyKill = PenaltyKill + UnitData.PenaltyKill - end - - local ScoreMessageKill = string.format( " %s:%d ", CategoryName, Score - Penalty ) - self:T( ScoreMessageKill ) - ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill - - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageKills ~= "" then - ScoreMessage = ScoreMessage .. " Kills: " .. ScoreMessageKills .. "\n" - end - - local ScoreMessageCoalitionChangePenalties = "" - if PlayerData.PenaltyCoalition ~= 0 then - ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) - PlayerPenalty = PlayerPenalty + PlayerData.Penalty - end - if ScoreMessageCoalitionChangePenalties ~= "" then - ScoreMessage = ScoreMessage .. " Coalition Penalties: " .. ScoreMessageCoalitionChangePenalties .. "\n" - end - - local ScoreMessageMission = "" - local ScoreMission = 0 - local ScoreTask = 0 - for MissionName, MissionData in pairs( PlayerData.Mission ) do - ScoreMission = ScoreMission + MissionData.ScoreMission - ScoreTask = ScoreTask + MissionData.ScoreTask - ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " - end - PlayerScore = PlayerScore + ScoreMission + ScoreTask - - if ScoreMessageMission ~= "" then - ScoreMessage = ScoreMessage .. " Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")\n" - end - - PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score:%d (%d Score -%d Penalties)%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) - end - end - MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() -end - - -function DATABASE:ReportScorePlayer() - - env.info( "Hello World " ) - - local ScoreMessage = "" - local PlayerMessage = "" - - self:T( "Score Report" ) - - for PlayerName, PlayerData in pairs( self.Players ) do - if PlayerData then -- This should normally not happen, but i'll test it anyway. - self:T( "Score Player: " .. PlayerName ) - - -- Some variables - local InitUnitCoalition = _DATABASECoalition[PlayerData.UnitCoalition] - local InitUnitCategory = _DATABASECategory[PlayerData.UnitCategory] - local InitUnitType = PlayerData.UnitType - local InitUnitName = PlayerData.UnitName - - local PlayerScore = 0 - local PlayerPenalty = 0 - - ScoreMessage = "" - - local ScoreMessageHits = "" - - for CategoryID, CategoryName in pairs( _DATABASECategory ) do - self:T( CategoryName ) - if PlayerData.Hit[CategoryID] then - local Score = 0 - local ScoreHit = 0 - local Penalty = 0 - local PenaltyHit = 0 - self:T( "Hit scores exist for player " .. PlayerName ) - for UnitName, UnitData in pairs( PlayerData.Hit[CategoryID] ) do - Score = Score + UnitData.Score - ScoreHit = ScoreHit + UnitData.ScoreHit - Penalty = Penalty + UnitData.Penalty - PenaltyHit = UnitData.PenaltyHit - end - local ScoreMessageHit = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreHit, PenaltyHit ) - self:T( ScoreMessageHit ) - ScoreMessageHits = ScoreMessageHits .. ScoreMessageHit - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageHits = ScoreMessageHits .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageHits ~= "" then - ScoreMessage = ScoreMessage .. "\n Hits: " .. ScoreMessageHits .. " " - end - - local ScoreMessageKills = "" - for CategoryID, CategoryName in pairs( _DATABASECategory ) do - self:T( "Kill scores exist for player " .. PlayerName ) - if PlayerData.Kill[CategoryID] then - local Score = 0 - local ScoreKill = 0 - local Penalty = 0 - local PenaltyKill = 0 - - for UnitName, UnitData in pairs( PlayerData.Kill[CategoryID] ) do - Score = Score + UnitData.Score - ScoreKill = ScoreKill + UnitData.ScoreKill - Penalty = Penalty + UnitData.Penalty - PenaltyKill = PenaltyKill + UnitData.PenaltyKill - end - - local ScoreMessageKill = string.format( "\n %s = %d score(%d;-%d) hits(#%d;#-%d)", CategoryName, Score - Penalty, Score, Penalty, ScoreKill, PenaltyKill ) - self:T( ScoreMessageKill ) - ScoreMessageKills = ScoreMessageKills .. ScoreMessageKill - - PlayerScore = PlayerScore + Score - PlayerPenalty = PlayerPenalty + Penalty - else - --ScoreMessageKills = ScoreMessageKills .. string.format( "%s:%d ", string.format(CategoryName, 1, 1), 0 ) - end - end - if ScoreMessageKills ~= "" then - ScoreMessage = ScoreMessage .. "\n Kills: " .. ScoreMessageKills .. " " - end - - local ScoreMessageCoalitionChangePenalties = "" - if PlayerData.PenaltyCoalition ~= 0 then - ScoreMessageCoalitionChangePenalties = ScoreMessageCoalitionChangePenalties .. string.format( " -%d (%d changed)", PlayerData.Penalty, PlayerData.PenaltyCoalition ) - PlayerPenalty = PlayerPenalty + PlayerData.Penalty - end - if ScoreMessageCoalitionChangePenalties ~= "" then - ScoreMessage = ScoreMessage .. "\n Coalition: " .. ScoreMessageCoalitionChangePenalties .. " " - end - - local ScoreMessageMission = "" - local ScoreMission = 0 - local ScoreTask = 0 - for MissionName, MissionData in pairs( PlayerData.Mission ) do - ScoreMission = ScoreMission + MissionData.ScoreMission - ScoreTask = ScoreTask + MissionData.ScoreTask - ScoreMessageMission = ScoreMessageMission .. "'" .. MissionName .. "'; " - end - PlayerScore = PlayerScore + ScoreMission + ScoreTask - - if ScoreMessageMission ~= "" then - ScoreMessage = ScoreMessage .. "\n Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ") " - end - - PlayerMessage = PlayerMessage .. string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties ):%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, PlayerPenalty, ScoreMessage ) - end - end - MESSAGE:New( PlayerMessage, "Player Scores", 30, "AllPlayerScores"):ToAll() - -end - - -function DATABASE:ScoreMenu() - local ReportScore = SUBMENU:New( 'Scoring' ) - local ReportAllScores = COMMANDMENU:New( 'Score All Active Players', ReportScore, DATABASE.ReportScoreAll, self ) - local ReportPlayerScores = COMMANDMENU:New('Your Current Score', ReportScore, DATABASE.ReportScorePlayer, self ) -end - - - - --- File Logic for tracking the scores - -function DATABASE: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 DATABASE:ScoreOpen() - if lfs then - local fdir = lfs.writedir() .. [[Logs\]] .. "Player_Scores_" .. os.date( "%Y-%m-%d_%H-%M-%S" ) .. ".csv" - self.StatFile, self.err = io.open(fdir,"w+") - if not self.StatFile then - error( "Error: Cannot open 'Player Scores.csv' file in " .. lfs.writedir() ) - end - self.StatFile:write( '"RunID","Time","PlayerName","ScoreType","PlayerUnitCoaltion","PlayerUnitCategory","PlayerUnitType","PlayerUnitName","TargetUnitCoalition","TargetUnitCategory","TargetUnitType","TargetUnitName","Times","Score"\n' ) - - self.RunID = os.date("%y-%m-%d_%H-%M-%S") - end -end - - -function DATABASE:ScoreAdd( PlayerName, ScoreType, ScoreTimes, ScoreAmount, PlayerUnitName, PlayerUnitCoalition, PlayerUnitCategory, PlayerUnitType, TargetUnitName, TargetUnitCoalition, TargetUnitCategory, TargetUnitType ) - --write statistic information to file - local ScoreTime = self:SecondsToClock(timer.getTime()) - PlayerName = PlayerName:gsub( '"', '_' ) - - if PlayerUnitName and PlayerUnitName ~= '' then - local PlayerUnit = Unit.getByName( PlayerUnitName ) - - if PlayerUnit then - if not PlayerUnitCategory then - --PlayerUnitCategory = DATABASECategory[PlayerUnit:getCategory()] - PlayerUnitCategory = _DATABASECategory[PlayerUnit:getDesc().category] - end - - if not PlayerUnitCoalition then - PlayerUnitCoalition = _DATABASECoalition[PlayerUnit:getCoalition()] - end - - if not PlayerUnitType then - PlayerUnitType = PlayerUnit:getTypeName() - end - else - PlayerUnitName = '' - PlayerUnitCategory = '' - PlayerUnitCoalition = '' - PlayerUnitType = '' - end - else - PlayerUnitName = '' - PlayerUnitCategory = '' - PlayerUnitCoalition = '' - PlayerUnitType = '' - end - - if not TargetUnitCoalition then - TargetUnitCoalition = '' - end - - if not TargetUnitCategory then - TargetUnitCategory = '' - end - - if not TargetUnitType then - TargetUnitType = '' - end - - if not TargetUnitName then - TargetUnitName = '' - end - - if lfs then - self.StatFile:write( - '"' .. self.RunID .. '"' .. ',' .. - '' .. ScoreTime .. '' .. ',' .. - '"' .. PlayerName .. '"' .. ',' .. - '"' .. ScoreType .. '"' .. ',' .. - '"' .. PlayerUnitCoalition .. '"' .. ',' .. - '"' .. PlayerUnitCategory .. '"' .. ',' .. - '"' .. PlayerUnitType .. '"' .. ',' .. - '"' .. PlayerUnitName .. '"' .. ',' .. - '"' .. TargetUnitCoalition .. '"' .. ',' .. - '"' .. TargetUnitCategory .. '"' .. ',' .. - '"' .. TargetUnitType .. '"' .. ',' .. - '"' .. TargetUnitName .. '"' .. ',' .. - '' .. ScoreTimes .. '' .. ',' .. - '' .. ScoreAmount - ) - - self.StatFile:write( "\n" ) - end -end - - -function LogClose() - if lfs then - self.StatFile:close() - end -end - -_Database = DATABASE:New() -- Database#DATABASE -_Database:ScoreOpen() - diff --git a/Moose/Event.lua b/Moose/Event.lua index a51ec4a88..a18d4d22b 100644 --- a/Moose/Event.lua +++ b/Moose/Event.lua @@ -482,8 +482,3 @@ function EVENT:onEvent( Event ) end end - - ---- Declare the event dispatcher based on the EVENT class -_EVENTDISPATCHER = EVENT:New() -- #EVENT - diff --git a/Moose/Moose.lua b/Moose/Moose.lua new file mode 100644 index 000000000..796f51990 --- /dev/null +++ b/Moose/Moose.lua @@ -0,0 +1,13 @@ +--- The main include file for the MOOSE system. + +Include.File( "Routines" ) +Include.File( "Database" ) +Include.File( "Base" ) +Include.File( "Event" ) + + +--- Declare the main database object, which is used internally by the MOOSE classes. +_Database = DATABASE:New():ScanEnvironment() -- Database#DATABASE + +--- Declare the event dispatcher based on the EVENT class +_EVENTDISPATCHER = EVENT:New() -- #EVENT \ No newline at end of file From 391408de9bac0027984fbeae00d32d719cdf5cc9 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Tue, 26 Apr 2016 12:54:41 +0200 Subject: [PATCH 2/6] Database filter criteria --- Moose/CleanUp.lua | 2 +- Moose/Client.lua | 4 +-- Moose/Database.lua | 71 ++++++++++++++++++++++++++++++++++++++++++++++ Moose/Group.lua | 6 ++-- Moose/Mission.lua | 4 +-- Moose/Moose.lua | 2 +- Moose/Routines.lua | 3 +- Moose/Sead.lua | 2 +- Moose/Spawn.lua | 12 ++++---- 9 files changed, 89 insertions(+), 17 deletions(-) diff --git a/Moose/CleanUp.lua b/Moose/CleanUp.lua index 1e0c902c5..5b564ca58 100644 --- a/Moose/CleanUp.lua +++ b/Moose/CleanUp.lua @@ -264,7 +264,7 @@ function CLEANUP:_CleanUpScheduler() local CleanUpUnitName = UnitData.CleanUpUnitName if CleanUpUnit then self:T( { "CleanUp Scheduler", "Checking:", CleanUpUnitName } ) - if _Database:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then + if _DATABASE:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then local CleanUpUnitVec3 = CleanUpUnit:getPoint() --self:T( CleanUpUnitVec3 ) local CleanUpUnitVec2 = {} diff --git a/Moose/Client.lua b/Moose/Client.lua index 5cb17fba3..bc444e5c5 100644 --- a/Moose/Client.lua +++ b/Moose/Client.lua @@ -196,12 +196,12 @@ function CLIENT:GetDCSGroup() -- Now we need to resolve the bugs in DCS 1.5 ... -- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil) self:T3( "Bug 1.5 logic" ) - local ClientUnits = _Database.Groups[self.ClientName].Units + local ClientUnits = _DATABASE.Groups[self.ClientName].Units self:T3( { ClientUnits[1].name, env.getValueDictByKey(ClientUnits[1].name) } ) for ClientUnitID, ClientUnitData in pairs( ClientUnits ) do self:T3( { tonumber(UnitData:getID()), ClientUnitData.unitId } ) if tonumber(UnitData:getID()) == ClientUnitData.unitId then - local ClientGroupTemplate = _Database.Groups[self.ClientName].Template + local ClientGroupTemplate = _DATABASE.Groups[self.ClientName].Template self.ClientID = ClientGroupTemplate.groupId self.ClientGroupUnit = UnitData self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" ) diff --git a/Moose/Database.lua b/Moose/Database.lua index 492dfc4e2..31437191d 100644 --- a/Moose/Database.lua +++ b/Moose/Database.lua @@ -24,6 +24,30 @@ DATABASE = { AlivePlayers = {}, ClientsByName = {}, ClientsByID = {}, + Filter = { + Coalition = { + Red = false, + Blue = false, + }, + Category = { + Air = false, + Plane = false, + Helicopter = false, + Ground = false, + Ship = false, + }, + Group = { + Prefix = { + }, + }, + Unit = { + Type = { + }, + Prefix = { + }, + Player = false, + }, + }, } local _DATABASECoalition = @@ -51,13 +75,60 @@ function DATABASE:New() -- Inherits from BASE local self = BASE:Inherit( self, BASE:New() ) + + _EVENTDISPATCHER:OnBirth( self._EventBirth, self ) _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + return self end +function DATABASE:Red() + self.Filter.Coalition.Red = true +end + +function DATABASE:Blue() + self.Filter.Coalition.Blue = true +end + +function DATABASE:GroupPrefixes( Prefixes ) + for PrefixID, PrefixName in pairs( Prefixes ) do + self.Filter.Group.Prefix[#self.Filter.Group.Prefix+1] = PrefixName + end +end + +function DATABASE:Air() + self.Filter.Air = true +end + +function DATABASE:AirPlane() + self.Filter.Plane = true +end + +function DATABASE:Helicopter() + self.Filter.Helicopter = true +end + +function DATABASE:Ground() + self.Filter.Ground = true +end + +function DATABASE:Ship() + self.Filter.Ship = true +end + +function DATABASE:UnitPrefixes( Prefixes ) + for PrefixID, PrefixName in pairs( Prefixes ) do + self.Filter.Group.Prefix[#self.Filter.Unit.Prefix+1] = PrefixName + end +end + +function DATABASE:Filter() + +end + function DATABASE:ScanEnvironment() self.Navpoints = {} diff --git a/Moose/Group.lua b/Moose/Group.lua index 8e4ddc502..c7f9faa4b 100644 --- a/Moose/Group.lua +++ b/Moose/Group.lua @@ -999,7 +999,7 @@ end function GROUP:GetTaskMission() self:F( self.GroupName ) - return routines.utils.deepCopy( _Database.Groups[self.GroupName].Template ) + return routines.utils.deepCopy( _DATABASE.Groups[self.GroupName].Template ) end --- Return the mission route of the group. @@ -1008,7 +1008,7 @@ end function GROUP:GetTaskRoute() self:F( self.GroupName ) - return routines.utils.deepCopy( _Database.Groups[self.GroupName].Template.route.points ) + return routines.utils.deepCopy( _DATABASE.Groups[self.GroupName].Template.route.points ) end --- Return the route of a group by using the @{Database#DATABASE} class. @@ -1032,7 +1032,7 @@ function GROUP:CopyRoute( Begin, End, Randomize, Radius ) self:T( { GroupName } ) - local Template = _Database.Groups[GroupName].Template + local Template = _DATABASE.Groups[GroupName].Template if Template then if not Begin then diff --git a/Moose/Mission.lua b/Moose/Mission.lua index 1c8f713ca..2420ff755 100644 --- a/Moose/Mission.lua +++ b/Moose/Mission.lua @@ -474,7 +474,7 @@ function MISSIONSCHEDULER.Scheduler() if Mission.GoalFunction ~= nil then Mission.GoalFunction( Mission, Client ) end - _Database:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) + _DATABASE:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) -- if not Mission:IsCompleted() then -- end @@ -497,7 +497,7 @@ function MISSIONSCHEDULER.Scheduler() if MissionComplete then Mission:Completed() - _Database:_AddMissionScore( Mission.Name, 100 ) + _DATABASE:_AddMissionScore( Mission.Name, 100 ) else if TaskComplete then -- Reset for new tasking of active client diff --git a/Moose/Moose.lua b/Moose/Moose.lua index 796f51990..2e5b5a762 100644 --- a/Moose/Moose.lua +++ b/Moose/Moose.lua @@ -7,7 +7,7 @@ Include.File( "Event" ) --- Declare the main database object, which is used internally by the MOOSE classes. -_Database = DATABASE:New():ScanEnvironment() -- Database#DATABASE +_DATABASE = DATABASE:New():ScanEnvironment() -- Database#DATABASE --- Declare the event dispatcher based on the EVENT class _EVENTDISPATCHER = EVENT:New() -- #EVENT \ No newline at end of file diff --git a/Moose/Routines.lua b/Moose/Routines.lua index 14f840d55..f91e24e45 100644 --- a/Moose/Routines.lua +++ b/Moose/Routines.lua @@ -1696,7 +1696,7 @@ function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints bu -- refactor to search by groupId and allow groupId and groupName as inputs local gpId = groupIdent if type(groupIdent) == 'string' and not tonumber(groupIdent) then - gpId = _Database.Groups[groupIdent].groupId + gpId = _DATABASE.Groups[groupIdent].groupId end for coa_name, coa_data in pairs(env.mission.coalition) do @@ -1746,6 +1746,7 @@ function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints bu end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then end --for coa_name, coa_data in pairs(mission.coalition) do end + routines.ground.patrolRoute = function(vars) diff --git a/Moose/Sead.lua b/Moose/Sead.lua index f30459de2..d89c47cf0 100644 --- a/Moose/Sead.lua +++ b/Moose/Sead.lua @@ -67,7 +67,7 @@ function SEAD:EventShot( Event ) local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) local _targetMimgroupName = _targetMimgroup:getName() local _targetMimcont= _targetMimgroup:getController() - local _targetskill = _Database.Units[_targetMimname].Template.skill + local _targetskill = _DATABASE.Units[_targetMimname].Template.skill self:T( self.SEADGroupPrefixes ) self:T( _targetMimgroupName ) local SEADGroupFound = false diff --git a/Moose/Spawn.lua b/Moose/Spawn.lua index ad8575e9a..645b69693 100644 --- a/Moose/Spawn.lua +++ b/Moose/Spawn.lua @@ -384,7 +384,7 @@ function SPAWN:Array( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnEngineShutDown, self ) end - self.SpawnGroups[SpawnGroupID].Group = _Database:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) + self.SpawnGroups[SpawnGroupID].Group = _DATABASE:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) SpawnX = SpawnXIndex * SpawnDeltaX SpawnY = SpawnYIndex * SpawnDeltaY @@ -456,7 +456,7 @@ function SPAWN:SpawnWithIndex( SpawnIndex ) _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self ) end - self.SpawnGroups[self.SpawnIndex].Group = _Database:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) -- If there is a SpawnFunction hook defined, call it. if self.SpawnFunctionHook then @@ -464,7 +464,7 @@ function SPAWN:SpawnWithIndex( SpawnIndex ) end -- TODO: Need to fix this by putting an "R" in the name of the group when the group repeats. --if self.SpawnRepeat then - -- _Database:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) + -- _DATABASE:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) --end end @@ -968,7 +968,7 @@ function SPAWN:_GetTemplate( SpawnTemplatePrefix ) local SpawnTemplate = nil - SpawnTemplate = routines.utils.deepCopy( _Database.Groups[SpawnTemplatePrefix].Template ) + SpawnTemplate = routines.utils.deepCopy( _DATABASE.Groups[SpawnTemplatePrefix].Template ) if SpawnTemplate == nil then error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix ) @@ -1125,7 +1125,7 @@ function SPAWN:_GetSpawnIndex( SpawnIndex ) end --- TODO Need to delete this... _Database does this now ... +-- TODO Need to delete this... _DATABASE does this now ... function SPAWN:_OnBirth( event ) if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line @@ -1143,7 +1143,7 @@ function SPAWN:_OnBirth( event ) end --- Obscolete --- @todo Need to delete this... _Database does this now ... +-- @todo Need to delete this... _DATABASE does this now ... function SPAWN:_OnDeadOrCrash( event ) self:F( self.SpawnTemplatePrefix, event ) From 88e0b17741f0ed162fb5592b1ab355db275ce05d Mon Sep 17 00:00:00 2001 From: FlightControl Date: Thu, 28 Apr 2016 13:28:03 +0200 Subject: [PATCH 3/6] Database redesign progress --- Dcs/DCSCoalitionObject.lua | 17 +- Dcs/DCSTypes.lua | 1 + Loaders/MOOSE-Template.miz | Bin 86575 -> 102950 bytes Loaders/Moose_Load_Dynamic.lua | 2 +- Loaders/Moose_Load_Embedded.lua | 2 + Moose/Database.lua | 355 ++++++++++++++---- Moose/Moose.lua | 8 +- .../Moose_Test_DATABASE.lua | 62 +++ 8 files changed, 369 insertions(+), 78 deletions(-) create mode 100644 Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua diff --git a/Dcs/DCSCoalitionObject.lua b/Dcs/DCSCoalitionObject.lua index 14ba57abf..92b201349 100644 --- a/Dcs/DCSCoalitionObject.lua +++ b/Dcs/DCSCoalitionObject.lua @@ -4,14 +4,25 @@ --- @type CoalitionObject -- @extends DCSObject#Object +--- @type coalition +-- @field #coalition.side side + +--- @type coalition.side +-- @field NEUTRAL +-- @field RED +-- @field BLUE + +coalition = {} --#coalition + --- Returns coalition of the object. -- @function [parent=#CoalitionObject] getCoalition --- @param self --- @return #coalition.side +-- @param #CoalitionObject self +-- @return DCSTypes#coalition.side --- Returns object country. -- @function [parent=#CoalitionObject] getCountry --- @param self +-- @param #CoalitionObject self -- @return #country.id + CoalitionObject = {} --#CoalitionObject diff --git a/Dcs/DCSTypes.lua b/Dcs/DCSTypes.lua index ae23eb737..b11d4a87b 100644 --- a/Dcs/DCSTypes.lua +++ b/Dcs/DCSTypes.lua @@ -2,6 +2,7 @@ -- @module DCSTypes + --- Time is given in seconds. -- @type Time -- @extends #number diff --git a/Loaders/MOOSE-Template.miz b/Loaders/MOOSE-Template.miz index 108e949f105d14dc08b0130f795a99079fd5be7d..0590654ecf566cab71909ebbc4b29f4b5257c9ce 100644 GIT binary patch literal 102950 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

  • 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 CD5PZo diff --git a/Loaders/Moose_Load_Dynamic.lua b/Loaders/Moose_Load_Dynamic.lua index 7fb711e0e..aa7f1fd9d 100644 --- a/Loaders/Moose_Load_Dynamic.lua +++ b/Loaders/Moose_Load_Dynamic.lua @@ -38,6 +38,6 @@ env.info( "Include.MissionPath = " .. Include.MissionPath) Include.Files = {} -Include.File( "Database" ) +Include.File( "Moose" ) env.info("Loaded MOOSE Include Engine") \ No newline at end of file diff --git a/Loaders/Moose_Load_Embedded.lua b/Loaders/Moose_Load_Embedded.lua index 350bb9c92..3aa464d98 100644 --- a/Loaders/Moose_Load_Embedded.lua +++ b/Loaders/Moose_Load_Embedded.lua @@ -20,4 +20,6 @@ env.info( "Include.MissionPath = " .. Include.MissionPath) Include.Files = {} +Include.File( "Moose" ) + env.info("Loaded MOOSE Include Engine") diff --git a/Moose/Database.lua b/Moose/Database.lua index 34a313931..de659acd5 100644 --- a/Moose/Database.lua +++ b/Moose/Database.lua @@ -14,38 +14,38 @@ Include.File( "Event" ) -- @extends Base#BASE DATABASE = { ClassName = "DATABASE", + DCSUnits = {}, + DCSUnitsAlive = {}, Units = {}, Groups = {}, + DCSGroups = {}, + DCSGroupsAlive = {}, NavPoints = {}, Statics = {}, Players = {}, - AliveUnits = {}, - DeadUnits = {}, AlivePlayers = {}, ClientsByName = {}, ClientsByID = {}, Filter = { - Coalition = { - Red = false, - Blue = false, + Coalitions = nil, + Categories = nil, + Types = nil, + Countries = nil, + UnitPrefixes = nil, + GroupPrefixes = nil, + }, + FilterMeta = { + Coalitions = { + red = coalition.side.RED, + blue = coalition.side.BLUE, + neutral = coalition.side.NEUTRAL, }, - Category = { - Air = false, - Plane = false, - Helicopter = false, - Ground = false, - Ship = false, - }, - Group = { - Prefix = { - }, - }, - Unit = { - Type = { - }, - Prefix = { - }, - Player = false, + Categories = { + plane = Unit.Category.AIRPLANE, + helicopter = Unit.Category.HELICOPTER, + ground = Unit.Category.GROUND_UNIT, + ship = Unit.Category.SHIP, + structure = Unit.Category.STRUCTURE, }, }, } @@ -66,8 +66,9 @@ local _DATABASECategory = } ---- Creates a new DATABASE Object to administer the Groups defined and alive within the DCSRTE. --- @return DATABASE +--- Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #DATABASE self +-- @return #DATABASE -- @usage -- -- Define a new DATABASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. -- DBObject = DATABASE:New() @@ -76,60 +77,233 @@ function DATABASE:New() -- Inherits from BASE local self = BASE:Inherit( self, BASE:New() ) - - - _EVENTDISPATCHER:OnBirth( self._EventBirth, self ) + _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) return self end -function DATABASE:Red() - self.Filter.Coalition.Red = true -end - -function DATABASE:Blue() - self.Filter.Coalition.Blue = true -end - -function DATABASE:GroupPrefixes( Prefixes ) - for PrefixID, PrefixName in pairs( Prefixes ) do - self.Filter.Group.Prefix[#self.Filter.Group.Prefix+1] = PrefixName +--- Builds a set of units of coalitons. +-- Possible current coalitions are red, blue and neutral. +-- @param #DATABASE self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #DATABASE self +function DATABASE:FilterCoalition( Coalitions ) + if not self.Filter.Coalitions then + self.Filter.Coalitions = {} end -end - -function DATABASE:Air() - self.Filter.Air = true -end - -function DATABASE:AirPlane() - self.Filter.Plane = true -end - -function DATABASE:Helicopter() - self.Filter.Helicopter = true -end - -function DATABASE:Ground() - self.Filter.Ground = true -end - -function DATABASE:Ship() - self.Filter.Ship = true -end - -function DATABASE:UnitPrefixes( Prefixes ) - for PrefixID, PrefixName in pairs( Prefixes ) do - self.Filter.Group.Prefix[#self.Filter.Unit.Prefix+1] = PrefixName + if type( Coalitions ) ~= "table" then + Coalitions = { Coalitions } end + for CoalitionID, Coalition in pairs( Coalitions ) do + self.Filter.Coalitions[Coalition] = Coalition + end + return self end -function DATABASE:Filter() - +--- Builds a set of units out of categories. +-- Possible current categories are plane, helicopter, ground, ship. +-- @param #DATABASE self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #DATABASE self +function DATABASE:FilterCategory( Categories ) + if not self.Filter.Categories then + self.Filter.Categories = {} + end + if type( Categories ) ~= "table" then + Categories = { Categories } + end + for CategoryID, Category in pairs( Categories ) do + self.Filter.Categories[Category] = Category + end + return self end +--- Builds a set of units of defined unit types. +-- Possible current types are those types known within DCS world. +-- @param #DATABASE self +-- @param #string Types Can take those type strings known within DCS world. +-- @return #DATABASE self +function DATABASE:FilterType( Types ) + if not self.Filter.Types then + self.Filter.Types = {} + end + if type( Types ) ~= "table" then + Types = { Types } + end + for TypeID, Type in pairs( Types ) do + self.Filter.Types[Type] = Type + end + return self +end + +--- Builds a set of units of defined countries. +-- Possible current countries are those known within DCS world. +-- @param #DATABASE self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #DATABASE self +function DATABASE:FilterCountries( Countries ) + if not self.Filter.Countries then + self.Filter.Countries = {} + end + if type( Countries ) ~= "table" then + Countries = { Countries } + end + for CountryID, Country in pairs( Countries ) do + self.Filter.Countries[Country] = Country + end + return self +end + +--- Builds a set of units of defined unit prefixes. +-- All the units starting with the given prefixes will be included within the set. +-- @param #DATABASE self +-- @param #string Prefixes The prefix of which the unit name starts with. +-- @return #DATABASE self +function DATABASE:FilterUnitPrefix( Prefixes ) + if not self.Filter.UnitPrefixes then + self.Filter.UnitPrefixes = {} + end + if type( Prefixes ) ~= "table" then + Prefixes = { Prefixes } + end + for PrefixID, Prefix in pairs( Prefixes ) do + self.Filter.UnitPrefixes[Prefix] = Prefix + end + return self +end + +--- Builds a set of units of defined group prefixes. +-- All the units starting with the given group prefixes will be included within the set. +-- @param #DATABASE self +-- @param #string Prefixes The prefix of which the group name where the unit belongs to starts with. +-- @return #DATABASE self +function DATABASE:FilterGroupPrefix( Prefixes ) + if not self.Filter.GroupPrefixes then + self.Filter.GroupPrefixes = {} + end + if type( Prefixes ) ~= "table" then + Prefixes = { Prefixes } + end + for PrefixID, Prefix in pairs( Prefixes ) do + self.Filter.GroupPrefixes[Prefix] = Prefix + end + return self +end + +--- Starts the filtering. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:FilterStart() + + if _DATABASE then + -- OK, we have a _DATABASE + -- Now use the different filters to build the set. + -- We first take ALL of the Units of the _DATABASE. + for UnitRegistrationID, UnitRegistration in pairs( _DATABASE.Units ) do + self:T( UnitRegistration ) + local DCSUnit = Unit.getByName( UnitRegistration.UnitName ) + if self:IsIncludeDCSUnit( DCSUnit ) then + self.DCSUnits[DCSUnit:getName()] = DCSUnit + end + if self:IsAliveDCSUnit( DCSUnit ) then + self.DCSUnitsAlive[DCSUnit:getName()] = DCSUnit + end + end + else + self:E( "There is a structural error in MOOSE. No _DATABASE has been defined! Cannot build this custom DATABASE." ) + end + + return self +end + +--- +-- @param #DATABASE self +-- @param DCSUnit#Unit DCSUnit +-- @return #DATABASE self +function DATABASE:IsIncludeDCSUnit( DCSUnit ) + self:F( DCSUnit ) + local DCSUnitInclude = true + + if self.Filter.Coalitions then + local DCSUnitCoalition = false + for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do + self:T( { "Coalition:", DCSUnit:getCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) + if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == DCSUnit:getCoalition() then + DCSUnitCoalition = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitCoalition + end + + if self.Filter.Categories then + local DCSUnitCategory = false + for CategoryID, CategoryName in pairs( self.Filter.Categories ) do + self:T( { "Category:", DCSUnit:getDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) + if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == DCSUnit:getDesc().category then + DCSUnitCategory = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitCategory + end + + if self.Filter.Types then + local DCSUnitType = false + for TypeID, TypeName in pairs( self.Filter.Types ) do + self:T( { "Type:", DCSUnit:getTypeName(), TypeName } ) + if TypeName == DCSUnit:getTypeName() then + DCSUnitType = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitType + end + + if self.Filter.Countries then + local DCSUnitCountry = false + for CountryID, CountryName in pairs( self.Filter.Countries ) do + self:T( { "Country:", DCSUnit:getCountry(), CountryName } ) + if country.id[CountryName] == DCSUnit:getCountry() then + DCSUnitCountry = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitCountry + end + + if self.Filter.UnitPrefixes then + local DCSUnitPrefix = false + for UnitPrefixId, UnitPrefix in pairs( self.Filter.UnitPrefixes ) do + self:T( { "Unit Prefix:", string.find( DCSUnit:getName(), UnitPrefix, 1 ), UnitPrefix } ) + if string.find( DCSUnit:getName(), UnitPrefix, 1 ) then + DCSUnitPrefix = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitPrefix + end + + self:T( DCSUnitInclude ) + return DCSUnitInclude +end + +--- +-- @param #DATABASE self +-- @param DCSUnit#Unit DCSUnit +-- @return #DATABASE self +function DATABASE:IsAliveDCSUnit( DCSUnit ) + self:F( DCSUnit ) + local DCSUnitAlive = false + if DCSUnit and DCSUnit:isExist() and DCSUnit:isActive() then + if self.DCSUnits[DCSUnit:getName()] then + DCSUnitAlive = true + end + end + self:T( DCSUnitAlive ) + return DCSUnitAlive +end + + function DATABASE:ScanEnvironment() + self:F() self.Navpoints = {} self.Units = {} @@ -137,7 +311,7 @@ function DATABASE:ScanEnvironment() for coa_name, coa_data in pairs(env.mission.coalition) do if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - self.Units[coa_name] = {} + --self.Units[coa_name] = {} ---------------------------------------------- -- build nav points DB @@ -161,8 +335,8 @@ function DATABASE:ScanEnvironment() for cntry_id, cntry_data in pairs(coa_data.country) do local countryName = string.lower(cntry_data.name) - self.Units[coa_name][countryName] = {} - self.Units[coa_name][countryName]["countryId"] = cntry_data.id + --self.Units[coa_name][countryName] = {} + --self.Units[coa_name][countryName]["countryId"] = cntry_data.id if type(cntry_data) == 'table' then --just making sure @@ -174,7 +348,7 @@ function DATABASE:ScanEnvironment() if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - self.Units[coa_name][countryName][category] = {} + --self.Units[coa_name][countryName][category] = {} for group_num, GroupTemplate in pairs(obj_type_data.group) do @@ -199,8 +373,9 @@ end -- SpawnCountryID, SpawnCategoryID -- This method is used by the SPAWN class. function DATABASE:Spawn( SpawnTemplate ) + self:F( SpawnTemplate.name ) - self:T( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID, SpawnTemplate.name } ) + self:T( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) -- Copy the spawn variables of the template in temporary storage, nullify, and restore the spawn variables. local SpawnCoalitionID = SpawnTemplate.SpawnCoalitionID @@ -275,8 +450,46 @@ function DATABASE:_RegisterGroup( GroupTemplate ) self.ClientsByName[UnitTemplateName] = UnitTemplate self.ClientsByID[UnitTemplate.unitId] = UnitTemplate end - self:T( { "Unit", self.Units[UnitTemplateName].UnitName } ) + self:E( { "Unit", self.Units[UnitTemplateName].UnitName } ) end end +--- Handles the OnBirth event for the alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnBirth( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if self:IsIncludeDCSUnit( Event.IniDCSUnit ) then + self.DCSUnits[Event.IniDCSUnitName] = Event.IniDCSUnit + self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit + end + end +end + +--- Handles the OnDead or OnCrash event for alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnDeadOrCrash( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if self.DCSUnitsAlive[Event.IniDCSUnitName] then + self.DCSUnits[Event.IniDCSUnitName] = nil + self.DCSUnitsAlive[Event.IniDCSUnitName] = nil + end + end +end + +--- Traces the current database contents in the log ... (for debug reasons). +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:TraceDatabase() + self:F() + + self:T( { "DCSUnits:", self.DCSUnits } ) + self:T( { "DCSUnitsAlive:", self.DCSUnitsAlive } ) +end + diff --git a/Moose/Moose.lua b/Moose/Moose.lua index 2e5b5a762..b9df585ce 100644 --- a/Moose/Moose.lua +++ b/Moose/Moose.lua @@ -1,13 +1,15 @@ --- The main include file for the MOOSE system. Include.File( "Routines" ) -Include.File( "Database" ) Include.File( "Base" ) +Include.File( "Database" ) Include.File( "Event" ) +-- The order of the declarations is important here. Don't touch it. + +--- Declare the event dispatcher based on the EVENT class +_EVENTDISPATCHER = EVENT:New() -- #EVENT --- Declare the main database object, which is used internally by the MOOSE classes. _DATABASE = DATABASE:New():ScanEnvironment() -- Database#DATABASE ---- Declare the event dispatcher based on the EVENT class -_EVENTDISPATCHER = EVENT:New() -- #EVENT \ No newline at end of file diff --git a/Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua b/Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua new file mode 100644 index 000000000..ddd2fbba8 --- /dev/null +++ b/Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua @@ -0,0 +1,62 @@ +Include.File( 'Database' ) +Include.File( 'Spawn' ) + +DBBluePlanes = DATABASE:New() + :FilterCoalition( "blue" ) + :FilterCategory( "plane" ) + :FilterStart() + +DBRedVehicles = DATABASE:New() + :FilterCoalition( "red" ) + :FilterCategory( "ground" ) + :FilterStart() + +DBShips = DATABASE:New() + :FilterCategory( "ship" ) + :FilterStart() + +DBBelgium = DATABASE:New() + :FilterCategory( "helicopter" ) + :FilterCountries( "BELGIUM" ) + :FilterStart() + +DBNorthKorea = DATABASE:New() + :FilterCountries( "NORTH_KOREA" ) + :FilterStart() + +DBKA50Vinson = DATABASE:New() + :FilterType( { "Ka-50", "VINSON" } ) + :FilterStart() + +DBBluePlanes:TraceDatabase() +DBRedVehicles:TraceDatabase() +DBShips:TraceDatabase() +DBBelgium:TraceDatabase() +DBNorthKorea:TraceDatabase() +DBKA50Vinson:TraceDatabase() + + +SpawnUS_Plane = SPAWN:New( 'Database Spawn Test USA Plane') +GroupUS_Plane = SpawnUS_Plane:Spawn() + +SpawnUS_Vehicle = SPAWN:New( 'Database Spawn Test USA Vehicle') +GroupUS_Vehicle = SpawnUS_Vehicle:Spawn() + +SpawnUS_Ship = SPAWN:New( 'Database Spawn Test USA Ship') +GroupUS_Ship = SpawnUS_Ship:Spawn() + +SpawnRU_Vehicle = SPAWN:New( 'Database Spawn Test RUSSIA Vehicle') +GroupRU_Vehicle = SpawnRU_Vehicle:Spawn() + +SpawnRU_Ship = SPAWN:New( 'Database Spawn Test RUSSIA Ship') +GroupRU_Ship = SpawnRU_Ship:Spawn() + + +--DBBlue:TraceDatabase() +routines.scheduleFunction( DBBluePlanes.TraceDatabase, { DBBluePlanes }, 1 ) +routines.scheduleFunction( DBRedVehicles.TraceDatabase, { DBRedVehicles }, 1 ) +routines.scheduleFunction( DBShips.TraceDatabase, { DBShips }, 1 ) +routines.scheduleFunction( DBBelgium.TraceDatabase, { DBBelgium }, 1 ) +routines.scheduleFunction( DBNorthKorea.TraceDatabase, { DBNorthKorea }, 1 ) +routines.scheduleFunction( DBKA50Vinson.TraceDatabase, { DBKA50Vinson }, 1 ) + From 0990e34fef8c6d01413f5ad1b15ed45a31cfa8f6 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Thu, 28 Apr 2016 19:12:42 +0200 Subject: [PATCH 4/6] Built coroutines for iterators --- Embedded/Moose_Embedded.lua | 349 ++++++++++++++++-- Moose/Database.lua | 66 ++++ .../Moose_Test_DATABASE.lua | 4 + .../Moose_Test_DATABASE.miz | Bin 0 -> 101312 bytes 4 files changed, 388 insertions(+), 31 deletions(-) create mode 100644 Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz diff --git a/Embedded/Moose_Embedded.lua b/Embedded/Moose_Embedded.lua index df0080676..91d90b24f 100644 --- a/Embedded/Moose_Embedded.lua +++ b/Embedded/Moose_Embedded.lua @@ -1697,7 +1697,7 @@ function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints bu -- refactor to search by groupId and allow groupId and groupName as inputs local gpId = groupIdent if type(groupIdent) == 'string' and not tonumber(groupIdent) then - gpId = _Database.Groups[groupIdent].groupId + gpId = _DATABASE.Groups[groupIdent].groupId end for coa_name, coa_data in pairs(env.mission.coalition) do @@ -1747,6 +1747,7 @@ function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints bu end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then end --for coa_name, coa_data in pairs(mission.coalition) do end + routines.ground.patrolRoute = function(vars) @@ -3504,11 +3505,6 @@ function EVENT:onEvent( Event ) end end - - ---- Declare the event dispatcher based on the EVENT class -_EVENTDISPATCHER = EVENT:New() -- #EVENT - --- A GROUP class abstraction of a DCSGroup class. -- The GROUP class will take an abstraction of the DCSGroup class, providing more methods that can be done with a GROUP. -- @module Group @@ -4510,7 +4506,7 @@ end function GROUP:GetTaskMission() self:F( self.GroupName ) - return routines.utils.deepCopy( _Database.Groups[self.GroupName].Template ) + return routines.utils.deepCopy( _DATABASE.Groups[self.GroupName].Template ) end --- Return the mission route of the group. @@ -4519,7 +4515,7 @@ end function GROUP:GetTaskRoute() self:F( self.GroupName ) - return routines.utils.deepCopy( _Database.Groups[self.GroupName].Template.route.points ) + return routines.utils.deepCopy( _DATABASE.Groups[self.GroupName].Template.route.points ) end --- Return the route of a group by using the @{Database#DATABASE} class. @@ -4543,7 +4539,7 @@ function GROUP:CopyRoute( Begin, End, Randomize, Radius ) self:T( { GroupName } ) - local Template = _Database.Groups[GroupName].Template + local Template = _DATABASE.Groups[GroupName].Template if Template then if not Begin then @@ -5257,14 +5253,40 @@ Include.File( "Event" ) -- @extends Base#BASE DATABASE = { ClassName = "DATABASE", + DCSUnits = {}, + DCSUnitsAlive = {}, Units = {}, Groups = {}, + DCSGroups = {}, + DCSGroupsAlive = {}, NavPoints = {}, Statics = {}, Players = {}, - ActivePlayers = {}, + AlivePlayers = {}, ClientsByName = {}, ClientsByID = {}, + Filter = { + Coalitions = nil, + Categories = nil, + Types = nil, + Countries = nil, + UnitPrefixes = nil, + GroupPrefixes = nil, + }, + FilterMeta = { + Coalitions = { + red = coalition.side.RED, + blue = coalition.side.BLUE, + neutral = coalition.side.NEUTRAL, + }, + Categories = { + plane = Unit.Category.AIRPLANE, + helicopter = Unit.Category.HELICOPTER, + ground = Unit.Category.GROUND_UNIT, + ship = Unit.Category.SHIP, + structure = Unit.Category.STRUCTURE, + }, + }, } local _DATABASECoalition = @@ -5283,8 +5305,9 @@ local _DATABASECategory = } ---- Creates a new DATABASE Object to administer the Groups defined and alive within the DCSRTE. --- @return DATABASE +--- Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names. +-- @param #DATABASE self +-- @return #DATABASE -- @usage -- -- Define a new DATABASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE. -- DBObject = DATABASE:New() @@ -5292,6 +5315,234 @@ function DATABASE:New() -- Inherits from BASE local self = BASE:Inherit( self, BASE:New() ) + + _EVENTDISPATCHER:OnBirth( self._EventOnBirth, self ) + _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) + _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) + + return self +end + +--- Builds a set of units of coalitons. +-- Possible current coalitions are red, blue and neutral. +-- @param #DATABASE self +-- @param #string Coalitions Can take the following values: "red", "blue", "neutral". +-- @return #DATABASE self +function DATABASE:FilterCoalition( Coalitions ) + if not self.Filter.Coalitions then + self.Filter.Coalitions = {} + end + if type( Coalitions ) ~= "table" then + Coalitions = { Coalitions } + end + for CoalitionID, Coalition in pairs( Coalitions ) do + self.Filter.Coalitions[Coalition] = Coalition + end + return self +end + +--- Builds a set of units out of categories. +-- Possible current categories are plane, helicopter, ground, ship. +-- @param #DATABASE self +-- @param #string Categories Can take the following values: "plane", "helicopter", "ground", "ship". +-- @return #DATABASE self +function DATABASE:FilterCategory( Categories ) + if not self.Filter.Categories then + self.Filter.Categories = {} + end + if type( Categories ) ~= "table" then + Categories = { Categories } + end + for CategoryID, Category in pairs( Categories ) do + self.Filter.Categories[Category] = Category + end + return self +end + +--- Builds a set of units of defined unit types. +-- Possible current types are those types known within DCS world. +-- @param #DATABASE self +-- @param #string Types Can take those type strings known within DCS world. +-- @return #DATABASE self +function DATABASE:FilterType( Types ) + if not self.Filter.Types then + self.Filter.Types = {} + end + if type( Types ) ~= "table" then + Types = { Types } + end + for TypeID, Type in pairs( Types ) do + self.Filter.Types[Type] = Type + end + return self +end + +--- Builds a set of units of defined countries. +-- Possible current countries are those known within DCS world. +-- @param #DATABASE self +-- @param #string Countries Can take those country strings known within DCS world. +-- @return #DATABASE self +function DATABASE:FilterCountries( Countries ) + if not self.Filter.Countries then + self.Filter.Countries = {} + end + if type( Countries ) ~= "table" then + Countries = { Countries } + end + for CountryID, Country in pairs( Countries ) do + self.Filter.Countries[Country] = Country + end + return self +end + +--- Builds a set of units of defined unit prefixes. +-- All the units starting with the given prefixes will be included within the set. +-- @param #DATABASE self +-- @param #string Prefixes The prefix of which the unit name starts with. +-- @return #DATABASE self +function DATABASE:FilterUnitPrefix( Prefixes ) + if not self.Filter.UnitPrefixes then + self.Filter.UnitPrefixes = {} + end + if type( Prefixes ) ~= "table" then + Prefixes = { Prefixes } + end + for PrefixID, Prefix in pairs( Prefixes ) do + self.Filter.UnitPrefixes[Prefix] = Prefix + end + return self +end + +--- Builds a set of units of defined group prefixes. +-- All the units starting with the given group prefixes will be included within the set. +-- @param #DATABASE self +-- @param #string Prefixes The prefix of which the group name where the unit belongs to starts with. +-- @return #DATABASE self +function DATABASE:FilterGroupPrefix( Prefixes ) + if not self.Filter.GroupPrefixes then + self.Filter.GroupPrefixes = {} + end + if type( Prefixes ) ~= "table" then + Prefixes = { Prefixes } + end + for PrefixID, Prefix in pairs( Prefixes ) do + self.Filter.GroupPrefixes[Prefix] = Prefix + end + return self +end + +--- Starts the filtering. +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:FilterStart() + + if _DATABASE then + -- OK, we have a _DATABASE + -- Now use the different filters to build the set. + -- We first take ALL of the Units of the _DATABASE. + for UnitRegistrationID, UnitRegistration in pairs( _DATABASE.Units ) do + self:T( UnitRegistration ) + local DCSUnit = Unit.getByName( UnitRegistration.UnitName ) + if self:IsIncludeDCSUnit( DCSUnit ) then + self.DCSUnits[DCSUnit:getName()] = DCSUnit + end + if self:IsAliveDCSUnit( DCSUnit ) then + self.DCSUnitsAlive[DCSUnit:getName()] = DCSUnit + end + end + else + self:E( "There is a structural error in MOOSE. No _DATABASE has been defined! Cannot build this custom DATABASE." ) + end + + return self +end + +--- +-- @param #DATABASE self +-- @param DCSUnit#Unit DCSUnit +-- @return #DATABASE self +function DATABASE:IsIncludeDCSUnit( DCSUnit ) + self:F( DCSUnit ) + local DCSUnitInclude = true + + if self.Filter.Coalitions then + local DCSUnitCoalition = false + for CoalitionID, CoalitionName in pairs( self.Filter.Coalitions ) do + self:T( { "Coalition:", DCSUnit:getCoalition(), self.FilterMeta.Coalitions[CoalitionName], CoalitionName } ) + if self.FilterMeta.Coalitions[CoalitionName] and self.FilterMeta.Coalitions[CoalitionName] == DCSUnit:getCoalition() then + DCSUnitCoalition = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitCoalition + end + + if self.Filter.Categories then + local DCSUnitCategory = false + for CategoryID, CategoryName in pairs( self.Filter.Categories ) do + self:T( { "Category:", DCSUnit:getDesc().category, self.FilterMeta.Categories[CategoryName], CategoryName } ) + if self.FilterMeta.Categories[CategoryName] and self.FilterMeta.Categories[CategoryName] == DCSUnit:getDesc().category then + DCSUnitCategory = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitCategory + end + + if self.Filter.Types then + local DCSUnitType = false + for TypeID, TypeName in pairs( self.Filter.Types ) do + self:T( { "Type:", DCSUnit:getTypeName(), TypeName } ) + if TypeName == DCSUnit:getTypeName() then + DCSUnitType = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitType + end + + if self.Filter.Countries then + local DCSUnitCountry = false + for CountryID, CountryName in pairs( self.Filter.Countries ) do + self:T( { "Country:", DCSUnit:getCountry(), CountryName } ) + if country.id[CountryName] == DCSUnit:getCountry() then + DCSUnitCountry = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitCountry + end + + if self.Filter.UnitPrefixes then + local DCSUnitPrefix = false + for UnitPrefixId, UnitPrefix in pairs( self.Filter.UnitPrefixes ) do + self:T( { "Unit Prefix:", string.find( DCSUnit:getName(), UnitPrefix, 1 ), UnitPrefix } ) + if string.find( DCSUnit:getName(), UnitPrefix, 1 ) then + DCSUnitPrefix = true + end + end + DCSUnitInclude = DCSUnitInclude and DCSUnitPrefix + end + + self:T( DCSUnitInclude ) + return DCSUnitInclude +end + +--- +-- @param #DATABASE self +-- @param DCSUnit#Unit DCSUnit +-- @return #DATABASE self +function DATABASE:IsAliveDCSUnit( DCSUnit ) + self:F( DCSUnit ) + local DCSUnitAlive = false + if DCSUnit and DCSUnit:isExist() and DCSUnit:isActive() then + if self.DCSUnits[DCSUnit:getName()] then + DCSUnitAlive = true + end + end + self:T( DCSUnitAlive ) + return DCSUnitAlive +end + + +function DATABASE:ScanEnvironment() + self:F() self.Navpoints = {} self.Units = {} @@ -5299,7 +5550,7 @@ function DATABASE:New() for coa_name, coa_data in pairs(env.mission.coalition) do if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then - self.Units[coa_name] = {} + --self.Units[coa_name] = {} ---------------------------------------------- -- build nav points DB @@ -5323,8 +5574,8 @@ function DATABASE:New() for cntry_id, cntry_data in pairs(coa_data.country) do local countryName = string.lower(cntry_data.name) - self.Units[coa_name][countryName] = {} - self.Units[coa_name][countryName]["countryId"] = cntry_data.id + --self.Units[coa_name][countryName] = {} + --self.Units[coa_name][countryName]["countryId"] = cntry_data.id if type(cntry_data) == 'table' then --just making sure @@ -5336,7 +5587,7 @@ function DATABASE:New() if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group! - self.Units[coa_name][countryName][category] = {} + --self.Units[coa_name][countryName][category] = {} for group_num, GroupTemplate in pairs(obj_type_data.group) do @@ -5356,14 +5607,14 @@ function DATABASE:New() return self end - --- Instantiate new Groups within the DCSRTE. -- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: -- SpawnCountryID, SpawnCategoryID -- This method is used by the SPAWN class. function DATABASE:Spawn( SpawnTemplate ) + self:F( SpawnTemplate.name ) - self:T( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID, SpawnTemplate.name } ) + self:T( { SpawnTemplate.SpawnCountryID, SpawnTemplate.SpawnCategoryID } ) -- Copy the spawn variables of the template in temporary storage, nullify, and restore the spawn variables. local SpawnCoalitionID = SpawnTemplate.SpawnCoalitionID @@ -5438,11 +5689,47 @@ function DATABASE:_RegisterGroup( GroupTemplate ) self.ClientsByName[UnitTemplateName] = UnitTemplate self.ClientsByID[UnitTemplate.unitId] = UnitTemplate end - self:T( { "Unit", self.Units[UnitTemplateName].UnitName } ) + self:E( { "Unit", self.Units[UnitTemplateName].UnitName } ) end end -_Database = DATABASE:New() -- Database#DATABASE +--- Handles the OnBirth event for the alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnBirth( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if self:IsIncludeDCSUnit( Event.IniDCSUnit ) then + self.DCSUnits[Event.IniDCSUnitName] = Event.IniDCSUnit + self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit + end + end +end + +--- Handles the OnDead or OnCrash event for alive units set. +-- @param #DATABASE self +-- @param Event#EVENTDATA Event +function DATABASE:_EventOnDeadOrCrash( Event ) + self:F( { Event } ) + + if Event.IniDCSUnit then + if self.DCSUnitsAlive[Event.IniDCSUnitName] then + self.DCSUnits[Event.IniDCSUnitName] = nil + self.DCSUnitsAlive[Event.IniDCSUnitName] = nil + end + end +end + +--- Traces the current database contents in the log ... (for debug reasons). +-- @param #DATABASE self +-- @return #DATABASE self +function DATABASE:TraceDatabase() + self:F() + + self:T( { "DCSUnits:", self.DCSUnits } ) + self:T( { "DCSUnitsAlive:", self.DCSUnitsAlive } ) +end --- Scoring system for MOOSE. @@ -7467,12 +7754,12 @@ function CLIENT:GetDCSGroup() -- Now we need to resolve the bugs in DCS 1.5 ... -- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil) self:T3( "Bug 1.5 logic" ) - local ClientUnits = _Database.Groups[self.ClientName].Units + local ClientUnits = _DATABASE.Groups[self.ClientName].Units self:T3( { ClientUnits[1].name, env.getValueDictByKey(ClientUnits[1].name) } ) for ClientUnitID, ClientUnitData in pairs( ClientUnits ) do self:T3( { tonumber(UnitData:getID()), ClientUnitData.unitId } ) if tonumber(UnitData:getID()) == ClientUnitData.unitId then - local ClientGroupTemplate = _Database.Groups[self.ClientName].Template + local ClientGroupTemplate = _DATABASE.Groups[self.ClientName].Template self.ClientID = ClientGroupTemplate.groupId self.ClientGroupUnit = UnitData self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" ) @@ -10411,7 +10698,7 @@ function MISSIONSCHEDULER.Scheduler() if Mission.GoalFunction ~= nil then Mission.GoalFunction( Mission, Client ) end - _Database:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) + _DATABASE:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) -- if not Mission:IsCompleted() then -- end @@ -10872,7 +11159,7 @@ function CLEANUP:_CleanUpScheduler() local CleanUpUnitName = UnitData.CleanUpUnitName if CleanUpUnit then self:T( { "CleanUp Scheduler", "Checking:", CleanUpUnitName } ) - if _Database:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then + if _DATABASE:GetStatusGroup( CleanUpGroupName ) ~= "ReSpawn" then local CleanUpUnitVec3 = CleanUpUnit:getPoint() --self:T( CleanUpUnitVec3 ) local CleanUpUnitVec2 = {} @@ -11315,7 +11602,7 @@ function SPAWN:Array( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[SpawnGroupID].SpawnTemplate, self._OnEngineShutDown, self ) end - self.SpawnGroups[SpawnGroupID].Group = _Database:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) + self.SpawnGroups[SpawnGroupID].Group = _DATABASE:Spawn( self.SpawnGroups[SpawnGroupID].SpawnTemplate ) SpawnX = SpawnXIndex * SpawnDeltaX SpawnY = SpawnYIndex * SpawnDeltaY @@ -11387,7 +11674,7 @@ function SPAWN:SpawnWithIndex( SpawnIndex ) _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self ) end - self.SpawnGroups[self.SpawnIndex].Group = _Database:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) + self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) -- If there is a SpawnFunction hook defined, call it. if self.SpawnFunctionHook then @@ -11395,7 +11682,7 @@ function SPAWN:SpawnWithIndex( SpawnIndex ) end -- TODO: Need to fix this by putting an "R" in the name of the group when the group repeats. --if self.SpawnRepeat then - -- _Database:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) + -- _DATABASE:SetStatusGroup( SpawnTemplate.name, "ReSpawn" ) --end end @@ -11896,7 +12183,7 @@ function SPAWN:_GetTemplate( SpawnTemplatePrefix ) local SpawnTemplate = nil - SpawnTemplate = routines.utils.deepCopy( _Database.Groups[SpawnTemplatePrefix].Template ) + SpawnTemplate = routines.utils.deepCopy( _DATABASE.Groups[SpawnTemplatePrefix].Template ) if SpawnTemplate == nil then error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix ) @@ -12053,7 +12340,7 @@ function SPAWN:_GetSpawnIndex( SpawnIndex ) end --- TODO Need to delete this... _Database does this now ... +-- TODO Need to delete this... _DATABASE does this now ... function SPAWN:_OnBirth( event ) if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line @@ -12071,7 +12358,7 @@ function SPAWN:_OnBirth( event ) end --- Obscolete --- @todo Need to delete this... _Database does this now ... +-- @todo Need to delete this... _DATABASE does this now ... function SPAWN:_OnDeadOrCrash( event ) self:F( self.SpawnTemplatePrefix, event ) @@ -12398,7 +12685,7 @@ function SEAD:EventShot( Event ) local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) local _targetMimgroupName = _targetMimgroup:getName() local _targetMimcont= _targetMimgroup:getController() - local _targetskill = _Database.Units[_targetMimname].Template.skill + local _targetskill = _DATABASE.Units[_targetMimname].Template.skill self:T( self.SEADGroupPrefixes ) self:T( _targetMimgroupName ) local SEADGroupFound = false diff --git a/Moose/Database.lua b/Moose/Database.lua index de659acd5..075d2b83f 100644 --- a/Moose/Database.lua +++ b/Moose/Database.lua @@ -482,6 +482,72 @@ function DATABASE:_EventOnDeadOrCrash( Event ) end end +--- Interate the DATABASE and call an interator function for each **alive** unit, providing the Unit and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachAliveUnit( IteratorFunction, ... ) + self:F( arg ) + + local function CoRoutine() + for DCSUnitID, DCSUnit in pairs( self.DCSUnitsAlive ) do + self:T2( DCSUnit ) + IteratorFunction( DCSUnit, unpack( arg ) ) + coroutine.yield() + end + return true + end + + local co = coroutine.create( CoRoutine ) + + while true do + local status, res = coroutine.resume( co ) + self:T2( { status, res } ) + + if status == false then + error( res ) + end + if res == true then + break + end + end + + return self +end + +--- Interate the DATABASE and call an interator function for each unit, providing the UNIT and optional parameters. +-- @param #DATABASE self +-- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter. +-- @return #DATABASE self +function DATABASE:ForEachAliveUnit( IteratorFunction, ... ) + self:F( arg ) + + local function CoRoutine() + for DCSUnitID, DCSUnit in pairs( self.DCSUnits ) do + self:T2( DCSUnit ) + IteratorFunction( DCSUnit, unpack( arg ) ) + coroutine.yield() + end + return true + end + + local co = coroutine.create( CoRoutine ) + + while true do + local status, res = coroutine.resume( co ) + self:T2( { status, res } ) + + if status == false then + error( res ) + end + if res == true then + break + end + end + + return self +end + --- Traces the current database contents in the log ... (for debug reasons). -- @param #DATABASE self -- @return #DATABASE self diff --git a/Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua b/Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua index ddd2fbba8..eae574cdc 100644 --- a/Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua +++ b/Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.lua @@ -60,3 +60,7 @@ routines.scheduleFunction( DBBelgium.TraceDatabase, { DBBelgium }, 1 ) routines.scheduleFunction( DBNorthKorea.TraceDatabase, { DBNorthKorea }, 1 ) routines.scheduleFunction( DBKA50Vinson.TraceDatabase, { DBKA50Vinson }, 1 ) +DBRedVehicles + :ForEachAliveUnit( function( DCSUnit ) + DBRedVehicles:T( DCSUnit:getName() ) + end ) diff --git a/Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz b/Test Missions/Moose_Test_DATABASE/Moose_Test_DATABASE.miz new file mode 100644 index 0000000000000000000000000000000000000000..592177f6b8c1784b18452dab37710851e0f9422a GIT binary patch literal 101312 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

    Returns object country.

    + + + + +

    Type coalition

    + + + + + +
    coalition.side + +
    + +

    Type coalition.side

    + + + + + + + + + + + +
    coalition.side.BLUE + +
    coalition.side.NEUTRAL + +
    coalition.side.RED +
    @@ -105,6 +143,20 @@ + + +
    +
    + + #coalition + +coalition + +
    +
    + + +

    Type DCSCoalitionObject

    @@ -124,7 +176,7 @@

    Return value

    -

    #coalition.side:

    +

    DCSTypes#coalition.side:

    @@ -145,11 +197,68 @@

    #country.id:

    + + + +

    Type coalition

    +

    Field(s)

    +
    +
    + + #coalition.side + +coalition.side + +
    +
    + + +

    Type coalition.side

    - +

    Field(s)

    +
    +
    + + +coalition.side.BLUE + +
    +
    + + + +
    +
    +
    +
    + + +coalition.side.NEUTRAL + +
    +
    + + + +
    +
    +
    +
    + + +coalition.side.RED + +
    +
    + + + +
    +
    +

    Type country.id

    diff --git a/Documentation/Database.html b/Documentation/Database.html index 0e988cba7..cb2bdddb7 100644 --- a/Documentation/Database.html +++ b/Documentation/Database.html @@ -68,7 +68,70 @@

    Administers the Initial Sets of the Mission Templates as defined within the Mission Editor.

    -

    Administers the Spawning of new Groups within the DCSRTE and administers these new Groups within the DATABASE object(s).

    +

    Mission designers can use the DATABASE class to build sets of units belonging to certain:

    + +
      +
    • coalitions
    • +
    • categories
    • +
    • countries
    • +
    • unit types
    • +
    • starting with certain prefix strings.
    • +
    + +

    Note that this is an initial filter set. More to follow, like zones etc.

    + + +

    DATABASE construction methods:

    +

    Create a new DATABASE object with the DATABASE.New method:

    + + + + +

    DATABASE filter criteria:

    +

    You can set filter criteria to define the set of units within the database. +Filter criteria are defined by:

    + + + +

    Once the filter criteria have been set for the DATABASE, you can start filtering using:

    + + + +

    Planned filter criteria within development are (so these are not yet available):

    + + + + +

    DATABASE iterators:

    +

    Once the filters have been defined and the DATABASE has been built, you can iterate the database with the available iterator methods. +The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. +The following iterator methods are currently available within the DATABASE:

    + + + +

    Planned iterators methods in development are (so these are not yet available):

    + +

    Global(s)

    @@ -76,19 +139,13 @@ - - - -
    DATABASE -
    _Database -

    Type DATABASE

    - + @@ -109,6 +166,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -132,13 +273,19 @@ + + + + @@ -157,12 +304,42 @@ + + + + + + + + + + + + + + + + + + + + @@ -186,20 +363,6 @@ - - -
    -
    - - Database#DATABASE - -_Database - -
    -
    - - -

    Type Database

    @@ -213,8 +376,8 @@
    - -DATABASE.ActivePlayers + +DATABASE.AlivePlayers
    @@ -263,6 +426,320 @@ +
    + +
    +
    + + + +DATABASE.DCSGroups + +
    +
    + + + +
    +
    +
    +
    + + + +DATABASE.DCSGroupsAlive + +
    +
    + + + +
    +
    +
    +
    + + + +DATABASE.DCSUnits + +
    +
    + + + +
    +
    +
    +
    + + + +DATABASE.DCSUnitsAlive + +
    +
    + + + +
    +
    +
    +
    + + + +DATABASE.Filter + +
    +
    + + + +
    +
    +
    +
    + + +DATABASE:FilterCategory(Categories) + +
    +
    + +

    Builds a set of units out of categories.

    + + +

    Possible current categories are plane, helicopter, ground, ship.

    + +

    Parameter

    +
      +
    • + +

      #string Categories : +Can take the following values: "plane", "helicopter", "ground", "ship".

      + +
    • +
    +

    Return value

    + +

    #DATABASE: +self

    + +
    +
    +
    +
    + + +DATABASE:FilterCoalition(Coalitions) + +
    +
    + +

    Builds a set of units of coalitons.

    + + +

    Possible current coalitions are red, blue and neutral.

    + +

    Parameter

    +
      +
    • + +

      #string Coalitions : +Can take the following values: "red", "blue", "neutral".

      + +
    • +
    +

    Return value

    + +

    #DATABASE: +self

    + +
    +
    +
    +
    + + +DATABASE:FilterCountries(Countries) + +
    +
    + +

    Builds a set of units of defined countries.

    + + +

    Possible current countries are those known within DCS world.

    + +

    Parameter

    +
      +
    • + +

      #string Countries : +Can take those country strings known within DCS world.

      + +
    • +
    +

    Return value

    + +

    #DATABASE: +self

    + +
    +
    +
    +
    + + +DATABASE:FilterGroupPrefix(Prefixes) + +
    +
    + +

    Builds a set of units of defined group prefixes.

    + + +

    All the units starting with the given group prefixes will be included within the set.

    + +

    Parameter

    +
      +
    • + +

      #string Prefixes : +The prefix of which the group name where the unit belongs to starts with.

      + +
    • +
    +

    Return value

    + +

    #DATABASE: +self

    + +
    +
    +
    +
    + + + +DATABASE.FilterMeta + +
    +
    + + + +
    +
    +
    +
    + + +DATABASE:FilterStart() + +
    +
    + +

    Starts the filtering.

    + +

    Return value

    + +

    #DATABASE: +self

    + +
    +
    +
    +
    + + +DATABASE:FilterType(Types) + +
    +
    + +

    Builds a set of units of defined unit types.

    + + +

    Possible current types are those types known within DCS world.

    + +

    Parameter

    +
      +
    • + +

      #string Types : +Can take those type strings known within DCS world.

      + +
    • +
    +

    Return value

    + +

    #DATABASE: +self

    + +
    +
    +
    +
    + + +DATABASE:FilterUnitPrefix(Prefixes) + +
    +
    + +

    Builds a set of units of defined unit prefixes.

    + + +

    All the units starting with the given prefixes will be included within the set.

    + +

    Parameter

    +
      +
    • + +

      #string Prefixes : +The prefix of which the unit name starts with.

      + +
    • +
    +

    Return value

    + +

    #DATABASE: +self

    + +
    +
    +
    +
    + + +DATABASE:ForEachAliveUnit(IteratorFunction, ...) + +
    +
    + +

    Interate the DATABASE and call an interator function for each alive unit, providing the Unit and optional parameters.

    + +

    Parameters

    +
      +
    • + +

      #function IteratorFunction : +The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter.

      + +
    • +
    • + +

      ... :

      + +
    • +
    +

    Return value

    + +

    #DATABASE: +self

    +
    @@ -323,12 +800,12 @@
    -

    Creates a new DATABASE Object to administer the Groups defined and alive within the DCSRTE.

    +

    Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names.

    Return value

    +

    #DATABASE:

    -

    DATABASE

    Usage:

    -- Define a new DATABASE Object. This DBObject will contain a reference to all Group and Unit Templates defined within the ME and the DCSRTE.
    @@ -348,6 +825,19 @@ DBObject = DATABASE:New()
    +
    +
    +
    +
    + + +DATABASE:ScanEnvironment() + +
    +
    + + +
    @@ -414,6 +904,27 @@ This method is used by the SPAWN class.

    + +
    +
    +
    + + +DATABASE:TraceDatabase() + +
    +
    + +

    Traces the current database contents in the log ...

    + + +

    (for debug reasons).

    + +

    Return value

    + +

    #DATABASE: +self

    +
    @@ -428,6 +939,100 @@ This method is used by the SPAWN class.

    + +
    +
    +
    + + +DATABASE:_EventOnBirth(Event) + +
    +
    + +

    Handles the OnBirth event for the alive units set.

    + +

    Parameter

    + +
    +
    +
    +
    + + +DATABASE:_EventOnDeadOrCrash(Event) + +
    +
    + +

    Handles the OnDead or OnCrash event for alive units set.

    + +

    Parameter

    + +
    +
    +
    +
    + + +DATABASE:_IsAliveDCSUnit(DCSUnit) + +
    +
    + + + +

    Parameter

    + +

    Return value

    + +

    #DATABASE: +self

    + +
    +
    +
    +
    + + +DATABASE:_IsIncludeDCSUnit(DCSUnit) + +
    +
    + + + +

    Parameter

    + +

    Return value

    + +

    #DATABASE: +self

    +
    diff --git a/Documentation/Escort.html b/Documentation/Escort.html index a75e3f26f..9855f9944 100644 --- a/Documentation/Escort.html +++ b/Documentation/Escort.html @@ -1835,6 +1835,7 @@ self

    + ESCORT.ReportTargetsScheduler diff --git a/Documentation/Event.html b/Documentation/Event.html index 9e5bd862b..eaa58b863 100644 --- a/Documentation/Event.html +++ b/Documentation/Event.html @@ -73,12 +73,6 @@
    - - - -
    DATABASE.ActivePlayersDATABASE.AlivePlayers DATABASE.ClientsByName +
    DATABASE.DCSGroups + +
    DATABASE.DCSGroupsAlive + +
    DATABASE.DCSUnits + +
    DATABASE.DCSUnitsAlive + +
    DATABASE.Filter + +
    DATABASE:FilterCategory(Categories) +

    Builds a set of units out of categories.

    +
    DATABASE:FilterCoalition(Coalitions) +

    Builds a set of units of coalitons.

    +
    DATABASE:FilterCountries(Countries) +

    Builds a set of units of defined countries.

    +
    DATABASE:FilterGroupPrefix(Prefixes) +

    Builds a set of units of defined group prefixes.

    +
    DATABASE.FilterMeta + +
    DATABASE:FilterStart() +

    Starts the filtering.

    +
    DATABASE:FilterType(Types) +

    Builds a set of units of defined unit types.

    +
    DATABASE:FilterUnitPrefix(Prefixes) +

    Builds a set of units of defined unit prefixes.

    +
    DATABASE:ForEachAliveUnit(IteratorFunction, ...) +

    Interate the DATABASE and call an interator function for each alive unit, providing the Unit and optional parameters.

    DATABASE:New() -

    Creates a new DATABASE Object to administer the Groups defined and alive within the DCSRTE.

    +

    Creates a new DATABASE object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names.

    DATABASE.Players +
    DATABASE:ScanEnvironment() +
    DATABASE.Statics +
    DATABASE:TraceDatabase() +

    Traces the current database contents in the log ...

    DATABASE.Units +
    DATABASE:_EventOnBirth(Event) +

    Handles the OnBirth event for the alive units set.

    +
    DATABASE:_EventOnDeadOrCrash(Event) +

    Handles the OnDead or OnCrash event for alive units set.

    +
    DATABASE:_IsAliveDCSUnit(DCSUnit) + +
    DATABASE:_IsIncludeDCSUnit(DCSUnit) +
    EVENT -
    _EVENTDISPATCHER -

    Declare the event dispatcher based on the EVENT class

    @@ -389,20 +383,6 @@ - - -
    -
    - - #EVENT - -_EVENTDISPATCHER - -
    -
    - -

    Declare the event dispatcher based on the EVENT class

    -

    Type Event

    diff --git a/Documentation/Spawn.html b/Documentation/Spawn.html index 21d159c33..49bc1e57f 100644 --- a/Documentation/Spawn.html +++ b/Documentation/Spawn.html @@ -89,52 +89,58 @@ Groups will follow the following naming structure when spawned at run-time:

    Some additional notes that need to be remembered:

      -
    • Templates are actually groups defined within the mission editor, with the flag "Late Activation" set. As such, these groups are never used within the mission, but are used by the #SPAWN module.

    • -
    • It is important to defined BEFORE you spawn new groups, a proper initialization of the SPAWN instance is done with the options you want to use.

    • -
    • When designing a mission, NEVER name groups using a "#" within the name of the group Spawn Template(s), or the SPAWN module logic won't work anymore.

    • -
    • SPAWN object construction methods:

      -

      Create a new SPAWN object with the SPAWN.New or the SPAWN.NewWithAlias methods:

    • -
    • SPAWN.New: Creates a new SPAWN object taking the name of the group that functions as the Template.

    • +
    • Templates are actually groups defined within the mission editor, with the flag "Late Activation" set. As such, these groups are never used within the mission, but are used by the #SPAWN module.
    • +
    • It is important to defined BEFORE you spawn new groups, a proper initialization of the SPAWN instance is done with the options you want to use.
    • +
    • When designing a mission, NEVER name groups using a "#" within the name of the group Spawn Template(s), or the SPAWN module logic won't work anymore.
    • +
    + +

    SPAWN construction methods:

    +

    Create a new SPAWN object with the SPAWN.New or the SPAWN.NewWithAlias methods:

    + +
      +
    • SPAWN.New: Creates a new SPAWN object taking the name of the group that functions as the Template.

    It is important to understand how the SPAWN class works internally. The SPAWN object created will contain internally a list of groups that will be spawned and that are already spawned. The initialization functions will modify this list of groups so that when a group gets spawned, ALL information is already prepared when spawning. This is done for performance reasons. So in principle, the group list will contain all parameters and configurations after initialization, and when groups get actually spawned, this spawning can be done quickly and efficient.

    -
      -
    1. SPAWN object initialization methods:

      -

      A spawn object will behave differently based on the usage of initialization methods:

    2. -
    3. SPAWN.Limit: Limits the amount of groups that can be alive at the same time and that can be dynamically spawned.

    4. -
    5. SPAWN.RandomizeRoute: Randomize the routes of spawned groups.

    6. -
    7. SPAWN.RandomizeTemplate: Randomize the group templates so that when a new group is spawned, a random group template is selected from one of the templates defined.

    8. -
    9. SPAWN.Uncontrolled: Spawn plane groups uncontrolled.

    10. -
    11. SPAWN.Array: Make groups visible before they are actually activated, and order these groups like a batallion in an array.

    12. -
    13. SPAWN.Repeat: Re-spawn groups when they land at the home base. Similar functions are SPAWN.RepeatOnLanding and SPAWN.RepeatOnEngineShutDown.

    14. -
    15. SPAWN object spawning methods:

      -

      Groups can be spawned at different times and methods:

    16. -
    17. SPAWN.Spawn: Spawn one new group based on the last spawned index.

    18. -
    19. SPAWN.ReSpawn: Re-spawn a group based on a given index.

    20. -
    21. SPAWN.SpawnScheduled: Spawn groups at scheduled but randomized intervals. You can use SPAWN.SpawnScheduleStart and SPAWN.SpawnScheduleStop to start and stop the schedule respectively.

    22. -
    23. SPAWN.SpawnFromUnit: Spawn a new group taking the position of a UNIT.

    24. -
    25. SPAWN.SpawnInZone: Spawn a new group in a ZONE.

    26. -
    +

    SPAWN initialization methods:

    +

    A spawn object will behave differently based on the usage of initialization methods:

    + + + +

    SPAWN spawning methods:

    +

    Groups can be spawned at different times and methods:

    + +

    Note that SPAWN.Spawn and SPAWN.ReSpawn return a GROUP#GROUP.New object, that contains a reference to the DCSGroup object. You can use the GROUP object to do further actions with the DCSGroup.

    -
      -
    1. SPAWN object cleaning: -
      - Sometimes, it will occur during a mission run-time, that ground or especially air objects get damaged, and will while being damged stop their activities, while remaining alive. - In such cases, the SPAWN object will just sit there and wait until that group gets destroyed, but most of the time it won't, - and it may occur that no new groups are or can be spawned as limits are reached. - To prevent this, a SPAWN.CleanUp initialization method has been defined that will silently monitor the status of each spawned group. - Once a group has a velocity = 0, and has been waiting for a defined interval, that group will be cleaned or removed from run-time. - There is a catch however :-) If a damaged group has returned to an airbase within the coalition, that group will not be considered as "lost"... - In such a case, when the inactive group is cleaned, a new group will Re-spawned automatically. - This models AI that has succesfully returned to their airbase, to restart their combat activities. - Check the SPAWN.CleanUp for further info.
    2. -
    +

    SPAWN object cleaning:

    +

    Sometimes, it will occur during a mission run-time, that ground or especially air objects get damaged, and will while being damged stop their activities, while remaining alive. +In such cases, the SPAWN object will just sit there and wait until that group gets destroyed, but most of the time it won't, +and it may occur that no new groups are or can be spawned as limits are reached. +To prevent this, a SPAWN.CleanUp initialization method has been defined that will silently monitor the status of each spawned group. +Once a group has a velocity = 0, and has been waiting for a defined interval, that group will be cleaned or removed from run-time. +There is a catch however :-) If a damaged group has returned to an airbase within the coalition, that group will not be considered as "lost"... +In such a case, when the inactive group is cleaned, a new group will Re-spawned automatically. +This models AI that has succesfully returned to their airbase, to restart their combat activities. +Check the SPAWN.CleanUp for further info.

    Global(s)

    @@ -2052,7 +2058,7 @@ Nothing found

    -

    TODO Need to delete this... _Database does this now ...

    +

    TODO Need to delete this... _DATABASE does this now ...

    Parameter

    -

    Module Database

    +

    Module DATABASE

    -

    Administers the Initial Sets of the Mission Templates as defined within the Mission Editor.

    - -

    Mission designers can use the DATABASE class to build sets of units belonging to certain:

    - -
      -
    • coalitions
    • -
    • categories
    • -
    • countries
    • -
    • unit types
    • -
    • starting with certain prefix strings.
    • -
    - -

    Note that this is an initial filter set. More to follow, like zones etc.

    - - -

    DATABASE construction methods:

    -

    Create a new DATABASE object with the DATABASE.New method:

    - - - - -

    DATABASE filter criteria:

    -

    You can set filter criteria to define the set of units within the database. -Filter criteria are defined by:

    - - - -

    Once the filter criteria have been set for the DATABASE, you can start filtering using:

    - - - -

    Planned filter criteria within development are (so these are not yet available):

    - - - - -

    DATABASE iterators:

    -

    Once the filters have been defined and the DATABASE has been built, you can iterate the database with the available iterator methods. -The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. -The following iterator methods are currently available within the DATABASE:

    - - - -

    Planned iterators methods in development are (so these are not yet available):

    - -

    Global(s)

    @@ -142,8 +76,8 @@ The following iterator methods are currently available within the DATABASE:

    -

    Type DATABASE

    - +

    Type DATABASE

    +
    - + - + @@ -217,7 +151,7 @@ The following iterator methods are currently available within the DATABASE:

    - + @@ -235,13 +169,13 @@ The following iterator methods are currently available within the DATABASE:

    - + - + @@ -365,11 +299,76 @@ The following iterator methods are currently available within the DATABASE:

    -

    Type Database

    +

    Type DATABASE

    + +

    Administers the Initial Sets of the Mission Templates as defined within the Mission Editor.

    + -

    Type DATABASE

    - -

    The DATABASE class

    +

    Mission designers can use the DATABASE class to build sets of units belonging to certain:

    + +
      +
    • Coalitions
    • +
    • Categories
    • +
    • Countries
    • +
    • Unit types
    • +
    • Starting with certain prefix strings.
    • +
    + +

    This list will grow over time. Planned developments are to include filters and iterators. + Additional filters will be added around Zone#ZONEs, Radiuses, Active players, ... + More iterators will be implemented in the near future ...

    + +

    DATABASE construction methods:

    +

    Create a new DATABASE object with the DATABASE.New method:

    + + + + +

    DATABASE filter criteria:

    +

    You can set filter criteria to define the set of units within the database. +Filter criteria are defined by:

    + + + +

    Once the filter criteria have been set for the DATABASE, you can start filtering using:

    + + + +

    Planned filter criteria within development are (so these are not yet available):

    + + + + +

    DATABASE iterators:

    +

    Once the filters have been defined and the DATABASE has been built, you can iterate the database with the available iterator methods. +The iterator methods will walk the DATABASE set, and call for each element within the set a function that you provide. +The following iterator methods are currently available within the DATABASE:

    + + + +

    Planned iterators methods in development are (so these are not yet available):

    + + +

    Field(s)

    @@ -501,8 +500,8 @@ The following iterator methods are currently available within the DATABASE:

    - -DATABASE:FilterCategory(Categories) + +DATABASE:FilterCategories(Categories)
    @@ -531,8 +530,8 @@ self

    - -DATABASE:FilterCoalition(Coalitions) + +DATABASE:FilterCoalitions(Coalitions)
    @@ -591,8 +590,8 @@ self

    - -DATABASE:FilterGroupPrefix(Prefixes) + +DATABASE:FilterGroupPrefixes(Prefixes)
    @@ -653,8 +652,8 @@ self

    - -DATABASE:FilterType(Types) + +DATABASE:FilterTypes(Types)
    @@ -683,8 +682,8 @@ self

    - -DATABASE:FilterUnitPrefix(Prefixes) + +DATABASE:FilterUnitPrefixes(Prefixes)
    diff --git a/Documentation/Escort.html b/Documentation/Escort.html index 9855f9944..e5305361f 100644 --- a/Documentation/Escort.html +++ b/Documentation/Escort.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • @@ -1835,7 +1835,6 @@ self

    - ESCORT.ReportTargetsScheduler diff --git a/Documentation/Event.html b/Documentation/Event.html index eaa58b863..50ed86fc5 100644 --- a/Documentation/Event.html +++ b/Documentation/Event.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/GOHOMETASK.html b/Documentation/GOHOMETASK.html index b1ebecdcd..dc2a4b028 100644 --- a/Documentation/GOHOMETASK.html +++ b/Documentation/GOHOMETASK.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/Group.html b/Documentation/Group.html index 3298e9321..c260ae21d 100644 --- a/Documentation/Group.html +++ b/Documentation/Group.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/MISSION.html b/Documentation/MISSION.html index 81752775f..f320ff531 100644 --- a/Documentation/MISSION.html +++ b/Documentation/MISSION.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/MOVEMENT.html b/Documentation/MOVEMENT.html index 1fd0bfce1..bf2539324 100644 --- a/Documentation/MOVEMENT.html +++ b/Documentation/MOVEMENT.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/Menu.html b/Documentation/Menu.html index a82742975..744da29a2 100644 --- a/Documentation/Menu.html +++ b/Documentation/Menu.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/Message.html b/Documentation/Message.html index 66c9d6c91..2141cc4dc 100644 --- a/Documentation/Message.html +++ b/Documentation/Message.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/NOTASK.html b/Documentation/NOTASK.html index 4fa604429..44017a343 100644 --- a/Documentation/NOTASK.html +++ b/Documentation/NOTASK.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/PICKUPTASK.html b/Documentation/PICKUPTASK.html index e9fcbf698..0a5e99486 100644 --- a/Documentation/PICKUPTASK.html +++ b/Documentation/PICKUPTASK.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/ROUTETASK.html b/Documentation/ROUTETASK.html index 87dc106be..6d7554c75 100644 --- a/Documentation/ROUTETASK.html +++ b/Documentation/ROUTETASK.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/STAGE.html b/Documentation/STAGE.html index bc38980e4..2e49e72dd 100644 --- a/Documentation/STAGE.html +++ b/Documentation/STAGE.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/Scoring.html b/Documentation/Scoring.html index b70b673fb..4e4180ae7 100644 --- a/Documentation/Scoring.html +++ b/Documentation/Scoring.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/Sead.html b/Documentation/Sead.html index 95c47ee9e..84d17c60e 100644 --- a/Documentation/Sead.html +++ b/Documentation/Sead.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/Spawn.html b/Documentation/Spawn.html index 49bc1e57f..770a35c22 100644 --- a/Documentation/Spawn.html +++ b/Documentation/Spawn.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/StaticObject.html b/Documentation/StaticObject.html index 9f6847026..aa4f9fe4e 100644 --- a/Documentation/StaticObject.html +++ b/Documentation/StaticObject.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/TASK.html b/Documentation/TASK.html index bc244726c..a8215456d 100644 --- a/Documentation/TASK.html +++ b/Documentation/TASK.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/Unit.html b/Documentation/Unit.html index 985e6a1e7..ed1a6112c 100644 --- a/Documentation/Unit.html +++ b/Documentation/Unit.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/Zone.html b/Documentation/Zone.html index 1b9c3cb4b..15939e2e1 100644 --- a/Documentation/Zone.html +++ b/Documentation/Zone.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/env.html b/Documentation/env.html index 959ef7350..ddd05da06 100644 --- a/Documentation/env.html +++ b/Documentation/env.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/index.html b/Documentation/index.html index 50958b731..d6bdc643a 100644 --- a/Documentation/index.html +++ b/Documentation/index.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • @@ -87,6 +87,12 @@
    + + + + @@ -183,12 +189,6 @@ - - - - diff --git a/Documentation/land.html b/Documentation/land.html index 5399503ee..091a8e0ae 100644 --- a/Documentation/land.html +++ b/Documentation/land.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Documentation/routines.html b/Documentation/routines.html index d33caf801..0318b5608 100644 --- a/Documentation/routines.html +++ b/Documentation/routines.html @@ -21,6 +21,7 @@
  • CARGO
  • CleanUp
  • Client
  • +
  • DATABASE
  • DCSAirbase
  • DCSCoalitionObject
  • DCSCommand
  • @@ -37,7 +38,6 @@
  • DESTROYGROUPSTASK
  • DESTROYRADARSTASK
  • DESTROYUNITTYPESTASK
  • -
  • Database
  • Escort
  • Event
  • GOHOMETASK
  • diff --git a/Moose/Database.lua b/Moose/Database.lua index bdada4e5e..109566d2f 100644 --- a/Moose/Database.lua +++ b/Moose/Database.lua @@ -1,14 +1,26 @@ ---- Administers the Initial Sets of the Mission Templates as defined within the Mission Editor. +--- +-- @module DATABASE +-- @author FlightControl + +Include.File( "Routines" ) +Include.File( "Base" ) +Include.File( "Menu" ) +Include.File( "Group" ) +Include.File( "Event" ) + +--- +-- Administers the Initial Sets of the Mission Templates as defined within the Mission Editor. -- Mission designers can use the DATABASE class to build sets of units belonging to certain: -- --- * coalitions --- * categories --- * countries --- * unit types --- * starting with certain prefix strings. --- --- Note that this is an initial filter set. More to follow, like zones etc. +-- * Coalitions +-- * Categories +-- * Countries +-- * Unit types +-- * Starting with certain prefix strings. -- +-- This list will grow over time. Planned developments are to include filters and iterators. +-- Additional filters will be added around @{Zone#ZONEs}, Radiuses, Active players, ... +-- More iterators will be implemented in the near future ... -- -- DATABASE construction methods: -- ================================= @@ -51,18 +63,7 @@ -- * @{#DATABASE.ForEachUnit}: Calls a function for each unit contained within the DATABASE. -- * @{#DATABASE.ForEachGroup}: Calls a function for each group contained within the DATABASE. -- * @{#DATABASE.ForEachUnitInZone}: Calls a function for each unit within a certain zone contained within the DATABASE. --- --- @module Database --- @author FlightControl - - -Include.File( "Routines" ) -Include.File( "Base" ) -Include.File( "Menu" ) -Include.File( "Group" ) -Include.File( "Event" ) - ---- The DATABASE class +-- -- @type DATABASE -- @extends Base#BASE DATABASE = {
    DATABASE.AlivePlayers @@ -199,13 +133,13 @@ The following iterator methods are currently available within the DATABASE:

    DATABASE:FilterCategory(Categories)DATABASE:FilterCategories(Categories)

    Builds a set of units out of categories.

    DATABASE:FilterCoalition(Coalitions)DATABASE:FilterCoalitions(Coalitions)

    Builds a set of units of coalitons.

    DATABASE:FilterGroupPrefix(Prefixes)DATABASE:FilterGroupPrefixes(Prefixes)

    Builds a set of units of defined group prefixes.

    DATABASE:FilterType(Types)DATABASE:FilterTypes(Types)

    Builds a set of units of defined unit types.

    DATABASE:FilterUnitPrefix(Prefixes)DATABASE:FilterUnitPrefixes(Prefixes)

    Builds a set of units of defined unit prefixes.

    Client

    The CLIENT models client units in multi player missions.

    +
    DATABASE +
    DESTROYUNITTYPESTASK

    Set TASK to destroy certain unit types.

    -
    Database -

    Administers the Initial Sets of the Mission Templates as defined within the Mission Editor.

    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 Date: Sat, 30 Apr 2016 07:22:48 +0200 Subject: [PATCH 5/6] Applied proper documentation --- Documentation/DCSCoalitionObject.html | 113 ++- Documentation/Database.html | 659 +++++++++++++++++- Documentation/Escort.html | 1 + Documentation/Event.html | 20 - Documentation/Spawn.html | 80 ++- Moose/Database.lua | 415 ++++++----- Moose/Routines.lua | 4 +- Moose/Spawn.lua | 16 +- Moose/Zone.lua | 7 +- .../Moose_Test_DATABASE.lua | 22 +- .../Moose_Test_DATABASE.miz | Bin 101312 -> 104294 bytes 11 files changed, 1038 insertions(+), 299 deletions(-) diff --git a/Documentation/DCSCoalitionObject.html b/Documentation/DCSCoalitionObject.html index e0a1741e8..8f4146e80 100644 --- a/Documentation/DCSCoalitionObject.html +++ b/Documentation/DCSCoalitionObject.html @@ -73,6 +73,12 @@ CoalitionObject + + + + coalition + + @@ -88,6 +94,38 @@ CoalitionObject:getCountry()