commit 1a3e93ddf95118afb7fd611a7404144608dbe210
parent 3a4050176280a28a97854df32d1096cb304e8559
Author: night0721 <[email protected]>
Date: Tue, 1 Feb 2022 22:00:50 +0800
updates
Diffstat:
6 files changed, 1044 insertions(+), 14 deletions(-)
diff --git a/CODM/loadout.js b/CODM/loadout.js
@@ -0,0 +1,78 @@
+const { MessageEmbed } = require("discord.js"); //@night0721 You need to make this
+const items = require("../../util/Data/loadout.json");
+module.exports = {
+ name: "class",
+ description: "Generate A Random Loadout",
+ category: "CODM",
+ run: async (client, interaction) => {
+ // const data = async () => {
+ // const d = await model.findOne({});
+ // const types = d.Categories;
+ // const names = d.Primary;
+ // const category = types[Math.floor(Math.random() * types.length)];
+ // const weapons = names[0][category];
+ // return `${weapons[Math.floor(Math.random() * weapons.length)]}`;
+ // };
+ // const primary_weapon = await data();
+ // const primary = primary_weapon.replace(/[ -]/g, "_").replace(/\./g, "");
+ // const slots = shuffle(Object.keys(Attachments[primary][0]));
+ // const slot_1 = slots.next().value,
+ // slot_2 = slots.next().value,
+ // slot_3 = slots.next().value,
+ // slot_4 = slots.next().value,
+ // slot_5 = slots.next().value;
+ const result = new MessageEmbed()
+ .setColor(client.color)
+ .setFooter(`Made by ${client.author}`)
+ .setURL(client.web)
+ .setTitle(`🎲 A Randomly Generated Loadout 🎲`)
+ .setDescription(
+ `This loadout is a randomly generated, Also try, \`\`\`\`/gun\`\`\`\` to get a randomally generated primary weapon gunsmith build`
+ )
+ .addFields(
+ {
+ name: `Secondary Weapon`,
+ value: ``,
+ inline: true,
+ },
+ {
+ name: `Operator Skill`,
+ value: ``,
+ inline: true,
+ },
+ {
+ name: `Scorestreak`, // 3 perks
+ value: ``,
+ inline: true,
+ },
+ {
+ name: `Red Perk`,
+ value: ``,
+ inline: true,
+ },
+ {
+ name: `Green Perk`,
+ value: ``,
+ inline: true,
+ },
+ {
+ name: `Blue Perk`,
+ value: ``,
+ inline: true,
+ }
+ )
+ .setTimestamp();
+ interaction.followUp({ embeds: [result] });
+
+ // function* shuffle(array) {
+ // let i = array.length;
+ // while (i--) {
+ // yield array.splice(Math.floor(Math.random() * (i + 1)), 1)[0];
+ // }
+ // }
+ // function getAttachment(gun, slot) {
+ // const ca = Attachments[gun][0][slot];
+ // return ca[Math.floor(Math.random() * ca.length)];
+ // }
+ },
+};
diff --git a/CODM/new-stats.js b/CODM/new-stats.js
@@ -0,0 +1,774 @@
+const { MessageEmbed } = require("discord.js");
+const moment = require("moment");
+const axios = require("axios");
+module.exports = {
+ name: "stats",
+ description: "Check Stats of a Weapon by SOD",
+ usage: "[Weapon Name]",
+ category: "CODM",
+ options: [
+ {
+ type: "SUB_COMMAND",
+ name: "assault_rifle",
+ description: "Get a Stats for Assault Rifle",
+ options: [
+ {
+ type: 3,
+ name: "Weapon",
+ description: "Name of the Gun",
+ required: true,
+ choices: [
+ {
+ name: "Type 25",
+ value: "A01",
+ },
+ {
+ name: "M16",
+ value: "A02",
+ },
+ {
+ name: "AK117",
+ value: "A03",
+ },
+ {
+ name: "AK-47",
+ value: "A04",
+ },
+ {
+ name: "ASM10",
+ value: "A05",
+ },
+ {
+ name: "M4",
+ value: "A06",
+ },
+ {
+ name: "BK57",
+ value: "A07",
+ },
+ {
+ name: "LK24",
+ value: "A08",
+ },
+ {
+ name: "ICR-1",
+ value: "A09",
+ },
+ {
+ name: "Man-o-War",
+ value: "A10",
+ },
+ {
+ name: "KN-44",
+ value: "A11",
+ },
+ {
+ name: "HBRa3",
+ value: "A12",
+ },
+ {
+ name: "HVK-30",
+ value: "A13",
+ },
+ {
+ name: "DR-H",
+ value: "A14",
+ },
+ {
+ name: "Peacekeeper MK2",
+ value: "A15",
+ },
+ {
+ name: "FR .556",
+ value: "A16",
+ },
+ {
+ name: "AS VAL",
+ value: "A17",
+ },
+ {
+ name: "CR-56 AMAX",
+ value: "A18",
+ },
+ {
+ name: "M13",
+ value: "A19",
+ },
+ {
+ name: "Swordfish",
+ value: "A20",
+ },
+ {
+ name: "Kilo 141",
+ value: "A21",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "SUB_COMMAND",
+ name: "sub_machine_gun",
+ description: "Get a Stats for Sub Machine Gun",
+ options: [
+ {
+ type: 3,
+ name: "Weapon",
+ description: "Name of the Gun",
+ required: true,
+ choices: [
+ {
+ name: "RUS-79u",
+ value: "D01",
+ },
+ {
+ name: "Chicom",
+ value: "D02",
+ },
+ {
+ name: "PDW-57",
+ value: "D03",
+ },
+ {
+ name: "Razorback",
+ value: "D04",
+ },
+ {
+ name: "MSMC",
+ value: "D05",
+ },
+ {
+ name: "HG40",
+ value: "D06",
+ },
+ {
+ name: "Pharo",
+ value: "D07",
+ },
+ {
+ name: "GKS",
+ value: "D08",
+ },
+ {
+ name: "Cordite",
+ value: "D09",
+ },
+ {
+ name: "QQ9",
+ value: "D10",
+ },
+ {
+ name: "Fennec",
+ value: "D11",
+ },
+ {
+ name: "AGR 556",
+ value: "D12",
+ },
+ {
+ name: "QXR",
+ value: "D13",
+ },
+ {
+ name: "PP19 Bizon",
+ value: "D14",
+ },
+ {
+ name: "MX9",
+ value: "D15",
+ },
+ {
+ name: "CBR4",
+ value: "D16",
+ },
+ {
+ name: "PPSh 41",
+ value: "D17",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "SUB_COMMAND",
+ name: "sniper_rifle",
+ description: "Get a Stats for Sniper Rifle",
+ options: [
+ {
+ type: 3,
+ name: "Weapon",
+ description: "Name of the Gun",
+ required: true,
+ choices: [
+ // {
+ // name: "XPR-50",
+ // value: "B01",
+ // },
+ {
+ name: "Arctic .50",
+ value: "B02",
+ },
+ {
+ name: "M21 EBR",
+ value: "B03",
+ },
+ {
+ name: "DL Q33",
+ value: "B04",
+ },
+ {
+ name: "Locus",
+ value: "B05",
+ },
+ // {
+ // name: "NA-45",
+ // value: "B06",
+ // },
+ {
+ name: "Outlaw",
+ value: "B07",
+ },
+ {
+ name: "Rytec AMR",
+ value: "B08",
+ },
+ {
+ name: "SVD",
+ value: "B09",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "SUB_COMMAND",
+ name: "light_machine_gun",
+ description: "Get a Stats for Light Machine Gun",
+ options: [
+ {
+ type: 3,
+ name: "Weapon",
+ description: "Name of the Gun",
+ required: true,
+ choices: [
+ {
+ name: "S36",
+ value: "C01",
+ },
+ {
+ name: "UL736",
+ value: "C02",
+ },
+ {
+ name: "RPD",
+ value: "C03",
+ },
+ {
+ name: "M4 LMG",
+ value: "C04",
+ },
+ {
+ name: "Chopper",
+ value: "C05",
+ },
+ {
+ name: "Holger 26",
+ value: "C06",
+ },
+ {
+ name: "Hades",
+ value: "C07",
+ },
+ {
+ name: "PKM",
+ value: "C08",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "SUB_COMMAND",
+ name: "shotgun",
+ description: "Get a Stats for Shotgun",
+ options: [
+ {
+ type: 3,
+ name: "Weapon",
+ description: "Name of the Gun",
+ required: true,
+ choices: [
+ {
+ name: "HS2126",
+ value: "E01",
+ },
+ {
+ name: "BY15",
+ value: "E02",
+ },
+ {
+ name: "HS0405",
+ value: "E03",
+ },
+ {
+ name: "Striker",
+ value: "E04",
+ },
+ {
+ name: "KRM_262",
+ value: "E05",
+ },
+ {
+ name: "Echo",
+ value: "E06",
+ },
+ {
+ name: "R9-0",
+ value: "E07",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "SUB_COMMAND",
+ name: "marksman_rifle",
+ description: "Get a Stats for Marksman Rifle",
+ options: [
+ {
+ type: 3,
+ name: "Weapon",
+ description: "Name of the Gun",
+ required: true,
+ choices: [
+ {
+ name: "Kilo Bolt-Action",
+ value: "F01",
+ },
+ {
+ name: "SKS",
+ value: "F02",
+ },
+ {
+ name: "SP-R 208",
+ value: "F03",
+ },
+ {
+ name: "MK2",
+ value: "F04",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "SUB_COMMAND",
+ name: "pistol",
+ description: "Get a Stats for Pistol",
+ options: [
+ {
+ type: 3,
+ name: "Weapon",
+ description: "Name of the Gun",
+ required: true,
+ choices: [
+ {
+ name: "J358",
+ value: "G01",
+ },
+ {
+ name: "MW11",
+ value: "G02",
+ },
+ {
+ name: ".50 GS",
+ value: "G03",
+ },
+ {
+ name: "Renetti",
+ value: "G04",
+ },
+ {
+ name: "Shorty",
+ value: "G05",
+ },
+ {
+ name: "Crossbow",
+ value: "G06",
+ },
+ ],
+ },
+ ],
+ },
+ ],
+ // It's not complete, Still work in progress.
+ run: async (client, interaction, args) => {
+ const cwts = args[1];
+ const data = await axios
+ .get(`${process.env.api}/api/v1/codm/builds?cwts=${cwts}`, {
+ headers: {
+ Authorization: process.env.CODM_API_KEY,
+ },
+ })
+ .then((res) => res.data)
+ .catch((e) => null);
+
+ if (!data?.ID) {
+ const embed = new MessageEmbed()
+ .setDescription(
+ `<:nyx_not_available:897378400031879188> Sorry, We currently don't have Stats for this Weapon`
+ )
+ .setColor(client.color);
+ interaction.followUp({ embeds: [embed] });
+ } else {
+ const embed = new MessageEmbed()
+ .setTitle(
+ `${data.author} Statistical Breakdown`
+ )
+ .setColor(16580400)
+ .setImage(data.imageUrl)
+ .setFooter(
+ `Stats Curtosy of Round Table`,
+ )
+ // .setFooter(
+ // `Stats Curtosy of Stats on Duty`,
+ // )
+ .setDescription(
+ `<:nyx_description:897379659665264650> **Description** \n${data.description}`
+ )
+ .addFields(
+ {
+ name: ":id: CWTS:",
+ value: `\`\`\`\n${data.cwts}\n\`\`\``,
+ inline: true,
+ },
+ {
+ name: "<a:lastupdate:897381474330873887> Last Updated:",
+ value: `\`\`\`\n${moment(Date.parse(data.lastUpdate)).format(
+ "MMMM Do YYYY"
+ )}\n\`\`\``,
+ inline: true,
+ },
+ {
+ name: "Basic Stats",
+ value: `\`\`\`\n
+ BSA Score: ${data.bsa_score}
+ Hipfire Score: ${data.hipfire_score}
+ Rate of Fire\t\t\t\t: ${data.rof}
+ Penetration Level\t\t: ${data.penetration}
+ Firing Mode\t\t\t\t\t: Full Auto
+
+ \n\`\`\``,
+ inline: false,
+ },
+ {
+ name: "Handling & Mobility",
+ value: `\`\`\`\n
+ Drop Time : 416.6 ms
+ Raise Time : 650 ms
+ Sprinting Speed : 6.09 m/s
+ Walking Speed : 4.51 m/s
+ Sprint-to-Fire Time : 165 ms
+ \n\`\`\``,
+ inline: false,
+ },
+ {
+ name: "Ammunation Stats",
+ value: `\`\`\`\n
+ Magazine : 30
+ Reserve : 120
+ Reload Type : Magazine
+ Cancel Reload Time : 1.9 s
+ Reload Time : 2.3 s
+ Full Reload Time : 3.2 s
+ \n\`\`\``,
+ inline: false,
+ },
+ {
+ name: ":paperclip: Attachments:",
+ value: arr.join("\n"),
+ },
+ {
+ name: "<a:tags:897034924140404776> Tags",
+ value: data.tags.join(", "),
+ }
+ )
+ .setURL(client.web);
+ interaction.followUp({ embeds: [embed] });
+ }
+ },
+};
+
+// @night0721 Damage profile will be avalable by different command
+
+
+
+// recoilAvailable = false;
+// hasError = false;
+// console.log(args);
+// const repEmb = statsHandler(args.join(" ").replace("\n", " "));
+// if (hasError) {
+// interaction.followUp({ embeds: [repEmb] });
+// }
+// if (recoilAvailable) {
+// repEmb.fields.push({
+// name: "**Recoil Graph**",
+// value:
+// "```\nThe Recoil graph below is dynamic (change based on attachment equipped)```",
+// });
+// const recoilImageLink = await chart.getShortUrl();
+// repEmb.image = { url: recoilImageLink };
+// }
+// interaction.followUp({ embeds: [repEmb] });
+// },
+// }
+
+
+// run: async (client, interaction, args) => {
+// recoilAvailable = false;
+// hasError = false;
+// console.log(args);
+// const repEmb = statsHandler(args.join(" ").replace("\n", " "));
+// if (hasError) {
+// interaction.followUp({ embeds: [repEmb] });
+// }
+// if (recoilAvailable) {
+// repEmb.fields.push({
+// name: "**Recoil Graph**",
+// value:
+// "```\nThe Recoil graph below is dynamic (change based on attachment equipped)```",
+// });
+// const recoilImageLink = await chart.getShortUrl();
+// repEmb.image = { url: recoilImageLink };
+// }
+// interaction.followUp({ embeds: [repEmb] });
+// },
+// };
+
+// function inpHandler(inpmsg) {
+// statsHandler(inpmsg.split("+")[0]);
+// }
+
+// function statsHandler(inpmsg) {
+// let statsNames = [
+// "Pellets",
+// "Detonation Range",
+// "Explosion Radius",
+// "Explosion Damage",
+// "Firing Mode",
+// "Rate of Fire",
+// "Bullet in Burst",
+// "Time Between Burst",
+// "Bullet Speed",
+// "Penetration Level",
+// "Bullet Spread",
+// "Idle Sway",
+// "Hipfire Pellet Spread",
+// "ADS Pellet Spread",
+// "ADS Time",
+// "Sprint-to-Fire Time",
+// "ADS Zoom",
+// "Magazine",
+// "Reserve",
+// "Reload Type",
+// "Cancel Reload Time",
+// "Reload Time",
+// "Full Reload Time",
+// "Drop Time",
+// "Raise Time",
+// "Sprinting Speed",
+// "Walking Speed",
+// "Straifing Speed",
+// "Damage per Tick",
+// "Number of Ticks",
+// "Time Between Ticks",
+// "Breath Hold Time",
+// "shouldNeverHappen0",
+// "shouldNeverHappen1",
+// "shouldNeverHappen2",
+// "shouldNeverHappen3",
+// "shouldNeverHappen4",
+// ],
+// out = [];
+
+// currGun = common.weaponIdentifier(inpmsg);
+// if (typeof currGun == "string") {
+// hasError = true;
+// return currGun;
+// }
+// currStats = currGun.stats;
+// currDRM = currGun.drm[0];
+// currAttachments = [];
+// currAttachments = common.attachmentsIdentifier(
+// inpmsg,
+// currGun.aments,
+// currStats
+// );
+// if (typeof currAttachments == "string") {
+// hasError = true;
+// return currAttachments;
+// }
+// currRecoilArr = [1, 1, currGun.stats[17]];
+// if (currAttachments.length != 0) {
+// const totalEffects = common.totaler(currAttachments);
+
+// currStats = common.updateStatswithEffects(totalEffects, currStats);
+// currRecoilArr = [totalEffects[2], totalEffects[3], currGun.stats[17]]; // must happen after currStats update
+// currDRM = currGun.drm[totalEffects[37]];
+// currDRM.range = currDRM.range.map(x =>
+// Math.round(x * (1 + totalEffects[13] / 100))
+// );
+// out = common.attachmentHandler(totalEffects, currStats);
+// }
+// function statsWorker() {
+// if (currStats[19] === 2) {
+// currStats[21] =
+// currStats[20] + currStats[21] * currStats[17] + currStats[22];
+// currStats[20] = 0;
+// currStats[22] = 0;
+// }
+// currStats[25] = (currStats[25] * currStats[26]) / 100;
+
+// const outReady = currStats.map((x, i) =>
+// x ? statsNames[i].padEnd(24) + ":".padEnd(3) + beautifier(i) : ""
+// );
+// out = [
+// ...[
+// "Basic Stats",
+// "ADS Stats",
+// "Bullet Stats",
+// "Magazine",
+// "Handling Stats",
+// "Mobility Stats",
+// "Miscellaneous Stats",
+// ].map((x, i) =>
+// fieldMaker(
+// x,
+// [
+// [04, 05, 09],
+// [14, 16, 11, 31],
+// [00, 06, 07, 08, 10, 12, 13],
+// [17, 18, 19, 20, 21, 22],
+// [23, 24],
+// [25, 26, 27, 15],
+// [28, 29, 30, 01, 02, 03],
+// ][i]
+// )
+// ),
+// ...out,
+// ];
+// function fieldMaker(inpName, inpIndx) {
+// inpIndx = inpIndx.filter(x => outReady[x]);
+// return inpIndx.length
+// ? {
+// name: "**" + inpName + "**",
+// value: "```\n" + inpIndx.map(x => outReady[x]).join("\n") + "```",
+// }
+// : "";
+// }
+// }
+// statsWorker();
+
+// function beautifier(j) {
+// switch (j) {
+// case 04:
+// return data.firingModes[currStats[j] - 1];
+// case 09:
+// return data.penetrationLevels[currStats[j] - 1];
+// case 19:
+// return data.reloadTypes[currStats[j] - 1];
+// case 08:
+// if (currStats[j] == -1) {
+// return "Infinity";
+// } else {
+// return parseFloat(currStats[j].toFixed(2)).toString() + " m/s";
+// }
+// case 03:
+// return parseFloat(currStats[j].toFixed(2))
+// .toString()
+// .replace(".", " ~ ");
+// default:
+// return parseFloat(currStats[j].toFixed(2)).toString() + addUnit(j);
+// }
+
+// function addUnit(j) {
+// switch (j) {
+// case 07:
+// case 14:
+// case 15:
+// case 23:
+// case 24:
+// case 31:
+// return " ms";
+// case 27:
+// case 28:
+// case 25:
+// case 26:
+// return " m/s";
+// case 20:
+// case 21:
+// case 22:
+// return " s";
+// case 16:
+// return "%";
+// case 06:
+// return " Rounds";
+// case 05:
+// return " RPM";
+// default:
+// return "";
+// }
+// }
+// }
+// interpretion = currGun.gunname + common.interpretioner(currAttachments);
+// if (currGun.recoil.hr.length > 2) {
+// chart = common.recoilHandler(
+// currGun.recoil.hr,
+// currGun.recoil.vr,
+// currRecoilArr[0],
+// currRecoilArr[1],
+// currRecoilArr[2]
+// );
+// recoilAvailable = true;
+// } else {
+// recoilAvailable = false;
+// }
+// if (chart == "none") {
+// recoilAvailable = false;
+// }
+// if (chart == "err" || currAttachments == "err") {
+// hasError = true;
+// return "Cocaineeee";
+// }
+// const dmg =
+// common.damageHandler(
+// currDRM.damage,
+// currDRM.range,
+// 1,
+// 100,
+// 60000 / currStats[5],
+// currStats[7],
+// currStats[6],
+// currStats[0]
+// ) || "```This should never happen```";
+// out = [
+// currGun.description
+// ? {
+// name: "**Description:**",
+// value: "```\n" + currGun.description + "```",
+// }
+// : {},
+// { name: "**Damage Profile:**", value: dmg },
+// ...out,
+// ];
+// out = out.filter(x => x.value);
+// return {
+// title: interpretion,
+// color: 5814783,
+// fields: out,
+// footer: {
+// text: "[OUTDATED] All data courtesy of Project Lighthouse 2.0 and CoDM Research Crew",
+// icon_url:
+// "https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png",
+// },
+// };
diff --git a/command/CODM/build.js b/command/CODM/build.js
@@ -4,6 +4,7 @@ const axios = require("axios");
module.exports = {
name: "build",
description: "Get gunsmith builds",
+ usage: "[Weapon Name] [Author] [Tag]",
type: "CHAT_INPUT",
category: "CODM",
options: [
@@ -106,7 +107,7 @@ module.exports = {
},
{
type: 3,
- name: "youtuber",
+ name: "Author",
description: "Select a Content Creator",
required: true,
choices: [
@@ -233,7 +234,7 @@ module.exports = {
},
{
type: 3,
- name: "youtuber",
+ name: "Author",
description: "Select a Content Creator",
required: true,
choices: [
@@ -324,7 +325,7 @@ module.exports = {
},
{
type: 3,
- name: "youtuber",
+ name: "Author",
description: "Select a Content Creator",
required: true,
choices: [
@@ -407,7 +408,7 @@ module.exports = {
},
{
type: 3,
- name: "youtuber",
+ name: "Author",
description: "Select a Content Creator",
required: true,
choices: [
@@ -471,7 +472,7 @@ module.exports = {
value: "E04",
},
{
- name: "KRM_262",
+ name: "KRM 262",
value: "E05",
},
{
@@ -486,7 +487,7 @@ module.exports = {
},
{
type: 3,
- name: "youtuber",
+ name: "Author",
description: "Select a Content Creator",
required: true,
choices: [
@@ -549,7 +550,7 @@ module.exports = {
},
{
type: 3,
- name: "youtuber",
+ name: "Author",
description: "Select a Content Creator",
required: true,
choices: [
@@ -557,6 +558,10 @@ module.exports = {
name: "path.exe",
value: "path.exe",
},
+ // {
+ // name: "Stats On Duty",
+ // value: "sod",
+ // },
],
},
{
@@ -620,7 +625,7 @@ module.exports = {
},
{
type: 3,
- name: "youtuber",
+ name: "Author",
description: "Select a Content Creator",
required: true,
choices: [
@@ -628,6 +633,10 @@ module.exports = {
name: "path.exe",
value: "path.exe",
},
+ // {
+ // name: "Stats On Duty",
+ // value: "sod",
+ // },
],
},
{
diff --git a/command/CODM/scorestreak.js b/command/CODM/scorestreak.js
@@ -132,7 +132,9 @@ module.exports = {
const embed = new MessageEmbed()
.setTitle(d.name)
.setURL(d.preview_video)
- .setDescription(`\`\`\`${d.description}\`\`\``)
+ .setDescription(
+ `<:nyx_description:897379659665264650> **Description** \`\`\`\n${d.description}\`\`\``
+ )
.addFields(
{
name: "Cost",
@@ -148,11 +150,6 @@ module.exports = {
: "<a:nyx_checkmark:897240322411724841> Yes"
}`,
inline: true,
- },
- {
- name: "More Info",
- value: `\`\`\`${d.special ? d.special : "None"}\`\`\``,
- inline: false,
}
)
.setThumbnail(d.preview)
diff --git a/util/Data/cwts.json b/util/Data/cwts.json
@@ -0,0 +1,74 @@
+{
+ "A01": "Type 25",
+ "A02": "M16",
+ "A03": "AK117",
+ "A04": "AK-47",
+ "A05": "ASM10",
+ "A06": "M4",
+ "A07": "BK57",
+ "A08": "LK24",
+ "A09": "ICR-1",
+ "A10": "Man-o-War",
+ "A11": "KN-44",
+ "A12": "HBRa3",
+ "A13": "HVK-30",
+ "A14": "DR-H",
+ "A15": "Peacekeeper MK2",
+ "A16": "FR .556",
+ "A17": "AS VAL",
+ "A18": "CR-56 AMAX",
+ "A19": "M13",
+ "A20": "Swordfish",
+ "A21": "Kilo 141",
+ "B01": "XPR-50",
+ "B02": "Arctic .50",
+ "B03": "M21 EBR",
+ "B04": "DL Q33",
+ "B05": "Locus",
+ "B06": "NA-45",
+ "B07": "Outlaw",
+ "B08": "Rytec AMR",
+ "B09": "SVD",
+ "C01": "S36",
+ "C02": "UL736",
+ "C03": "RPD",
+ "C04": "M4 LMG",
+ "C05": "Chopper",
+ "C06": "Holger 26",
+ "C07": "Hades",
+ "C08": "PKM",
+ "D01": "RUS-79u",
+ "D02": "Chicom",
+ "D03": "PDW-57",
+ "D04": "Razorback",
+ "D05": "MSMC",
+ "D06": "HG40",
+ "D07": "Pharo",
+ "D08": "GKS",
+ "D09": "Cordite",
+ "D10": "QQ9",
+ "D11": "Fennec",
+ "D12": "AGR 556",
+ "D13": "QXR",
+ "D14": "PP19 Bizon",
+ "D15": "MX9",
+ "D16": "CBR4",
+ "D17": "PPSh 41",
+ "E01": "HS2126",
+ "E02": "BY15",
+ "E03": "HS0405",
+ "E04": "Striker",
+ "E05": "KRM 262",
+ "E06": "Echo",
+ "E07": "R9-0",
+ "F01": "Kilo Bolt-Action",
+ "F02": "SKS",
+ "F03": "SP-R 208",
+ "F04": "MK2",
+ "G01": "J358",
+ "G02": "MW11",
+ "G03": ".50 GS",
+ "G04": "Renetti",
+ "G05": "Shorty",
+ "G06": "Crossbow"
+}
diff --git a/util/Data/loadout.json b/util/Data/loadout.json
@@ -0,0 +1,98 @@
+{
+ "secondary": [
+ "Knife / Base Melee",
+ "Axe",
+ "Shovel",
+ "Baseball Bat",
+ "Nunchucks",
+ "Prizefighter",
+ "Wrench",
+ "Sickle",
+ "Machete",
+ "Katana",
+ "FHJ-18",
+ "SMRS",
+ "D13 Sector",
+ "Thumper"
+ ],
+ "perk_1": [
+ "Fast Recover",
+ "Persistence",
+ "Flak Jacket",
+ "Skulker",
+ "Agile",
+ "Lightweight",
+ "Restock",
+ "Tactician",
+ "Overclock",
+ "Martyrdom",
+ "Iron Lungs"
+ ],
+ "perk_2": [
+ "Vulture",
+ "Toughness",
+ "Tracker",
+ "Ghost",
+ "Cold Blooded",
+ "Hard Wired",
+ "Quick Fix",
+ "Amped",
+ "Recon",
+ "Gung-Ho"
+ ],
+ "perk_3": [
+ "Hard Line",
+ "Demo Expert",
+ "Tactical Mask",
+ "Alert",
+ "Engineer",
+ "Dead Silence",
+ "Shrapnel",
+ "Hard Alert",
+ "Launcher Plus"
+ ],
+ "scorestreek": [
+ "Shield Turret",
+ "UAV",
+ "Shock RC",
+ "Hunter Killer Drone",
+ "Care Package",
+ "Counter UAV",
+ "MQ-27 Dragonfire",
+ "SAM Turret",
+ "Predator Missile",
+ "Hawk X3",
+ "Sentry Gun",
+ "Lightning Strike",
+ "Orbital Laser",
+ "XS1 Goliath",
+ "Cluster Strike",
+ "Chopper Gunner",
+ "Stealth Chopper",
+ "Swarm",
+ "Napalm",
+ "Advance UAV",
+ "EMP Systems",
+ "VTOL"
+ ],
+ "operator_skill": [
+ "Purifier",
+ "War Machine",
+ "Death Machine",
+ "Tranform Shield",
+ "K9 UNIT",
+ "Sparrow",
+ "Tempest",
+ "H.I.V.E. ",
+ "Gravity Spikes",
+ "Annihilator",
+ "Shadow Blade",
+ "Equalizer",
+ "Ballistic Shield",
+ "Gravity Vortex Gun",
+ "Bull Charge",
+ "Kinetic Armor",
+ "TAK-5",
+ "Munitions Box"
+ ]
+}