#PLAYERTASK

* Added basic scoring
This commit is contained in:
Applevangelist 2023-06-08 13:56:59 +02:00
parent 910da86caf
commit fad85ef7ed
2 changed files with 93 additions and 24 deletions

View File

@ -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

View File

@ -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