make OBR less painful to look at

This commit is contained in:
Holly Stubbs 2022-02-22 10:50:31 +00:00
parent 52716c6d90
commit 079b37a7df
Signed by: tgpholly
GPG key ID: B8583C4B7D18119E

View file

@ -2,37 +2,23 @@ const osu = require("osu-packet"),
MultiplayerMatch = require("../MultiplayerMatch.js"), MultiplayerMatch = require("../MultiplayerMatch.js"),
getUserById = require("../util/getUserById.js"); getUserById = require("../util/getUserById.js");
module.exports = class { function sameScoreCheck(playerScores = [{playerId:0,slotId:0,score:0,isCurrentlyFailed:false}], lowestScore = 0) {
constructor(MultiplayerMatchClass = new MultiplayerMatch()) { for (let playerScore of playerScores) {
this.name = "osu! Battle Royale"; // All players don't have the same score
this.MultiplayerMatch = MultiplayerMatchClass; if (playerScore.score != lowestScore || playerScore.isCurrentlyFailed)
return false;
} }
onMatchFinished(playerScores = [{playerId:0,slotId:0,score:0,isCurrentlyFailed:false}]) { return true;
let lowestScore = 8589934588;
for (let i = 0; i < playerScores.length; i++) {
const playerScore = playerScores[i];
if (playerScore.score < lowestScore) lowestScore = playerScore.score;
} }
let everyoneHasTheSameScore = true; function kickLowScorers(playerScores = [{playerId:0,slotId:0,score:0,isCurrentlyFailed:false}], MultiplayerMatch) {
for (let i = 0; i < playerScores.length; i++) { for (let playerScore of playerScores) {
if (playerScores[i].score != lowestScore) {
everyoneHasTheSameScore = false;
break;
}
}
// Everyone has the same score, we don't need to kick anyone
if (everyoneHasTheSameScore) return;
// Kick everyone with the lowest score
for (let i = 0; i < playerScores.length; i++) {
// Kick players if they have the lowest score or they are in a failed state // Kick players if they have the lowest score or they are in a failed state
if (playerScores[i].score == lowestScore || playerScores[i].isCurrentlyFailed) { if (playerScore.score == lowestScore || playerScore.isCurrentlyFailed) {
let osuPacketWriter = new osu.Bancho.Writer; let osuPacketWriter = new osu.Bancho.Writer;
// Get the slot this player is in // Get the slot this player is in
const slot = this.MultiplayerMatch.slots[playerScores[i].slotId]; const slot = MultiplayerMatch.slots[playerScore.slotId];
// Get the kicked player's user class // Get the kicked player's user class
const kickedPlayer = getUserById(slot.playerId); const kickedPlayer = getUserById(slot.playerId);
// Remove the kicked player's referance to the slot they were in // Remove the kicked player's referance to the slot they were in
@ -41,13 +27,13 @@ module.exports = class {
slot.playerId = -1; slot.playerId = -1;
slot.status = 2; slot.status = 2;
// Remove the kicked player from the match's stream // Remove the kicked player from the match's stream
global.StreamsHandler.removeUserFromStream(this.MultiplayerMatch.matchStreamName, kickedPlayer.uuid); global.StreamsHandler.removeUserFromStream(MultiplayerMatch.matchStreamName, kickedPlayer.uuid);
global.StreamsHandler.removeUserFromStream(this.MultiplayerMatch.matchChatStreamName, kickedPlayer.uuid); global.StreamsHandler.removeUserFromStream(MultiplayerMatch.matchChatStreamName, kickedPlayer.uuid);
// Remove the kicked player's referance this this match // Remove the kicked player's referance this this match
kickedPlayer.currentMatch = null; kickedPlayer.currentMatch = null;
// Inform the kicked user's client that they were kicked // Inform the kicked user's client that they were kicked
osuPacketWriter.MatchUpdate(this.MultiplayerMatch.createOsuMatchJSON()); osuPacketWriter.MatchUpdate(MultiplayerMatch.createOsuMatchJSON());
osuPacketWriter.SendMessage({ osuPacketWriter.SendMessage({
sendingClient: global.users["bot"].username, sendingClient: global.users["bot"].username,
message: "You were eliminated from the match!", message: "You were eliminated from the match!",
@ -66,19 +52,47 @@ module.exports = class {
senderId: global.users["bot"].id senderId: global.users["bot"].id
}); });
global.StreamsHandler.sendToStream(this.MultiplayerMatch.matchChatStreamName, osuPacketWriter.toBuffer, null); global.StreamsHandler.sendToStream(MultiplayerMatch.matchChatStreamName, osuPacketWriter.toBuffer, null);
}
} }
} }
function getRemainingPlayerCount(playerScores = [{playerId:0,slotId:0,score:0,isCurrentlyFailed:false}], MultiplayerMatch) {
let numberOfPlayersRemaining = 0; let numberOfPlayersRemaining = 0;
for (let i = 0; i < playerScores.length; i++) { for (let playerScore of playerScores) {
const slot = this.MultiplayerMatch.slots[playerScores[i].slotId]; const slot = MultiplayerMatch.slots[playerScore.slotId];
if (slot.playerId !== -1 && slot.status !== 2) { if (slot.playerId !== -1 && slot.status !== 2) {
numberOfPlayersRemaining++; numberOfPlayersRemaining++;
} }
} }
return numberOfPlayersRemaining;
}
module.exports = class {
constructor(MultiplayerMatchClass = new MultiplayerMatch) {
this.name = "osu! Battle Royale";
this.MultiplayerMatch = MultiplayerMatchClass;
}
onMatchFinished(playerScores = [{playerId:0,slotId:0,score:0,isCurrentlyFailed:false}]) {
let lowestScore = 8589934588;
// Find the lowest score
for (let i = 0; i < playerScores.length; i++) {
const playerScore = playerScores[i];
if (playerScore.score < lowestScore) lowestScore = playerScore.score;
}
// Check if everyone has the same score, we don't need to kick anyone if they do.
if (sameScoreCheck(playerScores)) return;
// Kick everyone with the lowest score
kickLowScorers(playerScores, this.MultiplayerMatch);
// Get number of players remaining
let numberOfPlayersRemaining = numberOfPlayersRemaining(playerScores, this.MultiplayerMatch);
let playerClassContainer = null; let playerClassContainer = null;
let remainingWriterContainer = null; let remainingWriterContainer = null;
let i = 0; let i = 0;
@ -118,11 +132,9 @@ module.exports = class {
}); });
playerClassContainer.addActionToQueue(remainingWriterContainer.toBuffer); playerClassContainer.addActionToQueue(remainingWriterContainer.toBuffer);
break; break;
default:
break;
} }
// Update match for players in the match
this.MultiplayerMatch.sendMatchUpdate(); this.MultiplayerMatch.sendMatchUpdate();
// Update the match listing for users in the multiplayer lobby // Update the match listing for users in the multiplayer lobby
global.MultiplayerManager.updateMatchListing(); global.MultiplayerManager.updateMatchListing();