Implement rankCalc

This commit is contained in:
kittentm 2026-03-21 23:25:05 +01:00
commit 951d1b3c03
No known key found for this signature in database
GPG key ID: AC43DFDBC1F44A91
2 changed files with 80 additions and 0 deletions

40
judd/models/playerRank.js Normal file
View file

@ -0,0 +1,40 @@
const { DataTypes } = require('sequelize');
const { connection } = require('../database');
const PlayerRank = connection.define('PlayerRank', {
PId: {
type: DataTypes.BIGINT,
primaryKey: true,
allowNull: false
},
GameMode: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false
},
MiiName: {
type: DataTypes.STRING,
allowNull: true
},
Rank: {
type: DataTypes.INTEGER,
defaultValue: 0
},
WinSum: {
type: DataTypes.INTEGER,
defaultValue: 0
},
LoseSum: {
type: DataTypes.INTEGER,
defaultValue: 0
},
RankingScore: {
type: DataTypes.FLOAT,
defaultValue: 0.0
}
}, {
tableName: 'player_ranks',
timestamps: true
});
module.exports = { PlayerRank };

View file

@ -3,6 +3,7 @@ const { joi } = require('../util');
const { SplatfestResult } = require('../models/splatfest_result');
const { Equipment } = require('../models/equipment');
const { EquipmentLast } = require('../models/equipmentLast');
const { PlayerRank } = require('../models/playerRank');
module.exports = {
type: 'telemetry',
@ -34,6 +35,45 @@ module.exports = {
Rank: data.Rank,
Udemae: data.Udemae
});
const gameMode = parseInt(data.GameMode);
if (gameMode !== 3 && gameMode !== 4) {
const isWin = Number(data.IsWinGame) === 1;
const [stats, created] = await PlayerRank.findOrCreate({
where: {
PId: data.PId,
GameMode: data.GameMode
},
defaults: {
MiiName: data.MiiName,
Rank: data.Rank,
WinSum: 0,
LoseSum: 0,
RankingScore: 0
}
});
let currentWins = stats.WinSum;
let currentLosses = stats.LoseSum;
if (isWin) {
currentWins += 1;
} else {
currentLosses += 1;
}
const totalGames = currentWins + currentLosses;
const winRate = totalGames > 0 ? (currentWins / totalGames) : 0;
const newRankingScore = currentWins * winRate * 10;
await stats.update({
MiiName: data.MiiName,
Rank: data.Rank,
WinSum: currentWins,
LoseSum: currentLosses,
RankingScore: newRankingScore
});
}
return result;
}