diff --git a/Moose Development/Moose/Functional/Scoring.lua b/Moose Development/Moose/Functional/Scoring.lua index 714f9bc7d..c77a3088a 100644 --- a/Moose Development/Moose/Functional/Scoring.lua +++ b/Moose Development/Moose/Functional/Scoring.lua @@ -43,7 +43,7 @@ -- -- ![Banner Image](..\Presentations\SCORING\Dia9.JPG) -- --- **Various @{Zone}s** can be defined for which scores are also granted when objects in that @{Zone} are destroyed. +-- Various @{Zone}s can be defined for which scores are also granted when objects in that @{Zone} are destroyed. -- This is **specifically useful** to designate **scenery targets on the map** that will generate points when destroyed. -- -- With a small change in MissionScripting.lua, the scoring results can also be logged in a **CSV file**. @@ -99,13 +99,18 @@ -- The other implementation could be to designate a scenery target (a building) in the mission editor surrounded by a @{Zone}, -- just large enough around that building. -- --- ## 1.4) Configure fratricide level. +-- ## 1.4) Add extra Goal scores upon an event or a condition. +-- +-- A mission has goals and achievements. The scoring system provides an API to set additional scores when a goal or achievement event happens. +-- Use the method @{#SCORING.AddGoalScore}() to add a score for a Player at any time in your mission. +-- +-- ## 1.5) Configure fratricide level. -- -- When a player commits too much damage to friendlies, his penalty score will reach a certain level. -- Use the method @{#SCORING.SetFratricide}() to define the level when a player gets kicked. -- By default, the fratricide level is the default penalty mutiplier * 2 for the penalty score. -- --- ## 1.5) Penalty score when a player changes the coalition. +-- ## 1.6) Penalty score when a player changes the coalition. -- -- When a player changes the coalition, he can receive a penalty score. -- Use the method @{#SCORING.SetCoalitionChangePenalty}() to define the penalty when a player changes coalition. @@ -514,6 +519,7 @@ function SCORING:SetFratricide( Fratricide ) return self end + --- When a player changes the coalition, he can receive a penalty score. -- Use the method @{#SCORING.SetCoalitionChangePenalty}() to define the penalty when a player changes coalition. -- By default, the penalty for changing coalition is the default penalty scale. @@ -600,6 +606,37 @@ function SCORING:_AddPlayerFromUnit( UnitData ) end +--- Add a goal score for a player. +-- The method takes the PlayerUnit for which the Goal score needs to be set. +-- The GoalTag is a string or identifier that is taken into the CSV file scoring log to identify the goal. +-- A free text can be given that is shown to the players. +-- The Score can be both positive and negative. +-- @param #SCORING self +-- @param Wrapper.Unit#UNIT PlayerUnit The @{Unit} of the Player. Other Properties for the scoring are taken from this PlayerUnit, like coalition, type etc. +-- @param #string GoalTag The string or identifier that is used in the CSV file to identify the goal (sort or group later in Excel). +-- @param #string Text A free text that is shown to the players. +-- @param #number Score The score can be both positive or negative ( Penalty ). +function SCORING:AddGoalScore( PlayerUnit, GoalTag, Text, Score ) + + local PlayerName = PlayerUnit:GetPlayerName() + + self:E( { PlayerUnit.UnitName, PlayerName, GoalTag, Text, Score } ) + + -- PlayerName can be nil, if the Unit with the player crashed or due to another reason. + if PlayerName then + local PlayerData = self.Players[PlayerName] + + PlayerData.Goals[GoalTag] = PlayerData.Goals[GoalTag] or { Score = 0 } + PlayerData.Goals[GoalTag].Score = PlayerData.Goals[GoalTag].Score + Score + PlayerData.Score = PlayerData.Score + Score + + MESSAGE:New( Text, 30 ):ToAll() + + self:ScoreCSV( PlayerName, "GOAL_" .. string.upper( GoalTag ), 1, Score, PlayerUnit:GetName() ) + end +end + + --- Registers Scores the players completing a Mission Task. -- @param #SCORING self -- @param Tasking.Mission#MISSION Mission @@ -1223,6 +1260,43 @@ function SCORING:ReportDetailedPlayerCoalitionChanges( PlayerName ) return ScoreMessage, PlayerScore, PlayerPenalty end +--- Produce detailed report of player goal scores. +-- @param #SCORING self +-- @param #string PlayerName The name of the player. +-- @return #string The report. +function SCORING:ReportDetailedPlayerMissions( PlayerName ) + + local ScoreMessage = "" + local PlayerScore = 0 + local PlayerPenalty = 0 + + local PlayerData = self.Players[PlayerName] + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local ScoreMessageGoal = "" + local ScoreGoal = 0 + local ScoreTask = 0 + for GoalName, GoalData in pairs( PlayerData.Goals ) do + ScoreGoal = ScoreGoal + GoalData.Score + ScoreMessageGoal = ScoreMessageGoal .. "'" .. GoalName .. "':" .. GoalData.Score .. "; " + end + PlayerScore = PlayerScore + ScoreGoal + + if ScoreMessageGoal ~= "" then + ScoreMessage = "Goals: " .. ScoreMessageGoal + end + end + + return ScoreMessage, PlayerScore, PlayerPenalty +end + --- Produce detailed report of player penalty scores because of changing the coalition. -- @param #SCORING self -- @param #string PlayerName The name of the player. @@ -1243,9 +1317,6 @@ function SCORING:ReportDetailedPlayerMissions( PlayerName ) local InitUnitType = PlayerData.UnitType local InitUnitName = PlayerData.UnitName - local PlayerScore = 0 - local PlayerPenalty = 0 - local ScoreMessageMission = "" local ScoreMission = 0 local ScoreTask = 0 @@ -1257,7 +1328,7 @@ function SCORING:ReportDetailedPlayerMissions( PlayerName ) PlayerScore = PlayerScore + ScoreMission + ScoreTask if ScoreMessageMission ~= "" then - ScoreMessage = ScoreMessage .. "Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")" + ScoreMessage = "Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")" end end @@ -1284,18 +1355,25 @@ function SCORING:ReportScoreGroupSummary( PlayerGroup ) local ReportHits, ScoreHits, PenaltyHits = self:ReportDetailedPlayerHits( PlayerName ) ReportHits = ReportHits ~= "" and "\n- " .. ReportHits or ReportHits self:E( { ReportHits, ScoreHits, PenaltyHits } ) + local ReportDestroys, ScoreDestroys, PenaltyDestroys = self:ReportDetailedPlayerDestroys( PlayerName ) ReportDestroys = ReportDestroys ~= "" and "\n- " .. ReportDestroys or ReportDestroys self:E( { ReportDestroys, ScoreDestroys, PenaltyDestroys } ) + local ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges = self:ReportDetailedPlayerCoalitionChanges( PlayerName ) ReportCoalitionChanges = ReportCoalitionChanges ~= "" and "\n- " .. ReportCoalitionChanges or ReportCoalitionChanges self:E( { ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges } ) + + local ReportGoals, ScoreGoals, PenaltyGoals = self:ReportDetailedPlayerGoals( PlayerName ) + ReportGoals = ReportGoals ~= "" and "\n- " .. ReportGoals or ReportGoals + self:E( { ReportGoals, ScoreGoals, PenaltyGoals } ) + local ReportMissions, ScoreMissions, PenaltyMissions = self:ReportDetailedPlayerMissions( PlayerName ) ReportMissions = ReportMissions ~= "" and "\n- " .. ReportMissions or ReportMissions self:E( { ReportMissions, ScoreMissions, PenaltyMissions } ) - local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreMissions - local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + PenaltyMissions + local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreGoals + ScoreMissions + local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + ScoreGoals + PenaltyMissions PlayerMessage = string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )", @@ -1329,21 +1407,28 @@ function SCORING:ReportScoreGroupDetailed( PlayerGroup ) local ReportHits, ScoreHits, PenaltyHits = self:ReportDetailedPlayerHits( PlayerName ) ReportHits = ReportHits ~= "" and "\n- " .. ReportHits or ReportHits self:E( { ReportHits, ScoreHits, PenaltyHits } ) + local ReportDestroys, ScoreDestroys, PenaltyDestroys = self:ReportDetailedPlayerDestroys( PlayerName ) ReportDestroys = ReportDestroys ~= "" and "\n- " .. ReportDestroys or ReportDestroys self:E( { ReportDestroys, ScoreDestroys, PenaltyDestroys } ) + local ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges = self:ReportDetailedPlayerCoalitionChanges( PlayerName ) ReportCoalitionChanges = ReportCoalitionChanges ~= "" and "\n- " .. ReportCoalitionChanges or ReportCoalitionChanges self:E( { ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges } ) + + local ReportGoals, ScoreGoals, PenaltyGoals = self:ReportDetailedPlayerGoals( PlayerName ) + ReportGoals = ReportGoals ~= "" and "\n- " .. ReportGoals or ReportGoals + self:E( { ReportGoals, ScoreGoals, PenaltyGoals } ) + local ReportMissions, ScoreMissions, PenaltyMissions = self:ReportDetailedPlayerMissions( PlayerName ) ReportMissions = ReportMissions ~= "" and "\n- " .. ReportMissions or ReportMissions self:E( { ReportMissions, ScoreMissions, PenaltyMissions } ) - local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreMissions - local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + PenaltyMissions + local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreGoals + ScoreMissions + local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + ScoreGoals + PenaltyMissions PlayerMessage = - string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )%s%s%s%s", + string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )%s%s%s%s%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, @@ -1351,6 +1436,7 @@ function SCORING:ReportScoreGroupDetailed( PlayerGroup ) ReportHits, ReportDestroys, ReportCoalitionChanges, + ReportGoals, ReportMissions ) MESSAGE:New( PlayerMessage, 30, "Player '" .. PlayerName .. "'" ):ToGroup( PlayerGroup ) @@ -1375,18 +1461,25 @@ function SCORING:ReportScoreAllSummary( PlayerGroup ) local ReportHits, ScoreHits, PenaltyHits = self:ReportDetailedPlayerHits( PlayerName ) ReportHits = ReportHits ~= "" and "\n- " .. ReportHits or ReportHits self:E( { ReportHits, ScoreHits, PenaltyHits } ) + local ReportDestroys, ScoreDestroys, PenaltyDestroys = self:ReportDetailedPlayerDestroys( PlayerName ) ReportDestroys = ReportDestroys ~= "" and "\n- " .. ReportDestroys or ReportDestroys self:E( { ReportDestroys, ScoreDestroys, PenaltyDestroys } ) + local ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges = self:ReportDetailedPlayerCoalitionChanges( PlayerName ) ReportCoalitionChanges = ReportCoalitionChanges ~= "" and "\n- " .. ReportCoalitionChanges or ReportCoalitionChanges self:E( { ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges } ) + + local ReportGoals, ScoreGoals, PenaltyGoals = self:ReportDetailedPlayerGoals( PlayerName ) + ReportGoals = ReportGoals ~= "" and "\n- " .. ReportGoals or ReportGoals + self:E( { ReportGoals, ScoreGoals, PenaltyGoals } ) + local ReportMissions, ScoreMissions, PenaltyMissions = self:ReportDetailedPlayerMissions( PlayerName ) ReportMissions = ReportMissions ~= "" and "\n- " .. ReportMissions or ReportMissions self:E( { ReportMissions, ScoreMissions, PenaltyMissions } ) - local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreMissions - local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + PenaltyMissions + local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreGoals + ScoreMissions + local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + ScoreGoals + PenaltyMissions PlayerMessage = string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )", diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua index 36807088e..cd2501fff 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20170302_2326' ) +env.info( 'Moose Generation Timestamp: 20170303_0807' ) local base = _G Include = {} @@ -17902,7 +17902,7 @@ end -- -- ![Banner Image](..\Presentations\SCORING\Dia9.JPG) -- --- **Various @{Zone}s** can be defined for which scores are also granted when objects in that @{Zone} are destroyed. +-- Various @{Zone}s can be defined for which scores are also granted when objects in that @{Zone} are destroyed. -- This is **specifically useful** to designate **scenery targets on the map** that will generate points when destroyed. -- -- With a small change in MissionScripting.lua, the scoring results can also be logged in a **CSV file**. @@ -17958,13 +17958,18 @@ end -- The other implementation could be to designate a scenery target (a building) in the mission editor surrounded by a @{Zone}, -- just large enough around that building. -- --- ## 1.4) Configure fratricide level. +-- ## 1.4) Add extra Goal scores upon an event or a condition. +-- +-- A mission has goals and achievements. The scoring system provides an API to set additional scores when a goal or achievement event happens. +-- Use the method @{#SCORING.AddGoalScore}() to add a score for a Player at any time in your mission. +-- +-- ## 1.5) Configure fratricide level. -- -- When a player commits too much damage to friendlies, his penalty score will reach a certain level. -- Use the method @{#SCORING.SetFratricide}() to define the level when a player gets kicked. -- By default, the fratricide level is the default penalty mutiplier * 2 for the penalty score. -- --- ## 1.5) Penalty score when a player changes the coalition. +-- ## 1.6) Penalty score when a player changes the coalition. -- -- When a player changes the coalition, he can receive a penalty score. -- Use the method @{#SCORING.SetCoalitionChangePenalty}() to define the penalty when a player changes coalition. @@ -18373,6 +18378,7 @@ function SCORING:SetFratricide( Fratricide ) return self end + --- When a player changes the coalition, he can receive a penalty score. -- Use the method @{#SCORING.SetCoalitionChangePenalty}() to define the penalty when a player changes coalition. -- By default, the penalty for changing coalition is the default penalty scale. @@ -18459,6 +18465,37 @@ function SCORING:_AddPlayerFromUnit( UnitData ) end +--- Add a goal score for a player. +-- The method takes the PlayerUnit for which the Goal score needs to be set. +-- The GoalTag is a string or identifier that is taken into the CSV file scoring log to identify the goal. +-- A free text can be given that is shown to the players. +-- The Score can be both positive and negative. +-- @param #SCORING self +-- @param Wrapper.Unit#UNIT PlayerUnit The @{Unit} of the Player. Other Properties for the scoring are taken from this PlayerUnit, like coalition, type etc. +-- @param #string GoalTag The string or identifier that is used in the CSV file to identify the goal (sort or group later in Excel). +-- @param #string Text A free text that is shown to the players. +-- @param #number Score The score can be both positive or negative ( Penalty ). +function SCORING:AddGoalScore( PlayerUnit, GoalTag, Text, Score ) + + local PlayerName = PlayerUnit:GetPlayerName() + + self:E( { PlayerUnit.UnitName, PlayerName, GoalTag, Text, Score } ) + + -- PlayerName can be nil, if the Unit with the player crashed or due to another reason. + if PlayerName then + local PlayerData = self.Players[PlayerName] + + PlayerData.Goals[GoalTag] = PlayerData.Goals[GoalTag] or { Score = 0 } + PlayerData.Goals[GoalTag].Score = PlayerData.Goals[GoalTag].Score + Score + PlayerData.Score = PlayerData.Score + Score + + MESSAGE:New( Text, 30 ):ToAll() + + self:ScoreCSV( PlayerName, "GOAL_" .. string.upper( GoalTag ), 1, Score, PlayerUnit:GetName() ) + end +end + + --- Registers Scores the players completing a Mission Task. -- @param #SCORING self -- @param Tasking.Mission#MISSION Mission @@ -19082,6 +19119,43 @@ function SCORING:ReportDetailedPlayerCoalitionChanges( PlayerName ) return ScoreMessage, PlayerScore, PlayerPenalty end +--- Produce detailed report of player goal scores. +-- @param #SCORING self +-- @param #string PlayerName The name of the player. +-- @return #string The report. +function SCORING:ReportDetailedPlayerMissions( PlayerName ) + + local ScoreMessage = "" + local PlayerScore = 0 + local PlayerPenalty = 0 + + local PlayerData = self.Players[PlayerName] + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local ScoreMessageGoal = "" + local ScoreGoal = 0 + local ScoreTask = 0 + for GoalName, GoalData in pairs( PlayerData.Goals ) do + ScoreGoal = ScoreGoal + GoalData.Score + ScoreMessageGoal = ScoreMessageGoal .. "'" .. GoalName .. "':" .. GoalData.Score .. "; " + end + PlayerScore = PlayerScore + ScoreGoal + + if ScoreMessageGoal ~= "" then + ScoreMessage = "Goals: " .. ScoreMessageGoal + end + end + + return ScoreMessage, PlayerScore, PlayerPenalty +end + --- Produce detailed report of player penalty scores because of changing the coalition. -- @param #SCORING self -- @param #string PlayerName The name of the player. @@ -19102,9 +19176,6 @@ function SCORING:ReportDetailedPlayerMissions( PlayerName ) local InitUnitType = PlayerData.UnitType local InitUnitName = PlayerData.UnitName - local PlayerScore = 0 - local PlayerPenalty = 0 - local ScoreMessageMission = "" local ScoreMission = 0 local ScoreTask = 0 @@ -19116,7 +19187,7 @@ function SCORING:ReportDetailedPlayerMissions( PlayerName ) PlayerScore = PlayerScore + ScoreMission + ScoreTask if ScoreMessageMission ~= "" then - ScoreMessage = ScoreMessage .. "Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")" + ScoreMessage = "Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")" end end @@ -19143,18 +19214,25 @@ function SCORING:ReportScoreGroupSummary( PlayerGroup ) local ReportHits, ScoreHits, PenaltyHits = self:ReportDetailedPlayerHits( PlayerName ) ReportHits = ReportHits ~= "" and "\n- " .. ReportHits or ReportHits self:E( { ReportHits, ScoreHits, PenaltyHits } ) + local ReportDestroys, ScoreDestroys, PenaltyDestroys = self:ReportDetailedPlayerDestroys( PlayerName ) ReportDestroys = ReportDestroys ~= "" and "\n- " .. ReportDestroys or ReportDestroys self:E( { ReportDestroys, ScoreDestroys, PenaltyDestroys } ) + local ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges = self:ReportDetailedPlayerCoalitionChanges( PlayerName ) ReportCoalitionChanges = ReportCoalitionChanges ~= "" and "\n- " .. ReportCoalitionChanges or ReportCoalitionChanges self:E( { ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges } ) + + local ReportGoals, ScoreGoals, PenaltyGoals = self:ReportDetailedPlayerGoals( PlayerName ) + ReportGoals = ReportGoals ~= "" and "\n- " .. ReportGoals or ReportGoals + self:E( { ReportGoals, ScoreGoals, PenaltyGoals } ) + local ReportMissions, ScoreMissions, PenaltyMissions = self:ReportDetailedPlayerMissions( PlayerName ) ReportMissions = ReportMissions ~= "" and "\n- " .. ReportMissions or ReportMissions self:E( { ReportMissions, ScoreMissions, PenaltyMissions } ) - local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreMissions - local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + PenaltyMissions + local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreGoals + ScoreMissions + local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + ScoreGoals + PenaltyMissions PlayerMessage = string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )", @@ -19188,21 +19266,28 @@ function SCORING:ReportScoreGroupDetailed( PlayerGroup ) local ReportHits, ScoreHits, PenaltyHits = self:ReportDetailedPlayerHits( PlayerName ) ReportHits = ReportHits ~= "" and "\n- " .. ReportHits or ReportHits self:E( { ReportHits, ScoreHits, PenaltyHits } ) + local ReportDestroys, ScoreDestroys, PenaltyDestroys = self:ReportDetailedPlayerDestroys( PlayerName ) ReportDestroys = ReportDestroys ~= "" and "\n- " .. ReportDestroys or ReportDestroys self:E( { ReportDestroys, ScoreDestroys, PenaltyDestroys } ) + local ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges = self:ReportDetailedPlayerCoalitionChanges( PlayerName ) ReportCoalitionChanges = ReportCoalitionChanges ~= "" and "\n- " .. ReportCoalitionChanges or ReportCoalitionChanges self:E( { ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges } ) + + local ReportGoals, ScoreGoals, PenaltyGoals = self:ReportDetailedPlayerGoals( PlayerName ) + ReportGoals = ReportGoals ~= "" and "\n- " .. ReportGoals or ReportGoals + self:E( { ReportGoals, ScoreGoals, PenaltyGoals } ) + local ReportMissions, ScoreMissions, PenaltyMissions = self:ReportDetailedPlayerMissions( PlayerName ) ReportMissions = ReportMissions ~= "" and "\n- " .. ReportMissions or ReportMissions self:E( { ReportMissions, ScoreMissions, PenaltyMissions } ) - local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreMissions - local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + PenaltyMissions + local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreGoals + ScoreMissions + local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + ScoreGoals + PenaltyMissions PlayerMessage = - string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )%s%s%s%s", + string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )%s%s%s%s%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, @@ -19210,6 +19295,7 @@ function SCORING:ReportScoreGroupDetailed( PlayerGroup ) ReportHits, ReportDestroys, ReportCoalitionChanges, + ReportGoals, ReportMissions ) MESSAGE:New( PlayerMessage, 30, "Player '" .. PlayerName .. "'" ):ToGroup( PlayerGroup ) @@ -19234,18 +19320,25 @@ function SCORING:ReportScoreAllSummary( PlayerGroup ) local ReportHits, ScoreHits, PenaltyHits = self:ReportDetailedPlayerHits( PlayerName ) ReportHits = ReportHits ~= "" and "\n- " .. ReportHits or ReportHits self:E( { ReportHits, ScoreHits, PenaltyHits } ) + local ReportDestroys, ScoreDestroys, PenaltyDestroys = self:ReportDetailedPlayerDestroys( PlayerName ) ReportDestroys = ReportDestroys ~= "" and "\n- " .. ReportDestroys or ReportDestroys self:E( { ReportDestroys, ScoreDestroys, PenaltyDestroys } ) + local ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges = self:ReportDetailedPlayerCoalitionChanges( PlayerName ) ReportCoalitionChanges = ReportCoalitionChanges ~= "" and "\n- " .. ReportCoalitionChanges or ReportCoalitionChanges self:E( { ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges } ) + + local ReportGoals, ScoreGoals, PenaltyGoals = self:ReportDetailedPlayerGoals( PlayerName ) + ReportGoals = ReportGoals ~= "" and "\n- " .. ReportGoals or ReportGoals + self:E( { ReportGoals, ScoreGoals, PenaltyGoals } ) + local ReportMissions, ScoreMissions, PenaltyMissions = self:ReportDetailedPlayerMissions( PlayerName ) ReportMissions = ReportMissions ~= "" and "\n- " .. ReportMissions or ReportMissions self:E( { ReportMissions, ScoreMissions, PenaltyMissions } ) - local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreMissions - local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + PenaltyMissions + local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreGoals + ScoreMissions + local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + ScoreGoals + PenaltyMissions PlayerMessage = string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )", diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 36807088e..cd2501fff 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20170302_2326' ) +env.info( 'Moose Generation Timestamp: 20170303_0807' ) local base = _G Include = {} @@ -17902,7 +17902,7 @@ end -- -- ![Banner Image](..\Presentations\SCORING\Dia9.JPG) -- --- **Various @{Zone}s** can be defined for which scores are also granted when objects in that @{Zone} are destroyed. +-- Various @{Zone}s can be defined for which scores are also granted when objects in that @{Zone} are destroyed. -- This is **specifically useful** to designate **scenery targets on the map** that will generate points when destroyed. -- -- With a small change in MissionScripting.lua, the scoring results can also be logged in a **CSV file**. @@ -17958,13 +17958,18 @@ end -- The other implementation could be to designate a scenery target (a building) in the mission editor surrounded by a @{Zone}, -- just large enough around that building. -- --- ## 1.4) Configure fratricide level. +-- ## 1.4) Add extra Goal scores upon an event or a condition. +-- +-- A mission has goals and achievements. The scoring system provides an API to set additional scores when a goal or achievement event happens. +-- Use the method @{#SCORING.AddGoalScore}() to add a score for a Player at any time in your mission. +-- +-- ## 1.5) Configure fratricide level. -- -- When a player commits too much damage to friendlies, his penalty score will reach a certain level. -- Use the method @{#SCORING.SetFratricide}() to define the level when a player gets kicked. -- By default, the fratricide level is the default penalty mutiplier * 2 for the penalty score. -- --- ## 1.5) Penalty score when a player changes the coalition. +-- ## 1.6) Penalty score when a player changes the coalition. -- -- When a player changes the coalition, he can receive a penalty score. -- Use the method @{#SCORING.SetCoalitionChangePenalty}() to define the penalty when a player changes coalition. @@ -18373,6 +18378,7 @@ function SCORING:SetFratricide( Fratricide ) return self end + --- When a player changes the coalition, he can receive a penalty score. -- Use the method @{#SCORING.SetCoalitionChangePenalty}() to define the penalty when a player changes coalition. -- By default, the penalty for changing coalition is the default penalty scale. @@ -18459,6 +18465,37 @@ function SCORING:_AddPlayerFromUnit( UnitData ) end +--- Add a goal score for a player. +-- The method takes the PlayerUnit for which the Goal score needs to be set. +-- The GoalTag is a string or identifier that is taken into the CSV file scoring log to identify the goal. +-- A free text can be given that is shown to the players. +-- The Score can be both positive and negative. +-- @param #SCORING self +-- @param Wrapper.Unit#UNIT PlayerUnit The @{Unit} of the Player. Other Properties for the scoring are taken from this PlayerUnit, like coalition, type etc. +-- @param #string GoalTag The string or identifier that is used in the CSV file to identify the goal (sort or group later in Excel). +-- @param #string Text A free text that is shown to the players. +-- @param #number Score The score can be both positive or negative ( Penalty ). +function SCORING:AddGoalScore( PlayerUnit, GoalTag, Text, Score ) + + local PlayerName = PlayerUnit:GetPlayerName() + + self:E( { PlayerUnit.UnitName, PlayerName, GoalTag, Text, Score } ) + + -- PlayerName can be nil, if the Unit with the player crashed or due to another reason. + if PlayerName then + local PlayerData = self.Players[PlayerName] + + PlayerData.Goals[GoalTag] = PlayerData.Goals[GoalTag] or { Score = 0 } + PlayerData.Goals[GoalTag].Score = PlayerData.Goals[GoalTag].Score + Score + PlayerData.Score = PlayerData.Score + Score + + MESSAGE:New( Text, 30 ):ToAll() + + self:ScoreCSV( PlayerName, "GOAL_" .. string.upper( GoalTag ), 1, Score, PlayerUnit:GetName() ) + end +end + + --- Registers Scores the players completing a Mission Task. -- @param #SCORING self -- @param Tasking.Mission#MISSION Mission @@ -19082,6 +19119,43 @@ function SCORING:ReportDetailedPlayerCoalitionChanges( PlayerName ) return ScoreMessage, PlayerScore, PlayerPenalty end +--- Produce detailed report of player goal scores. +-- @param #SCORING self +-- @param #string PlayerName The name of the player. +-- @return #string The report. +function SCORING:ReportDetailedPlayerMissions( PlayerName ) + + local ScoreMessage = "" + local PlayerScore = 0 + local PlayerPenalty = 0 + + local PlayerData = self.Players[PlayerName] + if PlayerData then -- This should normally not happen, but i'll test it anyway. + self:T( "Score Player: " .. PlayerName ) + + -- Some variables + local InitUnitCoalition = _SCORINGCoalition[PlayerData.UnitCoalition] + local InitUnitCategory = _SCORINGCategory[PlayerData.UnitCategory] + local InitUnitType = PlayerData.UnitType + local InitUnitName = PlayerData.UnitName + + local ScoreMessageGoal = "" + local ScoreGoal = 0 + local ScoreTask = 0 + for GoalName, GoalData in pairs( PlayerData.Goals ) do + ScoreGoal = ScoreGoal + GoalData.Score + ScoreMessageGoal = ScoreMessageGoal .. "'" .. GoalName .. "':" .. GoalData.Score .. "; " + end + PlayerScore = PlayerScore + ScoreGoal + + if ScoreMessageGoal ~= "" then + ScoreMessage = "Goals: " .. ScoreMessageGoal + end + end + + return ScoreMessage, PlayerScore, PlayerPenalty +end + --- Produce detailed report of player penalty scores because of changing the coalition. -- @param #SCORING self -- @param #string PlayerName The name of the player. @@ -19102,9 +19176,6 @@ function SCORING:ReportDetailedPlayerMissions( PlayerName ) local InitUnitType = PlayerData.UnitType local InitUnitName = PlayerData.UnitName - local PlayerScore = 0 - local PlayerPenalty = 0 - local ScoreMessageMission = "" local ScoreMission = 0 local ScoreTask = 0 @@ -19116,7 +19187,7 @@ function SCORING:ReportDetailedPlayerMissions( PlayerName ) PlayerScore = PlayerScore + ScoreMission + ScoreTask if ScoreMessageMission ~= "" then - ScoreMessage = ScoreMessage .. "Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")" + ScoreMessage = "Tasks: " .. ScoreTask .. " Mission: " .. ScoreMission .. " ( " .. ScoreMessageMission .. ")" end end @@ -19143,18 +19214,25 @@ function SCORING:ReportScoreGroupSummary( PlayerGroup ) local ReportHits, ScoreHits, PenaltyHits = self:ReportDetailedPlayerHits( PlayerName ) ReportHits = ReportHits ~= "" and "\n- " .. ReportHits or ReportHits self:E( { ReportHits, ScoreHits, PenaltyHits } ) + local ReportDestroys, ScoreDestroys, PenaltyDestroys = self:ReportDetailedPlayerDestroys( PlayerName ) ReportDestroys = ReportDestroys ~= "" and "\n- " .. ReportDestroys or ReportDestroys self:E( { ReportDestroys, ScoreDestroys, PenaltyDestroys } ) + local ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges = self:ReportDetailedPlayerCoalitionChanges( PlayerName ) ReportCoalitionChanges = ReportCoalitionChanges ~= "" and "\n- " .. ReportCoalitionChanges or ReportCoalitionChanges self:E( { ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges } ) + + local ReportGoals, ScoreGoals, PenaltyGoals = self:ReportDetailedPlayerGoals( PlayerName ) + ReportGoals = ReportGoals ~= "" and "\n- " .. ReportGoals or ReportGoals + self:E( { ReportGoals, ScoreGoals, PenaltyGoals } ) + local ReportMissions, ScoreMissions, PenaltyMissions = self:ReportDetailedPlayerMissions( PlayerName ) ReportMissions = ReportMissions ~= "" and "\n- " .. ReportMissions or ReportMissions self:E( { ReportMissions, ScoreMissions, PenaltyMissions } ) - local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreMissions - local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + PenaltyMissions + local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreGoals + ScoreMissions + local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + ScoreGoals + PenaltyMissions PlayerMessage = string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )", @@ -19188,21 +19266,28 @@ function SCORING:ReportScoreGroupDetailed( PlayerGroup ) local ReportHits, ScoreHits, PenaltyHits = self:ReportDetailedPlayerHits( PlayerName ) ReportHits = ReportHits ~= "" and "\n- " .. ReportHits or ReportHits self:E( { ReportHits, ScoreHits, PenaltyHits } ) + local ReportDestroys, ScoreDestroys, PenaltyDestroys = self:ReportDetailedPlayerDestroys( PlayerName ) ReportDestroys = ReportDestroys ~= "" and "\n- " .. ReportDestroys or ReportDestroys self:E( { ReportDestroys, ScoreDestroys, PenaltyDestroys } ) + local ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges = self:ReportDetailedPlayerCoalitionChanges( PlayerName ) ReportCoalitionChanges = ReportCoalitionChanges ~= "" and "\n- " .. ReportCoalitionChanges or ReportCoalitionChanges self:E( { ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges } ) + + local ReportGoals, ScoreGoals, PenaltyGoals = self:ReportDetailedPlayerGoals( PlayerName ) + ReportGoals = ReportGoals ~= "" and "\n- " .. ReportGoals or ReportGoals + self:E( { ReportGoals, ScoreGoals, PenaltyGoals } ) + local ReportMissions, ScoreMissions, PenaltyMissions = self:ReportDetailedPlayerMissions( PlayerName ) ReportMissions = ReportMissions ~= "" and "\n- " .. ReportMissions or ReportMissions self:E( { ReportMissions, ScoreMissions, PenaltyMissions } ) - local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreMissions - local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + PenaltyMissions + local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreGoals + ScoreMissions + local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + ScoreGoals + PenaltyMissions PlayerMessage = - string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )%s%s%s%s", + string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )%s%s%s%s%s", PlayerName, PlayerScore - PlayerPenalty, PlayerScore, @@ -19210,6 +19295,7 @@ function SCORING:ReportScoreGroupDetailed( PlayerGroup ) ReportHits, ReportDestroys, ReportCoalitionChanges, + ReportGoals, ReportMissions ) MESSAGE:New( PlayerMessage, 30, "Player '" .. PlayerName .. "'" ):ToGroup( PlayerGroup ) @@ -19234,18 +19320,25 @@ function SCORING:ReportScoreAllSummary( PlayerGroup ) local ReportHits, ScoreHits, PenaltyHits = self:ReportDetailedPlayerHits( PlayerName ) ReportHits = ReportHits ~= "" and "\n- " .. ReportHits or ReportHits self:E( { ReportHits, ScoreHits, PenaltyHits } ) + local ReportDestroys, ScoreDestroys, PenaltyDestroys = self:ReportDetailedPlayerDestroys( PlayerName ) ReportDestroys = ReportDestroys ~= "" and "\n- " .. ReportDestroys or ReportDestroys self:E( { ReportDestroys, ScoreDestroys, PenaltyDestroys } ) + local ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges = self:ReportDetailedPlayerCoalitionChanges( PlayerName ) ReportCoalitionChanges = ReportCoalitionChanges ~= "" and "\n- " .. ReportCoalitionChanges or ReportCoalitionChanges self:E( { ReportCoalitionChanges, ScoreCoalitionChanges, PenaltyCoalitionChanges } ) + + local ReportGoals, ScoreGoals, PenaltyGoals = self:ReportDetailedPlayerGoals( PlayerName ) + ReportGoals = ReportGoals ~= "" and "\n- " .. ReportGoals or ReportGoals + self:E( { ReportGoals, ScoreGoals, PenaltyGoals } ) + local ReportMissions, ScoreMissions, PenaltyMissions = self:ReportDetailedPlayerMissions( PlayerName ) ReportMissions = ReportMissions ~= "" and "\n- " .. ReportMissions or ReportMissions self:E( { ReportMissions, ScoreMissions, PenaltyMissions } ) - local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreMissions - local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + PenaltyMissions + local PlayerScore = ScoreHits + ScoreDestroys + ScoreCoalitionChanges + ScoreGoals + ScoreMissions + local PlayerPenalty = PenaltyHits + PenaltyDestroys + PenaltyCoalitionChanges + ScoreGoals + PenaltyMissions PlayerMessage = string.format( "Player '%s' Score = %d ( %d Score, -%d Penalties )", diff --git a/Moose Presentations/SCORING.pptx b/Moose Presentations/SCORING.pptx index 68223c839..576daef1f 100644 Binary files a/Moose Presentations/SCORING.pptx and b/Moose Presentations/SCORING.pptx differ diff --git a/docs/Documentation/AI_Patrol.html b/docs/Documentation/AI_Patrol.html index 51fe4286e..3d4f402b1 100644 --- a/docs/Documentation/AI_Patrol.html +++ b/docs/Documentation/AI_Patrol.html @@ -881,9 +881,6 @@ Use the method AIPATROLZONE.M - -

