mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
#PLAYERTASK
* Added basic scoring
This commit is contained in:
parent
910da86caf
commit
fad85ef7ed
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user