diff --git a/Moose Development/Moose/Functional/Scoring.lua b/Moose Development/Moose/Functional/Scoring.lua index b8c7218cf..4682628a4 100644 --- a/Moose Development/Moose/Functional/Scoring.lua +++ b/Moose Development/Moose/Functional/Scoring.lua @@ -78,7 +78,8 @@ -- ### Authors: **FlightControl** -- -- ### Contributions: --- +-- +-- * **Applevangelist**: Additional functionality, fixes. -- * **Wingthor (TAW)**: Testing & Advice. -- * **Dutch-Baron (TAW)**: Testing & Advice. -- * **Whisper**: Testing and Advice. @@ -116,11 +117,13 @@ -- Special targets can be set that will give extra scores to the players when these are destroyed. -- Use the methods @{#SCORING.AddUnitScore}() and @{#SCORING.RemoveUnitScore}() to specify a special additional score for a specific @{Wrapper.Unit}s. -- Use the methods @{#SCORING.AddStaticScore}() and @{#SCORING.RemoveStaticScore}() to specify a special additional score for a specific @{Wrapper.Static}s. --- Use the method @{#SCORING.SetGroupGroup}() to specify a special additional score for a specific @{Wrapper.Group}s. +-- Use the method @{#SCORING.AddScoreSetGroup}() to specify a special additional score for a specific @{Wrapper.Group}s gathered in a @{Core.Set#SET_GROUP}. -- -- local Scoring = SCORING:New( "Scoring File" ) -- Scoring:AddUnitScore( UNIT:FindByName( "Unit #001" ), 200 ) -- Scoring:AddStaticScore( STATIC:FindByName( "Static #1" ), 100 ) +-- local GroupSet = SET_GROUP:New():FilterPrefixes("RAT"):FilterStart() +-- Scoring:AddScoreSetGroup( GroupSet, 100) -- -- The above grants an additional score of 200 points for Unit #001 and an additional 100 points of Static #1 if these are destroyed. -- Note that later in the mission, one can remove these scores set, for example, when the a goal achievement time limit is over. @@ -226,7 +229,7 @@ SCORING = { ClassID = 0, Players = {}, AutoSave = true, - version = "1.17.1" + version = "1.18.1" } local _SCORINGCoalition = { @@ -428,6 +431,31 @@ function SCORING:AddScoreGroup( ScoreGroup, Score ) return self end +--- Specify a special additional score for a @{Core.Set#SET_GROUP}. +-- @param #SCORING self +-- @param Core.Set#SET_GROUP Set The @{Core.Set#SET_GROUP} for which each @{Wrapper.Unit} in each Group a Score is given. +-- @param #number Score The Score value. +-- @return #SCORING +function SCORING:AddScoreSetGroup(Set, Score) + local set = Set:GetSetObjects() + + for _,_group in pairs (set) do + if _group and _group:IsAlive() then + self:AddScoreGroup(_group,Score) + end + end + + local function AddScore(group) + self:AddScoreGroup(group,Score) + end + + function Set:OnAfterAdded(From,Event,To,ObjectName,Object) + AddScore(Object) + end + + return self +end + --- Add a @{Core.Zone} to define additional scoring when any object is destroyed in that zone. -- Note that if a @{Core.Zone} with the same name is already within the scoring added, the @{Core.Zone} (type) and Score will be replaced! -- This allows for a dynamic destruction zone evolution within your mission. @@ -1935,9 +1963,9 @@ end --- Handles the event when one player kill another player -- @param #SCORING self --- @param #PLAYER Player the ataching player +-- @param #Wrapper.Client#CLIENT Player the atacking player -- @param #string TargetPlayerName the name of the killed player --- @param #bool IsTeamKill true if this kill was a team kill +-- @param #boolean IsTeamKill true if this kill was a team kill -- @param #number TargetThreatLevel Thread level of the target -- @param #number PlayerThreatLevelThread level of the player -- @param #number Score The score based on both threat levels @@ -1946,9 +1974,9 @@ function SCORING:OnKillPvP(Player, TargetPlayerName, IsTeamKill, TargetThreatLev end --- Handles the event when one player kill another player -- @param #SCORING self --- @param #PLAYER Player the ataching player +-- @param #Wrapper.Client#CLIENT Player the atacking player -- @param #string TargetUnitName the name of the killed unit --- @param #bool IsTeamKill true if this kill was a team kill +-- @param #boolean IsTeamKill true if this kill was a team kill -- @param #number TargetThreatLevel Thread level of the target -- @param #number PlayerThreatLevelThread level of the player -- @param #number Score The score based on both threat levels diff --git a/Moose Development/Moose/Wrapper/Unit.lua b/Moose Development/Moose/Wrapper/Unit.lua index 322d23540..781c71d48 100644 --- a/Moose Development/Moose/Wrapper/Unit.lua +++ b/Moose Development/Moose/Wrapper/Unit.lua @@ -1244,7 +1244,9 @@ function UNIT:GetThreatLevel() if Attributes["Fighters"] then ThreatLevel = 10 elseif Attributes["Multirole fighters"] then ThreatLevel = 9 + elseif Attributes["Interceptors"] then ThreatLevel = 9 elseif Attributes["Battleplanes"] then ThreatLevel = 8 + elseif Attributes["Battle airplanes"] then ThreatLevel = 8 elseif Attributes["Attack helicopters"] then ThreatLevel = 7 elseif Attributes["Strategic bombers"] then ThreatLevel = 6 elseif Attributes["Bombers"] then ThreatLevel = 5