diff --git a/ADAM/core.js b/ADAM/core.js index b088572..f2ee333 100644 --- a/ADAM/core.js +++ b/ADAM/core.js @@ -21,6 +21,7 @@ exports.ProcessGameplayCommands = function(client, message, dialog) { if (checkInResponse === "available") { shared.SendPublicMessage(client, message.author, message.channel, dialog("checkin", checkinAmount)); shared.AddXP(client, message.author, 1); //1XP + exports.HandleLevelUp(client, message.member, message.channel, dialog); } else { shared.SendPublicMessage(client, message.channel, dialog("checkinLocked", message.author.id, checkInResponse)); } @@ -67,61 +68,8 @@ exports.ProcessGameplayCommands = function(client, message, dialog) { shared.SendPublicMessage(client, message.author, message.channel, dialog("giveSuccessful", targetMember.id, amount)); return true; - case "stats": //TODO: fold this code into a function - // Sees if the user is supposed to level up - let levelUp = shared.LevelUp(client, message.member); //TODO: process automatically - - // Grabs all parameters from server - //TODO: improve this once the server-side has been updated - let attacker = String(dataRequest.loadServerData("userStats",message.author.id)).split(","); - - if (attacker[0] == "failure") { - shared.SendPublicMessage(client, message.author, message.channel, "The server returned an error."); - return true; - } - - let attackerStrength = parseFloat(attacker[1]); //TODO: constants representing the player structure instead of [0] - let attackerSpeed = parseFloat(attacker[2]); - let attackerStamina = parseFloat(attacker[3]); - let attackerHealth = parseFloat(attacker[4]); - let attackerMaxStamina = parseFloat(attacker[5]); - let attackerMaxHealth = parseFloat(attacker[6]); - let attackerWallet = parseFloat(attacker[7]); - let attackerXP = parseFloat(attacker[8]); - let attackerLVL = Math.floor(parseFloat(attacker[9])); - let attackerLvlPercent = parseFloat(attacker[10]); - let attackerStatPoints = parseFloat(attacker[11]); - - // Forms stats into a string - var levelText = `:level: **${attackerLVL}**`; //NOTE: I don't like backticks - var levelProgress = `(${attackerLvlPercent}%)`; - var crystalText = `:crystals: **${attackerWallet}**`; - var cannisterText = `:cannister: **${attackerStatPoints}**`; - var userStats = "```" + `STR: ${attackerStrength} | SPD: ${attackerSpeed} | STAM: ${attackerStamina}/${attackerMaxStamina} | HP: ${attackerHealth}/${attackerMaxHealth}` + "```"; - - // Says level is maxed out if it is LVL 30+ - if (attackerLVL >= process.env.RANK_3_THRESHOLD) { - levelProgress = "(MAX)"; - } - - // Creates embed & sends it - const embed = new Discord.RichEmbed() - .setAuthor(`${message.member.displayName}`, message.author.avatarURL) - .setColor(message.member.displayColor) - .setDescription(`${levelText} ${levelProgress} | ${crystalText} | ${cannisterText}`) - .addField("Stats", userStats) - .setFooter("Commands: !help | !lore | !checkin | !give"); - - message.channel.send(embed); - - //handle levelling up - if (levelUp === "levelUp" || levelUp === "RankUp") { - if (attackerLVL >= process.env.RANK_3_THRESHOLD) { - shared.SendPublicMessage(client, message.author, message.channel, dialog("levelUpCap", dialog("levelUpCapRemark"), attackerLVL)); - } else { - shared.SendPublicMessage(client, message.author, message.channel, dialog("LevelUp", dialog("levelUpRemark"), attackerLVL, attackerStatPoints)); - } - } + case "stats": + exports.ProcessStatsCommand(client, message.member, message.channel, dialog); return true; } @@ -161,4 +109,121 @@ exports.ProcessFactionChangeAttempt = function(client, message, factionRole, dia }) .catch(console.error); return true; +} + +//ProcessStatsCommand +//client - discord.js client +//member - discord.js member +//channel - discord.js channel +//dialog - dialog function +exports.ProcessStatsCommand = function(client, member, channel, dialog) { + exports.HandleLevelUp(client, member, channel, dialog); + let stats = exports.GetStats(member.user); + exports.PrintStats(client, member, channel, stats); +} + +//GetStats +//user - discord.js user OR username +exports.GetStats = function(user) { //Grabs all parameters from server + //handle user strings + if (typeof(user) === "string") { + user = client.users.find(item => item.username === user || item.id === user); + } + + let userStatsResponse = String(dataRequest.loadServerData("userStats",user.id)).split(","); + + if (userStatsResponse[0] == "failure") { + throw "server returned an error to userStats request"; + } + + let strength = parseFloat(userStatsResponse[1]); //TODO: constants representing the player structure instead of [0] + let speed = parseFloat(userStatsResponse[2]); + let stamina = parseFloat(userStatsResponse[3]); + let health = parseFloat(userStatsResponse[4]); + let maxStamina = parseFloat(userStatsResponse[5]); + let maxHealth = parseFloat(userStatsResponse[6]); + let wallet = parseFloat(userStatsResponse[7]); + let experience = parseFloat(userStatsResponse[8]); + let level = Math.floor(parseFloat(userStatsResponse[9])); + let levelPercent = parseFloat(userStatsResponse[10]); + let statPoints = parseFloat(userStatsResponse[11]); + + return { + strength: strength, + speed: speed, + stamina: stamina, + health: health, + maxStamina: maxStamina, + maxHealth: maxHealth, + wallet: wallet, + experience: experience, + level: level, + levelPercent: levelPercent, + statPoints: statPoints + }; +} + +//PrintStats +//client - discord.js client +//member - discord.js member OR username OR id +//channel - discord.js channel OR channel name OR id +//stats - stats generated by GetStats +exports.PrintStats = function(client, member, channel, stats) { + //handle member strings + if (typeof(member) === "string") { //TODO: fold these into their own functions EVERYWHERE. + //get the member + let user = client.users.find(item => item.username === member || item.id === member); + member = guild.members.get(user.id); + } + + //handle channel strings + if (typeof(channel) === "string") { + channel = client.channels.find(item => item.name === channel || item.id === channel); + } + + // Forms stats into a string + let levelText = `:level: **${stats.level}**`; //NOTE: I don't like backticks + let levelProgress = `(${stats.levelPercent}%)`; + let crystalText = `:crystals: **${stats.wallet}**`; + let cannisterText = `:cannister: **${stats.statPoints}**`; + let userStats = "```" + `STR: ${stats.strength} | SPD: ${stats.speed} | STAM: ${stats.stamina}/${stats.maxStamina} | HP: ${stats.health}/${stats.maxHealth}` + "```"; + + // Says level is maxed out if it is LVL 30+ + if (stats.level >= process.env.RANK_3_THRESHOLD) { + levelProgress = "(MAX)"; + } + + // Creates embed & sends it + const embed = new Discord.RichEmbed() + .setAuthor(`${member.user.username}`, member.user.avatarURL) + .setColor(member.displayColor) + .setDescription(`${levelText} ${levelProgress} | ${crystalText} | ${cannisterText}`) + .addField("Stats", userStats) + .setFooter("Commands: !help | !lore | !checkin | !give"); + + channel.send(embed); +} + +//HandleLevelUp +//client - discord.js client +//member - discord.js member +//channel - discord.js channel +//dialog - dialog function +exports.HandleLevelUp = function(client, member, channel, dialog) { + // Sees if the user is supposed to level up + let [levelUpResponse, level, statPoints] = shared.LevelUp(client, member); + + //handle channel strings + if (typeof(channel) === "string") { + channel = client.channels.find(item => item.name === channel || item.id === channel); + } + + //handle levelling up + if (levelUpResponse === "levelUp" || levelUpResponse === "RankUp") { + if (level >= process.env.RANK_3_THRESHOLD) { + shared.SendPublicMessage(client, member.user, channel, dialog("levelUpCap", dialog("levelUpCapRemark"), level)); + } else { + shared.SendPublicMessage(client, member.user, channel, dialog("LevelUp", dialog("levelUpRemark"), level, statPoints)); + } + } } \ No newline at end of file diff --git a/Shared/progression.js b/Shared/progression.js index 4f67ca5..4a227a3 100644 --- a/Shared/progression.js +++ b/Shared/progression.js @@ -42,9 +42,11 @@ exports.LevelUp = function(client, member) { //NOTE: why is this called separate let rankUp = exports.RankUp(client, member, level); if (rankUp == "rankUp") { - return rankUp; + return [rankUp, level, statPoints]; } else if (responseMessage === "levelup") { - return "levelUp"; + return ["levelUp", level, statPoints]; + } else { + return ["", level, statPoints]; } }