diff --git a/Moose Development/Moose/Actions/Act_Account.lua b/Moose Development/Moose/Actions/Act_Account.lua index 7b91d657f..28aae7424 100644 --- a/Moose Development/Moose/Actions/Act_Account.lua +++ b/Moose Development/Moose/Actions/Act_Account.lua @@ -70,18 +70,20 @@ do -- ACT_ACCOUNT -- Inherits from BASE local self = BASE:Inherit( self, FSM_PROCESS:New() ) -- Core.Fsm#FSM_PROCESS - self:AddTransition( "Assigned", "Start", "Waiting") - self:AddTransition( "*", "Wait", "Waiting") - self:AddTransition( "*", "Report", "Report") - self:AddTransition( "*", "Event", "Account") - self:AddTransition( "Account", "More", "Wait") - self:AddTransition( "Account", "NoMore", "Accounted") - self:AddTransition( "*", "Fail", "Failed") + self:AddTransition( "Assigned", "Start", "Waiting" ) + self:AddTransition( "*", "Wait", "Waiting" ) + self:AddTransition( "*", "Report", "Report" ) + self:AddTransition( "*", "Event", "Account" ) + self:AddTransition( "Account", "Player", "AccountForPlayer" ) + self:AddTransition( "Account", "Other", "AccountForOther" ) + self:AddTransition( { "Account", "AccountForPlayer", "AccountForOther" }, "More", "Wait" ) + self:AddTransition( { "Account", "AccountForPlayer", "AccountForOther" }, "NoMore", "Accounted" ) + self:AddTransition( "*", "Fail", "Failed" ) self:AddEndState( "Failed" ) self:SetStartState( "Assigned" ) - + return self end @@ -97,6 +99,7 @@ do -- ACT_ACCOUNT self:HandleEvent( EVENTS.Dead, self.onfuncEventDead ) self:HandleEvent( EVENTS.Crash, self.onfuncEventCrash ) + self:HandleEvent( EVENTS.Hit ) self:__Wait( 1 ) end @@ -199,44 +202,88 @@ do -- ACT_ACCOUNT_DEADS --- StateMachine callback function -- @param #ACT_ACCOUNT_DEADS self - -- @param Wrapper.Controllable#CONTROLLABLE ProcessUnit - -- @param #string Event + -- @param Wrapper.Client#CLIENT ProcessClient + -- @param Tasking.Task#TASK Task -- @param #string From + -- @param #string Event -- @param #string To - function ACT_ACCOUNT_DEADS:onenterAccount( ProcessUnit, Task, From, Event, To, EventData ) - self:T( { ProcessUnit, EventData, From, Event, To } ) + -- @param Core.Event#EVENTDATA EventData + function ACT_ACCOUNT_DEADS:onafterEvent( ProcessClient, Task, From, Event, To, EventData ) + self:T( { ProcessClient:GetName(), Task:GetName(), From, Event, To, EventData } ) - self:T( { self.Controllable } ) - - self.TargetSetUnit:Flush() - - self:T( { "Before sending Message", EventData.IniUnitName, self.TargetSetUnit:FindUnit( EventData.IniUnitName ) } ) if self.TargetSetUnit:FindUnit( EventData.IniUnitName ) then - self:T( "Sending Message" ) - local TaskGroup = ProcessUnit:GetGroup() - self.TargetSetUnit:Remove( EventData.IniUnitName ) - self:Message( "Target destroyed. Your group with assigned " .. self.TaskName .. " task has " .. self.TargetSetUnit:Count() .. " targets ( " .. self.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed." ) + local PlayerName = ProcessClient:GetPlayerName() + local PlayerHit = self.PlayerHits and self.PlayerHits[EventData.IniUnitName] + if PlayerHit == PlayerName then + self:Player() + else + self:Other() + end end - self:T( { "After sending Message" } ) end - + --- StateMachine callback function -- @param #ACT_ACCOUNT_DEADS self - -- @param Wrapper.Controllable#CONTROLLABLE ProcessUnit - -- @param #string Event + -- @param Wrapper.Client#CLIENT ProcessClient + -- @param Tasking.Task#TASK Task -- @param #string From + -- @param #string Event -- @param #string To - function ACT_ACCOUNT_DEADS:onafterEvent( ProcessUnit, Task, From, Event, To ) - + -- @param Core.Event#EVENTDATA EventData + function ACT_ACCOUNT_DEADS:onenterAccountForPlayer( ProcessClient, Task, From, Event, To, EventData ) + self:T( { ProcessClient:GetName(), Task:GetName(), From, Event, To, EventData } ) + + local TaskGroup = ProcessClient:GetGroup() + + self.TargetSetUnit:Remove( EventData.IniUnitName ) + self:Message( "You have destroyed a target. Your group assigned with task " .. self.TaskName .. " has " .. self.TargetSetUnit:Count() .. " targets ( " .. self.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed." ) + + local PlayerName = ProcessClient:GetPlayerName() + Task:AddProgress( PlayerName, "Destroyed " .. EventData.IniTypeName, timer.getTime(), 1 ) + if self.TargetSetUnit:Count() > 0 then self:__More( 1 ) else self:__NoMore( 1 ) end end + + --- StateMachine callback function + -- @param #ACT_ACCOUNT_DEADS self + -- @param Wrapper.Client#CLIENT ProcessClient + -- @param Tasking.Task#TASK Task + -- @param #string From + -- @param #string Event + -- @param #string To + -- @param Core.Event#EVENTDATA EventData + function ACT_ACCOUNT_DEADS:onenterAccountForOther( ProcessClient, Task, From, Event, To, EventData ) + self:T( { ProcessClient:GetName(), Task:GetName(), From, Event, To, EventData } ) + + local TaskGroup = ProcessClient:GetGroup() + self.TargetSetUnit:Remove( EventData.IniUnitName ) + self:Message( "One of the task targets has been destroyed. Your group assigned with task " .. self.TaskName .. " has " .. self.TargetSetUnit:Count() .. " targets ( " .. self.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed." ) + + if self.TargetSetUnit:Count() > 0 then + self:__More( 1 ) + else + self:__NoMore( 1 ) + end + end + --- DCS Events + --- @param #ACT_ACCOUNT_DEADS self + -- @param Core.Event#EVENTDATA EventData + function ACT_ACCOUNT_DEADS:OnEventHit( EventData ) + self:T( { "EventDead", EventData } ) + + if EventData.IniPlayerName and EventData.TgtDCSUnitName then + self.PlayerHits = self.PlayerHits or {} + self.PlayerHits[EventData.TgtDCSUnitName] = EventData.IniPlayerName + end + end + --- @param #ACT_ACCOUNT_DEADS self -- @param Event#EVENTDATA EventData function ACT_ACCOUNT_DEADS:onfuncEventDead( EventData ) diff --git a/Moose Development/Moose/Tasking/Task.lua b/Moose Development/Moose/Tasking/Task.lua index 62918649f..f26347c36 100644 --- a/Moose Development/Moose/Tasking/Task.lua +++ b/Moose Development/Moose/Tasking/Task.lua @@ -226,6 +226,8 @@ function TASK:New( Mission, SetGroupAssign, TaskName, TaskType, TaskBriefing ) self.TaskInfo = {} + self.TaskProgress = {} + return self end @@ -1468,9 +1470,25 @@ end end -- Reporting -do -- Additional Scoring +do -- Additional Task Scoring and Task Progress - --- Set a score when a target in scope of the A2A attack, has been destroyed . + --- Add Task Progress for a Player Name + -- @param #TASK self + -- @param #string PlayerName The name of the player. + -- @param #string ProgressText The text that explains the Progress achieved. + -- @param #number ProgressTime The time the progress was achieved. + -- @oaram #number ProgressPoints The amount of points of magnitude granted. This will determine the shared Mission Success scoring. + -- @return #TASK + function TASK:AddProgress( PlayerName, ProgressText, ProgressTime, ProgressPoints ) + self.TaskProgress = self.TaskProgress or {} + self.TaskProgress[ProgressTime] = self.TaskProgress[ProgressTime] or {} + self.TaskProgress[ProgressTime].PlayerName = PlayerName + self.TaskProgress[ProgressTime].ProgressText = ProgressText + self.TaskProgress[ProgressTime].ProgressPoints = ProgressPoints + return self + end + + --- Set a score when progress has been made by the player. -- @param #TASK self -- @param #string PlayerName The name of the player. -- @param #number Score The score in points to be granted when task process has been achieved. @@ -1481,7 +1499,7 @@ do -- Additional Scoring local ProcessUnit = self:GetUnitProcess( TaskUnit ) - ProcessUnit:AddScoreProcess( "Engaging", "Account", "Account", "Player " .. PlayerName .. " has achieved progress.", Score ) + ProcessUnit:AddScoreProcess( "Engaging", "Account", "AccountPlayer", "Player " .. PlayerName .. " has achieved progress.", Score ) return self end diff --git a/Moose Development/Moose/Tasking/Task_A2A.lua b/Moose Development/Moose/Tasking/Task_A2A.lua index 1af3158e5..a25dbd456 100644 --- a/Moose Development/Moose/Tasking/Task_A2A.lua +++ b/Moose Development/Moose/Tasking/Task_A2A.lua @@ -350,7 +350,7 @@ do -- TASK_A2A_INTERCEPT local ProcessUnit = self:GetUnitProcess( TaskUnit ) - ProcessUnit:AddScoreProcess( "Engaging", "Account", "Account", "Player " .. PlayerName .. " has intercepted a target.", Score ) + ProcessUnit:AddScoreProcess( "Engaging", "Account", "AccountForPlayer", "Player " .. PlayerName .. " has intercepted a target.", Score ) return self end @@ -473,7 +473,7 @@ do -- TASK_A2A_SWEEP local ProcessUnit = self:GetUnitProcess( TaskUnit ) - ProcessUnit:AddScoreProcess( "Engaging", "Account", "Account", "Player " .. PlayerName .. " has sweeped a target.", Score ) + ProcessUnit:AddScoreProcess( "Engaging", "Account", "AccountForPlayer", "Player " .. PlayerName .. " has sweeped a target.", Score ) return self end @@ -592,7 +592,7 @@ do -- TASK_A2A_ENGAGE local ProcessUnit = self:GetUnitProcess( TaskUnit ) - ProcessUnit:AddScoreProcess( "Engaging", "Account", "Account", "Player " .. PlayerName .. " has engaged and destroyed a target.", Score ) + ProcessUnit:AddScoreProcess( "Engaging", "Account", "AccountForPlayer", "Player " .. PlayerName .. " has engaged and destroyed a target.", Score ) return self end diff --git a/Moose Development/Moose/Tasking/Task_A2G.lua b/Moose Development/Moose/Tasking/Task_A2G.lua index 845592ef3..ff7db7e59 100644 --- a/Moose Development/Moose/Tasking/Task_A2G.lua +++ b/Moose Development/Moose/Tasking/Task_A2G.lua @@ -342,7 +342,7 @@ do -- TASK_A2G_SEAD local ProcessUnit = self:GetUnitProcess( TaskUnit ) - ProcessUnit:AddScoreProcess( "Engaging", "Account", "Account", "Player " .. PlayerName .. " has SEADed a target.", Score ) + ProcessUnit:AddScoreProcess( "Engaging", "Account", "AccountForPlayer", "Player " .. PlayerName .. " has SEADed a target.", Score ) return self end @@ -455,7 +455,7 @@ do -- TASK_A2G_BAI local ProcessUnit = self:GetUnitProcess( TaskUnit ) - ProcessUnit:AddScoreProcess( "Engaging", "Account", "Account", "Player " .. PlayerName .. " has destroyed a target in Battlefield Air Interdiction (BAI).", Score ) + ProcessUnit:AddScoreProcess( "Engaging", "Account", "AccountForPlayer", "Player " .. PlayerName .. " has destroyed a target in Battlefield Air Interdiction (BAI).", Score ) return self end @@ -568,7 +568,7 @@ do -- TASK_A2G_CAS local ProcessUnit = self:GetUnitProcess( TaskUnit ) - ProcessUnit:AddScoreProcess( "Engaging", "Account", "Account", "Player " .. PlayerName .. " has destroyed a target in Close Air Support (CAS).", Score ) + ProcessUnit:AddScoreProcess( "Engaging", "Account", "AccountForPlayer", "Player " .. PlayerName .. " has destroyed a target in Close Air Support (CAS).", Score ) return self end diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 7858c785e..47947b97d 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20170620_2133' ) +env.info( 'Moose Generation Timestamp: 20170624_1201' ) local base = _G