mirror of
https://github.com/cassoule/flopobot_v2.git
synced 2026-01-18 16:37:40 +01:00
new elo system
This commit is contained in:
21
game.js
21
game.js
@@ -184,23 +184,12 @@ export async function eloHandler(p1, p2, p1score, p2score, type) {
|
||||
return
|
||||
}
|
||||
|
||||
let diff = 5;
|
||||
const prob1 = 1 / (1 + Math.pow(10, (p2elo.elo - p1elo.elo)/400))
|
||||
const prob2 = 1 / (1 + Math.pow(10, (p1elo.elo - p2elo.elo)/400))
|
||||
|
||||
const p1newElo = Math.max(Math.floor(p1elo.elo + 10 * (p1score - prob1)), 0)
|
||||
const p2newElo = Math.max(Math.floor(p2elo.elo + 10 * (p2score - prob2)), 0)
|
||||
|
||||
if (p1elo.elo > p2elo.elo) {
|
||||
if (p1score > p2score) {
|
||||
diff = Math.max(Math.floor(5 * (p2elo.elo/p1elo.elo)), 1)
|
||||
} else {
|
||||
diff = Math.max(Math.floor(5 * (1 + (p2elo.elo/p1elo.elo))), 1)
|
||||
}
|
||||
} else if (p1elo.elo < p2elo.elo) {
|
||||
if (p1score < p2score) {
|
||||
diff = Math.max(Math.floor(5 * (p1elo.elo/p2elo.elo)), 1)
|
||||
} else {
|
||||
diff = Math.max(Math.floor(5 * (1 + (p1elo.elo/p2elo.elo))), 1)
|
||||
}
|
||||
}
|
||||
const p1newElo = Math.max(p1elo.elo + (p1score > p2score ? diff : -diff), 0)
|
||||
const p2newElo = Math.max(p2elo.elo + (p1score > p2score ? -diff : diff), 0)
|
||||
console.log(`${p1} elo update : ${p1elo.elo} -> ${p1newElo}`)
|
||||
console.log(`${p2} elo update : ${p2elo.elo} -> ${p2newElo}`)
|
||||
updateElo.run({ id: p1, elo: p1newElo })
|
||||
|
||||
88
index.js
88
index.js
@@ -525,7 +525,7 @@ client.on('messageCreate', async (message) => {
|
||||
console.log(activePolls)
|
||||
}
|
||||
else if (message.author.id === process.env.DEV_ID) {
|
||||
const prefix = process.env.DEV_SITE === 'true' ? 'test' : 'flopo'
|
||||
const prefix = process.env.DEV_SITE === 'true' ? 'dev' : 'flopo'
|
||||
if (message.content === prefix + ':add-coins-to-users') {
|
||||
console.log(message.author.id)
|
||||
try {
|
||||
@@ -589,6 +589,20 @@ client.on('messageCreate', async (message) => {
|
||||
else if (message.content.startsWith(prefix + ':poker')) {
|
||||
io.emit('message', message.content);
|
||||
}
|
||||
else if (message.content.startsWith(prefix + ':elo-test')) {
|
||||
const numbers = message.content.match(/\d+/g);
|
||||
|
||||
const score1 = parseInt(numbers[0]);
|
||||
const score2 = parseInt(numbers[1]);
|
||||
|
||||
const prob1 = 1 / (1 + Math.pow(10, (score2 - score1)/400))
|
||||
const prob2 = 1 / (1 + Math.pow(10, (score1 - score2)/400))
|
||||
|
||||
const res1 = Math.floor(score1 + 10 * (1 - prob1))
|
||||
const res2 = Math.floor(score2 + 10 * (0 - prob2))
|
||||
|
||||
console.log(res1, res2)
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -965,11 +979,11 @@ app.post('/interactions', verifyKeyMiddleware(process.env.PUBLIC_KEY), async fun
|
||||
const invSkins = getUserInventory.all({user_id: akhy});
|
||||
|
||||
const chromaText = (skin) => {
|
||||
let res = ""
|
||||
let result = ""
|
||||
for (let i = 1; i <= skins.find((s) => s.uuid === skin.uuid).chromas.length; i++) {
|
||||
res += skin.currentChroma === i ? '💠 ' : '◾ '
|
||||
result += skin.currentChroma === i ? '💠 ' : '◾ '
|
||||
}
|
||||
return res
|
||||
return result
|
||||
}
|
||||
const chromaName = (skin) => {
|
||||
if (skin.currentChroma >= 2) {
|
||||
@@ -1028,20 +1042,20 @@ app.post('/interactions', verifyKeyMiddleware(process.env.PUBLIC_KEY), async fun
|
||||
const trueSkin = skins.find((s) => s.uuid === invSkins[0].uuid);
|
||||
|
||||
const imageUrl = () => {
|
||||
let res;
|
||||
let result;
|
||||
if (invSkins[0].currentLvl === trueSkin.levels.length) {
|
||||
if (invSkins[0].currentChroma === 1) {
|
||||
res = trueSkin.chromas[0].displayIcon
|
||||
result = trueSkin.chromas[0].displayIcon
|
||||
|
||||
} else {
|
||||
res = trueSkin.chromas[invSkins[0].currentChroma-1].fullRender ?? trueSkin.chromas[invSkins[0].currentChroma-1].displayIcon
|
||||
result = trueSkin.chromas[invSkins[0].currentChroma-1].fullRender ?? trueSkin.chromas[invSkins[0].currentChroma-1].displayIcon
|
||||
}
|
||||
} else if (invSkins[0].currentLvl === 1) {
|
||||
res = trueSkin.levels[0].displayIcon ?? trueSkin.chromas[0].fullRender
|
||||
result = trueSkin.levels[0].displayIcon ?? trueSkin.chromas[0].fullRender
|
||||
} else if (invSkins[0].currentLvl === 2 || invSkins[0].currentLvl === 3) {
|
||||
res = trueSkin.displayIcon
|
||||
result = trueSkin.displayIcon
|
||||
}
|
||||
if (res) return res;
|
||||
if (result) return result;
|
||||
return trueSkin.displayIcon
|
||||
};
|
||||
|
||||
@@ -1159,33 +1173,33 @@ app.post('/interactions', verifyKeyMiddleware(process.env.PUBLIC_KEY), async fun
|
||||
|
||||
// Helper functions (unchanged from your original code)
|
||||
const videoUrl = () => {
|
||||
let res;
|
||||
let result;
|
||||
if (randomLevel === randomSkin.levels.length) {
|
||||
if (randomChroma === 1) {
|
||||
res = randomSkin.levels[randomSkin.levels.length - 1].streamedVideo ?? randomSkin.chromas[0].streamedVideo
|
||||
result = randomSkin.levels[randomSkin.levels.length - 1].streamedVideo ?? randomSkin.chromas[0].streamedVideo
|
||||
} else {
|
||||
res = randomSkin.chromas[randomChroma-1].streamedVideo
|
||||
result = randomSkin.chromas[randomChroma-1].streamedVideo
|
||||
}
|
||||
} else {
|
||||
res = randomSkin.levels[randomLevel-1].streamedVideo
|
||||
result = randomSkin.levels[randomLevel-1].streamedVideo
|
||||
}
|
||||
return res;
|
||||
return result;
|
||||
};
|
||||
const imageUrl = () => {
|
||||
let res;
|
||||
let result;
|
||||
if (randomLevel === randomSkin.levels.length) {
|
||||
if (randomChroma === 1) {
|
||||
res = randomSkin.chromas[0].displayIcon
|
||||
result = randomSkin.chromas[0].displayIcon
|
||||
|
||||
} else {
|
||||
res = randomSkin.chromas[randomChroma-1].fullRender ?? randomSkin.chromas[randomChroma-1].displayIcon
|
||||
result = randomSkin.chromas[randomChroma-1].fullRender ?? randomSkin.chromas[randomChroma-1].displayIcon
|
||||
}
|
||||
} else if (randomLevel === 1) {
|
||||
res = randomSkin.levels[0].displayIcon ?? randomSkin.chromas[0].fullRender
|
||||
result = randomSkin.levels[0].displayIcon ?? randomSkin.chromas[0].fullRender
|
||||
} else if (randomLevel === 2 || randomLevel === 3) {
|
||||
res = randomSkin.displayIcon
|
||||
result = randomSkin.displayIcon
|
||||
}
|
||||
if (res) return res;
|
||||
if (result) return result;
|
||||
return randomSkin.displayIcon
|
||||
};
|
||||
const chromaName = () => {
|
||||
@@ -1205,41 +1219,41 @@ app.post('/interactions', verifyKeyMiddleware(process.env.PUBLIC_KEY), async fun
|
||||
return ''
|
||||
};
|
||||
const lvlText = () => {
|
||||
let res = ""
|
||||
let result = ""
|
||||
if (randomLevel >= 1) {
|
||||
res += '1️⃣ '
|
||||
result += '1️⃣ '
|
||||
}
|
||||
if (randomLevel >= 2) {
|
||||
res += '2️⃣ '
|
||||
result += '2️⃣ '
|
||||
}
|
||||
if (randomLevel >= 3) {
|
||||
res += '3️⃣ '
|
||||
result += '3️⃣ '
|
||||
}
|
||||
if (randomLevel >= 4) {
|
||||
res += '4️⃣ '
|
||||
result += '4️⃣ '
|
||||
}
|
||||
if (randomLevel >= 5) {
|
||||
res += '5️⃣ '
|
||||
result += '5️⃣ '
|
||||
}
|
||||
for (let i = 0; i < randomSkin.levels.length - randomLevel; i++) {
|
||||
res += '◾ '
|
||||
result += '◾ '
|
||||
}
|
||||
return res
|
||||
return result
|
||||
}
|
||||
const chromaText = () => {
|
||||
let res = ""
|
||||
let result = ""
|
||||
for (let i = 1; i <= randomSkin.chromas.length; i++) {
|
||||
res += randomChroma === i ? '💠 ' : '◾ '
|
||||
result += randomChroma === i ? '💠 ' : '◾ '
|
||||
}
|
||||
return res
|
||||
return result
|
||||
}
|
||||
const price = () => {
|
||||
let res = dbSkins[randomIndex].basePrice;
|
||||
let result = dbSkins[randomIndex].basePrice;
|
||||
|
||||
res *= (1 + (randomLevel / Math.max(randomSkin.levels.length, 2)))
|
||||
res *= (1 + (randomChroma / 4))
|
||||
result *= (1 + (randomLevel / Math.max(randomSkin.levels.length, 2)))
|
||||
result *= (1 + (randomChroma / 4))
|
||||
|
||||
return res.toFixed(2);
|
||||
return result.toFixed(2);
|
||||
}
|
||||
|
||||
// Update the database
|
||||
@@ -3693,7 +3707,7 @@ io.on('connection', (socket) => {
|
||||
}
|
||||
|
||||
if (winner === null) {
|
||||
await eloHandler(game.p1.id, game.p2.id, 0, 0, 'TICTACTOE')
|
||||
await eloHandler(game.p1.id, game.p2.id, 0.5, 0.5, 'TICTACTOE')
|
||||
|
||||
try {
|
||||
const guild = await client.guilds.fetch(process.env.GUILD_ID);
|
||||
|
||||
Reference in New Issue
Block a user