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;