From efc6e6f150e1dd372304fe8869413866d8f781dc Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Sun, 9 Jun 2019 16:31:55 +1000 Subject: [PATCH] Added Combat Master badge code --- server/badge_statistics.json | 2 +- server/badges.js | 33 +++++++++++++++++++++++++++++---- server/index.js | 1 + 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/server/badge_statistics.json b/server/badge_statistics.json index 7c1349a..f9d6bb8 100644 --- a/server/badge_statistics.json +++ b/server/badge_statistics.json @@ -15,7 +15,7 @@ "filename": "combat_master.png", "description": "You have successfully attacked 100 times.", "visible": true, - "unlockable": null + "unlockable": true }, "Gold Horde": { "filename": "gold_horde.png", diff --git a/server/badges.js b/server/badges.js index 760aec7..39011a4 100644 --- a/server/badges.js +++ b/server/badges.js @@ -1,6 +1,9 @@ //environment variables require('dotenv').config(); +//libraries +let CronJob = require('cron').CronJob; + //utilities let { log } = require('../common/utilities.js'); @@ -93,17 +96,39 @@ const selectActiveBadge = (connection) => (req, res) => { }); }; -const rewardBadge = (connection, id, badgeName) => { +const rewardBadge = (connection, id, badgeName, cb) => { //TODO: constants as badge/equipment names? - let query = 'INSERT IGNORE badges (accountId, name) VALUES (?, ?);'; - connection.query(query, [id, badgeName], (err) => { + let query = 'INSERT INTO badges (accountId, name) SELECT ?, ? FROM DUAL WHERE NOT EXISTS(SELECT 1 FROM badges WHERE accountId = ? AND name = ?) LIMIT 1;'; + connection.query(query, [id, badgeName, id, badgeName], (err, packet) => { if (err) throw err; + + if (packet.affectedRows) { + cb(id, badgeName); + } }); }; +const runBadgeTicks = (connection) => { + //Combat Master + let combatMasterBadgeTickJob = new CronJob('0 * * * * *', () => { //once a minute - combats aren't that fast + //gather the total combats + let query = 'SELECT * FROM (SELECT attackerId, COUNT(attackerId) AS successfulAttacks FROM pastCombat WHERE victor = "attacker" GROUP BY attackerId ORDER BY attackerId) AS t WHERE successfulAttacks >= 100;'; + connection.query(query, (err, results) => { + if (err) throw err; + + for (let i = 0; i < results.length; i++) { + rewardBadge(connection, results[i].attackerId, 'Combat Master', (id, badgeName) => log('Badge rewarded', id, badgeName)); + } + }); + }); + + combatMasterBadgeTickJob.start(); +} + module.exports = { listRequest: listRequest, ownedRequest: ownedRequest, selectActiveBadge: selectActiveBadge, - rewardBadge: rewardBadge + rewardBadge: rewardBadge, + runBadgeTicks: runBadgeTicks }; \ No newline at end of file diff --git a/server/index.js b/server/index.js index d5f85c5..59cfdf0 100644 --- a/server/index.js +++ b/server/index.js @@ -72,6 +72,7 @@ let badges = require('./badges.js'); app.post('/badgeslistrequest', badges.listRequest(connection)); app.post('/badgesownedrequest', badges.ownedRequest(connection)); app.post('/badgeselectactiverequest', badges.selectActiveBadge(connection)); +badges.runBadgeTicks(connection); //static directories app.use('/content', express.static(path.resolve(__dirname + '/../public/content')) );