merge dev branch(nsfw,scorestreak cmd not finish)
This commit is contained in:
commit
d763390efd
11 changed files with 611 additions and 53 deletions
9
.github/README.md
vendored
9
.github/README.md
vendored
|
@ -44,9 +44,10 @@ If you like this bot, feel free to :star: **Star** this repository.<br>
|
|||
## <img height="18px" src="../util/assets/images/cod_logo.svg"> **Call of Duty Mobile**
|
||||
|
||||
- **Weapon Statistics** courtesy of **Lighthouse v2.1**
|
||||
> Will soon be using stats provided by **Round Table** of Cygnoux Familia.
|
||||
> Will soon be using stats provided by **Stats On Duty**.
|
||||
- **Currated Gunsmith Builds** by various content creators like Jokesta, dHitman, Path.exe and more comming soon.
|
||||
- **Perks** detailed info about the perks.
|
||||
- **Scorestreak** detailed info about scorestreak with preview videos.
|
||||
- **Randomly Generated Class** Wanna try something challenging? try our Randomly Generated Gunsmith builds.
|
||||
|
||||
> We also provide access to our database that includes In-depth Weapon statistics & Gunsmith Builds from various Content Creators, & other Call of duty related info, please [contact us](https://rebrand.ly/cathSupport) for more info.
|
||||
|
@ -59,7 +60,7 @@ If you like this bot, feel free to :star: **Star** this repository.<br>
|
|||
|
||||
A detailed Deployment guide can be found [here](https://thunder75.gitbook.io/cath-bot/deployment).
|
||||
|
||||
<details>
|
||||
<!-- <details>
|
||||
<summary>Made With</summary>
|
||||
|
||||
[![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
|
||||
|
@ -76,9 +77,9 @@ A detailed Deployment guide can be found [here](https://thunder75.gitbook.io/cat
|
|||
![GitHub Discussions](https://img.shields.io/github/discussions/night0721/cath.exe?color=5865F2&logo=github&logoColor=ffffff&style=for-the-badge)
|
||||
![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/night0721/cath.exe?color=5865F2&logo=github&logoColor=ffffff&style=for-the-badge)
|
||||
[![Last commit](https://img.shields.io/github/last-commit/night0721/cath.exe?icon=discord&color=5865F2&style=for-the-badge&scale=1.4)](https://github.com/night0721/cath.exe)
|
||||
<!-- [![Files](https://tokei.rs/b1/github/night0721/cath.exe?category=files&style=for-the-badge)](https://github.com/night0721/cath.exe) -->
|
||||
<!-- [![Files](https://tokei.rs/b1/github/night0721/cath.exe?category=files&style=for-the-badge)](https://github.com/night0721/cath.exe)
|
||||
|
||||
</details>
|
||||
</details> -->
|
||||
|
||||
<h1 align = "center"> Support, Feature Request & Bug Reports </h1>
|
||||
|
||||
|
|
|
@ -82,29 +82,4 @@ function weaponIdentifier(inpWeaponName) {
|
|||
);
|
||||
}
|
||||
return "Couldn't identify the weapon: `" + '"' + inpWeaponName + '"`';
|
||||
}
|
||||
// ENABLE AFTER Holloween
|
||||
|
||||
// run: async (client, interaction, args) => {
|
||||
// const embed = new MessageEmbed()
|
||||
// .setTitle(`Prefix commands are now disabled`)
|
||||
// .setDescription(`Please enable **Application commands** in the channel settings to get access to slash commands, we have discontinued prefix commands.`)
|
||||
// .setColor(client.color)
|
||||
// .setThumbnail(interaction.guild.iconURL({ dynamic: true }))
|
||||
// .addFields(
|
||||
// {
|
||||
// name: "Need help ?",
|
||||
// value: `Join our **[Support Server](https://discord.gg/SR7TeNJG67)**`,
|
||||
// inline: true,
|
||||
// },
|
||||
// {
|
||||
// name: "Support us <a:donate:896985486260846614>",
|
||||
// value: `[KoFi](https://ko-fi.com/cathteam)`,
|
||||
// inline: true,
|
||||
// }
|
||||
// )
|
||||
// .setThumbnail("https://github.com/night0721/cath.js/blob/master/util/assets/images/nyx_logo_transparent.webp")
|
||||
// .setTimestamp();
|
||||
// interaction.followUp({ embeds: [embed] });
|
||||
// },
|
||||
// };
|
||||
}
|
|
@ -51,7 +51,6 @@ class NYX extends Client {
|
|||
"614423108388126731", // Camper on Duty
|
||||
"767173194943168542", // Dark Bonker
|
||||
"718762019586572341", // NYX Nation
|
||||
"869583978108157972", // Lighthouse Community
|
||||
"840225563193114624", // Command Test
|
||||
];
|
||||
const client = this;
|
||||
|
|
|
@ -97,7 +97,8 @@ module.exports = {
|
|||
{
|
||||
name: "Swordfish",
|
||||
value: "swordfish",
|
||||
}, // {
|
||||
},
|
||||
// {
|
||||
// name: "Kilo 141",
|
||||
// value: "kilo",
|
||||
// },
|
||||
|
@ -116,7 +117,8 @@ module.exports = {
|
|||
{
|
||||
name: "Jokesta",
|
||||
value: "jokesta",
|
||||
}, // {
|
||||
},
|
||||
// {
|
||||
// name: "Stats On Duty",
|
||||
// value: "sod",
|
||||
// },
|
||||
|
@ -827,4 +829,4 @@ module.exports = {
|
|||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
};
|
177
command/CODM/scorestreak.js
Normal file
177
command/CODM/scorestreak.js
Normal file
|
@ -0,0 +1,177 @@
|
|||
const { MessageEmbed } = require("discord.js");
|
||||
const { CODMClient } = require("cath");
|
||||
const c = new CODMClient("Gae");
|
||||
module.exports = {
|
||||
name: "scorestreak",
|
||||
description: "Get Scorestreak stats",
|
||||
type: "CHAT_INPUT",
|
||||
usage: "{Scorestreak}",
|
||||
category: "CODM",
|
||||
options: [
|
||||
{
|
||||
type: "SUB_COMMAND",
|
||||
name: "lethal",
|
||||
description: "Lethal Scorestreak",
|
||||
options: [
|
||||
{
|
||||
type: 3,
|
||||
name: "scorestreak",
|
||||
description: "Select a lethal scorestreak",
|
||||
required: true,
|
||||
choices: [
|
||||
{
|
||||
name: "Shield Turret",
|
||||
value: "shieldturret",
|
||||
},
|
||||
{
|
||||
name: "Hunter Killer Drone",
|
||||
value: "hunterkillerdrone",
|
||||
},
|
||||
{
|
||||
name: "MQ-27 Dragonfire",
|
||||
value: "mq27dragonfire",
|
||||
},
|
||||
{
|
||||
name: "Predator Missile",
|
||||
value: "predatormissile",
|
||||
},
|
||||
{
|
||||
name: "Hawk X3",
|
||||
value: "hawkx3",
|
||||
},
|
||||
{
|
||||
name: "Sentry Gun",
|
||||
value: "sentrygun",
|
||||
},
|
||||
{
|
||||
name: "Lightning Strike",
|
||||
value: "lightningstrike",
|
||||
},
|
||||
{
|
||||
name: "Orbital Laser",
|
||||
value: "orbitallaser",
|
||||
},
|
||||
{
|
||||
name: "XS1 Goliath",
|
||||
value: "xs1goliath",
|
||||
},
|
||||
{
|
||||
name: "Cluster Strike",
|
||||
value: "clusterstrike",
|
||||
},
|
||||
{
|
||||
name: "XS1 Goliath",
|
||||
value: "xs1goliath",
|
||||
},
|
||||
{
|
||||
name: "Stealth Chopper",
|
||||
value: "stealthchopper",
|
||||
},
|
||||
{
|
||||
name: "Swarm",
|
||||
value: "swarm",
|
||||
},
|
||||
{
|
||||
name: "Napalm",
|
||||
value: "napalm",
|
||||
},
|
||||
{
|
||||
name: "VTOL",
|
||||
value: "vtol",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "SUB_COMMAND",
|
||||
name: "support",
|
||||
description: "Support Scorestreak",
|
||||
options: [
|
||||
{
|
||||
type: 3,
|
||||
name: "scorestreak",
|
||||
description: "Select a Support Scorestreak",
|
||||
required: true,
|
||||
choices: [
|
||||
{
|
||||
name: "UAV",
|
||||
value: "uav",
|
||||
},
|
||||
{
|
||||
name: "Shock RC",
|
||||
value: "shockrc",
|
||||
},
|
||||
{
|
||||
name: "Care Package",
|
||||
value: "carepackage",
|
||||
},
|
||||
{
|
||||
name: "Counter UAV",
|
||||
value: "cuav",
|
||||
},
|
||||
{
|
||||
name: "SAM Turret",
|
||||
value: "samturret",
|
||||
},
|
||||
{
|
||||
name: "Advance UAV",
|
||||
value: "auav",
|
||||
},
|
||||
{
|
||||
name: "EMP Systems",
|
||||
value: "empsystems",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
run: async (client, interaction, args) => {
|
||||
const val = args[1];
|
||||
const d = await c.getscorestreak(val);
|
||||
const embed = new MessageEmbed()
|
||||
.setTitle(d.scorestreak)
|
||||
.setURL(d.preview_video)
|
||||
.setDescription(`\`\`\`${d.description}\`\`\``)
|
||||
.addFields(
|
||||
{
|
||||
name: "Cost",
|
||||
value: `\`\`\`${d.cost}\`\`\``,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "Lethal",
|
||||
value: `
|
||||
${d.lethal == true
|
||||
? "<a:nyx_checkmark:897240322411724841> Yes"
|
||||
: "<a:nyx_cross:897244999211696198> No"}`,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "AI-Assisted",
|
||||
value: `
|
||||
${d.manual == false
|
||||
? "<a:nyx_checkmark:897240322411724841> Yes"
|
||||
: "<a:nyx_cross:897244999211696198> No"}`,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "More Info",
|
||||
value: `\`\`\`${d.special}\`\`\``,
|
||||
inline: false
|
||||
}
|
||||
)
|
||||
.setThumbnail(`${d.preview}`)
|
||||
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||
.setColor(
|
||||
d.type == "lethal"
|
||||
? "FF2222"
|
||||
: d.type == "support"
|
||||
? "22FF4A"
|
||||
: client.color
|
||||
)
|
||||
.setTimestamp();
|
||||
interaction.followUp({ embeds: [embed] });
|
||||
},
|
||||
};
|
148
command/NSFW/nsfw.js
Normal file
148
command/NSFW/nsfw.js
Normal file
|
@ -0,0 +1,148 @@
|
|||
const fetch = require('node-fetch')
|
||||
const { MessageActionRow, MessageButton, MessageEmbed, CommandInteraction } = require('discord.js');
|
||||
module.exports = {
|
||||
name : 'nsfw',
|
||||
description: "nsfw command",
|
||||
/**
|
||||
* @param {Client} client
|
||||
* @param {CommandInteraction} interaction
|
||||
* @param {String[]} args
|
||||
*/
|
||||
run : async(client, interaction) => {
|
||||
|
||||
async function embed() {
|
||||
if(!interaction.channel.nsfw){
|
||||
const embed = new MessageEmbed()
|
||||
.setTitle(`AYO Calm Yo Cheeks`)
|
||||
.setDescription('This command only works in NSFW Channels!')
|
||||
.setImage('https://media.discordapp.net/attachments/851761493815853060/893777701599584266/warning.gif')
|
||||
.setColor("#02023a")
|
||||
|
||||
interaction.followUp({ embeds: [embed]})
|
||||
return;
|
||||
}
|
||||
let subreddits = [
|
||||
'GoneWild',
|
||||
'WorkGoneWild',
|
||||
'GoneWild30Plus',
|
||||
'hentai',
|
||||
'HentaiAnime',
|
||||
'nekogirls',
|
||||
'ass',
|
||||
'BestBooties',
|
||||
'BootyGIFs',
|
||||
'booty_queens',
|
||||
'BlowJob',
|
||||
'blowjobs',
|
||||
'blowjobgifs',
|
||||
'OralSex',
|
||||
'boobs',
|
||||
'GrabHerTitties',
|
||||
'titfuck',
|
||||
'milf',
|
||||
'OnlyHotMilfs',
|
||||
'realmoms',
|
||||
'thighs',
|
||||
'PerfectThighs',
|
||||
'thickthighs'
|
||||
]
|
||||
let reddit = subreddits[Math.round(Math.random() * (subreddits.length - 1))];
|
||||
|
||||
let embed1 = null
|
||||
await fetch(`https://meme-api.herokuapp.com/gimme/${reddit}`).then(res => res.json().then(url => {
|
||||
embed1 = new MessageEmbed()
|
||||
.setAuthor(
|
||||
interaction.user.tag,
|
||||
interaction.user.displayAvatarURL({ dynamic: true })
|
||||
)
|
||||
.setTitle(`${url.title}`)
|
||||
.setImage(`${url.url}`)
|
||||
.setTimestamp()
|
||||
.setColor("RED")
|
||||
.setFooter(`${url.ups} 👍`)
|
||||
}))
|
||||
return embed1
|
||||
|
||||
}
|
||||
|
||||
const row = new MessageActionRow()
|
||||
.addComponents(
|
||||
new MessageButton()
|
||||
.setCustomId('reload')
|
||||
.setLabel('Reload')
|
||||
.setStyle('SUCCESS'),
|
||||
)
|
||||
const disabled = new MessageActionRow()
|
||||
.addComponents(
|
||||
new MessageButton()
|
||||
.setCustomId('reload')
|
||||
.setLabel('Reload')
|
||||
.setStyle('SECONDARY')
|
||||
.setDisabled(true)
|
||||
|
||||
)
|
||||
|
||||
let m = await interaction.followUp({
|
||||
embeds: [await embed()],
|
||||
components: [row]
|
||||
})
|
||||
|
||||
const collector = m.createMessageComponentCollector({
|
||||
componentType: 'BUTTON',
|
||||
time: 120000,
|
||||
});
|
||||
collector.on('collect', async i => {
|
||||
if (i.user.id === interaction.user.id) {
|
||||
i.deferUpdate()
|
||||
await update(m)
|
||||
collector.stop()
|
||||
} else {
|
||||
i.reply({
|
||||
content: `These buttons aren't for you!`,
|
||||
ephemeral: true
|
||||
});
|
||||
}
|
||||
})
|
||||
collector.on('end', (mes, r) => {
|
||||
if (r == 'time') {
|
||||
m.edit({
|
||||
components: [disabled],
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
async function update(m) {
|
||||
m.edit({
|
||||
embeds: [await embed()]
|
||||
}).catch(e => console.log(e.requestData.json.embeds))
|
||||
|
||||
const collector = m.createMessageComponentCollector({
|
||||
componentType: 'BUTTON',
|
||||
time: 120000,
|
||||
});
|
||||
collector.on('collect', async i => {
|
||||
if (i.user.id === interaction.user.id) {
|
||||
|
||||
i.deferUpdate()
|
||||
await update(m)
|
||||
collector.stop()
|
||||
} else {
|
||||
i.reply({
|
||||
content: `These buttons aren't for you!`,
|
||||
ephemeral: true
|
||||
});
|
||||
}
|
||||
})
|
||||
collector.on('end', (mes, r) => {
|
||||
if (r == 'time') {
|
||||
m.edit({
|
||||
components: [disabled],
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
148
nsfw.js
Normal file
148
nsfw.js
Normal file
|
@ -0,0 +1,148 @@
|
|||
const fetch = require('node-fetch')
|
||||
const { MessageActionRow, MessageButton, MessageEmbed, CommandInteraction } = require('discord.js');
|
||||
module.exports = {
|
||||
name : 'nsfw',
|
||||
description: "nsfw command",
|
||||
/**
|
||||
* @param {Client} client
|
||||
* @param {CommandInteraction} interaction
|
||||
* @param {String[]} args
|
||||
*/
|
||||
run : async(client, interaction) => {
|
||||
|
||||
async function embed() {
|
||||
if(!interaction.channel.nsfw){
|
||||
const embed = new MessageEmbed()
|
||||
.setTitle(`AYO Calm Yo Cheeks`)
|
||||
.setDescription('This command only works in NSFW Channels!')
|
||||
.setImage('https://media.discordapp.net/attachments/851761493815853060/893777701599584266/warning.gif')
|
||||
.setColor("#02023a")
|
||||
|
||||
interaction.followUp({ embeds: [embed]})
|
||||
return;
|
||||
}
|
||||
let subreddits = [
|
||||
'GoneWild',
|
||||
'WorkGoneWild',
|
||||
'GoneWild30Plus',
|
||||
'hentai',
|
||||
'HentaiAnime',
|
||||
'nekogirls',
|
||||
'ass',
|
||||
'BestBooties',
|
||||
'BootyGIFs',
|
||||
'booty_queens',
|
||||
'BlowJob',
|
||||
'blowjobs',
|
||||
'blowjobgifs',
|
||||
'OralSex',
|
||||
'boobs',
|
||||
'GrabHerTitties',
|
||||
'titfuck',
|
||||
'milf',
|
||||
'OnlyHotMilfs',
|
||||
'realmoms',
|
||||
'thighs',
|
||||
'PerfectThighs',
|
||||
'thickthighs'
|
||||
]
|
||||
let reddit = subreddits[Math.round(Math.random() * (subreddits.length - 1))];
|
||||
|
||||
let embed1 = null
|
||||
await fetch(`https://meme-api.herokuapp.com/gimme/${reddit}`).then(res => res.json().then(url => {
|
||||
embed1 = new MessageEmbed()
|
||||
.setAuthor(
|
||||
interaction.user.tag,
|
||||
interaction.user.displayAvatarURL({ dynamic: true })
|
||||
)
|
||||
.setTitle(`${url.title}`)
|
||||
.setImage(`${url.url}`)
|
||||
.setTimestamp()
|
||||
.setColor("RED")
|
||||
.setFooter(`${url.ups} 👍`)
|
||||
}))
|
||||
return embed1
|
||||
|
||||
}
|
||||
|
||||
const row = new MessageActionRow()
|
||||
.addComponents(
|
||||
new MessageButton()
|
||||
.setCustomId('reload')
|
||||
.setLabel('Reload')
|
||||
.setStyle('SUCCESS'),
|
||||
)
|
||||
const disabled = new MessageActionRow()
|
||||
.addComponents(
|
||||
new MessageButton()
|
||||
.setCustomId('reload')
|
||||
.setLabel('Reload Meme')
|
||||
.setStyle('SECONDARY')
|
||||
.setDisabled(true)
|
||||
|
||||
)
|
||||
|
||||
let m = await interaction.followUp({
|
||||
embeds: [await embed()],
|
||||
components: [row]
|
||||
})
|
||||
|
||||
const collector = m.createMessageComponentCollector({
|
||||
componentType: 'BUTTON',
|
||||
time: 120000,
|
||||
});
|
||||
collector.on('collect', async i => {
|
||||
if (i.user.id === interaction.user.id) {
|
||||
i.deferUpdate()
|
||||
await update(m)
|
||||
collector.stop()
|
||||
} else {
|
||||
i.reply({
|
||||
content: `These buttons aren't for you!`,
|
||||
ephemeral: true
|
||||
});
|
||||
}
|
||||
})
|
||||
collector.on('end', (mes, r) => {
|
||||
if (r == 'time') {
|
||||
m.edit({
|
||||
components: [disabled],
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
async function update(m) {
|
||||
m.edit({
|
||||
embeds: [await embed()]
|
||||
}).catch(e => console.log(e.requestData.json.embeds))
|
||||
|
||||
const collector = m.createMessageComponentCollector({
|
||||
componentType: 'BUTTON',
|
||||
time: 120000,
|
||||
});
|
||||
collector.on('collect', async i => {
|
||||
if (i.user.id === interaction.user.id) {
|
||||
|
||||
i.deferUpdate()
|
||||
await update(m)
|
||||
collector.stop()
|
||||
} else {
|
||||
i.reply({
|
||||
content: `These buttons aren't for you!`,
|
||||
ephemeral: true
|
||||
});
|
||||
}
|
||||
})
|
||||
collector.on('end', (mes, r) => {
|
||||
if (r == 'time') {
|
||||
m.edit({
|
||||
components: [disabled],
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -40,10 +40,10 @@
|
|||
"node": "^17.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.24.0",
|
||||
"axios": "^0.25.0",
|
||||
"cath": "^1.4.6",
|
||||
"discord.js": "^13.6.0",
|
||||
"dotenv": "^11.0.0",
|
||||
"dotenv": "^14.2.0",
|
||||
"erela.js": "^2.3.3",
|
||||
"erela.js-spotify": "^1.2.0",
|
||||
"goosecache": "^9.0.14",
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
const { MessageEmbed, version: djsversion } = require("discord.js");
|
||||
const version = require("../../../package.json").version;
|
||||
const { utc } = require("moment");
|
||||
const os = require("os");
|
||||
// const os = require("os");
|
||||
module.exports = {
|
||||
name: "botinfo",
|
||||
description: "Check the info of the bot",
|
||||
category: "Information",
|
||||
type: "CHAT_INPUT",
|
||||
run: async (client, interaction, args, utils) => {
|
||||
const core = os.cpus()[0];
|
||||
// const core = os.cpus()[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setTitle(`NYX - CODM Gunsmith Bot`)
|
||||
.setURL(
|
||||
|
@ -51,18 +51,20 @@ module.exports = {
|
|||
Discord.js ❯ \`v${djsversion}\`
|
||||
Node.js ❯ \`${process.version}\``,
|
||||
},
|
||||
{
|
||||
name: `Hardware`,
|
||||
value: `
|
||||
Uptime:** ${utils.timer(os.uptime() * 1000, { long: true })}
|
||||
Platform:** ${process.platform}
|
||||
CPU:**
|
||||
\u3000 Cores: ${os.cpus().length}
|
||||
\u3000 Model: ${core.model}
|
||||
\u3000 Speed: ${core.speed}MHz
|
||||
**`,
|
||||
inline: true,
|
||||
}
|
||||
// Removed OS Info for troubleshooting.
|
||||
//
|
||||
// {
|
||||
// name: `Hardware`,
|
||||
// value: `
|
||||
// Uptime:** ${utils.timer(os.uptime() * 1000, { long: true })}
|
||||
// Platform:** ${process.platform}
|
||||
// CPU:**
|
||||
// \u3000 Cores: ${os.cpus().length}
|
||||
// \u3000 Model: ${core.model}
|
||||
// \u3000 Speed: ${core.speed}MHz
|
||||
// **`,
|
||||
// inline: true,
|
||||
// }
|
||||
)
|
||||
.addFields({
|
||||
name: `**${client.author}**`,
|
||||
|
|
|
@ -1015,7 +1015,11 @@
|
|||
"4x Tactical Scope",
|
||||
"4.4x Tactical Scope"
|
||||
],
|
||||
"stock": ["YKM Light Stock", "OWC Skeleton Stock", "RTC Steady Stock"],
|
||||
"stock": [
|
||||
"YKM Light Stock",
|
||||
"OWC Skeleton Stock",
|
||||
"RTC Steady Stock"
|
||||
],
|
||||
"perk": [
|
||||
"FMJ",
|
||||
"Sleight of Hand",
|
||||
|
@ -1035,7 +1039,11 @@
|
|||
"Tactical Foregrip A",
|
||||
"Bipod"
|
||||
],
|
||||
"ammo": ["Extended Mag A", "Fast Reload", "Halberd Mag"],
|
||||
"ammo": [
|
||||
"Extended Mag A",
|
||||
"Fast Reload",
|
||||
"Halberd Mag"
|
||||
],
|
||||
"rear_grip": [
|
||||
"Granulated Grip Tape",
|
||||
"Ruberized Grip Tape",
|
||||
|
@ -1772,6 +1780,54 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"PKM": [
|
||||
{
|
||||
"muzzle": [
|
||||
"OWC Light Suppressor",
|
||||
"Agency Suppressor",
|
||||
"Infantry Compensator",
|
||||
"MIP Flashguard",
|
||||
"OWC Eliminator",
|
||||
"RTC Muzzle Brake"
|
||||
],
|
||||
"barrel": [
|
||||
"Rapid Fire Barrel",
|
||||
"Long-Range Barrel",
|
||||
"MIP Extended Light Barrel"
|
||||
],
|
||||
"optic": [
|
||||
"Red Dot Sight",
|
||||
"Holographic Sight",
|
||||
"3x Tactical Scope",
|
||||
"4x Tactical Scope",
|
||||
"4.4x Tactical Scope"
|
||||
],
|
||||
"stock": [
|
||||
"Light Weight Stock",
|
||||
"Marathon Stock",
|
||||
"No Stock",
|
||||
"Agile Stock"
|
||||
],
|
||||
"perk": [
|
||||
"FMJ",
|
||||
"Sleight of Hand",
|
||||
"Wounding",
|
||||
"Full Ammo",
|
||||
"Disable",
|
||||
"Headshot XP",
|
||||
"Empty Reload"
|
||||
],
|
||||
"laser": ["1mW Steady Aim Laser", "5mW Combat Laser", "Aim Assist Laser"],
|
||||
"underbarrel": ["Crossbar"],
|
||||
"ammo": ["84 Round Hybrid Mag"],
|
||||
"rear_grip": [
|
||||
"Sturdy Grip Tape",
|
||||
"Rustle Grip Tape",
|
||||
"Firm Grip Tape",
|
||||
"Non-Slip Foregrip"
|
||||
]
|
||||
}
|
||||
],
|
||||
"RUS_79U": [
|
||||
{
|
||||
"muzzle": [
|
||||
|
@ -2542,6 +2598,57 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"PPSh_41": [
|
||||
{
|
||||
"muzzle": [
|
||||
"Tactical Suppressor",
|
||||
"OWC Light Suppressor",
|
||||
"Monolithic Suppressor",
|
||||
"OWC Light Compensator",
|
||||
"MIP Light FLash Guard",
|
||||
"RTC Light Muzzle Brake"
|
||||
],
|
||||
"barrel": [
|
||||
"Gurrilla Light Short",
|
||||
"Last Stand Light",
|
||||
"Banner Heavy"
|
||||
],
|
||||
"optic": [
|
||||
"Red Dot Sight",
|
||||
"Holographic Sight",
|
||||
"Tactical Scope",
|
||||
"3x Tactical Scope"
|
||||
],
|
||||
"stock": ["No Stock", "OWC Skeleton Stock", "RTC Steady Stock"],
|
||||
"perk": [
|
||||
"FMJ",
|
||||
"Sleight of Hand",
|
||||
"Wounding",
|
||||
"Full Ammo",
|
||||
"Disable",
|
||||
"Wild Hip Fire",
|
||||
"Double Kill",
|
||||
"Fast Reload Kill"
|
||||
],
|
||||
"laser": ["RTC Laser 1mW", "MIP Laser 5mW", "OWC Laser - Tactical"],
|
||||
"underbarrel": [
|
||||
"Focused Foregrip",
|
||||
"Tough Foregrip",
|
||||
"Resilient Foregrip",
|
||||
"Tactical Foregrip A",
|
||||
"Operator Foregrip"
|
||||
],
|
||||
"ammo": [
|
||||
"35 Round Fast Reload",
|
||||
"55 Round Light Reload"
|
||||
],
|
||||
"rear_grip": [
|
||||
"Sturdy Grip Tape",
|
||||
"Ruberized Grip Tape",
|
||||
"Rustle Grip Tape"
|
||||
]
|
||||
}
|
||||
],
|
||||
"HS2126": [
|
||||
{
|
||||
"muzzle": [
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue