v2.0.1, added and edited new cmds
This commit is contained in:
parent
b946d5f411
commit
940fe839a1
10 changed files with 228 additions and 831 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,6 +1,6 @@
|
||||||
node_modules/
|
node_modules/
|
||||||
/.env
|
/.env
|
||||||
/commands/CODM/
|
commands/CODM/
|
||||||
/dashboard/
|
/dashboard/
|
||||||
/util/Data/aliases.json
|
/util/Data/aliases.json
|
||||||
/util/Data/attachments.json
|
/util/Data/attachments.json
|
||||||
|
@ -9,6 +9,6 @@ node_modules/
|
||||||
/util/Data/perk.json
|
/util/Data/perk.json
|
||||||
/util/Data/skins.json
|
/util/Data/skins.json
|
||||||
/util/Data/weapons.json
|
/util/Data/weapons.json
|
||||||
/util/functions/common.json
|
/util/functions/common.js
|
||||||
/util/bash.sh
|
/util/bash.sh
|
||||||
/bot.js
|
/bot.js
|
|
@ -1,35 +1,73 @@
|
||||||
const { Client, Message, MessageEmbed } = require("discord.js");
|
const { Client, Message, MessageEmbed } = require("discord.js");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "fight",
|
name: "fight",
|
||||||
description: "Gooooooooooooooooooolag!",
|
description: "Goooooooooooooooolag!",
|
||||||
timeout: 10000,
|
timeout: 15000,
|
||||||
/**
|
/**
|
||||||
* @param {Client} client
|
* @param {Client} client
|
||||||
* @param {Message} message
|
* @param {Message} message
|
||||||
* @param {String[]} args
|
* @param {String[]} args
|
||||||
*/
|
*/
|
||||||
run: async (client, message, args) => {
|
run: async (client, message, args) => {
|
||||||
const Fight = [
|
const gaes = [
|
||||||
"`Snow Gae`",
|
"Gae",
|
||||||
"`Not Gae`",
|
"Super Gae",
|
||||||
"`Ultimate Gae`",
|
"Ultra Gae",
|
||||||
"`Gae`",
|
"Snow Gae",
|
||||||
"`Gae beyond repair`",
|
"Ultimate Gae",
|
||||||
"`Akimbo Gae`",
|
"Terminal Gae",
|
||||||
"`Mega Gae`",
|
"Akimbo Gae",
|
||||||
"`Super Gae`",
|
"Dead(extended timer)",
|
||||||
"`Ultra Gae`",
|
"Mega Gae",
|
||||||
"`Terminal Gae`",
|
"Cheez Gae",
|
||||||
"`Dead`",
|
"Gath Gae",
|
||||||
"`Path Gae`",
|
"Koosun Gae",
|
||||||
"`Cheez Gae`",
|
"KDR Gae",
|
||||||
"`Zero Gae`",
|
"Gaezer Gae",
|
||||||
"`KDR Gae`",
|
"Big Gae",
|
||||||
"`! not Gae`",
|
"Horni Gae",
|
||||||
|
"Zero Gae",
|
||||||
|
"Gae beyond repair",
|
||||||
|
"Dead×2(extended timer)",
|
||||||
|
"Not Gae",
|
||||||
|
"Animus Gae",
|
||||||
|
"Dust Gae",
|
||||||
|
"Orcus Gae",
|
||||||
|
"Gulag Cleaner",
|
||||||
|
"Kedar Gae",
|
||||||
|
"Smol Gae",
|
||||||
|
"Meta Gae",
|
||||||
|
"Mono Gae",
|
||||||
|
"Stippled Gae",
|
||||||
|
"BSA Gae",
|
||||||
|
"Oreo Gae",
|
||||||
|
"Random Gae",
|
||||||
|
"Tortol Gae",
|
||||||
|
"Amogus Gae",
|
||||||
|
"Gae×2",
|
||||||
|
"Dan Gae",
|
||||||
|
"Real Gae©®™",
|
||||||
|
"Mastered Ultra Instinct Gae",
|
||||||
|
"Bamboozled",
|
||||||
|
"More Gae",
|
||||||
|
"Morrre Gae",
|
||||||
|
"Most Gae",
|
||||||
|
"Undisputable Gae",
|
||||||
|
"Gae Prince of Horni",
|
||||||
|
"Gae with Y",
|
||||||
|
"Phatopenisis Gae",
|
||||||
|
"Gathophile",
|
||||||
|
"a Bot",
|
||||||
|
"locknload with 200 round RPD gae",
|
||||||
|
"ros gae",
|
||||||
];
|
];
|
||||||
const fightIndex = Fight[Math.floor(Math.random() * Fight.length)];
|
const gae = gaes[Math.floor(Math.random() * gaes.length)];
|
||||||
message.channel.send(
|
const embed = new MessageEmbed()
|
||||||
`**You have taken a chance at redemption in The Gulag, you fight only to find out that you're ${fightIndex}. If you somehow turned out to not be gae, DM an admin to get unmuted early you lucky bastard!!**`
|
.setTitle("**Gulag Fight**")
|
||||||
);
|
.setDescription(
|
||||||
|
`**${message.author}has taken a chance at redemption in The Gulag. \nYou fight only to find out that you're \`${gae}\`. If you somehow turned out to not be gae, DM an admin to get your timer halved ||only if your mute is less than 69m||**`
|
||||||
|
)
|
||||||
|
.setColor(5198940);
|
||||||
|
message.channel.send(embed);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
26
commands/Moderation/pin.js
Normal file
26
commands/Moderation/pin.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
const { Client, Message, MessageEmbed } = require("discord.js");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "pin",
|
||||||
|
usage: "(Message ID)",
|
||||||
|
description: "Pin a message in the server",
|
||||||
|
BotPerm: "MANAGE_MESSAGES",
|
||||||
|
UserPerm: "MANAGE_MESSAGES",
|
||||||
|
/**
|
||||||
|
* @param {Client} client
|
||||||
|
* @param {Message} message
|
||||||
|
* @param {String[]} args
|
||||||
|
*/
|
||||||
|
run: async (client, message, args) => {
|
||||||
|
if (!args[0]) return client.err(message, "Moderation", "pin", 27);
|
||||||
|
try {
|
||||||
|
const ch = message.guild.channels.cache.get(message.channel.id);
|
||||||
|
const msgs = await ch.messages.fetch(args[0]);
|
||||||
|
if (!msgs) return client.err(message, "Moderation", "pin", 52);
|
||||||
|
await msgs.pin();
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
return client.err(message, "Moderation", "pin", 999);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,5 +1,4 @@
|
||||||
const { Client, Message, MessageEmbed } = require("discord.js");
|
const Discord = require("discord.js");
|
||||||
const util = require("util");
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "eval",
|
name: "eval",
|
||||||
category: "Owner",
|
category: "Owner",
|
||||||
|
@ -13,35 +12,105 @@ module.exports = {
|
||||||
*/
|
*/
|
||||||
run: async (client, message, args) => {
|
run: async (client, message, args) => {
|
||||||
let code = args.join(" ");
|
let code = args.join(" ");
|
||||||
const embed = new MessageEmbed();
|
if (!code) return client.err(message, "Owner", "eval", 53);
|
||||||
if (!code) {
|
function CheckFilter(object) {
|
||||||
return client.err(message, "Owner", "eval", "Missing 'Code' argument");
|
if (typeof object === "string") {
|
||||||
|
object = object.replace(
|
||||||
|
new RegExp(client.token || process.env.TOKEN, "gi"),
|
||||||
|
"Cannot eval Token"
|
||||||
|
);
|
||||||
|
} else if (typeof object === "object") {
|
||||||
|
if (Array.isArray(object)) {
|
||||||
|
for (let i = 0; i < object.length; i++) {
|
||||||
|
object[i] = CheckFilter(object[i]);
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
let evaled = await eval(code),
|
|
||||||
output;
|
|
||||||
if (evaled.constructor.name === `Promise`) {
|
|
||||||
output = `📤 Output (Promise)`;
|
|
||||||
} else {
|
} else {
|
||||||
output = `📤 Output`;
|
for (let key in object) {
|
||||||
|
object[key] = CheckFilter(object[key]);
|
||||||
}
|
}
|
||||||
if (evaled.length > 800) {
|
|
||||||
evaled = evaled.substring(0, 800) + `...`;
|
|
||||||
}
|
}
|
||||||
embed
|
}
|
||||||
.addField(`📥 Input`, `\`\`\`\n${code}\n\`\`\``)
|
return object;
|
||||||
.addField(output, `\`\`\`js\n${evaled}\n\`\`\``)
|
}
|
||||||
|
let oldSend = Discord.TextChannel.prototype.send;
|
||||||
|
Discord.TextChannel.prototype.send = async function send(content, options) {
|
||||||
|
return oldSend.bind(this)(CheckFilter(content), CheckFilter(options));
|
||||||
|
};
|
||||||
|
let evaled;
|
||||||
|
try {
|
||||||
|
evaled = eval(code);
|
||||||
|
if (evaled instanceof Promise) evaled = await evaled;
|
||||||
|
} catch (err) {
|
||||||
|
evaled = err;
|
||||||
|
}
|
||||||
|
if (typeof evaled !== "string") evaled = require("util").inspect(evaled);
|
||||||
|
evaled = new (require("string-toolkit"))().toChunks(evaled, 750);
|
||||||
|
let reactions = ["❌", "⏪", "◀️", "⏹️", "▶️", "⏩"],
|
||||||
|
page = 0,
|
||||||
|
evaledEmbed = new Discord.MessageEmbed()
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.addField(`Status`, `\`\`\`diff\n+ Success\`\`\``);
|
.setDescription(`\`\`\`js\n${evaled[0]}\n\`\`\``)
|
||||||
return message.channel.send(embed);
|
.addField(`Type of`, `\`\`\`js\n${typeof evaled[0]}\n\`\`\``);
|
||||||
} catch (e) {
|
let mainMessage = await message.channel.send(evaledEmbed);
|
||||||
console.log(e.stack);
|
Discord.TextChannel.prototype.send = oldSend;
|
||||||
embed
|
await Promise.all(
|
||||||
.addField(`📥 Input`, `\`\`\`\n${code}\n\`\`\``)
|
(evaled.length === 1 ? ["❌", "⏹️"] : reactions).map(r =>
|
||||||
.addField(`📤 Output`, `\`\`\`js\n${e}\n\`\`\``)
|
mainMessage.react(r)
|
||||||
.addField(`Status`, `\`\`\`diff\n- Failed\`\`\``)
|
)
|
||||||
.setColor(client.color);
|
);
|
||||||
return message.channel.send(embed);
|
let filter = (reaction, user) =>
|
||||||
|
(evaled.length === 1 ? ["❌", "⏹️"] : reactions).some(
|
||||||
|
e => e === reaction.emoji.name
|
||||||
|
) && user.id === message.author.id;
|
||||||
|
let collector = mainMessage.createReactionCollector(filter, {
|
||||||
|
time: 300000,
|
||||||
|
});
|
||||||
|
collector.on("collect", async (reaction, user) => {
|
||||||
|
switch (reaction.emoji.name) {
|
||||||
|
case "❌":
|
||||||
|
await collector.stop();
|
||||||
|
return mainMessage.delete();
|
||||||
|
break;
|
||||||
|
case "⏪":
|
||||||
|
if (evaled.length === 1 || page === 0) return;
|
||||||
|
page = 0;
|
||||||
|
break;
|
||||||
|
case "◀️":
|
||||||
|
if (evaled.length === 1) return;
|
||||||
|
if (page === 0) {
|
||||||
|
page = evaled.length - 1;
|
||||||
|
} else {
|
||||||
|
page -= 1;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case "⏹️":
|
||||||
|
await collector.stop();
|
||||||
|
for (let reaction of mainMessage.reactions.cache.array()) {
|
||||||
|
await reaction.users.remove(client.user.id);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
case "▶️":
|
||||||
|
if (evaled.length === 1) return;
|
||||||
|
if (page === evaled.length - 1) {
|
||||||
|
page = 0;
|
||||||
|
} else {
|
||||||
|
page += 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "⏩":
|
||||||
|
if (evaled.length === 1 || page === evaled.length - 1) return;
|
||||||
|
page = evaled.length - 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
evaledEmbed = new Discord.MessageEmbed()
|
||||||
|
.setColor(message.guild.me.displayColor)
|
||||||
|
.setDescription(`\`\`\`js\n${evaled[page]}\n\`\`\``)
|
||||||
|
.addField(`Type of`, `\`\`\`js\n${typeof evaled[page]}\n\`\`\``);
|
||||||
|
|
||||||
|
await mainMessage.edit({
|
||||||
|
embed: evaledEmbed,
|
||||||
|
});
|
||||||
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
19
commands/Utilities/docs.js
Normal file
19
commands/Utilities/docs.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
const fetch = require("node-fetch");
|
||||||
|
module.exports = {
|
||||||
|
name: "docs",
|
||||||
|
usage: "(Query)",
|
||||||
|
description: "Search the discord.js docs for something!",
|
||||||
|
run: async (client, message, args) => {
|
||||||
|
const query = args.join(" ");
|
||||||
|
if (!query) return client.err(message, "Utilities", "docs", 51);
|
||||||
|
fetch(
|
||||||
|
`https://djsdocs.sorta.moe/v2/embed?src=stable&q=${encodeURIComponent(
|
||||||
|
query
|
||||||
|
)}`
|
||||||
|
)
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(data => {
|
||||||
|
message.inlineReply({ embed: data });
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,6 +1,6 @@
|
||||||
const client = require("../index");
|
const client = require("../index");
|
||||||
const db = require("../models/guilds");
|
const db = require("../models/guilds");
|
||||||
const { prefix, Log } = require("../config.json");
|
const { prefix } = require("../config.json");
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
|
||||||
client.on("guildDelete", async guild => {
|
client.on("guildDelete", async guild => {
|
||||||
|
@ -9,15 +9,17 @@ client.on("guildDelete", async guild => {
|
||||||
new MessageEmbed()
|
new MessageEmbed()
|
||||||
.setTitle("Deleted from server")
|
.setTitle("Deleted from server")
|
||||||
.addField("Server Info", [
|
.addField("Server Info", [
|
||||||
`**>**Server Name: ${guild.name}`,
|
`**>Server Name**: \n${guild.name}`,
|
||||||
`**>**Server ID: ${guild.id}`,
|
`**>Server ID**: \n${guild.id}`,
|
||||||
`**>**Server Member Count: ${guild.memberCount}`,
|
`**>Server Member Count**: \n${guild.memberCount}`,
|
||||||
])
|
])
|
||||||
.addField("Owner Info", [
|
.addField("Owner Info", [
|
||||||
`Owner Tag: ${guild.owner.user.tag}`,
|
`**>Owner Tag**: \n${guild.owner.user.tag}`,
|
||||||
`Owner ID: ${guild.owner.id}`,
|
`**>Owner ID**: \n${guild.owner.id}`,
|
||||||
])
|
])
|
||||||
.setFooter(`Currently in ${client.guilds.cache.size} servers`)
|
.setFooter(
|
||||||
|
`${client.user.username} Currently in ${client.guilds.cache.size} servers`
|
||||||
|
)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setThumbnail(guild.iconURL({ dynamic: true }))
|
.setThumbnail(guild.iconURL({ dynamic: true }))
|
||||||
.setColor("RED")
|
.setColor("RED")
|
||||||
|
|
2
package-lock.json
generated
2
package-lock.json
generated
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "cath.exe",
|
"name": "cath.exe",
|
||||||
"version": "1.6.0",
|
"version": "2.0.1",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"name": "cath.exe",
|
"name": "cath.exe",
|
||||||
"version": "2.0.0",
|
"version": "2.0.1",
|
||||||
"description": "cath.exe bot created by Night",
|
"description": "cath.exe bot created by Night",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "14.17",
|
"node": "*",
|
||||||
"npm": "*"
|
"npm": "*"
|
||||||
},
|
},
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
@ -72,6 +72,7 @@
|
||||||
"quickchart-js": "^1.0.7",
|
"quickchart-js": "^1.0.7",
|
||||||
"reconlx": "^1.2.41",
|
"reconlx": "^1.2.41",
|
||||||
"soundcloud-downloader": "^0.2.4",
|
"soundcloud-downloader": "^0.2.4",
|
||||||
|
"string-toolkit": "^1.4.0",
|
||||||
"weky": "^1.4.2",
|
"weky": "^1.4.2",
|
||||||
"yt-search": "^2.8.0",
|
"yt-search": "^2.8.0",
|
||||||
"ytdl-core": "^4.8.0",
|
"ytdl-core": "^4.8.0",
|
||||||
|
|
|
@ -166,6 +166,15 @@ module.exports = async (message, dir, file, err) => {
|
||||||
err =
|
err =
|
||||||
"The error maybe the link isn't a image, or the image size is too big";
|
"The error maybe the link isn't a image, or the image size is too big";
|
||||||
break;
|
break;
|
||||||
|
case 51:
|
||||||
|
err = "Missing 'Query' argument";
|
||||||
|
break;
|
||||||
|
case 52:
|
||||||
|
err = "This message doesn't exist in this channel";
|
||||||
|
break;
|
||||||
|
case 53:
|
||||||
|
err = "Missing 'Code' argument";
|
||||||
|
break;
|
||||||
case 404:
|
case 404:
|
||||||
err = "Error 404 - Not Found";
|
err = "Error 404 - Not Found";
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,767 +0,0 @@
|
||||||
const data = require("../Data/data.json");
|
|
||||||
const guns = data.cguns;
|
|
||||||
const QuickChart = require("quickchart-js");
|
|
||||||
const nmDt = require("../Data/aliases.json");
|
|
||||||
var weaponActualName = nmDt.weaponActualName;
|
|
||||||
var weaponAlliasName = nmDt.weaponAlliasName;
|
|
||||||
Object.defineProperty(String.prototype, "Simplify", {
|
|
||||||
value: function Simplify() {
|
|
||||||
return this.toLowerCase().replace(/[^0-9a-z]/g, "");
|
|
||||||
},
|
|
||||||
writable: true,
|
|
||||||
configurable: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.defineProperty(Number.prototype, "IsPositive", {
|
|
||||||
value: function IsPositive() {
|
|
||||||
if (this > 0) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
writable: true,
|
|
||||||
configurable: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.defineProperty(Number.prototype, "IsNegative", {
|
|
||||||
value: function IsNegative() {
|
|
||||||
if (this < 0) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
writable: true,
|
|
||||||
configurable: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.defineProperty(Number.prototype, "ToBool", {
|
|
||||||
value: function ToBool() {
|
|
||||||
if (this == 1) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
writable: true,
|
|
||||||
configurable: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.defineProperty(Number.prototype, "PlusHL", {
|
|
||||||
value: function PlusHL() {
|
|
||||||
if (this.toString()[0] == "-") {
|
|
||||||
return parseFloat(this.toFixed(2)).toString();
|
|
||||||
}
|
|
||||||
return "+" + parseFloat(this.toFixed(2)).toString();
|
|
||||||
},
|
|
||||||
writable: true,
|
|
||||||
configurable: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
function weaponIdentifier(inpmsg) {
|
|
||||||
var inpWeaponName = isolator(inpmsg)[0];
|
|
||||||
if (inpWeaponName.length < 2) {
|
|
||||||
return inpmsg
|
|
||||||
? "The name `" + inpmsg + "` is too short."
|
|
||||||
: "Empty weapon name";
|
|
||||||
}
|
|
||||||
var probableWeapons = [];
|
|
||||||
for (let i = 0; i < guns.length; i++) {
|
|
||||||
if (inpWeaponName.Simplify() == guns[i].gunname.Simplify()) {
|
|
||||||
return guns[i];
|
|
||||||
} else if (guns[i].gunname.Simplify().includes(inpWeaponName.Simplify())) {
|
|
||||||
probableWeapons.push(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (probableWeapons.length == 1) {
|
|
||||||
return guns[probableWeapons[0]];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < weaponAlliasName.length; i++) {
|
|
||||||
for (let j = 0; j < weaponAlliasName[i].length; j++) {
|
|
||||||
/*if (weaponAlliasName[i][j].Simplify().includes(inpWeaponName.Simplify())) {
|
|
||||||
for (let i2 = 0; i2 < guns.length; i2++) {
|
|
||||||
if (weaponActualName[i].Simplify() == guns[i2].gunname.Simplify()) {
|
|
||||||
probableWeapons.push(i2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
if (weaponAlliasName[i][j].Simplify() == inpWeaponName.Simplify()) {
|
|
||||||
for (let i2 = 0; i2 < guns.length; i2++) {
|
|
||||||
if (weaponActualName[i].Simplify() == guns[i2].gunname.Simplify()) {
|
|
||||||
return guns[i2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
probableWeapons = [...new Set(probableWeapons)];
|
|
||||||
if (probableWeapons.length == 1) {
|
|
||||||
return guns[probableWeapons[0]];
|
|
||||||
}
|
|
||||||
if (probableWeapons.length > 1) {
|
|
||||||
return (
|
|
||||||
"Did you mean `" +
|
|
||||||
probableWeapons
|
|
||||||
.map(x => guns[x].gunname)
|
|
||||||
.reduce((out, x, i) =>
|
|
||||||
[out, x].join(i === probableWeapons.length - 1 ? "` or `" : "`, `")
|
|
||||||
) +
|
|
||||||
"`?"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return "Couldn't identify the weapon: `" + '"' + inpWeaponName + '"`';
|
|
||||||
}
|
|
||||||
|
|
||||||
function isolator(inpmsg) {
|
|
||||||
if (inpmsg.includes(" + ")) {
|
|
||||||
var out = inpmsg
|
|
||||||
.split(" + ")
|
|
||||||
.map(x => x.split("+"))
|
|
||||||
.flat();
|
|
||||||
return [out.shift(), out.join(", ")];
|
|
||||||
}
|
|
||||||
return inpmsg.split(" with ");
|
|
||||||
}
|
|
||||||
|
|
||||||
function hasAttachments(inpmsg) {
|
|
||||||
if (
|
|
||||||
inpmsg.split(" with ").filter(x => x.Simplify()).length > 1 ||
|
|
||||||
inpmsg.split(" + ").filter(x => x.Simplify()).length > 1
|
|
||||||
) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function attachmentsIdentifier(inpmsg, attachmentsData) {
|
|
||||||
var inpmsg1 = inpmsg,
|
|
||||||
inpmsg3 = inpmsg.split(" ").filter(x => x),
|
|
||||||
inpmsg2 = inpmsg3.shift().toLowerCase(),
|
|
||||||
inpmsg5 = inpmsg3.join(" ");
|
|
||||||
inpmsg =
|
|
||||||
inpmsg2 == "akim" || inpmsg2 == "akimbo"
|
|
||||||
? inpmsg5 + (hasAttachments(inpmsg) ? " + " : ", ") + "akimbo"
|
|
||||||
: inpmsg;
|
|
||||||
/*var replacer = [
|
|
||||||
'Stopping Power',
|
|
||||||
'Laser'
|
|
||||||
].map(x => x.Simplify());
|
|
||||||
|
|
||||||
var replacee = [
|
|
||||||
['SP'],
|
|
||||||
['Lazer']
|
|
||||||
].map(x => x.Simplify());
|
|
||||||
replacee.map(x => x.filter(y => inpmsg.includes(y)));*/
|
|
||||||
//console.log(inpmsg);
|
|
||||||
/*console.log(JSON.stringify(inpmsg));
|
|
||||||
var g1 = [];
|
|
||||||
g1 = inpmsg.split(/ with | + /);
|
|
||||||
console.log(JSON.stringify(g1));
|
|
||||||
var givenAttachmentsNames = g1.split(/ & | , /);*/
|
|
||||||
|
|
||||||
if (!hasAttachments(inpmsg)) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
var inputAttachmentsNames = isolator(inpmsg)[1]
|
|
||||||
.split(/ & |, |,| and /)
|
|
||||||
.filter(x => x);
|
|
||||||
var tooSmall = inputAttachmentsNames.filter(x => x.length < 3);
|
|
||||||
inputAttachmentsNames = inputAttachmentsNames.filter(x => !(x.length < 3));
|
|
||||||
var errorMsgs = "",
|
|
||||||
errors = [],
|
|
||||||
unidentifined = [];
|
|
||||||
|
|
||||||
if (inputAttachmentsNames.length == 00) {
|
|
||||||
errorMsgs += "\nAttachments are missing!\n";
|
|
||||||
}
|
|
||||||
if (inputAttachmentsNames.length >= 10) {
|
|
||||||
return "Cocaineeeeee";
|
|
||||||
}
|
|
||||||
|
|
||||||
var splitAttachmentsDataName = [],
|
|
||||||
outAttachments = [];
|
|
||||||
|
|
||||||
for (let i = 0; i < attachmentsData.length; i++) {
|
|
||||||
splitAttachmentsDataName.push([
|
|
||||||
...new Set(
|
|
||||||
attachmentsData[i].name
|
|
||||||
.split(" ")
|
|
||||||
.filter(x => x)
|
|
||||||
.map(x => x.trim())
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
if (Math.max(...splitAttachmentsDataName.map(x => x.length)) > 6) {
|
|
||||||
return "Cocaineeeeee";
|
|
||||||
}
|
|
||||||
for (let j = 0; j < splitAttachmentsDataName[i].length; j++) {
|
|
||||||
splitAttachmentsDataName[i][j] =
|
|
||||||
splitAttachmentsDataName[i][j].Simplify();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < inputAttachmentsNames.length; i++) {
|
|
||||||
var probables = [];
|
|
||||||
var splitInputAttachmentsName = inputAttachmentsNames[i].split(" ");
|
|
||||||
|
|
||||||
for (let j = 0; j < splitAttachmentsDataName.length; j++) {
|
|
||||||
for (let i2 = 0; i2 < splitAttachmentsDataName[j].length; i2++) {
|
|
||||||
for (let i3 = 0; i3 < splitInputAttachmentsName.length; i3++) {
|
|
||||||
if (
|
|
||||||
splitAttachmentsDataName[j][i2].includes(
|
|
||||||
splitInputAttachmentsName[i3].Simplify()
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
var probablePushed = false;
|
|
||||||
for (let i4 = 0; i4 < probables.length; i4++) {
|
|
||||||
if (!probables[i4].includes(j)) {
|
|
||||||
probables[i4].push(j);
|
|
||||||
probablePushed = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!probablePushed) {
|
|
||||||
probables.push([j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (probables.length == 0) {
|
|
||||||
unidentifined.push(inputAttachmentsNames[i]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var curr = probables[probables.length - 1];
|
|
||||||
var temp1 = probables[probables.length - 1].filter(
|
|
||||||
x =>
|
|
||||||
attachmentsData[x].name.Simplify() ==
|
|
||||||
inputAttachmentsNames[i].Simplify()
|
|
||||||
);
|
|
||||||
var temp2 = probables[probables.length - 1].filter(
|
|
||||||
x =>
|
|
||||||
splitAttachmentsDataName[x].length == splitInputAttachmentsName.length
|
|
||||||
);
|
|
||||||
if (temp1.length === 1 && temp2.length !== 1) {
|
|
||||||
probables.push([temp1]);
|
|
||||||
}
|
|
||||||
if (temp1.length !== 1 && temp2.length === 1) {
|
|
||||||
probables.push([temp2]);
|
|
||||||
}
|
|
||||||
if (temp1.length === 1 && temp2.length === 1 && temp1[0] == temp2[0]) {
|
|
||||||
probables.push([temp1]);
|
|
||||||
}
|
|
||||||
//console.log(probables[probables.length - 1].length);
|
|
||||||
if (
|
|
||||||
probables[probables.length - 1].length != 1 ||
|
|
||||||
probables.length < splitInputAttachmentsName.length
|
|
||||||
) {
|
|
||||||
//errors.push(probables[probables.length - 1]);
|
|
||||||
errors.push(
|
|
||||||
"`" +
|
|
||||||
curr
|
|
||||||
.map(x => attachmentsData[x].name)
|
|
||||||
.reduce((out, x, i) =>
|
|
||||||
[out, x].join(i === curr.length - 1 ? "` or `" : "`, `")
|
|
||||||
) +
|
|
||||||
'` by `"' +
|
|
||||||
inputAttachmentsNames[i] +
|
|
||||||
'"`'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
outAttachments.push(attachmentsData[probables[probables.length - 1][0]]);
|
|
||||||
}
|
|
||||||
//console.log(JSON.stringify(errors));
|
|
||||||
/*if (errors.length && unidentifined.length) {
|
|
||||||
return "Couldn't identify the attachment" + (unidentifined.length === 1 ? "" : "s") + ': `"' + unidentifined.join('"`, `"') + '"`\n\nDid you mean `' + errors.map((p, j) => p.map(x => attachmentsData[x].name).reduce((out, x, i) => [out, x].join(i === p.length - 1 ? '` or `' : '`, `')) + '` by `"' + inputAttachmentsNames[j + unidentifined.length] + '"`').join(";\n`") + "?";
|
|
||||||
}
|
|
||||||
if (errors.length) {
|
|
||||||
//return "Did you mean " + errors.map((p, j) => p.map(x => attachmentsData[x].name).reduce((out, x, i) => [out, x].join(i === p.length - 1 ? '` or `' : '`, `')) + '` by `"' + inputAttachmentsNames[j] + '"`').join(";\n") + "?";
|
|
||||||
return "\nDid you mean " + errors.join(";\n") + "?\n";
|
|
||||||
}
|
|
||||||
if (unidentifined.length) {
|
|
||||||
return "\nCouldn't identify the attachment" + (unidentifined.length === 1 ? "" : "s") + ': `"' + unidentifined.join('"`, `"') + '"`\n';
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*var sameAttachments = outAttachments.filter((x,i,a)=> a.indexOf(x)!==i);
|
|
||||||
if (sameAttachments.length) {
|
|
||||||
sameAttachments = [...sameAttachments, ...new Set(sameAttachments.map((x, i) => outAttachments.indexOf(x)))];
|
|
||||||
}
|
|
||||||
inputAttachmentsNames.filter();*/
|
|
||||||
|
|
||||||
var t1 = outAttachments.map(x => x.effects[35]);
|
|
||||||
var t2 = outAttachments.map(x => x.effects[36] + x.effects[32]);
|
|
||||||
|
|
||||||
errorMsgs +=
|
|
||||||
t1.indexOf(1) !== -1
|
|
||||||
? "Can't equip Muzzle with `" +
|
|
||||||
'"' +
|
|
||||||
outAttachments[t1.indexOf(1)].name +
|
|
||||||
'"`'
|
|
||||||
: "";
|
|
||||||
errorMsgs +=
|
|
||||||
t2.indexOf(1) !== -1
|
|
||||||
? "Can't equip Optics with `" +
|
|
||||||
'"' +
|
|
||||||
outAttachments[t2.indexOf(1)].name +
|
|
||||||
'"`'
|
|
||||||
: "";
|
|
||||||
errorMsgs += errors.length
|
|
||||||
? "\nDid you mean " + errors.join(";\n") + "?\n"
|
|
||||||
: "";
|
|
||||||
errorMsgs += unidentifined.length
|
|
||||||
? "\nCouldn't identify the attachment" +
|
|
||||||
(unidentifined.length === 1 ? "" : "s") +
|
|
||||||
': `"' +
|
|
||||||
unidentifined.join('"`, `"') +
|
|
||||||
'"`\n'
|
|
||||||
: "";
|
|
||||||
errorMsgs +=
|
|
||||||
outAttachments.length > 5 ? "\nCan't equip more than 5 attachments!\n" : "";
|
|
||||||
errorMsgs += outAttachments.filter((x, i, a) => a.indexOf(x) !== i).length
|
|
||||||
? "\nMultiple of same attachments found!\n"
|
|
||||||
: "";
|
|
||||||
errorMsgs += outAttachments
|
|
||||||
.map(x => x.type)
|
|
||||||
.filter((x, i, a) => a.indexOf(x) !== i).length
|
|
||||||
? "\nMultiple of attachments the same type found!\n"
|
|
||||||
: "";
|
|
||||||
errorMsgs += tooSmall.length
|
|
||||||
? "\nThe name" +
|
|
||||||
(tooSmall.length === 1 ? "" : "s") +
|
|
||||||
': `"' +
|
|
||||||
tooSmall.reduce((out, x, i) =>
|
|
||||||
[out, x].join(i === curr.length - 1 ? '"` and `"' : '"`, `"')
|
|
||||||
) +
|
|
||||||
'"` ' +
|
|
||||||
(tooSmall.length === 1 ? "is" : "are") +
|
|
||||||
" too short\n"
|
|
||||||
: "";
|
|
||||||
|
|
||||||
return errorMsgs ? errorMsgs.trim() : outAttachments;
|
|
||||||
}
|
|
||||||
//console.log(attachmentsIdentifier("ak with mag, red sight, red dot, ll", data.cguns[0].aments));// makeError();
|
|
||||||
//console.log(attachmentsIdentifier("ak with mdfgt, skjs", data.cguns[0].aments)); makeError();
|
|
||||||
//console.log(attachmentsIdentifier("117 + 40 round mag", data.cguns[0].aments)); makeError();
|
|
||||||
//console.log(attachmentsIdentifier("117 + rtc muzzle brake, rubberized griptape, tac lazer sight, 40 round mag, no stock", data.cguns[1].aments)); makeError();
|
|
||||||
|
|
||||||
function damageHandler(
|
|
||||||
currDmgs,
|
|
||||||
currRngs,
|
|
||||||
damageMulti,
|
|
||||||
hp,
|
|
||||||
tbs,
|
|
||||||
tbb,
|
|
||||||
bib,
|
|
||||||
pellets
|
|
||||||
) {
|
|
||||||
//console.log([currDmgs, currRngs, damageMulti, hp, tbs, tbb, bib, pellets]);
|
|
||||||
//tbs = timeBetweenShots
|
|
||||||
//tbb = timeBetweenBurst
|
|
||||||
//bib = bulletsInBurst
|
|
||||||
|
|
||||||
currRngs = currRngs.filter(x => x < 100).map(x => Math.round(x));
|
|
||||||
currDmgs.length = currRngs.length + 1;
|
|
||||||
currDmgs = currDmgs.map(x => Math.round(x * damageMulti));
|
|
||||||
var currSTKs = currDmgs.map(x => stk(x)),
|
|
||||||
currTTKs = currDmgs.map(x => ttk(x)),
|
|
||||||
currPDmg = null,
|
|
||||||
n = Math.max(...currTTKs.map(x => x.toString().length));
|
|
||||||
n = n < 3 ? 3 : n;
|
|
||||||
//console.log()
|
|
||||||
function worker1(inp) {
|
|
||||||
return inp.map(x => x.toString().padStart(n)).join(" -- ") + "\n";
|
|
||||||
}
|
|
||||||
function worker2(inp) {
|
|
||||||
return (
|
|
||||||
"".padStart(n + 1) +
|
|
||||||
inp.map(x => x.toString().padStart(2)).join("".padStart(n + 2)) +
|
|
||||||
"\n"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
function stk(dmg) {
|
|
||||||
var out;
|
|
||||||
if (!pellets) {
|
|
||||||
out = Math.ceil(hp / dmg);
|
|
||||||
} else {
|
|
||||||
out = Math.ceil(hp / (dmg * pellets));
|
|
||||||
}
|
|
||||||
out = out == Infinity ? "∞" : out;
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
function ttk(dmg) {
|
|
||||||
var stkVal = stk(dmg);
|
|
||||||
if (stkVal == "∞") {
|
|
||||||
return stkVal;
|
|
||||||
}
|
|
||||||
if (!bib) {
|
|
||||||
return Math.round((stkVal - 1) * tbs);
|
|
||||||
}
|
|
||||||
var out = 0;
|
|
||||||
if (dmg > 0) {
|
|
||||||
if (stkVal % bib == 0) {
|
|
||||||
for (var i = 0; i < Math.floor(stkVal / bib) - 1; i++) {
|
|
||||||
out += tbs * (bib - 1) + tbb;
|
|
||||||
}
|
|
||||||
out = out + tbs * (bib - 1);
|
|
||||||
} else if (stkVal % bib != 0) {
|
|
||||||
for (var i = 0; i <= Math.floor(stkVal / bib) - 1; i++) {
|
|
||||||
out += tbs * (bib - 1) + tbb;
|
|
||||||
}
|
|
||||||
for (var i = 0; i < (stkVal % bib) - 1; i++) {
|
|
||||||
out += tbs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out = Math.round(out);
|
|
||||||
if (out == Infinity) {
|
|
||||||
return "∞";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
out = "No";
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
if (pellets) {
|
|
||||||
currPDmg = currDmgs.map(x => x + " x" + pellets);
|
|
||||||
n = Math.max(...currPDmg.map(x => x.toString().length));
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
"```Damage : " +
|
|
||||||
worker1(currPDmg || currDmgs) +
|
|
||||||
(pellets ? "Total : " + worker1(currDmgs.map(x => x * pellets)) : "") +
|
|
||||||
"STK : " +
|
|
||||||
worker1(currSTKs) +
|
|
||||||
"TTK : " +
|
|
||||||
worker1(currTTKs) +
|
|
||||||
"Range : " +
|
|
||||||
(currRngs.length ? worker2(currRngs) : worker1(["∞"])) +
|
|
||||||
"```"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
//console.log(damageHandler([30, 25, 20], [10, 20], 1, 100, 60000 / 720, 0, 0)); makeError();
|
|
||||||
//console.log(damageHandler([ 33, 23 ], [ 39 ], 1, 100, 109.0909090909091, 0, 0 )); makeError();
|
|
||||||
|
|
||||||
function recoilHandler(
|
|
||||||
xRecoil,
|
|
||||||
yRecoil,
|
|
||||||
xMultiplier,
|
|
||||||
yMultiplier,
|
|
||||||
bulletCount
|
|
||||||
) {
|
|
||||||
if (xRecoil.length != yRecoil.length) {
|
|
||||||
return "err";
|
|
||||||
}
|
|
||||||
var recoilLength = xRecoil.length;
|
|
||||||
if (recoilLength == 0) {
|
|
||||||
return "none";
|
|
||||||
}
|
|
||||||
var recoilPattern = [
|
|
||||||
{
|
|
||||||
x: 0,
|
|
||||||
y: 0,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
var recoilObj;
|
|
||||||
for (let i = 0; i < bulletCount; i++) {
|
|
||||||
var xContinuationVal =
|
|
||||||
xRecoil[recoilLength - 1] - xRecoil[recoilLength - 2];
|
|
||||||
var yContinuationVal =
|
|
||||||
yRecoil[recoilLength - 1] - yRecoil[recoilLength - 2];
|
|
||||||
if (i < recoilLength) {
|
|
||||||
recoilObj = {
|
|
||||||
x: xRecoil[i] * (1 + xMultiplier / 100),
|
|
||||||
y: yRecoil[i] * (1 + yMultiplier / 100),
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
recoilObj = {
|
|
||||||
x:
|
|
||||||
(recoilPattern[recoilPattern.length - 1].x + xContinuationVal) *
|
|
||||||
xMultiplier,
|
|
||||||
y:
|
|
||||||
(recoilPattern[recoilPattern.length - 1].y + yContinuationVal) *
|
|
||||||
yMultiplier,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
recoilPattern.push(recoilObj);
|
|
||||||
}
|
|
||||||
var chart = new QuickChart();
|
|
||||||
chart
|
|
||||||
.setConfig({
|
|
||||||
type: "scatter",
|
|
||||||
data: {
|
|
||||||
datasets: [
|
|
||||||
{
|
|
||||||
data: recoilPattern,
|
|
||||||
showLine: true,
|
|
||||||
fill: false,
|
|
||||||
borderColor: "rgba(0, 200, 0, 1)",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
/*plugins: {
|
|
||||||
backgroundImageUrl: 'https://www.codmdatabase.ml/display.png'
|
|
||||||
},*/
|
|
||||||
legend: {
|
|
||||||
display: false,
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
yAxes: [
|
|
||||||
{
|
|
||||||
ticks: {
|
|
||||||
display: false,
|
|
||||||
min: 0,
|
|
||||||
max: 5050,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
xAxes: [
|
|
||||||
{
|
|
||||||
ticks: {
|
|
||||||
display: false,
|
|
||||||
min: -4495,
|
|
||||||
max: 4495,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.setWidth(1780)
|
|
||||||
.setHeight(1000);
|
|
||||||
|
|
||||||
return chart;
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateStatswithEffects(inpEffects, inpStats) {
|
|
||||||
//console.log(inpStats.toString());
|
|
||||||
var l = inpStats[18] / inpStats[17];
|
|
||||||
var outStats = inpStats;
|
|
||||||
/*if (inpEffects[09] != 0) { inpStats[25] += inpEffects[09]; }
|
|
||||||
if (inpEffects[29] != 0) { inpStats[00] += inpEffects[29]; }
|
|
||||||
inpStats[17] += inpEffects[27];*/
|
|
||||||
var inpStatsarr = [01, 02, 05, 10, 11, 14, 15, 20, 21, 22, 26, 27, 31];
|
|
||||||
var inpEfecsarr = [17, 18, 16, 04, 19, 01, 10, 14, 14, 14, 06, 07, 42]; //Efecs is short for Effects
|
|
||||||
for (let i = 0; i < inpEffects.length; i++) {
|
|
||||||
if (inpEffects[inpEfecsarr[i]] != 0) {
|
|
||||||
outStats[inpStatsarr[i]] *= (inpEffects[inpEfecsarr[i]] + 100) / 100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var inpStatsarr = [03, 04, 16, 28, 29, 30];
|
|
||||||
var inpEfecsarr = [20, 38, 00, 39, 40, 41]; //Efecs is short for Effects
|
|
||||||
for (let i = 0; i < inpEffects.length; i++) {
|
|
||||||
if (inpEffects[inpEfecsarr[i]] != 0) {
|
|
||||||
outStats[inpStatsarr[i]] = inpEffects[inpEfecsarr[i]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var inpStatsarr = [00, 17, 25];
|
|
||||||
var inpEfecsarr = [29, 27, 09]; //Efecs is short for Effects
|
|
||||||
for (let i = 0; i < inpEffects.length; i++) {
|
|
||||||
if (inpEffects[inpEfecsarr[i]] != 0) {
|
|
||||||
outStats[inpStatsarr[i]] += inpEffects[inpEfecsarr[i]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inpEffects[43] != 0 && inpStats[08] != -1) {
|
|
||||||
outStats[08] *= (inpEffects[43] + 100) / 100;
|
|
||||||
}
|
|
||||||
if (inpEffects[16] != 0) {
|
|
||||||
outStats[07] *= inpEffects[16] / -100 + 1;
|
|
||||||
}
|
|
||||||
outStats[18] = inpStats[17] * l;
|
|
||||||
|
|
||||||
outStats[25] = (inpStats[26] * inpStats[25]) / 100; //must occur after inpStats[26]
|
|
||||||
//no 06, 09, 12, 13, 19, 23, 24
|
|
||||||
return outStats;
|
|
||||||
}
|
|
||||||
|
|
||||||
function attachmentHandler(currEffects, currStats) {
|
|
||||||
//console.log(JSON.stringify(currEffects));
|
|
||||||
var pos = [],
|
|
||||||
neg = [];
|
|
||||||
if (currEffects[0] > currStats[16]) {
|
|
||||||
pos.push(
|
|
||||||
currEffects[0] +
|
|
||||||
"% zoom (+" +
|
|
||||||
(currEffects[0] - currStats[16]) +
|
|
||||||
"% zoom)"
|
|
||||||
);
|
|
||||||
} else if (currEffects[0] != 0 && currEffects[0] != currStats[16]) {
|
|
||||||
neg.push(
|
|
||||||
currEffects[0] +
|
|
||||||
"% zoom (-" +
|
|
||||||
(currStats[16] - currEffects[0]) +
|
|
||||||
"% zoom)"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (currEffects[0] != 0 && currStats[16] <= 110) {
|
|
||||||
pos.push("Easier to Aim");
|
|
||||||
}
|
|
||||||
negGood1(01, "ADS time");
|
|
||||||
negGood1(02, "Vertical Recoil");
|
|
||||||
negGood1(03, "Horizontal Recoil");
|
|
||||||
negGood1(04, "Bullet Spread");
|
|
||||||
negGood1(05, "Moving Bullet Spread");
|
|
||||||
posGood1(06, "Mobility");
|
|
||||||
posGood1(07, "ADS Mobility");
|
|
||||||
negGood1(08, "Recoil when Crouched or Prone");
|
|
||||||
posGood1(09, "Sprint Mobility");
|
|
||||||
negGood1(10, "Sprint to Fire Time");
|
|
||||||
negGood1(11, "Flinch");
|
|
||||||
negGood1(12, "Hipfire Spread");
|
|
||||||
posGood1(13, "Damage Range");
|
|
||||||
negGood1(14, "Reload Time");
|
|
||||||
posGood1(15, "Headshot Damage");
|
|
||||||
posGood1(16, "Rate of Fire");
|
|
||||||
posGood1(17, "Detonation Range");
|
|
||||||
posGood1(18, "Explosion Radius");
|
|
||||||
negGood1(19, "Idle Sway");
|
|
||||||
if (currEffects[20] > currStats[3]) {
|
|
||||||
pos.push(
|
|
||||||
currEffects[20].ToString().Replace(".", " ~ ") + " Explosion Damage"
|
|
||||||
);
|
|
||||||
} else if (currEffects[20] != 0 && currEffects[20] != currStats[3]) {
|
|
||||||
neg.push(
|
|
||||||
currEffects[20].ToString().Replace(".", " ~ ") + " Explosion Damage"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
negGood3(21, "+Visible Laser when not ADS-ed");
|
|
||||||
negGood3(22, "+Visible Laser when ADS-ed");
|
|
||||||
negGood3(23, "+Visible Laser");
|
|
||||||
posGood3(24, "+Silenced Gunfire");
|
|
||||||
posGood3(25, "-Muzzle Flash");
|
|
||||||
posGood3(26, "Reworked Damage");
|
|
||||||
posGood2(27, "Rounds/Mag");
|
|
||||||
posGood2(28, "Rounds/Tube");
|
|
||||||
posGood2(29, "Pellets per Shot");
|
|
||||||
posGood2(30, "Damage Over Time");
|
|
||||||
posGood3(31, "Damage per Shot");
|
|
||||||
posGood3(32, "Reworked ADS");
|
|
||||||
posGood3(33, "-Melee QTE Time");
|
|
||||||
if (currEffects[34] == 1) {
|
|
||||||
pos.push("+Damage per Pellet");
|
|
||||||
} else if (currEffects[34] == -1) {
|
|
||||||
neg.push("-Damage per Pellet");
|
|
||||||
}
|
|
||||||
negGood3(35, "Can Not use Muzzle");
|
|
||||||
negGood3(36, "Can Not ADS");
|
|
||||||
if (currEffects[37] != 0) {
|
|
||||||
pos.push("New Leathality Profile");
|
|
||||||
}
|
|
||||||
if (currEffects[38] != 0 && currEffects[38] < currStats[4]) {
|
|
||||||
pos.push(
|
|
||||||
"Turns to " +
|
|
||||||
["Full Auto", "Burst", "Semi Auto", "Pump Action", "Bolt Action"][
|
|
||||||
currEffects[38] - 1
|
|
||||||
]
|
|
||||||
);
|
|
||||||
} else if (currEffects[38] != 0 && currEffects[38] != currStats[4]) {
|
|
||||||
neg.push(
|
|
||||||
"Turns to " +
|
|
||||||
["Full Auto", "Burst", "Semi Auto", "Pump Action", "Bolt Action"][
|
|
||||||
currEffects[38] - 1
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
posGood2(39, "Tick Damage");
|
|
||||||
posGood2(40, "Ticks");
|
|
||||||
negGood2(41, "ms Tick Interval");
|
|
||||||
posGood2(42, "Breath Holding Time");
|
|
||||||
posGood1(43, "Bullet Speed");
|
|
||||||
if (currEffects[44] == 1) {
|
|
||||||
pos.push("+Penetraion Damage");
|
|
||||||
} else if (currEffects[44] == -1) {
|
|
||||||
neg.push("-Penetraion Damage");
|
|
||||||
}
|
|
||||||
posGood2(45, "Round" + (currEffects[45] - 1 ? "s" : "") + " in Reserve");
|
|
||||||
|
|
||||||
function posGood1(i, ext) {
|
|
||||||
if (currEffects[i].IsPositive()) {
|
|
||||||
pos.push(currEffects[i].PlusHL() + "% " + ext);
|
|
||||||
} else if (currEffects[i].IsNegative()) {
|
|
||||||
neg.push(currEffects[i].PlusHL() + "% " + ext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function negGood1(i, ext) {
|
|
||||||
if (currEffects[i].IsNegative()) {
|
|
||||||
pos.push(currEffects[i].PlusHL() + "% " + ext);
|
|
||||||
} else if (currEffects[i].IsPositive()) {
|
|
||||||
neg.push(currEffects[i].PlusHL() + "% " + ext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function posGood2(i, ext) {
|
|
||||||
if (currEffects[i].IsPositive()) {
|
|
||||||
pos.push(currEffects[i].PlusHL() + " " + ext);
|
|
||||||
} else if (currEffects[i].IsNegative()) {
|
|
||||||
neg.push(currEffects[i].PlusHL() + " " + ext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function negGood2(i, ext) {
|
|
||||||
if (currEffects[i].IsNegative()) {
|
|
||||||
pos.push(currEffects[i].PlusHL() + " " + ext);
|
|
||||||
} else if (currEffects[i].IsPositive()) {
|
|
||||||
neg.push(currEffects[i].PlusHL() + " " + ext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function posGood3(i, ext) {
|
|
||||||
if (currEffects[i].ToBool()) {
|
|
||||||
pos.push(ext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function negGood3(i, ext) {
|
|
||||||
if (currEffects[i].ToBool()) {
|
|
||||||
neg.push(ext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
"\nPositives :\n```ini\n[" +
|
|
||||||
pos.join("]\n[") +
|
|
||||||
"]```\nNegatives :\n```css\n[" +
|
|
||||||
neg.join("]\n[") +
|
|
||||||
"]\n```"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
console.log("Full directory : " + __filename);
|
|
||||||
console.log("Current file : " + __filename.split("/").pop());
|
|
||||||
console.log("Without extenstion : " + __filename.split("/").pop().split(".")[0]);
|
|
||||||
*/
|
|
||||||
|
|
||||||
function interpretioner(inpAttachments) {
|
|
||||||
return inpAttachments.length
|
|
||||||
? " with " + inpAttachments.map(x => x.name).join(", ")
|
|
||||||
: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
function totaler(inpAttachments) {
|
|
||||||
var totalEffects = inpAttachments[0].effects;
|
|
||||||
for (let j = 1; j < inpAttachments.length; j++) {
|
|
||||||
for (let i2 = 0; i2 < totalEffects.length; i2++) {
|
|
||||||
totalEffects[i2] += inpAttachments[j].effects[i2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return totalEffects;
|
|
||||||
}
|
|
||||||
|
|
||||||
function makeError() {
|
|
||||||
var m;
|
|
||||||
m.split("L");
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
weaponIdentifier,
|
|
||||||
attachmentsIdentifier,
|
|
||||||
recoilHandler,
|
|
||||||
attachmentHandler,
|
|
||||||
updateStatswithEffects,
|
|
||||||
makeError,
|
|
||||||
interpretioner,
|
|
||||||
damageHandler,
|
|
||||||
isolator,
|
|
||||||
totaler,
|
|
||||||
};
|
|
Loading…
Reference in a new issue