diff --git a/client/index.html b/client/index.html
index 4c5ed79a3c..f14eff2c3e 100644
--- a/client/index.html
+++ b/client/index.html
@@ -557,6 +557,10 @@
Player
Kills:
+
+ Team kills:
+
+
Damage done:
diff --git a/client/src/scripts/managers/uiManager.ts b/client/src/scripts/managers/uiManager.ts
index 6f94fcbce7..ed56c490b3 100644
--- a/client/src/scripts/managers/uiManager.ts
+++ b/client/src/scripts/managers/uiManager.ts
@@ -200,6 +200,8 @@ export class UIManager {
gameOverText: $("#game-over-text"),
gameOverPlayerName: $("#game-over-player-name"),
gameOverKills: $("#game-over-kills"),
+ gameOverTeamKills: $("#game-over-team-kills"),
+ teamKillsDisplay: $("#teamKills"),
gameOverDamageDone: $("#game-over-damage-done"),
gameOverDamageTaken: $("#game-over-damage-taken"),
gameOverTime: $("#game-over-time"),
@@ -369,6 +371,7 @@ export class UIManager {
gameOverRank,
gameOverPlayerName,
gameOverKills,
+ gameOverTeamKills,
gameOverDamageDone,
gameOverDamageTaken,
gameOverTime
@@ -400,6 +403,7 @@ export class UIManager {
gameOverPlayerName.html(playerName + playerBadgeText);
gameOverKills.text(packet.kills);
+ gameOverTeamKills.text(packet.teamKills);
gameOverDamageDone.text(packet.damageDone);
gameOverDamageTaken.text(packet.damageTaken);
gameOverTime.text(formatDate(packet.timeAlive));
@@ -410,6 +414,10 @@ export class UIManager {
// Player rank
gameOverRank.text(`#${packet.rank}`).toggleClass("won", packet.won);
+
+ if (game.teamID === undefined) {
+ this.ui.teamKillsDisplay.hide();
+ }
}
// I'd rewrite this as MapPings.filter(…), but it's not really clear how
diff --git a/common/src/packets/gameOverPacket.ts b/common/src/packets/gameOverPacket.ts
index 89a2dfe1da..24928941ef 100644
--- a/common/src/packets/gameOverPacket.ts
+++ b/common/src/packets/gameOverPacket.ts
@@ -5,6 +5,7 @@ export class GameOverPacket implements Packet {
won!: boolean;
playerID!: number;
kills!: number;
+ teamKills!: number;
damageDone!: number;
damageTaken!: number;
timeAlive!: number;
@@ -14,6 +15,7 @@ export class GameOverPacket implements Packet {
stream.writeBoolean(this.won);
stream.writeObjectID(this.playerID);
stream.writeUint8(this.kills);
+ stream.writeUint8(this.teamKills);
stream.writeUint16(this.damageDone);
stream.writeUint16(this.damageTaken);
stream.writeUint16(this.timeAlive);
@@ -24,6 +26,7 @@ export class GameOverPacket implements Packet {
this.won = stream.readBoolean();
this.playerID = stream.readObjectID();
this.kills = stream.readUint8();
+ this.teamKills = stream.readUint8();
this.damageDone = stream.readUint16();
this.damageTaken = stream.readUint16();
this.timeAlive = stream.readUint16();
diff --git a/server/src/objects/player.ts b/server/src/objects/player.ts
index 175ae314ad..f631bf65d5 100644
--- a/server/src/objects/player.ts
+++ b/server/src/objects/player.ts
@@ -75,6 +75,7 @@ export class Player extends BaseGameObject {
readonly ip?: string;
teamID?: number;
+ teamKills = 0;
readonly loadout: {
badge?: BadgeDefinition
@@ -1367,6 +1368,13 @@ export class Player extends BaseGameObject {
if (item.definition.killstreak) {
killFeedPacket.killstreak = item.stats.kills;
}
+
+ ++player.teamKills;
+ for (const p of this.game.livingPlayers) {
+ if (p.teamID == player.teamID) {
+ p.teamKills = player.teamKills;
+ }
+ }
};
const attributeToDowner = (): boolean => {
@@ -1612,6 +1620,7 @@ export class Player extends BaseGameObject {
packet.won = won;
packet.playerID = this.id;
packet.kills = this.kills;
+ packet.teamKills = this.teamKills;
packet.damageDone = this.damageDone;
packet.damageTaken = this.damageTaken;
packet.timeAlive = (this.game.now - this.joinTime) / 1000;