This table contains the targets detected during patrol.

-
diff --git a/docs/Documentation/Cargo.html b/docs/Documentation/Cargo.html index efcd3f237..59202c294 100644 --- a/docs/Documentation/Cargo.html +++ b/docs/Documentation/Cargo.html @@ -2425,7 +2425,6 @@ The UNIT carrying the package.

- AI_CARGO_UNIT.CargoCarrier diff --git a/docs/Documentation/ScheduleDispatcher.html b/docs/Documentation/ScheduleDispatcher.html index 2d0c07db7..df99aa154 100644 --- a/docs/Documentation/ScheduleDispatcher.html +++ b/docs/Documentation/ScheduleDispatcher.html @@ -315,8 +315,7 @@ Nothing of this code should be modified without testing it thoroughly.

-

Initialize the ObjectSchedulers array, which is a weakly coupled table. - If the object used as the key is nil, then the garbage collector will remove the item from the Functions array.

+

setmetatable( {}, { __mode = "v" } )

diff --git a/docs/Documentation/Scoring.html b/docs/Documentation/Scoring.html index 13e2f4673..d669d4e48 100644 --- a/docs/Documentation/Scoring.html +++ b/docs/Documentation/Scoring.html @@ -119,7 +119,7 @@ The default range of the scores granted is a value between 0 and 10. The default

