Added badge selection

This commit is contained in:
2019-06-08 10:20:10 +10:00
parent d8a7dd4933
commit 2a27572562
21 changed files with 396 additions and 15 deletions
+32
View File
@@ -0,0 +1,32 @@
{
"Alpha Tester": {
"filename": "alpha_tester.png",
"description": "Awarded to everyone who joined before or on the 7th of June, 2019 (AEST).",
"visible": true,
"earnable": false
},
"Capture The Flag": {
"filename": "capture_the_flag.png",
"description": "This badge is stolen by successful attacks.",
"visible": true,
"earnable": true
},
"Combat Master": {
"filename": "combat_master.png",
"description": "You have successfully attacked 100 times.",
"visible": true,
"earnable": true
},
"Gold Horde": {
"filename": "gold_horde.png",
"description": "You purchased this badge for 500 gold.",
"visible": true,
"earnable": true
},
"King Of The Hill": {
"filename": "king_of_the_hill.png",
"description": "You held your position at the top of the game ladder for a whole day.",
"visible": true,
"earnable": true
}
}
+132
View File
@@ -0,0 +1,132 @@
//environment variables
require('dotenv').config();
//utilities
let { log } = require('../common/utilities.js');
let { logActivity } = require('./utilities.js');
const getBadgesStatistics = (cb) => {
//TODO: apiVisible field
return cb(undefined, { 'statistics': require('./badge_statistics.json') });
};
const getBadgesOwned = (connection, id, cb) => {
let query = 'SELECT name, active FROM badges WHERE accountId = ?;';
connection.query(query, [id], (err, results) => {
if (err) throw err;
let ret = {}; //names, active
Object.keys(results).map((key) => {
if (ret[results[key].name] !== undefined) {
log('WARNING: Invalid database state, badges owned', id, JSON.stringify(results));
}
ret[results[key].name] = { active: results[key].active };
});
return cb(undefined, { 'owned': ret });
});
}
const listRequest = (connection) => (req, res) => {
getBadgesStatistics((err, results) => {
if (err) throw err;
res.status(200).json(results);
res.end();
log('Badge list sent');
});
}
const ownedRequest = (connection) => (req, res) => {
//validate the credentials
let query = 'SELECT COUNT(*) AS total FROM sessions WHERE accountId = ? AND token = ?;';
connection.query(query, [req.body.id, req.body.token], (err, credentials) => {
if (err) throw err;
if (credentials[0].total !== 1) {
res.status(400).write(log('Invalid badges owned credentials', JSON.stringify(body), body.id, body.token));
res.end();
return;
}
//get stats and owned
getBadgesStatistics((err, badgesStatistics) => {
if (err) throw err;
getBadgesOwned(connection, req.body.id, (err, badgesOWned) => {
if (err) throw err;
res.status(200).json(Object.assign({}, badgesStatistics, badgesOWned));
res.end();
log('Badges owned sent', req.body.id);
});
});
});
}
const selectActiveBadge = (connection) => (req, res) => {
//validate the credentials
let query = 'SELECT COUNT(*) AS total FROM sessions WHERE accountId = ? AND token = ?;';
connection.query(query, [req.body.id, req.body.token], (err, credentials) => {
if (err) throw err;
if (credentials[0].total !== 1) {
res.status(400).write(log('Invalid active badge select credentials', JSON.stringify(body), body.id, body.token));
res.end();
return;
}
//check to see if the player owns this badge
getBadgesOwned(connection, req.body.id, (err, { owned }) => {
if (err) throw err;
if (req.body.name !== null && !owned[req.body.name]) {
res.status(400).write('You don\'t own that badge');
res.end();
return;
}
//zero out the user's selection
let query = 'UPDATE badges SET active = FALSE WHERE accountId = ?;';
connection.query(query, [req.body.id], (err) => {
if (err) throw err;
//update the user's selection
let query = 'UPDATE badges SET active = TRUE WHERE accountId = ? AND name = ?;';
connection.query(query, [req.body.id, req.body.name], (err) => {
if (err) throw err;
//re-grab the owned badges (with updated info)
getBadgesOwned(connection, req.body.id, (err, results) => {
if (err) throw err;
res.status(200).json(results);
res.end();
log('Updated badge selection', req.body.id, req.body.name);
logActivity(connection, req.body.id);
});
});
});
});
});
};
const rewardBadge = (connection, id, badgeName) => {
//TODO: constants as badge/equipment names?
let query = 'INSERT IGNORE badges (accountId, name) VALUES (?, ?);';
connection.query(query, [id, badgeName], (err) => {
if (err) throw err;
});
};
module.exports = {
listRequest: listRequest,
ownedRequest: ownedRequest,
selectActiveBadge: selectActiveBadge,
rewardBadge: rewardBadge
};
+6 -6
View File
@@ -4,7 +4,7 @@ require('dotenv').config();
//utilities
let { log } = require('../common/utilities.js');
let { getEquipmentStatistics, getOwned, isAttacking, isSpying, logActivity } = require('./utilities.js');
let { getEquipmentStatistics, getEquipmentOwned, isAttacking, isSpying, logActivity } = require('./utilities.js');
const equipmentRequest = (connection) => (req, res) => {
//validate the credentials
@@ -28,7 +28,7 @@ const equipmentRequest = (connection) => (req, res) => {
return;
}
return getOwned(connection, req.body.id, (err, ownedObj) => {
return getEquipmentOwned(connection, req.body.id, (err, ownedObj) => {
if (err) {
res.status(400).write(log(err, req.body.id, req.body.token, req.body.field));
res.end();
@@ -56,7 +56,7 @@ const equipmentRequest = (connection) => (req, res) => {
});
case 'owned':
return getOwned(connection, req.body.id, (err, obj) => {
return getEquipmentOwned(connection, req.body.id, (err, obj) => {
if (err) {
res.status(400).write(log(err, req.body.id, req.body.token, req.body.field));
} else {
@@ -172,10 +172,10 @@ const purchaseRequest = (connection) => (req, res) => {
if (err) throw err;
//return the new owned data
getOwned(connection, req.body.id, (err, results) => {
getEquipmentOwned(connection, req.body.id, (err, results) => {
if (err) throw err;
res.status(200).json(Object.assign(results));
res.status(200).json(Object.assign(results)); //TODO: Why is assign here?
res.end();
log('Purchase made', req.body.id, req.body.token, req.body.type, req.body.name);
@@ -265,7 +265,7 @@ const sellRequest = (connection) => (req, res) => {
if (err) throw err;
//return the new owned data
getOwned(connection, req.body.id, (err, results) => {
getEquipmentOwned(connection, req.body.id, (err, results) => {
if (err) throw err;
res.status(200).json(Object.assign(results));
+5
View File
@@ -66,6 +66,11 @@ app.post('/equipmentrequest', equipment.equipmentRequest(connection));
app.post('/equipmentpurchaserequest', equipment.purchaseRequest(connection));
app.post('/equipmentsellrequest', equipment.sellRequest(connection));
let badges = require('./badges.js');
app.post('/badgeslistrequest', badges.listRequest(connection));
app.post('/badgesownedrequest', badges.ownedRequest(connection));
app.post('/badgeselectactiverequest', badges.selectActiveBadge(connection));
//static directories
app.use('/content', express.static(path.resolve(__dirname + '/../public/content')) );
app.use('/img', express.static(path.resolve(__dirname + '/../public/img')) );
+2 -2
View File
@@ -9,7 +9,7 @@ const getEquipmentStatistics = (cb) => {
return cb(undefined, { 'statistics': require('./equipment_statistics.json') });
};
const getOwned = (connection, id, cb) => {
const getEquipmentOwned = (connection, id, cb) => {
let query = 'SELECT name, quantity FROM equipment WHERE accountId = ?;';
connection.query(query, [id], (err, results) => {
if (err) throw err;
@@ -95,7 +95,7 @@ const logActivity = (connection, id) => {
module.exports = {
getEquipmentStatistics: getEquipmentStatistics,
getOwned: getOwned,
getEquipmentOwned: getEquipmentOwned,
isAttacking: isAttacking,
isSpying: isSpying,
logActivity: logActivity