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") {
|
if (checkInResponse === "available") {
|
||||||
shared.SendPublicMessage(client, message.author, message.channel, dialog("checkin", checkinAmount));
|
shared.SendPublicMessage(client, message.author, message.channel, dialog("checkin", checkinAmount));
|
||||||
shared.AddXP(client, message.author, 1); //1XP
|
shared.AddXP(client, message.author, 1); //1XP
|
||||||
|
exports.HandleLevelUp(client, message.member, message.channel, dialog);
|
||||||
} else {
|
} else {
|
||||||
shared.SendPublicMessage(client, message.channel, dialog("checkinLocked", message.author.id, checkInResponse));
|
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));
|
shared.SendPublicMessage(client, message.author, message.channel, dialog("giveSuccessful", targetMember.id, amount));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case "stats": //TODO: fold this code into a function
|
case "stats":
|
||||||
// Sees if the user is supposed to level up
|
exports.ProcessStatsCommand(client, message.member, message.channel, dialog);
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -161,4 +109,121 @@ exports.ProcessFactionChangeAttempt = function(client, message, factionRole, dia
|
|||||||
})
|
})
|
||||||
.catch(console.error);
|
.catch(console.error);
|
||||||
return true;
|
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);
|
let rankUp = exports.RankUp(client, member, level);
|
||||||
|
|
||||||
if (rankUp == "rankUp") {
|
if (rankUp == "rankUp") {
|
||||||
return rankUp;
|
return [rankUp, level, statPoints];
|
||||||
} else if (responseMessage === "levelup") {
|
} else if (responseMessage === "levelup") {
|
||||||
return "levelUp";
|
return ["levelUp", level, statPoints];
|
||||||
|
} else {
|
||||||
|
return ["", level, statPoints];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user