Banner Image

-

**Various Zones** can be defined for which scores are also granted when objects in that Zone are destroyed. +

Various Zones can be defined for which scores are also granted when objects in that Zone are destroyed. This is specifically useful to designate scenery targets on the map that will generate points when destroyed.

With a small change in MissionScripting.lua, the scoring results can also be logged in a CSV file.
@@ -180,13 +180,18 @@ then the zone is a moving zone, and anything destroyed within that Zone, just large enough around that building.

-

1.4) Configure fratricide level.

+

1.4) Add extra Goal scores upon an event or a condition.

+ +

A mission has goals and achievements. The scoring system provides an API to set additional scores when a goal or achievement event happens. +Use the method SCORING.AddGoalScore() to add a score for a Player at any time in your mission.

+ +

1.5) Configure fratricide level.

When a player commits too much damage to friendlies, his penalty score will reach a certain level. Use the method SCORING.SetFratricide() to define the level when a player gets kicked.
By default, the fratricide level is the default penalty mutiplier * 2 for the penalty score.

-

1.5) Penalty score when a player changes the coalition.

+

1.6) Penalty score when a player changes the coalition.

When a player changes the coalition, he can receive a penalty score. Use the method SCORING.SetCoalitionChangePenalty() to define the penalty when a player changes coalition. @@ -299,6 +304,12 @@ Various methods exist to configure:

