This repository has been archived on 2026-04-30. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
kingdombattles/server/statistics.js
T
2019-06-19 20:33:03 +10:00

65 lines
2.6 KiB
JavaScript

//environment variables
require('dotenv').config();
const round = (x) => Math.round(x * 100) / 100;
const statisticsRequest = (connection) => (req, res) => {
let query = 'SELECT COUNT(*) AS playerCount, SUM(gold) / COUNT(*) AS goldAverage, SUM(recruits) AS recruitTotal, SUM(soldiers) AS soldierTotal, SUM(scientists) AS scientistTotal, SUM(spies) AS spyTotal FROM profiles;';
connection.query(query, (err, results) => {
if (err) throw err;
let playerCount = results[0].playerCount;
let goldAverage = results[0].goldAverage;
let recruitTotal = results[0].recruitTotal;
let soldierTotal = results[0].soldierTotal;
let scientistTotal = results[0].scientistTotal;
let spyTotal = results[0].spyTotal;
//determine the correct tick rate based on the current gold average
//NOTE: copy/pasted
let tickRate = (() => {
//TMP: freeze the tick rate
return null;
if (results[0].goldAverage < 120) return 5;
if (results[0].goldAverage < 130) return 15;
if (results[0].goldAverage < 140) return 30;
return 60; //slow it way down
})();
let nextTick = tickRate ? tickRate - (new Date()).getMinutes() % tickRate : null;
let query = 'SELECT COUNT(*) AS activity FROM accounts WHERE lastActivityTime >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY);';
connection.query(query, (err, results) => {
if (err) throw err;
let activity = results[0].activity;
let activePercentage = round(activity / playerCount * 100);
let query = 'SELECT COUNT(*) AS newPlayers FROM profiles WHERE td >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)';
connection.query(query, (err, results) => {
if (err) throw err;
let newPlayers = results[0].newPlayers;
res.status(200).json({
'Player Count': playerCount,
'Active Players': activity,
'Active Percentage': { string: `${activePercentage}%`, color: activePercentage >= 5 ? 'lightgreen' : activePercentage >= 3 ? 'yellow' : 'red'},
'New Players': newPlayers > 0 ? { string: `${newPlayers} (Welcome aboard!)`, color: 'lightgreen' } : { string: '0', color: 'yellow' },
'Recruits Total': recruitTotal,
'Soldier Total': soldierTotal,
'Scientist Total': scientistTotal,
'Spy Total': { string: '[Classified]', color: 'red' },
'Gold Average': `${round(goldAverage)}`,
'Gold Tick Rate': tickRate ? `${tickRate} minutes` : { string: 'Frozen', color: 'red' },
'Gold Next Tick': nextTick ? `${nextTick} minute${nextTick === 1 ? '' : 's'} from now` : { string: 'Frozen', color: 'red' }
});
res.end();
});
});
});
};
module.exports = {
statisticsRequest: statisticsRequest
};