mirror of
https://github.com/Ratstail91/SANCTUM.git
synced 2025-11-29 02:24:27 +11:00
Implemented levelling and logging
This commit is contained in:
@@ -141,12 +141,11 @@ function processBasicCommands(client, message) {
|
|||||||
|
|
||||||
case "wallet": //DEBUGGING
|
case "wallet": //DEBUGGING
|
||||||
shared.OnServerData("wallet", (amount) => {
|
shared.OnServerData("wallet", (amount) => {
|
||||||
shared.SendPublicMessage(client, message.channel, "Wallet: " + amount);
|
shared.SendPublicMessage(client, message.author, message.channel, "Wallet: " + amount);
|
||||||
}, message.author.id);
|
}, message.author.id);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
//ADAM and the faction leaders print the intros in the gate
|
//ADAM and the faction leaders print the intros in the gate
|
||||||
//TODO: prune the unneeded intros from each bot
|
|
||||||
case "intro":
|
case "intro":
|
||||||
if (shared.IsAdmin(client, message.author) && message.channel.id == process.env.GATE_CHANNEL_ID) {
|
if (shared.IsAdmin(client, message.author) && message.channel.id == process.env.GATE_CHANNEL_ID) {
|
||||||
shared.SendPublicMessage(client, client.channels.get(process.env.GATE_CHANNEL_ID), dialog("intro"));
|
shared.SendPublicMessage(client, client.channels.get(process.env.GATE_CHANNEL_ID), dialog("intro"));
|
||||||
@@ -160,6 +159,11 @@ function processBasicCommands(client, message) {
|
|||||||
message.delete(1000);
|
message.delete(1000);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case "debugxp":
|
||||||
|
shared.SendServerData("addXP", message.author.id, args[0]);
|
||||||
|
shared.SendPublicMessage(client, message.author, message.channel, "debug XP added");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ io.on("connection", async (socket) => {
|
|||||||
socket.on("updateStamina", handleUpdateStamina);
|
socket.on("updateStamina", handleUpdateStamina);
|
||||||
socket.on("conversion", handleConversion);
|
socket.on("conversion", handleConversion);
|
||||||
socket.on("checkin", handleCheckin);
|
socket.on("checkin", handleCheckin);
|
||||||
socket.on("wallet", handleWallet);
|
socket.on("wallet", handleWallet); //TODO: server ping from ADAM
|
||||||
socket.on("transfer", handleTransfer);
|
socket.on("transfer", handleTransfer);
|
||||||
socket.on("userStats", handleUserStats);
|
socket.on("userStats", handleUserStats);
|
||||||
socket.on("addXP", handleAddXP);
|
socket.on("addXP", handleAddXP);
|
||||||
@@ -83,14 +83,13 @@ async function handleConversion({ data }, fn) {
|
|||||||
let query = `INSERT INTO users (userID, faction, factionChanged) VALUES (${data[0]}, ${data[1]}, NOW());`;
|
let query = `INSERT INTO users (userID, faction, factionChanged) VALUES (${data[0]}, ${data[1]}, NOW());`;
|
||||||
return dbConnection.query(query, (err, result) => {
|
return dbConnection.query(query, (err, result) => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
console.log("new user");
|
dbLog(data[0], "new user", `joined faction ${data[1]}`);
|
||||||
return fn("newUser");
|
return fn("newUser");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//check if already joined this faction
|
//check if already joined this faction
|
||||||
if (result[0].faction == data[1]) { //faction == factionRole
|
if (result[0].faction == data[1]) { //faction == factionRole
|
||||||
console.log("alreadyJoined");
|
|
||||||
return fn("alreadyJoined");
|
return fn("alreadyJoined");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,16 +98,14 @@ async function handleConversion({ data }, fn) {
|
|||||||
|
|
||||||
return dbConnection.query(query, (err, result) => {
|
return dbConnection.query(query, (err, result) => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
console.log(result[0]['TIME_TO_SEC(TIMEDIFF(NOW(), factionChanged))']);
|
|
||||||
if(result[0]['TIME_TO_SEC(TIMEDIFF(NOW(), factionChanged))'] < 60 * 60 * 24 * 7) { //7 days
|
if(result[0]['TIME_TO_SEC(TIMEDIFF(NOW(), factionChanged))'] < 60 * 60 * 24 * 7) { //7 days
|
||||||
console.log("conversionLocked");
|
|
||||||
return fn("conversionLocked"); //too soon
|
return fn("conversionLocked"); //too soon
|
||||||
} else {
|
} else {
|
||||||
//update the database with the join
|
//update the database with the join
|
||||||
query = `UPDATE users SET faction = ${data[1]}, factionChanged = NOW() WHERE userID='${data[0]}';`;
|
query = `UPDATE users SET faction = ${data[1]}, factionChanged = NOW() WHERE userID='${data[0]}';`;
|
||||||
return dbConnection.query(query, (err, result) => {
|
return dbConnection.query(query, (err, result) => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
console.log("joined"); //TODO: convert these to database logs
|
dbLog(data[0], "joined", `joined faction ${data[1]}`);
|
||||||
return fn("joined");
|
return fn("joined");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -119,7 +116,6 @@ async function handleConversion({ data }, fn) {
|
|||||||
//handle checkin, and add 1 XP
|
//handle checkin, and add 1 XP
|
||||||
async function handleCheckin({ data }, fn) {
|
async function handleCheckin({ data }, fn) {
|
||||||
//handle checkins (grant crystal bonus)
|
//handle checkins (grant crystal bonus)
|
||||||
//TODO: handle XP (grant 1 XP)
|
|
||||||
|
|
||||||
//arguments to fn: ["available", time since last checkin], randomAmount
|
//arguments to fn: ["available", time since last checkin], randomAmount
|
||||||
|
|
||||||
@@ -129,16 +125,17 @@ async function handleCheckin({ data }, fn) {
|
|||||||
|
|
||||||
return dbConnection.query(query, (err, result) => {
|
return dbConnection.query(query, (err, result) => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
console.log(result);
|
|
||||||
|
|
||||||
if (result[0]['TIME_TO_SEC(TIMEDIFF(NOW(), lastCheckin))'] == null || result[0]['TIME_TO_SEC(TIMEDIFF(NOW(), lastCheckin))'] > 60 * 60 * 22) { //22 hours
|
if (result[0]['TIME_TO_SEC(TIMEDIFF(NOW(), lastCheckin))'] == null || result[0]['TIME_TO_SEC(TIMEDIFF(NOW(), lastCheckin))'] > 60 * 60 * 22) { //22 hours
|
||||||
let query = `UPDATE users SET lastCheckin = NOW(), wallet = wallet + ${randomAmount} WHERE userID='${data[0]}' LIMIT 1;`;
|
let query = `UPDATE users SET lastCheckin = NOW(), wallet = wallet + ${randomAmount} WHERE userID='${data[0]}' LIMIT 1;`;
|
||||||
return dbConnection.query(query, (err, result) => {
|
return dbConnection.query(query, (err, result) => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
|
dbLog(data[0], "checkin", `gained ${randomAmount} to wallet`);
|
||||||
|
addExperience(data[0], 1); //Add 1 XP on every checkin
|
||||||
return fn("available", randomAmount);
|
return fn("available", randomAmount);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return fn(result[0]['TIME_TO_SEC(TIMEDIFF(NOW(), lastCheckin))']); //TODO: Time ago function
|
return fn(calculateTimeAgo(result[0]['TIME_TO_SEC(TIMEDIFF(NOW(), lastCheckin))']));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -150,6 +147,7 @@ async function handleWallet({ data }, fn) {
|
|||||||
let query = `SELECT wallet FROM users WHERE userID='${data[0]}' LIMIT 1;`;
|
let query = `SELECT wallet FROM users WHERE userID='${data[0]}' LIMIT 1;`;
|
||||||
dbConnection.query(query, (err, result) => {
|
dbConnection.query(query, (err, result) => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
|
dbLog(data[0], "wallet query", `result: ${result[0].wallet}`);
|
||||||
fn(result[0].wallet);
|
fn(result[0].wallet);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -192,8 +190,8 @@ async function handleTransfer({ data }, fn) {
|
|||||||
return dbConnection.query(query, (err, result) => {
|
return dbConnection.query(query, (err, result) => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
|
|
||||||
//TODO: log here
|
|
||||||
//finally
|
//finally
|
||||||
|
dbLog(data[0], "wallet transfer", `${data[2]} to ${data[1]}`);
|
||||||
return fn("success");
|
return fn("success");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -226,7 +224,6 @@ async function handleUserStats({ data }, fn) {
|
|||||||
wallet: result[0].wallet
|
wallet: result[0].wallet
|
||||||
};
|
};
|
||||||
|
|
||||||
//TODO: log this
|
|
||||||
return fn(stats);
|
return fn(stats);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -236,17 +233,44 @@ async function handleAddXP({ userID, data }) {
|
|||||||
console.log("received an addXP request...");
|
console.log("received an addXP request...");
|
||||||
//data[0] = amount
|
//data[0] = amount
|
||||||
|
|
||||||
//TODO: add an amount of XP to a user account
|
addExperience(userID, data[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//handle levelling up
|
//handle levelling up
|
||||||
async function handleLevelUp({ data }, fn) {
|
async function handleLevelUp({ data }, fn) {
|
||||||
|
//NOTE: levelling up is handled manually because of reasons
|
||||||
console.log("received a levelUp request...");
|
console.log("received a levelUp request...");
|
||||||
//data[0] = user ID
|
//data[0] = user ID
|
||||||
|
|
||||||
if (fn) {
|
//parameters to fn: ["none", "levelUp"], level, upgradePoints
|
||||||
fn("none", 0, 0); //["none", "levelUp"], level, statPoints
|
|
||||||
}
|
//get the current level and total amount of experience
|
||||||
|
let query = `SELECT level, experience, upgradePoints FROM users WHERE userID='${data[0]}' LIMIT 1;`;
|
||||||
|
return dbConnection.query(query, (err, result) => {
|
||||||
|
if (err) throw err;
|
||||||
|
|
||||||
|
//calculate the correct level, and compare it with the result
|
||||||
|
let newLevel = Math.floor(calculateLevel(result[0].experience));
|
||||||
|
|
||||||
|
//if no levelling, return
|
||||||
|
if (newLevel == result[0].level) {
|
||||||
|
return fn("none", result[0].level, result[0].upgradePoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
//update the level and the upgrade points
|
||||||
|
let query = `UPDATE users SET level = ${newLevel}, upgradePoints = upgradePoints + ${newLevel - result[0].level} WHERE userID='${data[0]}' LIMIT 1;`;
|
||||||
|
return dbConnection.query(query, (err, result) => {
|
||||||
|
if (err) throw err;
|
||||||
|
|
||||||
|
//finally, pass the level and upgrade points to the client
|
||||||
|
let query = `SELECT level, upgradePoints FROM users WHERE userID='${data[0]}' LIMIT 1;`;
|
||||||
|
return dbConnection.query(query, (err, result) => {
|
||||||
|
if (err) throw err;
|
||||||
|
dbLog(data[0], "level up", `level: ${result[0]}, upgrade points: ${result[0].upgradePoints}`);
|
||||||
|
return fn("levelUp", result[0].level, result[0].upgradePoints);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//utility functions
|
//utility functions
|
||||||
@@ -263,3 +287,35 @@ function calculateLevelProgress(experience) {
|
|||||||
|
|
||||||
return Math.floor(decimal * 100); //percentage
|
return Math.floor(decimal * 100); //percentage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addExperience(userID, amount) {
|
||||||
|
//Add an amount of XP to a user account
|
||||||
|
let query = `UPDATE users SET experience = experience + ${amount} WHERE userID='${userID}' LIMIT 1;`;
|
||||||
|
return dbConnection.query(query, (err, result) => {
|
||||||
|
if (err) throw err;
|
||||||
|
dbLog(userID, "xp up", `amount added: ${amount}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function dbLog(id, type, data) {
|
||||||
|
let query = `INSERT INTO log (discordID, type, data) VALUES ('${id}', '${type}', '${data}')`;
|
||||||
|
return dbConnection.query(query, (err, result) => {
|
||||||
|
if (err) throw err;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function calculateTimeAgo(seconds) {
|
||||||
|
if (seconds < 60) {
|
||||||
|
return "just now";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (seconds < 60 * 60) {
|
||||||
|
return "just this hour";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (seconds < 60 * 60 * 24) {
|
||||||
|
return "just today";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "just recently";
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user