diff --git a/BOT_Graze/bot-graze.js b/BOT_Graze/bot-graze.js index 6db1881..93c0160 100644 --- a/BOT_Graze/bot-graze.js +++ b/BOT_Graze/bot-graze.js @@ -111,7 +111,7 @@ function printUpgrades(user, channel) { .setColor(client.guilds.get(process.env.SANCTUM_ID).roles.find(role => role.name === "NPC").color) //NOTE: probably a better way to do this .setTitle("Nanotech Upgrades") .setDescription(dialog("upgradeText")) - .setFooter(`${user.username}, you have ${stats.wallet} crystals. Use !upgrade [OPTION] to buy.`); //TODO: move this to dialog? + .setFooter(`${user.username}, you have ${stats.upgradePoints} cannisters. Use !upgrade [OPTION] to upgrade.`); //TODO: move this to dialog? shared.SendPublicMessage(client, user, channel, dialog("upgradeHeading")); channel.send({ embed }); @@ -120,6 +120,36 @@ function printUpgrades(user, channel) { shared.OnServerData("userStats", handleResponse, user.id); } -function processUpgradeCommand(uset, channel, args) { - //TODO +function processUpgradeCommand(user, channel, args) { + //parse the stat to upgrade + let statToUpgrade; + switch(String(args[0]).toLowerCase()) { + case "str": + case "strength": + statToUpgrade = "strength"; + break; + case "spd": + case "speed": + statToUpgrade = "speed"; + break; + case "stam": + case "stamina": + statToUpgrade = "stamina"; + break; + case "hp": + case "health": + statToUpgrade = "health"; + break; + } + + if (typeof(statToUpgrade) === "undefined") { + shared.SendPublicMessage(client, user, channel, dialog("upgradeParseError")); + return; + } + + let handleResponse = function(response, suffix) { + shared.SendPublicMessage(client, user, channel, dialog(response, statToUpgrade, suffix)); + } + + shared.OnServerData("upgrade", handleResponse, user.id, statToUpgrade); } diff --git a/BOT_Graze/dialog.json b/BOT_Graze/dialog.json index f061d18..a603c75 100644 --- a/BOT_Graze/dialog.json +++ b/BOT_Graze/dialog.json @@ -1,7 +1,12 @@ { "upgradeHeading": "Hey buddy! Here's what we can upgrade ASAP!", - "upgradeText": "STR - :cannister: **1**\n```Permanently upgrades your Strength by 1, so you can hit them Ravagers harder.```\nSPD - :cannister: **1**\n```Permanently upgrades your Speed by 1, so you can get hit less in battle.```\nSTAM - :cannister: **1**\n```Permanently upgrades your Max Stamina by 1, so you can hit more Ravagers.```\nHP - :cannister: **1**\n```Permanently upgrades your Max HP by 10, so you can can take those beatings like a champ.```", + "upgradeText": "STR - :cannister: **1**\n```Permanently upgrades your Strength by 1, so you can hit them Ravagers harder.```\nSPD - :cannister: **1**\n```Permanently upgrades your Speed by 1, so you can get hit less in battle.```\nSTAM - :cannister: **1**\n```Permanently upgrades your Max Stamina by 1, so you can hit more Ravagers.```\nHP - :cannister: **1**\n```Permanently upgrades your Max HP by 10, so you can take those beatings like a champ.```", + + "upgradeSuccess": "Sweet! I used your Nanotech Cannister to upgrade your **{1}** by {2}!", + "upgradeFailure": "Sorry, no can do right now. Come back later though, ok?", + "upgradeNotEnoughPoints": "Hey now, you don't have that many cannisters.", + "upgradeParseError": "Believe me, I wish I could upgrade things like that.", "noResult": "I have no idea what you just said." } diff --git a/SERVER_City/server-city.js b/SERVER_City/server-city.js index 7debb0b..0ffa6a3 100644 --- a/SERVER_City/server-city.js +++ b/SERVER_City/server-city.js @@ -46,7 +46,7 @@ io.on("connection", async (socket) => { socket.on("updateStamina", handleUpdateStamina); socket.on("conversion", handleConversion); socket.on("checkin", handleCheckin); - socket.on("wallet", handleWallet); //TODO: server ping from ADAM + socket.on("wallet", handleWallet); socket.on("transfer", handleTransfer); socket.on("userStats", handleUserStats); socket.on("addXP", handleAddXP); @@ -54,6 +54,7 @@ io.on("connection", async (socket) => { socket.on("reviveAll", handleReviveAll); socket.on("revive", handleRevive); socket.on("heal", handleHeal); + socket.on("upgrade", handleUpgrade); }); //listen @@ -390,6 +391,48 @@ function innerHeal(data, fn, result, logType = "unknown") { }); } +async function handleUpgrade({ data }, fn) { + console.log("received an upgrade request..."); + //data[0] = user ID + //data[1] = statToUpgrade + + //fn parameters: ["upgradeSuccess", "upgradeFailure", "upgradeNotEnoughPoints"], suffix + + //check the upgrade points + let query = "SELECT upgradePoints FROM users WHERE userID = ? LIMIT 1;"; + return dbConnection.query(query, [data[0]], (err, result) => { + if (err) throw err; + + if (result[0].upgradePoints == 0) { + return fn("upgradeNotEnoughPoints"); + } + + //determine the upgrade query + let query = "UPDATE users SET "; + switch(data[1]) { + case "strength": + query += "strength = strength + 1, "; + break; + case "speed": + query += "speed = speed + 1, "; + break; + case "stamina": + query += "maxStamina = maxStamina + 1, stamina = stamina + 1, "; + break; + case "health": + query += "maxHealth = maxHealth + 10, health = health + 10, "; + break; + } + query += "upgradePoints = upgradePoints - 1 WHERE userID = ? LIMIT 1;"; + + return dbConnection.query(query, data[0], (err, result) => { + if (err) throw err; + dbLog(data[0], "upgrade", "upgrade " + data[1]);//TODO: better log + return fn("upgradeSuccess", data[1] === "health" ? "10 points" : "1 point"); + }); + }); +} + //utility functions function calculateLevel(experience) { const levelBase = 1.2;