Type SCORING

+ + + + @@ -721,6 +732,52 @@ Various methods exist to configure:

+ +SCORING:AddGoalScore(PlayerUnit, GoalTag, Text, Score) + +
+
+ +

Add a goal score for a player.

+ + +

The method takes the PlayerUnit for which the Goal score needs to be set. +The GoalTag is a string or identifier that is taken into the CSV file scoring log to identify the goal. +A free text can be given that is shown to the players. +The Score can be both positive and negative.

+ +

Parameters

+
    +
  • + +

    Wrapper.Unit#UNIT PlayerUnit : +The Unit of the Player. Other Properties for the scoring are taken from this PlayerUnit, like coalition, type etc.

    + +
  • +
  • + +

    #string GoalTag : +The string or identifier that is used in the CSV file to identify the goal (sort or group later in Excel).

    + +
  • +
  • + +

    #string Text : +A free text that is shown to the players.

    + +
  • +
  • + +

    #number Score : +The score can be both positive or negative ( Penalty ).

    + +
  • +
+
+
+
+
+ SCORING:AddScoreGroup(ScoreGroup, Score) @@ -1417,7 +1474,7 @@ The report.

-

Produce detailed report of player penalty scores because of changing the coalition.

+

Produce detailed report of player goal scores.

Parameter

