mirror of
https://github.com/Ratstail91/SANCTUM.git
synced 2025-11-29 02:24:27 +11:00
working on making levelling smoother
This commit is contained in:
175
ADAM/core.js
175
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;
|
||||
}
|
||||
@@ -162,3 +110,120 @@ 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user