Add TacticalKillStatsTable back and make it work for all players on your team / Spectator player shows T1/2 losses separately

This commit is contained in:
2026-03-15 17:04:33 -05:00
parent 770a42b841
commit d2f3974c96
6 changed files with 252 additions and 1 deletions

View File

@@ -8,6 +8,7 @@ require("GameManager/TutorialTextFeed")
---@field StartTime integer The start time.
---@field Players PlayerClass[] The combatant players in this game.
---@field CombatFeed TutorialTextFeed Text feed for unit builds and kills.
---@field KillStatsTable table The engine-owned TacticalKillStatsTable reference, set from GameScoring.lua.
TacticalGameClass = {}
TacticalGameClass.__index = TacticalGameClass
@@ -147,6 +148,7 @@ function TacticalGameClass:UnitKilled(gameObject, killer)
if killedUnit then
killedUnit:SetDead(killer.Get_ID())
self:UpdateTacticalKillStatsTable(killedUnit, killer)
self:CombatTextUnitKilled(killedUnit)
end
end
@@ -189,6 +191,84 @@ function TacticalGameClass:CombatTextUnitKilled(unit)
end
end
--- ==================================================
--- Stat tables
--- ==================================================
---Updates the Tactical Kill Stats Table with the killed object.
---@param unit UnitClass The object that was killed.
---@param killer PlayerObject The player that killed the object.
function TacticalGameClass:UpdateTacticalKillStatsTable(unit, killer)
if not TestValid(killer) then
return
end
-- Update Frags
local fragEntry = self.KillStatsTable[FragIndex]
if not fragEntry then
fragEntry = {}
self.KillStatsTable[FragIndex] = fragEntry
end
local killerId = killer.Get_ID()
local killerEntry = fragEntry[killerId]
if not killerEntry then
killerEntry = {}
fragEntry[killerId] = killerEntry
end
local killerObjEntry = killerEntry[unit.GameObjectType]
if not killerObjEntry then
killerObjEntry = {
kills = 1,
combat_power = unit.CombatRating,
build_cost = unit.BuildCost,
score_value = unit.ScoreValue
}
killerEntry[unit.GameObjectType] = killerObjEntry
else
killerObjEntry.kills = killerObjEntry.kills + 1
killerObjEntry.combat_power = killerObjEntry.combat_power + unit.CombatRating
killerObjEntry.build_cost = killerObjEntry.build_cost + unit.BuildCost
killerObjEntry.score_value = killerObjEntry.score_value + unit.ScoreValue
end
-- Update Deaths
local deathEntry = self.KillStatsTable[DeathIndex]
if not deathEntry then
deathEntry = {}
self.KillStatsTable[DeathIndex] = deathEntry
end
local ownerEntry = deathEntry[unit.OwnerId]
if not ownerEntry then
ownerEntry = {}
deathEntry[unit.OwnerId] = ownerEntry
end
local ownerObjEntry = ownerEntry[unit.GameObjectType]
if not ownerObjEntry then
ownerObjEntry = {
kills = 1,
combat_power = unit.CombatRating,
build_cost = unit.BuildCost,
score_value = unit.ScoreValue
}
ownerEntry[unit.GameObjectType] = ownerObjEntry
else
ownerObjEntry.kills = ownerObjEntry.kills + 1
ownerObjEntry.combat_power = ownerObjEntry.combat_power + unit.CombatRating
ownerObjEntry.build_cost = ownerObjEntry.build_cost + unit.BuildCost
ownerObjEntry.score_value = ownerObjEntry.score_value + unit.ScoreValue
end
end
-- ==================================================
-- Private functions
-- ==================================================