- - - -
SCORING:AddGoalScore(PlayerUnit, GoalTag, Text, Score) +

Add a goal score for a player.

+
SCORING:AddScoreGroup(ScoreGroup, Score)

Specify a special additional score for a Group.

@@ -493,7 +504,7 @@ Various methods exist to configure:

SCORING:ReportDetailedPlayerMissions(PlayerName) -

Produce detailed report of player penalty scores because of changing the coalition.

+

Produce detailed report of player goal scores.

-
SPAWN.uncontrolled -
@@ -1765,6 +1759,9 @@ The group that was spawned. You can use this group for further actions.

+ +

Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning.

+
@@ -2239,7 +2236,7 @@ when nothing was spawned.

- + #number SPAWN.SpawnMaxGroups @@ -2256,7 +2253,7 @@ when nothing was spawned.

- + #number SPAWN.SpawnMaxUnitsAlive @@ -2559,7 +2556,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 ) -

When the first Spawn executes, all the Groups need to be made visible before start.

+

Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned.

@@ -3198,20 +3195,6 @@ True = Continue Scheduler

- -
-
-
- - - -SPAWN.uncontrolled - -
-
- - -
diff --git a/docs/Documentation/Task.html b/docs/Documentation/Task.html index af3bf3c78..9befab2b3 100644 --- a/docs/Documentation/Task.html +++ b/docs/Documentation/Task.html @@ -89,6 +89,7 @@
  • TASK.HasStateMachine():Enquire if the task has a Fsm
  • TASK.AssignToUnit(): Assign a task to a unit. (Needs to be implemented in the derived classes from #TASK.
  • TASK.UnAssignFromUnit(): Unassign the task from a unit.
  • +
  • TASK.SetTimeOut(): Set timer in seconds before task gets cancelled if not assigned.
  • 1.2) Set and enquire task status (beyond the task state machine processing).

    @@ -512,6 +513,12 @@ Use the method TASK.AddScore() to add scores whe TASK:SetStateMachine(TaskUnit, Fsm)

    Add a FiniteStateMachine to Task with key TaskUnit

    + + + + TASK:SetTimeOut(Timer) + +

    Sets the TimeOut for the Task.

    @@ -596,6 +603,12 @@ Use the method TASK.AddScore() to add scores whe TASK.TaskType + + + + TASK.TimeOut + + @@ -644,6 +657,12 @@ Use the method TASK.AddScore() to add scores whe TASK:onafterReplan(From, Event, To)

    FSM function for a TASK

    + + + + TASK:onbeforeTimeOut(Event, From, To) + +

    FSM function for a TASK

    @@ -662,6 +681,12 @@ Use the method TASK.AddScore() to add scores whe TASK:onenterFailed(From, Event, To)

    FSM function for a TASK

    + + + + TASK:onenterPlanned(Event, From, To) + +

    FSM function for a TASK

    @@ -1994,6 +2019,36 @@ self

    + +TASK:SetTimeOut(Timer) + +
    +
    + +

    Sets the TimeOut for the Task.

    + + +

    If Task stayed planned for longer than TimeOut, it gets into Cancelled status.

    + +

    Parameter

    +
      +
    • + +

      #integer Timer : +in seconds

      + +
    • +
    +

    Return value

    + +

    #TASK: +self

    + +
    +
    +
    +
    + TASK:SetType(TaskType) @@ -2201,6 +2256,20 @@ Fsm#FSM_PROCESS

    + +
    +
    +
    + + + +TASK.TimeOut + +
    +
    + + +
    @@ -2356,6 +2425,37 @@ self

    + +TASK:onbeforeTimeOut(Event, From, To) + +
    +
    + +

    FSM function for a TASK

    + +

    Parameters

    +
      +
    • + +

      #string Event :

      + +
    • +
    • + +

      #string From :

      + +
    • +
    • + +

      #string To :

      + +
    • +
    +
    +
    +
    +
    + TASK:onenterAborted(From, Event, To) @@ -2449,6 +2549,37 @@ self

    + +TASK:onenterPlanned(Event, From, To) + +
    +
    + +

    FSM function for a TASK

    + +

    Parameters

    +
      +
    • + +

      #string Event :

      + +
    • +
    • + +

      #string From :

      + +
    • +
    • + +

      #string To :

      + +
    • +
    +
    +
    +
    +
    + TASK:onenterSuccess(Event, From, To) @@ -2509,6 +2640,8 @@ self

    +

    Type integer

    +