diff --git a/Moose Development/Moose/Functional/Scoring.lua b/Moose Development/Moose/Functional/Scoring.lua index 3dda306a3..950ccd3c0 100644 --- a/Moose Development/Moose/Functional/Scoring.lua +++ b/Moose Development/Moose/Functional/Scoring.lua @@ -715,11 +715,11 @@ function SCORING:AddGoalScorePlayer( PlayerName, GoalTag, Text, Score ) PlayerData.Goals[GoalTag] = PlayerData.Goals[GoalTag] or { Score = 0 } PlayerData.Goals[GoalTag].Score = PlayerData.Goals[GoalTag].Score + Score PlayerData.Score = PlayerData.Score + Score - - MESSAGE:NewType( self.DisplayMessagePrefix .. Text, - MESSAGE.Type.Information ) - :ToAll() - + if Text then + MESSAGE:NewType( self.DisplayMessagePrefix .. Text, + MESSAGE.Type.Information ) + :ToAll() + end self:ScoreCSV( PlayerName, "", "GOAL_" .. string.upper( GoalTag ), 1, Score, nil ) end end @@ -738,7 +738,7 @@ function SCORING:AddGoalScore( PlayerUnit, GoalTag, Text, Score ) local PlayerName = PlayerUnit:GetPlayerName() - self:F( { PlayerUnit.UnitName, PlayerName, GoalTag, Text, Score } ) + self:T2( { 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 @@ -747,11 +747,12 @@ function SCORING:AddGoalScore( PlayerUnit, GoalTag, Text, Score ) PlayerData.Goals[GoalTag] = PlayerData.Goals[GoalTag] or { Score = 0 } PlayerData.Goals[GoalTag].Score = PlayerData.Goals[GoalTag].Score + Score PlayerData.Score = PlayerData.Score + Score - - MESSAGE:NewType( self.DisplayMessagePrefix .. Text, + + if Text then + MESSAGE:NewType( self.DisplayMessagePrefix .. Text, MESSAGE.Type.Information ) :ToAll() - + end self:ScoreCSV( PlayerName, "", "GOAL_" .. string.upper( GoalTag ), 1, Score, PlayerUnit:GetName() ) end end @@ -784,11 +785,12 @@ function SCORING:_AddMissionTaskScore( Mission, PlayerUnit, Text, Score ) PlayerData.Score = self.Players[PlayerName].Score + Score PlayerData.Mission[MissionName].ScoreTask = self.Players[PlayerName].Mission[MissionName].ScoreTask + Score - - MESSAGE:NewType( self.DisplayMessagePrefix .. Mission:GetText() .. " : " .. Text .. " Score: " .. Score, - MESSAGE.Type.Information ) - :ToAll() - + + if Text then + MESSAGE:NewType( self.DisplayMessagePrefix .. Mission:GetText() .. " : " .. Text .. " Score: " .. Score, + MESSAGE.Type.Information ) + :ToAll() + end self:ScoreCSV( PlayerName, "", "TASK_" .. MissionName:gsub( ' ', '_' ), 1, Score, PlayerUnit:GetName() ) end end @@ -820,9 +822,11 @@ function SCORING:_AddMissionGoalScore( Mission, PlayerName, Text, Score ) PlayerData.Score = self.Players[PlayerName].Score + Score PlayerData.Mission[MissionName].ScoreTask = self.Players[PlayerName].Mission[MissionName].ScoreTask + Score - - MESSAGE:NewType( string.format( "%s%s: %s! Player %s receives %d score!", self.DisplayMessagePrefix, Mission:GetText(), Text, PlayerName, Score ), MESSAGE.Type.Information ):ToAll() - + + if Text then + MESSAGE:NewType( string.format( "%s%s: %s! Player %s receives %d score!", self.DisplayMessagePrefix, Mission:GetText(), Text, PlayerName, Score ), MESSAGE.Type.Information ):ToAll() + end + self:ScoreCSV( PlayerName, "", "TASK_" .. MissionName:gsub( ' ', '_' ), 1, Score ) end end @@ -847,11 +851,12 @@ function SCORING:_AddMissionScore( Mission, Text, Score ) PlayerData.Score = PlayerData.Score + Score PlayerData.Mission[MissionName].ScoreMission = PlayerData.Mission[MissionName].ScoreMission + Score - - MESSAGE:NewType( self.DisplayMessagePrefix .. "Player '" .. PlayerName .. "' has " .. Text .. " in " .. Mission:GetText() .. ". " .. Score .. " mission score!", + + if Text then + MESSAGE:NewType( self.DisplayMessagePrefix .. "Player '" .. PlayerName .. "' has " .. Text .. " in " .. Mission:GetText() .. ". " .. Score .. " mission score!", MESSAGE.Type.Information ) :ToAll() - + end self:ScoreCSV( PlayerName, "", "MISSION_" .. MissionName:gsub( ' ', '_' ), 1, Score ) end end diff --git a/Moose Development/Moose/Ops/PlayerTask.lua b/Moose Development/Moose/Ops/PlayerTask.lua index 70d88bbbd..ff0ba343d 100644 --- a/Moose Development/Moose/Ops/PlayerTask.lua +++ b/Moose Development/Moose/Ops/PlayerTask.lua @@ -21,7 +21,7 @@ -- === -- @module Ops.PlayerTask -- @image OPS_PlayerTask.jpg --- @date Last Update December 2022 +-- @date Last Update June 2023 do @@ -98,7 +98,7 @@ PLAYERTASK = { --- PLAYERTASK class version. -- @field #string version -PLAYERTASK.version="0.1.16" +PLAYERTASK.version="0.1.17" --- Generic task condition. -- @type PLAYERTASK.Condition @@ -461,6 +461,9 @@ function PLAYERTASK:AddClient(Client) self.Clients:Push(Client,name) self:__ClientAdded(-2,Client) end + if self.TaskController and self.TaskController.Scoring then + self.TaskController.Scoring:_AddPlayerFromUnit(Client) + end return self end @@ -748,7 +751,15 @@ end function PLAYERTASK:onafterProgress(From, Event, To, TargetCount) self:T({From, Event, To}) if self.TaskController then - self.TaskController:__TaskProgress(-1,self,TargetCount ) + if self.TaskController.Scoring then + local clients,count = self:GetClientObjects() + if count > 0 then + for _,_client in pairs(clients) do + self.TaskController.Scoring:AddGoalScore(_client,self.Type,nil,10) + end + end + end + self.TaskController:__TaskProgress(-1,self,TargetCount) end return self end @@ -865,6 +876,15 @@ function PLAYERTASK:onafterSuccess(From, Event, To) if self.TargetMarker then self.TargetMarker:Remove() end + if self.TaskController.Scoring then + local clients,count = self:GetClientObjects() + if count > 0 then + for _,_client in pairs(clients) do + local auftrag = self:GetSubType() + self.TaskController.Scoring:AddGoalScore(_client,self.Type,nil,self.TaskController.Scores[self.Type]) + end + end + end self.timestamp = timer.getAbsTime() self.FinalState = "Success" self:__Done(-1) @@ -894,6 +914,15 @@ function PLAYERTASK:onafterFailed(From, Event, To) self.FinalState = "Failed" self:__Done(-1) end + if self.TaskController.Scoring then + local clients,count = self:GetClientObjects() + if count > 0 then + for _,_client in pairs(clients) do + local auftrag = self:GetSubType() + self.TaskController.Scoring:AddGoalScore(_client,self.Type,nil,-self.TaskController.Scores[self.Type]) + end + end + end self.timestamp = timer.getAbsTime() return self end @@ -969,6 +998,7 @@ do -- @field #boolean InfoHasLLDDM -- @field #table PlayerMenuTag -- @field #boolean UseTypeNames +-- @field Functional.Scoring#SCORING Scoring -- @extends Core.Fsm#FSM --- @@ -1294,6 +1324,7 @@ PLAYERTASKCONTROLLER = { InfoHasLLDDM = false, InfoHasCoordinate = false, UseTypeNames = false, + Scoring = nil, } --- @@ -1313,6 +1344,22 @@ PLAYERTASKCONTROLLER.Type = { AUFTRAG.Type.PRECISIONBOMBING = "Precision Bombing" AUFTRAG.Type.CTLD = "Combat Transport" AUFTRAG.Type.CSAR = "Combat Rescue" + +--- +-- @type Scores +PLAYERTASKCONTROLLER.Scores = { + [AUFTRAG.Type.PRECISIONBOMBING] = 100, + [AUFTRAG.Type.CTLD] = 100, + [AUFTRAG.Type.CSAR] = 100, + [AUFTRAG.Type.INTERCEPT] = 100, + [AUFTRAG.Type.ANTISHIP] = 100, + [AUFTRAG.Type.CAS] = 100, + [AUFTRAG.Type.BAI] = 100, + [AUFTRAG.Type.SEAD] = 100, + [AUFTRAG.Type.BOMBING] = 100, + [AUFTRAG.Type.PRECISIONBOMBING] = 100, + [AUFTRAG.Type.BOMBRUNWAY] = 100, +} --- -- @type SeadAttributes @@ -1490,7 +1537,7 @@ PLAYERTASKCONTROLLER.Messages = { --- PLAYERTASK class version. -- @field #string version -PLAYERTASKCONTROLLER.version="0.1.59" +PLAYERTASKCONTROLLER.version="0.1.60" --- Create and run a new TASKCONTROLLER instance. -- @param #PLAYERTASKCONTROLLER self @@ -1710,6 +1757,23 @@ function PLAYERTASKCONTROLLER:New(Name, Coalition, Type, ClientFilter) end +--- [User] Set or create a SCORING object for this taskcontroller +-- @param #PLAYERTASKCONTROLLER self +-- @param Functional.Scoring#SCORING Scoring (optional) the Scoring object +-- @return #PLAYERTASKCONTROLLER self +function PLAYERTASKCONTROLLER:EnableScoring(Scoring) + self.Scoring = Scoring or SCORING:New(self.Name) + return self +end + +--- [User] Remove the SCORING object from this taskcontroller +-- @param #PLAYERTASKCONTROLLER self +-- @return #PLAYERTASKCONTROLLER self +function PLAYERTASKCONTROLLER:DisableScoring() + self.Scoring = nil + return self +end + --- [Internal] Init localization -- @param #PLAYERTASKCONTROLLER self -- @return #PLAYERTASKCONTROLLER self