commit 1ab89b5cba9ab43e6417148fe60b382d4b5ac549 Author: night0721 Date: Sat Feb 3 14:06:56 2024 +0000 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..977d0a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +package-lock.json +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env +.env.local + +# vercel +.vercel diff --git a/README.md b/README.md new file mode 100644 index 0000000..189f88e --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +Endpoints + +/api/v1/codm/build Get details about a build + +/api/v1/codm/melee Get details about a melee + +api/v1/codm/perk Get details about a perk + +/api/v1/codm/scorestreak Get details about a scorestreak + +/api/v1/fun/8ball 8ball a question + +/api/v1/fun/doublestruck Doublestruck a text + +/api/v1/fun/fractur Fractur a text + +/api/v1/fun/reverse Reverse a text + +/api/v1/fun/superscript Superscript a text + +/api/v1/image/alone Create a alone meme + +/api/v1/image/awesome Create a awesome meme + +/api/v1/image/bestmeme Create a bestmeme meme + +/api/v1/image/busted Create a busted meme + +/api/v1/image/communism Create a communism meme + +/api/v1/image/gun Create a gun meme + +/api/v1/image/mask Create a mask meme + +/api/v1/image/moment Create a moment meme + +/api/v1/image/pray Create a pray meme + +/api/v1/image/pressplay Create a pressplay meme + +/api/v1/image/rifleshoot Create a rifleshoot meme + +/api/v1/image/robert Create a robert meme + +/api/v1/image/saveonlyone Create a saveonlyone meme + +/api/v1/image/toilet Create a toilet meme + +/api/v1/image/vr Create a vr meme + +/api/v1/image/whodidthis Create a whodidthis meme + +/api/v1/rpc/json/[id] Get rich presence of user with json + +/api/v1/rpc/[id] Get rich presence of user with image + +/api/v1/server/[invite] Get server information based on invite code + +/api/v1/shield/[user] Get user shield using shield.io diff --git a/db/codm/builds.json b/db/codm/builds.json new file mode 100644 index 0000000..e921620 --- /dev/null +++ b/db/codm/builds.json @@ -0,0 +1,2504 @@ +[ + { + "cwts": "A01", + "weaponName": "Type 25", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Light Compensator", + "YKM Light Stock", + "Granulated Grip Tape", + "Stopping Power Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/903194293164965948/Screenshot_20211028-1259072.png" + }, + { + "cwts": "A01", + "weaponName": "Type 25", + "author": "Jokesta", + "lastUpdate": "2022-01-24T00:00:00Z", + "attachments": [ + "MIP Light Barrel(Short)", + "YKM Light Stock", + "Monolithic Suppressor", + "42 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 07; Good TTK - Fast Firerate - Bad Range - ironsights - non-flexible build options", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/935028256653058088/unknown.png" + }, + { + "cwts": "A02", + "weaponName": "M16", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Light Compensator", + "Holographic Sight", + "Rubberized Grip Tape", + "Operator Foregrip", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://images-ext-1.discordapp.net/external/2cYevpZoxTuLufgwG63xrACTOLpEN-1yrf_fSyc-pdU/%3Fwidth%3D937%26height%3D562/https/media.discordapp.net/attachments/772099026195316746/847174281255190568/image4.png" + }, + { + "cwts": "A02", + "weaponName": "M16", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Light Compensator", + "Red Dot Sight", + "Rubberized Grip Tape", + "Operator Foregrip", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Rank 21; Good Damage Range - Extremely Fast TTK if shots land on upper body. High Punishment due to burst nature - Very inconsistent.", + "imageUrl": "" + }, + { + "cwts": "A03", + "weaponName": "AK117", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Integral Supprssor", + "No Stock", + "Granulated Grip Tape", + "Tactical Foregrip A", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856063210239164416/Screenshot_20210620-110317.png?width=1320&height=609" + }, + { + "cwts": "A03", + "weaponName": "AK117", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "No Stock", + "40 Round Extended Mag", + "FMJ / Slight of Hand", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 14; Fast Firerate - High Initial Accuracy - Monstly Vertical Recoil - Slightly Unpredictable Pattern - Very Low Damage Range", + "imageUrl": "" + }, + { + "cwts": "A04", + "weaponName": "AK-47", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Integral Supprssor", + "No Stock", + "Granulated Grip Tape", + "5.45 Large Caliber", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/772099026195316746/847174280823308308/image3.png?width=937&height=562" + }, + { + "cwts": "A04", + "weaponName": "AK-47", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "No Stock", + "Granulated Grip Tape", + "Extended Mag A", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "Ranked 19; Good Damage Range - Stright Vertical Recoil - High TTK - Slow Handling - High Punishment due to Slow Fire rate.", + "imageUrl": "" + }, + { + "cwts": "A04", + "weaponName": "AK-47", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "No Stock", + "Granulated Grip Tape", + "5.45 Caliber Ammo", + "OWC Laser - Tactical" + ], + "tags": ["Search And Destroy", "Aggressive"], + "notes": "Ranked 17; Fast firerate - Consistent Damage Profile - Bad mobility for CQB - High Recoil - Low Range", + "imageUrl": "" + }, + { + "cwts": "A05", + "weaponName": "ASM10", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Flash Guard", + "No Stock", + "Granulated Grip Tape", + "Slight of Hand", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/691133003866439701/861887618820472842/Screenshot_20210706-1353282.png" + }, + { + "cwts": "A05", + "weaponName": "ASM10", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "No Stock", + "Granulated Grip Tape", + "33 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "Ranked 11; Consistent high damage in CQB - Good Mid-Range Damage - Below Average Mobility - Very slow firerate & high aim shake", + "imageUrl": "" + }, + { + "cwts": "A05", + "weaponName": "ASM10", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "No Stock", + "Granulated Grip Tape", + "33 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Passive"], + "notes": "Ranked 11; Consistent high damage in CQB - Good Mid-Range Damage - Below Average Mobility - Very slow firerate & high aim shake", + "imageUrl": "" + }, + { + "cwts": "A06", + "weaponName": "M4", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Flash Guard", + "No Stock", + "Granulated Grip Tape", + "Long Shot", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/892543685705740308/Screenshot_20210929-0418412.jpg" + }, + { + "cwts": "A06", + "weaponName": "M4", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "No Stock", + "Granulated Grip Tape", + "40 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "Ranked 21 Build 1; Easy Recoil - Good Accuracy & Range - Bad Damage & Awful CQC TTK", + "imageUrl": "" + }, + { + "cwts": "A06", + "weaponName": "M4", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Flash Guard", + "No Stock", + "Granulated Grip Tape", + "MIP Light Barrel Short", + "OWC Laser - Tactical" + ], + "tags": ["Aggressive", "Search And Destroy"], + "notes": "Rank 21 Build 2; Easy Recoil - Good Accuracy & Range - Bad Damage & Awful CQC TTK", + "imageUrl": "" + }, + { + "cwts": "A07", + "weaponName": "BK57", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel(Short)", + "MIP Light Muzzel Brake", + "Granulated Grip Tape", + "40 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856063253745238016/Screenshot_20210620-111526.png?width=1320&height=609" + }, + { + "cwts": "A07", + "weaponName": "BK57", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "Monolithic / Red Dot Sight", + "YKM Commbat Stock", + "40 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 06; Good damage range - flexible build options; Below average TTK - Bad ironsights", + "imageUrl": "" + }, + { + "cwts": "A08", + "weaponName": "LK24", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Integral Supprssor", + "No Stock", + "Granulated Grip Tape", + "Tactical Foregrip A", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856063282258509834/Screenshot_20210620-113830.png?width=1320&height=609" + }, + { + "cwts": "A08", + "weaponName": "LK24", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "No Stock", + "Granulated Grip Tape", + "40 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "Ranked 9; Easy recoil - Good damage range & accuracy; Slow firerate results in high punishment - Below average TTK & Bad ironsights", + "imageUrl": "" + }, + { + "cwts": "A08", + "weaponName": "LK24", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Integral Suppressed Barrel", + "No Stock", + "Granulated Grip Tape", + "Red Dot Sight", + "OWC Laser - Tactical" + ], + "tags": ["Search And Destroy", "Aggressive"], + "notes": "Ranked 9; Easy recoil - Good damage range & accuracy; Slow firerate results in high punishment - Below average TTK & Bad ironsights", + "imageUrl": "" + }, + { + "cwts": "A09", + "weaponName": "ICR-1", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Integral Supprssor", + "No Stock", + "Granulated Grip Tape", + "40 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856063281622286346/Screenshot_20210620-113515.png?width=1320&height=609" + }, + { + "cwts": "A09", + "weaponName": "ICR-1", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "No Stock", + "Granulated Grip Tape", + "40 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 15; Non-Existent Recoil - Good Accuracy - Slow Firerate - Slow TTK - Low Damage Range", + "imageUrl": "" + }, + { + "cwts": "A10", + "weaponName": "Man-O-War", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Ranger Foregrip", + "YKM Combat Stock", + "Granulated Grip Tape", + "Disabled", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Not a very good weapon - Can use optic instead of Disabled", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/903194292380651540/Screenshot_20211028-1256082.png" + }, + { + "cwts": "A10", + "weaponName": "Man-O-War", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "Red Dot Sight", + "Granulated Grip Tape", + "30 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Passive"], + "notes": "Ranked 13; Best damage profile - High kicks in recoil - slowest full auto firerate - below average AR mobility - average accuracy", + "imageUrl": "" + }, + { + "cwts": "A11", + "weaponName": "KN-44", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel(Short)", + "MIP Light Muzzel Brake", + "Granulated Grip Tape", + "No Stock", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://cdn.discordapp.com/attachments/540218400413188116/856063281978015744/Screenshot_20210620-113641.png" + }, + { + "cwts": "A11", + "weaponName": "KN-44", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "Monolithic Suppressor", + "38 Round Fast Reload", + "No Stock", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "Ranked 8; Best BSA for a full auto - High BSA Taper - Average TTK - Rewarding Range Multipliers; Bad horizontal recoil", + "imageUrl": "" + }, + { + "cwts": "A12", + "weaponName": "HBRa3", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "No Stock", + "Optics", + "Fast Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Generally One of the worst ARs - (But still better than AK117) - 17m 4 STK Range - Optics can be replaced with Compensator or FMJ or Disabled ", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/903194293433413632/Screenshot_20211028-1300402.png" + }, + { + "cwts": "A12", + "weaponName": "HBRa3", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "No Stock", + "Granulated Grip Tape", + "Long Shot", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 16; Good TTK - Fast Firerate - Bad Range - Awful ironsights", + "imageUrl": "" + }, + { + "cwts": "A13", + "weaponName": "HVK-30", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light", + "Monolithic Supprssor", + "YKM Combat Stock", + "Large Caliber Ammo", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/892545812599541770/Screenshot_20210929-0427552.jpg" + }, + { + "cwts": "A13", + "weaponName": "HVK-30", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Marksman", + "Monolithic Supprssor", + "YKM Combat Stock", + "Large Caliber Ammo", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 02; Above average ROF - Decent Accuracy & Recoil - Large Caliber greatly improves damage profile and multipliers; Low Mag Size - Not Flexible Build options ", + "imageUrl": "" + }, + { + "cwts": "A14", + "weaponName": "DR-H", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "25 Round OTM Mag", + "No Stock", + "Granulated Grip Tape", + "Tactical Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/892540226889736233/Screenshot_20210929-0402022.jpg" + }, + { + "cwts": "A14", + "weaponName": "DR-H", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "25 Round OTM Mag", + "No Stock", + "Granulated Grip Tape", + "Tactical Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "Ranked 12; Fast TTK Potential - Inconsistent hitboxes - low range profile - Slow firerate", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/892540226889736233/Screenshot_20210929-0402022.jpg" + }, + { + "cwts": "A14", + "weaponName": "DR-H", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "25 Round OTM Mag", + "No Stock", + "Granulated Grip Tape", + "OWC Ranger", + "OWC Laser - Tactical" + ], + "tags": ["Passive"], + "notes": "Ranked 12; Fast TTK Potential - Inconsistent hitboxes - low range profile - Slow firerate", + "imageUrl": "" + }, + { + "cwts": "A15", + "weaponName": "Peacekeeper MK2", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Taskforce Barrel", + "Agile Stock", + "Firm Grip Tape", + "Field Agent Foregrip", + "Extended Mag A" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "Build with Taskforce Barrel", + "imageUrl": "https://media.discordapp.net/attachments/772099026195316746/847174260522090516/image2.png?width=937&height=562" + }, + { + "cwts": "A15", + "weaponName": "Peacekeeper MK2", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Taskforce Barrel", + "Agile Stock", + "Firm Grip Tape", + "Foregrip", + "Double Stack" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 3; Broken Attachments - Flexible Builds - Good Mobility; Bad ironsights - Awful recoil - Slow reload Speed", + "imageUrl": "" + }, + { + "cwts": "A16", + "weaponName": "FR .556", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel(Short)", + "RTC Steady Stock", + "Granulated Grip Tape", + "Tactical Foregrip A", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/772099026195316746/847174260052459540/image1.png" + }, + { + "cwts": "A16", + "weaponName": "FR .556", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "YKM Combat Stock", + "Granulated Grip Tape", + "Tactical Foregrip A", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Passive"], + "notes": "Ranked 10; Extremely Good Range - High Accuracy; Inconvenient Aimshake - slow handling - bad negetive multiplier ", + "imageUrl": "" + }, + { + "cwts": "A16", + "weaponName": "FR .556", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "RTC Steady Stock", + "Stippled Grip Tape", + "Monolithic Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Aggressive"], + "notes": "Ranked 10; Extremely Good Range - High Accuracy; Inconvenient Aimshake - slow handling - bad negetive multiplier ", + "imageUrl": "" + }, + { + "cwts": "A17", + "weaponName": "AS VAL", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Quick Response Barrel", + "OWC Skeleton Stock", + "Granulated Grip Tape", + "Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Aggressive"], + "notes": "For CQB Situations", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856063210528309258/Screenshot_20210620-110651.png?width=1320&height=609" + }, + { + "cwts": "A17", + "weaponName": "AS VAL", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP 200mm Mid-Range Barrel", + "YKM Combat Stock", + "Granulated Grip Tape", + "Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "For Mid- Ranged Gunfights", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856063211257200680/Screenshot_20210620-111341.png?width=1320&height=609" + }, + { + "cwts": "A17", + "weaponName": "AS VAL", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Quick Response Barrel", + "OWC Ranger Stock", + "Ruberized Grip Tape", + "Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Long"], + "notes": "Zero Recoil - That's it", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856063210997284904/Screenshot_20210620-111321.png?width=1320&height=609" + }, + { + "cwts": "A17", + "weaponName": "AS VAL", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Quick Response Barrel", + "YKM Combat Stock", + "Operator Foregrip", + "15 Round FMJ", + "OWC Laser - Tactical" + ], + "tags": ["Passive"], + "notes": "Ranked 4; Consistent 2 STK Lethality - High ROF for Semi-Auto; Low Mag Size - Bullet Velocity & Average Range", + "imageUrl": "" + }, + { + "cwts": "A17", + "weaponName": "AS VAL", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Quick Response Barrel", + "OWC Skeleton Stock", + "Slight of Hand", + "Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Aggressive", "Search And Destroy"], + "notes": "Ranked 1; High ROF - decent mobility - good TTK & easy to use; Bullet velocity reduces it's affectivness due to de-sync Bad TTK over range - SMG like range profile", + "imageUrl": "" + }, + { + "cwts": "A18", + "weaponName": "CR-56 AMAX", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Gunner Stock", + "Red Dot Sight 3", + "Granulated Grip Tape", + "M67 AMMO", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Semi-Auto", "Passive"], + "notes": "Semi-Auto Conversion- Fun to use - Feels similar to SKS", + "imageUrl": "https://media.discordapp.net/attachments/880106738492256286/880107112699678790/unknown.png?width=803&height=630" + }, + { + "cwts": "A18", + "weaponName": "CR-56 AMAX", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Intruder Stock", + "No Stock", + "Granulated Grip Tape", + "Extended Mag A", + "OWC Laser - Tactical" + ], + "tags": ["Passive"], + "notes": "Ranked 18; Good TTK - Easy Recoil - High Firerate - Flexible Builds Options - Bad Damage and inconsistent due to SMG Multipliers", + "imageUrl": "" + }, + { + "cwts": "A18", + "weaponName": "CR-56 AMAX", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Gunner Stock", + "Red Dot Sight", + "Granulated Grip Tape", + "M67 AMMO", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Semi-Auto", "Aggressive"], + "notes": "Ranked 4; Best Long range option with a consistent 2 shots to kill; Semi-Auto Conversion results in very high punishment - not versatile", + "imageUrl": "" + }, + { + "cwts": "A19", + "weaponName": "M13", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Mini Barrel", + "No Stock", + "Granulated Grip Tape", + ".300 RTC Double Stack 40 Round", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Decent for MP as a midrange weapon. Not super amazing, you can also use 60 Round Large Extended Mag B", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/894492659014598656/Screenshot_2021-10-04-13-21-37-427_com.activision.callofduty.shooter.jpg?width=1329&height=671" + }, + { + "cwts": "A19", + "weaponName": "M13", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Heavy Long Barrel", + "RTC Combat Stock", + "Granulated Grip Tape", + "60 Round Large Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["BR"], + "notes": "Completely broken in BR.", + "imageUrl": "" + }, + { + "cwts": "A19", + "weaponName": "M13", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Mini Barrel", + "No Stock", + "Slight of Hand", + "Large Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Aggressive", "Passive"], + "notes": "Ranked 05; Vary fast firerate - Manageable Recoil, Good Lethality - Headshot Multiplier, Strafe Speed; Slow base mobility and handling - Bullet Velocity degrades TTK over range", + "imageUrl": "" + }, + { + "cwts": "A19", + "weaponName": "M13", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Silincer Barrel", + "No Stock", + "Granulated griptape", + "Large Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Search And Destroy"], + "notes": "Ranked 05; Vary fast firerate - Manageable Recoil - Good Lethality - Headshot Multiplier - Strafe Speed; Slow base mobility and handling - Bullet Velocity degrades TTK over range", + "imageUrl": "" + }, + { + "cwts": "A20", + "weaponName": "Swordfish", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Skeleton Stock", + "Operator Foregrip", + "Rubberized Grip Tape", + "Disabled", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/934340917731659826/Screenshot_20220122-1226412.png" + }, + { + "cwts": "A20", + "weaponName": "Swordfish", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Light Muzzel Brake", + "Tactical Foregrip A", + "Stippled Grip Tape", + "OWC Skeleton Stock", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "A21", + "weaponName": "Kilo 141", + "author": "Path.exe", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "Skeleton Stock / YKM Combat Stock", + "OWC Marksman", + "Rubberized Grip Tape", + "Extended Mag A / Disabled", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "It's also entirely viable to use skeleton stock over combat stock. The BSA difference basically doesn't exist, 35m 4 shot range because of Marksman Barrel, Rubberized grip is extremely effective and you'll still have good BSA.", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/937158965870071838/unknown.png?width=735&height=614" + }, + { + "cwts": "A21", + "weaponName": "Kilo 141", + "author": "Jokesta", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "YKM Integral Suppressor Light ", + "No Stock", + "Disable Perk", + "Large Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Search And Destroy", "Aggressive"], + "notes": "Integral Suppressor Barrel to stay off the radar on map, 60 Round Reload for continous fights and Disable perk to slow down strafe/smg during a gunfight", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/938004873268580392/unknown.png" + }, + { + "cwts": "A21", + "weaponName": "Kilo 141", + "author": "Jokesta", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "Monolithic Suppressor", + "OWC Skeleton Stock", + "Granulated Grip Tape", + "Large Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/938004972610658314/unknown.png" + }, + { + "cwts": "B02", + "weaponName": "Arctic .50", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Assassin Short", + "RTC Steady Stock", + "Granulated Grip Tape", + "FMJ", + "OWC Light Suppressor" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856094834732433418/Screenshot_20210620-140208.png" + }, + { + "cwts": "B03", + "weaponName": "M21 EBR", + "author": "Path.exe", + "lastUpdate": "2022-01-23T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "MIP Strike Stock", + "Tactical Foregrip A", + "Monolithic Suppressor", + "20 Round Reload" + ], + "tags": [ + "Respawn", + "Search And Destroy", + "Battle Royale", + "Aggressive", + "Passive" + ], + "notes": "Handling is a bit slow but will kill with absurd efficiency as long as you can hit them.", + "imageUrl": "https://cdn.discordapp.com/attachments/767176587099111485/892473483328651264/image1.png" + }, + { + "cwts": "B04", + "weaponName": "DL Q33", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light", + "YKM Combat Stock", + "OWC Laser-Tactical", + "FMJ", + "OWC Light Suppressor" + ], + "tags": ["Respawn", "Aggressive", "Passive", "Search And Destroy"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856094834460721152/Screenshot_20210620-140247.png" + }, + { + "cwts": "B05", + "weaponName": "Locus", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Lightweight Short", + "OWC Skeleton Stock", + "OWC Laser-Tactical", + "FMJ", + "OWC Light Suppressor" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/691133003866439701/861887618546139146/Screenshot_20210706-1357422.png" + }, + { + "cwts": "B06", + "weaponName": "NA-45", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Unavaliable", + "OWC Skeleton Stock", + "OWC Laser-Tactical", + "FMJ", + "OWC Light Suppressor" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "B07", + "weaponName": "Outlaw", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Memorial Cowboy", + "YKM Combat Stock", + "Granulated Grip Tape", + "FMJ", + "9 Round Reload" + ], + "tags": ["Respawn", "Aggressive", "Search And Destroy"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856218690775941150/Screenshot_20210620-223646.png?width=1320&height=609" + }, + { + "cwts": "B08", + "weaponName": "Rytec AMR", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "OWC Skeleton Stock", + "Stippled Grip Tape", + "RTC Compensator", + "25x59mm Thermite Mag" + ], + "tags": ["Respawn", "Passive", "BR", "Search And Destroy"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/893026144734040064/Screenshot_20210930-1213322.jpg" + }, + { + "cwts": "B09", + "weaponName": "SVD", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "3x Scope", + "510mm / 600mm Barrel", + "Skeleton Stock", + "15/20 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": " NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/934338857300815882/Screenshot_20220122-1218292.png" + }, + { + "cwts": "C01", + "weaponName": "S36", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Compagnie Generale Sevier - Light Barrel", + "Monolitic Suppressor", + "Preferred Sight", + "100 Round Belt", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/903194292615544852/Screenshot_20211028-1257022.png" + }, + { + "cwts": "C02", + "weaponName": "UL736", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC 12.4' Light Barrel", + "RTC Steady Stock", + "Granulated Grip Tape", + "60 Round Belt", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856109419782733824/Screenshot_20210620-151844.png?width=1320&height=609" + }, + { + "cwts": "C03", + "weaponName": "RPD", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Snatch Foregrip", + "No Stock", + "Granulated Grip Tape", + "FMJ", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856108980119404554/Screenshot_20210620-151735.png?width=1320&height=609" + }, + { + "cwts": "C04", + "weaponName": "M4LMG", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Ultralight Barrel", + "No Stock", + "Granulated Grip Tape", + "40 Round Light Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856108979775602689/Screenshot_20210620-151639.png?width=1320&height=609" + }, + { + "cwts": "C05", + "weaponName": "Chopper", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Heavy Handle", + "Chopper Infatry", + "RTC Light Muzzle Brake", + "FMJ", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856108979411615754/Screenshot_20210620-151548.png?width=1320&height=609" + }, + { + "cwts": "C06", + "weaponName": "Holger 26", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light", + "No Stock", + "Granulated Grip Tape", + "Holger 26C Lightweight Polymer Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "SMG Like Build", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856109420311740436/Screenshot_20210620-151957.png" + }, + { + "cwts": "C06", + "weaponName": "Holger 26", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light", + "YKM Combat Stock", + "Granulated Grip Tape", + "Holger 26C Lightweight Polymer Mag", + "OWC Laser - Tactical" + ], + "tags": ["Passive", "Search And Destroy", "Respawn"], + "notes": "AR Like Build", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856109420576243722/Screenshot_20210620-152013.png?width=1320&height=609" + }, + { + "cwts": "C07", + "weaponName": "Hades", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Long-Range Barrel", + "Agile Stock", + "Firm Grip Tape", + "Red Dot Sight/Agency Suppressor", + "Aim Assist Laser" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/935034973675749416/Screenshot_20220124-1024142.png" + }, + { + "cwts": "C08", + "weaponName": "PKM", + "author": "Path.exe", + "lastUpdate": "2022-01-23T00:00:00Z", + "attachments": [ + "Snatch Foregrip", + "Slight Of Hand", + "200 Round Mag", + "MIP Light", + "OWC Laser - Tactical" + ], + "tags": ["Aggressive"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "C08", + "weaponName": "PKM", + "author": "Path.exe", + "lastUpdate": "2022-01-23T00:00:00Z", + "attachments": [ + "Snatch Foregrip", + "Optic", + "200 Round Mag", + "Disabled", + "OWC Laser - Tactical" + ], + "tags": ["Battle Royale"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "C08", + "weaponName": "PKM", + "author": "Path.exe", + "lastUpdate": "2022-01-23T00:00:00Z", + "attachments": [ + "Monolithic ", + "Marksman", + "200 Round Mag", + "FMJ", + "OWC Laser - Tactical" + ], + "tags": ["Passive", "Respawn", "Search And Destroy"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "C08", + "weaponName": "PKM", + "author": "Path.exe", + "lastUpdate": "2022-01-23T00:00:00Z", + "attachments": [ + "Monolithic Suppressor / Marksman Barrel", + "No Stock", + "200 Round Mag / Snatch Foregrip / Optic", + "FMJ", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy"], + "notes": "This build aims to improve PKM's strength as a true suppressive fire weapon. Monolithic Suppressor can be used in place of Marksman Barrel. Snatch Foregrip or an Optic can be used in place of 200-R. Steady Stock can be used in place of No Stock.", + "imageUrl": "" + }, + { + "cwts": "D01", + "weaponName": "RUS-79U", + "author": "Path.exe", + "lastUpdate": "2022-01-24T00:00:00Z", + "attachments": [ + "Monolithic Suppressor", + "No Stock", + "Slight of Hand / Granulated", + "50 or 38 Round Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Remarkably Forgiving because hitting legs doesn't effect STK - and hitting 2 chest shots will result in a 4 STK upto 24m. ", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/903194292120596530/Screenshot_20211028-1254252.png" + }, + { + "cwts": "D01", + "weaponName": "RUS-79U", + "author": "Jokesta", + "lastUpdate": "2022-01-24T00:00:00Z", + "attachments": [ + "Monolithic Suppressor", + "OWC Skeleton Stock", + "MIP Light Barrel (Short)", + "50 Round Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 07; Easy to use and Reliable - Excellent Strafing - Slower TTK - Outclassed by other weapons.", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/935027311617654874/Screenshot_20220124-0952192.png" + }, + { + "cwts": "D02", + "weaponName": "Chicom", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light", + "YKM Combat Stock", + "Stippled Grip Tape", + "Strike Foregrip", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856086053509398558/Screenshot_20210620-124417.png?width=1320&height=609" + }, + { + "cwts": "D02", + "weaponName": "Chicom", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Marksman Barrel", + "YKM Combat Stock", + "Monolithic Suppressor", + "45 Round Extended Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 15; Big mag - everything is negative - not viable since launch.", + "imageUrl": "" + }, + { + "cwts": "D03", + "weaponName": "PDW-57", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Flash Guard", + "YKM Combat Stock", + "Granulated Grip Tape", + "Sleight of Hand", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856086098329468928/Screenshot_20210620-134210.png?width=1320&height=609" + }, + { + "cwts": "D03", + "weaponName": "PDW-57", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Monolithic Suppressor", + "YKM Combat Stock", + "Granulated Grip Tape", + "Extended Light Barrel", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 14; Large Mag Capacity - Low Recoil - Above average ROF - Limiting attachment choices - Mediocre range.", + "imageUrl": "" + }, + { + "cwts": "D04", + "weaponName": "Razorback", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "YKM Combat Stock", + "Rubberized Grip Tape", + "Extended Mag A", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856086099401900072/Screenshot_20210620-134808.png?width=1320&height=609" + }, + { + "cwts": "D04", + "weaponName": "Razorback", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Rapid Fire", + "YKM Light Stock", + "Monolithic Suppressor", + "Extended Mag A", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 02; Versatile - Easy Recoil - Good Initial BSA - Consistent TTK - Fast ROF - Bad Flinch - Aim shake & Mobility (not suitable for aggressive playstyle)", + "imageUrl": "" + }, + { + "cwts": "D05", + "weaponName": "MSMC", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Sleight of Hand", + "No Stock", + "Granulated Grip Tape", + "36 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856086097963909120/Screenshot_20210620-134101.png?width=1320&height=609" + }, + { + "cwts": "D05", + "weaponName": "MSMC", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Ranger", + "YKM Combat Stock", + "Rubberized Grip Tape", + "36 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 09; Fast TTK (for Upper Body Shots) Tricky Recoil - Inconsistent TTK.", + "imageUrl": "" + }, + { + "cwts": "D06", + "weaponName": "HG 40", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Monolithic Suppressor", + "No Stock", + "OWC Marksman Barrel", + "45 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Aggressive"], + "notes": "Should be treated as Fast Handling AR - Idealing should be trying to hit upper body - Spamming suppressor fire also works.", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/903194291889897482/Screenshot_20211028-1253182.png" + }, + { + "cwts": "D06", + "weaponName": "HG 40", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Integral Suppressor ", + "No Stock", + "Granulated Grip Tape", + "40 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Aggressive", "Passive", "Search And Destroy"], + "notes": "Ranked 13; Easy Recoil - good mobility & good attachment choices - Inconsistent TTK - Bad Hitboxes & Bad Range", + "imageUrl": "" + }, + { + "cwts": "D07", + "weaponName": "Pharo", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "MIP Strike Stock", + "Granulated Grip Tape", + "36 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856086098819285003/Screenshot_20210620-134441.png?width=1320&height=609" + }, + { + "cwts": "D07", + "weaponName": "Pharo", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Marksman", + "YKM Combat stock", + "Monolithic Suppressor", + "36 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 04; Best for Aggressive Playstyle after MX9 - Easy 1 Burst anywhere on the body (192ms TTK up-to 17m) Hard for tracking because it's burst especially in the current META.", + "imageUrl": "" + }, + { + "cwts": "D08", + "weaponName": "GKS", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "YKM Combat Stock", + "RTC Light Muzzel Brake", + "32 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://pbs.twimg.com/media/FBl8oJlXEA0Kfbg?format=jpg" + }, + { + "cwts": "D08", + "weaponName": "GKS", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "Granulated Grip Tape", + "Monolithic Suppressor", + "30 Round Fast Reload", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 11; Versatile - Easy Recoil - Consistent but slow TTK - Worst BSA in-game so BSA stack is necessary.", + "imageUrl": "" + }, + { + "cwts": "D09", + "weaponName": "Cordite", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "YKM Combat Stock", + "Monolithic Suppressor", + "80 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "Usally a 5 STK - High Initial Recoil - Base TTK not good (~300ms) Not good for CQC.", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/903194292913311755/Screenshot_20211028-1258112.png" + }, + { + "cwts": "D09", + "weaponName": "Cordite", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "YKM Combat Stock", + "MIP Light Flash Guard", + "60 Round Extended Mag", + "MIP Laser 5mW" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 10; Great Hipfire - Huge Mag Capacity - Relatively low recoil - Good Flinch for an SMG - Inconsistent TTK at Range, Slow Mobility which can't be boosted.", + "imageUrl": "" + }, + { + "cwts": "D10", + "weaponName": "QQ9", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Recon Tac Long", + "No Stock", + "Monolithic Suppressor", + "45 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/935030149093662800/Screenshot_20220124-1005082.png" + }, + { + "cwts": "D10", + "weaponName": "QQ9", + "author": "Jokesta", + "lastUpdate": "2022-01-15T00:00:00Z", + "attachments": [ + "RTC Recon Tac Long", + "No Stock", + "Monolithic Suppressor", + "45 Round Extended Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 05; Easy to use, Good Mobility - Range - ADS Speed. Good for Aggressive Playstyle - Inconsistent TTK", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/935030149093662800/Screenshot_20220124-1005082.png" + }, + { + "cwts": "D11", + "weaponName": "Fennec", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "Monolithic Suppressor", + "Operator Foregrip", + "Extended Mag A", + "MIP Laser 5mW" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/892542087474602004/Screenshot_20210929-0412042.jpg" + }, + { + "cwts": "D11", + "weaponName": "Fennec", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light", + "Monolithic Suppressor", + "Stippled Grip Tape", + "Extended Mag A", + "MIP Laser 5mW" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 06; Fastest ROF - High but easy recoil - Best in class hipfire - Slow STF - Unstable Recoil - Inconsistent TTK because Body Multipliers - Worst Flinch.", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/934341942530146304/Screenshot_20220122-1230502.png" + }, + { + "cwts": "D12", + "weaponName": "AGR 556", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "YKM Light Stock", + "OWC Light Compensator", + "30 Round 5.56mm Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/691133003866439701/861887638419931176/Screenshot_20210706-1402032.png" + }, + { + "cwts": "D12", + "weaponName": "AGR 556", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "YKM Combat Stock", + "Monolithic Suppressor", + "60 Round 5.56mm Mag", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 12; Versatile - 60 Rounds - Unusual Recoil Pattern that is hard to control - Inconsistent Body Multiplier for Long Range - Slow STF - Bad Mobility.", + "imageUrl": "" + }, + { + "cwts": "D13", + "weaponName": "QXR", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "YKM Light Stock", + "Extended Mag A", + "Ranger Foregrip", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "Unconventional Build without Enhanced Bolt - No Negetive Attributes - Usally 4-5 STK - Has better TTK than QXR with Enhanced Bolt", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/903194293781561394/Screenshot_20211028-1251432.png" + }, + { + "cwts": "D13", + "weaponName": "QXR", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "Monolithic Suppressor", + "Granulated Grip Tape", + "Enhanced Bolt", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 08; Easy to use - Easily achievable fast TTK - Need to stack BSA for Mid range - Huge Damage Fall off", + "imageUrl": "" + }, + { + "cwts": "D14", + "weaponName": "PP19 Bizon", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Monolitic Suppressor ", + "OWC Skeleton Stock", + "Granulated Grip Tape", + "Large Calibar Ammo A", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/691133003866439701/861887619049717770/Screenshot_20210706-1351142.png" + }, + { + "cwts": "D14", + "weaponName": "PP19 Bizon", + "author": "Jokesta", + "lastUpdate": "2022-01-24T00:00:00Z", + "attachments": [ + "Monolitic Suppressor ", + "No Stock", + "OWC Marksman", + "Large Calibar Ammo A", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 03; Beginner Friendly - Good Mobility - BSA - Consistent TTK & Huge Mag - Bad Range due to recent nerfs", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/935021998441132062/Screenshot_20220124-0932512.png" + }, + { + "cwts": "D15", + "weaponName": "MX9", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "Agile Stock", + "Strike Foregrip", + "Large Caliber Ammo", + "5mW Combat Laser" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/893019114837262356/Screenshot_20210930-1147552.jpg" + }, + { + "cwts": "D15", + "weaponName": "MX9", + "author": "Jokesta", + "lastUpdate": "2022-01-24T00:00:00Z", + "attachments": [ + "Build-In Silence Barrel", + "Agile Stock", + "Infiltrator Foregrip", + "Large Caliber Ammo", + "Rustle Grip Tape" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Ranked 01; Best in class for everything (Mobility - Recoil - TTK - Body Multiplier) Unusual Iron sights.", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/935032749306302514/Screenshot_20220124-1015502.png" + }, + { + "cwts": "D16", + "weaponName": "CBR4", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Muzzle Break", + "Extended Light Barrel", + "Light Stock", + "Rubber Foregrip", + "OWC Laser-Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/934334244426244146/unknown.png" + }, + { + "cwts": "D16", + "weaponName": "CBR4", + "author": "Jokesta", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Monolithic Suppressor", + "Marksman Barrel", + "YKM Light Stock", + "Stippled Griptape", + "OWC Laser-Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://cdn.discordapp.com/attachments/892540167783596092/934336188683284481/This_is_the_best_CBR4_Gunsmith_in_cod_mobile_ever_0-24_screenshot.png" + }, + { + "cwts": "D17", + "weaponName": "PPSh-41", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "OWC Light Suppressor", + "35 Round Fast Reload", + "OWC Skeleton Stock", + "Banner Heavy", + "MIP Laser - 5MW" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "No stock was considered but the STF can be acquired via 5mW laser & 35-R mag, and the accuracy penalties of no stock are pretty bad.", + "imageUrl": "https://media.discordapp.net/attachments/785461568464748593/934198581697609758/IMG_2303.png?width=1135&height=647" + }, + { + "cwts": "D17", + "weaponName": "PPSh-41", + "author": "Jokesta", + "lastUpdate": "2022-01-24T00:00:00Z", + "attachments": [ + "OWC Light Suppressor", + "Guerrila Light Short Barrel", + "No Stock", + "OWC Laser - Tactical", + "35 Round Fast Reload" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "No stock was considered but the STF can be acquired via 5mW laser & 35-R mag - and the accuracy penalties of no stock are pretty bad.", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/935032316571561984/unknown.png" + }, + { + "cwts": "E01", + "weaponName": "HS2126", + "author": "dHitman", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Light Barrel (Short)", + "Monolithic Suppressor", + "Speed Up Kill", + "FF Birdshot", + "MIP Laser 5mW" + ], + "tags": ["Hipfire", "ADS"], + "notes": "Silenced Build", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856094549234286612/Screenshot_20210620-141857.png?width=1320&height=609" + }, + { + "cwts": "E01", + "weaponName": "HS2126", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Heavy Barrel", + "Choke", + "Stippled Grip Tape", + "28 Round Extended Reload Case", + "MIP Laser 5mW" + ], + "tags": ["Hipfire", "ADS"], + "notes": "Build by Nir - An extreme CQC weapon with lesser punishment than the Echo - Use it like an Axe with more range - Best paired with Gung Ho.", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856094548907786240/Screenshot_20210620-141958.png" + }, + { + "cwts": "E02", + "weaponName": "BY15", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Extended Barrel(+2)", + "Marauder Suppressor", + "Sleight of Hand", + "No Stock", + "MIP Laser 5mW" + ], + "tags": ["Hipfire", "ADS"], + "notes": "Hipfire Build", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856094834216665088/Screenshot_20210620-141028.png?width=1320&height=609" + }, + { + "cwts": "E02", + "weaponName": "BY15", + "author": "dHitman", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Sawed-Off Barrel (-3 Ammo)", + "Marauder Suppressor", + "Granulated Grip Tape", + "No Stock", + "OWC Laser - Tactical" + ], + "tags": ["Hipfire", "ADS"], + "notes": "ADS Build", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856094549570355210/Screenshot_20210620-141638.png?width=1320&height=609" + }, + { + "cwts": "E03", + "weaponName": "HS0405", + "author": "dHitman", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Choke", + "RTC Extended Light Barrel", + "Granulated Grip Tape", + "No Stock", + "OWC Laser - Tactical" + ], + "tags": ["Hipfire", "ADS"], + "notes": "ADS Build", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856103459812278272/Screenshot_20210620-144457.png?width=1320&height=609" + }, + { + "cwts": "E04", + "weaponName": "Striker", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Light Barrel (Short)", + "Monolithic Suppressor", + "Sleight of Hand", + "Fast Reload Reload Case", + "MIP Laser 5mW" + ], + "tags": ["Hipfire", "ADS"], + "notes": "Hipfire Build", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856103969302773760/Screenshot_20210620-145715.png?width=1320&height=609" + }, + { + "cwts": "E05", + "weaponName": "KRM 262", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Extended Barrel(+2)", + "Marauder Suppressor", + "Sleight of Hand", + "No Stock", + "MIP Laser 5mW" + ], + "tags": ["Hipfire", "ADS"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856106646798598154/Screenshot_20210620-150937.png" + }, + { + "cwts": "E05", + "weaponName": "KRM 262", + "author": "dHitman", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Light Extended Barrel", + "Marauder Suppressor", + "Speed Up Kill", + "No Stock", + "MIP Laser 5mW" + ], + "tags": ["Hipfire", "ADS"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856103969696383006/Screenshot_20210620-145357.png" + }, + { + "cwts": "E06", + "weaponName": "Echo", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Extended Mag C", + "Choke", + "Sleight of Hand", + "No Stock", + "MIP Laser 5mW" + ], + "tags": ["Hipfire", "ADS"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856103970774056980/Screenshot_20210620-145110.png?width=1320&height=609" + }, + { + "cwts": "E06", + "weaponName": "Echo", + "author": "dHitman", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "Monolithic Suppressor", + "Speed Up Kill", + "No Stock", + "MIP Laser 5mW" + ], + "tags": ["Hipfire", "ADS"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856103970324742154/Screenshot_20210620-145200.png?width=1320&height=609" + }, + { + "cwts": "E07", + "weaponName": "R9-0", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "Choke", + "MFT Ultra Light Smoothbore", + "Stippled Grip Tape", + "MIP Laser 5mW" + ], + "tags": ["Hipfire", "ADS"], + "notes": "Agility & Hipfire - user may get questioned on sexuality.", + "imageUrl": "" + }, + { + "cwts": "F01", + "weaponName": "Kilo Bolt-Action", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Combat Stock", + "Fast Reload", + "Stippled Grip Tape", + "Bullet Return", + "OWC Laser-Tactical" + ], + "tags": ["Respawn", "Aggressive"], + "notes": "Build Courtesy of xPrince Ali - Standard Build for Kilo - bullet return is amazing to keep streaks going", + "imageUrl": "https://media.discordapp.net/attachments/883029281414983700/901135150849622046/Screenshot_20211019_015325_com.activision.callofduty.shooter.jpg?width=1347&height=622" + }, + { + "cwts": "F01", + "weaponName": "Kilo Bolt-Action", + "author": "Little B", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Combat Stock", + "Fast Reload", + "Stippled Grip Tape", + "Disabled", + "OWC Laser-Tactical" + ], + "tags": ["Respawn", "Aggressive", "Passive"], + "notes": "Build picked from YT Livestream Series - Using every gun in CODM", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/893041092717588500/unknown.png" + }, + { + "cwts": "F01", + "weaponName": "Kilo Bolt-Action", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Combat Stock", + "Fast Reload", + "Stippled Grip Tape", + "OWC Light Suppressor", + "OWC Laser-Tactical" + ], + "tags": ["Passive", "Search & Destroy"], + "notes": "Build Courtesy of xPrince Ali - Standard Build for Kilo - the suppressor so that you stay off the minimap.", + "imageUrl": "https://media.discordapp.net/attachments/883029281414983700/901134735101816862/Screenshot_20211019_015252_com.activision.callofduty.shooter.jpg?width=1347&height=622" + }, + { + "cwts": "F02", + "weaponName": "SKS", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Stalker Stock", + "MIP Light", + "Granulated Grip Tape", + "Tactical Foregrip A", + "Extended Mag A" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "It can compete with T0 guns given its fast TTK but it's hard to use in CQB. Having your shots actually hit where you're aiming at feels incredible, - as it doesn't have BSA.", + "imageUrl": "https://cdn.discordapp.com/attachments/892540167783596092/934337671030009896/Screenshot_20220122-1213452.png" + }, + { + "cwts": "F02", + "weaponName": "SKS", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Steady Stock", + "Tactical Scope", + "Granulated Grip Tape", + "Tactical Foregrip A", + "Extended Mag A" + ], + "tags": ["Battle Royale"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/785461568464748593/929561010686292028/IMG_1111.png?width=1150&height=647" + }, + { + "cwts": "F03", + "weaponName": "SP-R 208", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "YKM Combat Stock", + "[.300] 5 Round Reload", + "Tactical Foregrip A", + "OWC Tactical - Laser", + "MIP Light" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "F04", + "weaponName": "MK2", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Sport Stock", + ".30 - 30 Ammo", + "Stippled Grip Tape", + "OWC Tactical - Laser", + "18.0 Sport Barrel" + ], + "tags": ["Aggressive"], + "notes": "Much Harder to use - High Risk - High Reward.", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856114523165163520/Screenshot_20210620-153254.png?width=1320&height=609" + }, + { + "cwts": "F04", + "weaponName": "MK2", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "MIP Sport Stock", + "Slight Of Hanf ", + "Stippled Grip Tape", + "OWC Tactical - Laser", + "18.0 Sport Barrel" + ], + "tags": ["Respawn", "Search And Destroy", "Passive"], + "notes": "Basic Build - Easier to Use", + "imageUrl": "" + }, + { + "cwts": "G01", + "weaponName": "J358", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Light Muzzle Brake", + "Slight Of Hand", + "Lightweight Trigger", + "J358 Short", + "8 Round Reload" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856114944269484032/Screenshot_20210620-153740.png?width=1320&height=609" + }, + { + "cwts": "G02", + "weaponName": "MW11", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Light Muzzle Brake", + ".45 Compact Barrel", + "Lightweight Trigger", + "OWC Laser - Tactical", + "20 Round Reload" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "G03", + "weaponName": ".50 GS", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Monolithic Suppressor", + "Extended Light Barrel", + "10 Round Mag", + "Lightweight Trigger", + "OWC Laser-Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "https://media.discordapp.net/attachments/540218400413188116/856114943824494612/Screenshot_20210620-153624.png?width=1320&height=609" + }, + { + "cwts": "G04", + "weaponName": "Renetti", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "RTC Compensator", + "Rubberized Grip Tape", + "Light Trigger", + "OWC Laser - Tactical", + "21 Round Mag" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "G05", + "weaponName": "Shorty", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "Marauder Suppressor", + "RTC Steady Stock", + "Tactical Foregrip", + "OWC Laser - Tactical", + "OWC Stable" + ], + "tags": ["Respawn", "Aggressive", "Passive", "Search And Destroy"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "G06", + "weaponName": "Crossbow", + "author": "Path.exe", + "lastUpdate": "2022-01-22T00:00:00Z", + "attachments": [ + "28 Bowstring", + "Heavy Limb", + "OWC Laser - Tactical", + "Ranger Stock", + "Gas Grenade Bolt" + ], + "tags": ["Respawn", "Aggressive", "Passive"], + "notes": "NO Description", + "imageUrl": "" + }, + { + "cwts": "A14", + "weaponName": "DR-H", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "OWC Marksman", + "25 Round OTM Mag", + "No Stock", + "Disable Perk", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "Marksman Barrel for BSA and Range, OTM Mag helps in improving multipliers, Disable Perk to decrease movement speed of smg/strafe users", + "imageUrl": "" + }, + { + "cwts": "A15", + "weaponName": "DR-H", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "Ranger Barrel", + "25 Round OTM Mag", + "Tactical Suppressor", + "Disable Perk", + "OWC Laser - Tactical" + ], + "tags": ["Search And Destory", "Aggressive"], + "notes": "Ranger Barrel for BSA and Range, OTM Mag helps in improving multipliers, Disable Perk to decrease movement speed of smg/strafe users", + "imageUrl": "" + }, + { + "cwts": "A19", + "weaponName": "M13", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "RTC Mini Barrel", + ".300 Double Stack 40 Round", + "No Stock", + "Granulated Grip Tape", + "OWC Laser - Tactical" + ], + "tags": ["Aggressive", "Search And Destroy"], + "notes": "40 Round Double Stack Mag for the increased reload speed, range, ammo size and sound suppression which the downsides get cancelled by No Stock and Short Barrel", + "imageUrl": "" + }, + { + "cwts": "A20", + "weaponName": "M13", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "RTC Heavy Long Barrel", + "Large Extended Mag B", + "No Stock", + "Disable Perk", + "OWC Laser - Tactical" + ], + "tags": ["Passive", "Respawn"], + "notes": "Heavy Long Barrel for passive plays which helps in range and the vertical recoil control, 60 Round Reload for continous fights and Disable perk to slow down strafe/smg during a gunfight", + "imageUrl": "" + }, + { + "cwts": "A21", + "weaponName": "Kilo 141", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "OWC Marksman", + "No Stock", + "Disable Perk", + "Large Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Respawn"], + "notes": "Marksman Barrel for passive plays which helps in range and the vertical recoil control, 60 Round Reload for continous fights and Disable perk to slow down strafe/smg during a gunfight", + "imageUrl": "" + }, + { + "cwts": "A22", + "weaponName": "Kilo 141", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "YKM Integral Suppressor Light ", + "Disable Perk", + "Rubberized Grip Tape", + "Large Extended Mag B", + "OWC Laser - Tactical" + ], + "tags": ["Search And Destroy"], + "notes": "Integral Suppressor Barrel to stay off the radar on map, 50 Round Reload for continous fights and Disable perk to slow down strafe/smg during a gunfight, Rubberized Grip Tape to reduce vertical recoil ", + "imageUrl": "" + }, + { + "cwts": "D04", + "weaponName": "Razorback", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "Rapid Fire", + "YKM Light Stock ", + "Extended Mag A", + "Monolithic Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Search And Destory", "Aggressive "], + "notes": "Rapid FIre Perk to increase the ROF which makes the TTK faster, Light Stock for strafe as an aggressive build", + "imageUrl": "" + }, + { + "cwts": "D05", + "weaponName": "Razorback", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "Rapid Fire", + "Extended Mag A", + "Monolithic Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "Extended Barrel alone with Mono for Range and Passive plays, Rapid Fire to increase the ROF which makes the TTK faster", + "imageUrl": "" + }, + { + "cwts": "D13", + "weaponName": "QXR", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "OWC Marksman", + "No Stock", + "Extended Mag A", + "Granulated Grip Tape", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "Marksman Barrel which helps in range and BSA and recoil control, Extended Mag since the ROF is high, Granulated Grip Tape for BSA and No Stock for the Movement speed and ADS Speed ", + "imageUrl": "" + }, + { + "cwts": "D13", + "weaponName": "QXR", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "MIP Light Barrel (Short)", + "YKM Light Stock ", + "Extended Mag A", + "Monolithic Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Search And Destory", "Aggressive "], + "notes": "As an aggressive class, this build focuses on Movement and ADS Speeds. Short Barrel for Mobility and ADS speed, Light Stock for ADS Movement Speed and Extended Mag since ROF is high", + "imageUrl": "" + }, + { + "cwts": "D14", + "weaponName": "PP19 Bizon", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "OWC Marksman", + "Granulated Grip Tape", + "No Stock", + "Monolithic Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "Mono + Marksman for range and passive plays ", + "imageUrl": "" + }, + { + "cwts": "D14", + "weaponName": "PP19 Bizon", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "Granulated Grip Tape", + "OWC Skeleton Stock", + "Monolithic Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Aggressive", "Search And Destroy"], + "notes": "Mono + Extended barrel for range - Skeleton Stock for the ADS Movement speed", + "imageUrl": "" + }, + { + "cwts": "D15", + "weaponName": "MX9", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "Large Caliber Ammo", + "MIP Extended Light Barrel", + "Agile Stock", + "Firm Grip Tape", + "Foregrip" + ], + "tags": ["Search And Destroy"], + "notes": "Extended Barrel to increase range, Agile Stock to increase strafe speed, Large Caliber Ammo to improve body multipliers, Foregrip to help in reduce horizontal recoil", + "imageUrl": "" + }, + { + "cwts": "D15", + "weaponName": "MX9", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "Large Caliber Ammo", + "Built-In Silence Barrel", + "Agile Stock", + "Firm Grip Tape", + "Foregrip" + ], + "tags": ["Respawn"], + "notes": "Silence Barrel to to stay off the radar on map, Agile Stock to increase strafe speed, Large Caliber Ammo to improve body multipliers, Foregrip to help in reduce horizontal recoil", + "imageUrl": "" + }, + { + "cwts": "D17", + "weaponName": "PPSh-41", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "OWC Light Suppressor", + "35 Round Fast Reload", + "No Stock", + "\"Guerrilla\" Light Short", + "MIP Laser 5mW" + ], + "tags": ["Search And Destroy"], + "notes": "35 Round Mag to incrase reload speed and movement speed, Short Barrel to increase movement speed and hipfire accuracy, No Stock to increase movement speed and improve STF speed, 5mW Laser to improve STF speed and hipfire accuracy", + "imageUrl": "" + }, + { + "cwts": "D17", + "weaponName": "PPSh-41", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "OWC Light Suppressor", + "\"Banner\" Heavy", + "No Stock", + "Operator Foregrip", + "OWC Laser - Tactical" + ], + "tags": ["Respawn"], + "notes": "NO Description Provided", + "imageUrl": "" + }, + { + "cwts": "F01", + "weaponName": "Kilo Bolt-Action", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "Stippled Grip Tape", + "YKM Combat Stock ", + "Fast Reload", + "Sleight Of Hand Perk", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Passive"], + "notes": "Max ADS Speed Build with Fast Reload and Sleight Of Hand Perk as Stopping Power Rounds are not worth it", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/938549956443242502/Screenshot_20220203-0308302.png" + }, + { + "cwts": "F01", + "weaponName": "Kilo Bolt-Action", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "Stippled Grip Tape", + "YKM Combat Stock ", + "Fast Reload", + "Tactical Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Search And Destroy", "Aggressive"], + "notes": "Max ADS Speed Build with Tactical Suppressor to stay off radar on map", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/938549966878683136/Screenshot_20220203-0308522.png" + }, + { + "cwts": "F02", + "weaponName": "SKS", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "Extended Mag A", + "Tactical Foregrip A", + "MIP Stalker Stock", + "Granulated Grip Tape", + "Tactical Suppressor" + ], + "tags": ["Search And Destroy", "Respawn", "Aggressive", "Passive"], + "notes": "Stalker Stock, Granulated Grip Tape and Tactical Foregrip A help in reducing the hit flinch, Extended Mag for Spray and engage in more fights.", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/938549948994187375/Screenshot_20220203-0307152.png" + }, + { + "cwts": "F03", + "weaponName": "SP-R 208", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "MIP Extended Light Barrel", + "Tactical Foregrip A", + ".300 Round Reload", + "Light Bolt", + "YKM Combat Stock" + ], + "tags": ["Respawn", "Aggressive"], + "notes": ".300 Rounds to improve the one-shot hitbox, Light Bolt to reduce the fire interval between each shot", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/938549928060407888/Screenshot_20220203-0305362.png" + }, + { + "cwts": "F03", + "weaponName": "SP-R 208", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "YKM Integral Suppressor Light ", + "Tactical Foregrip A", + ".300 Round Reload", + "Light Bolt", + "YKM Combat Stock" + ], + "tags": ["Search And Destroy", "Passive"], + "notes": "Integral Suppressor Barrel to stay off the radar on map, .300 to improve one-shot hitbox, Light Bolt to reduce the fire interval between each shot", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/938549938986578030/Screenshot_20220203-0305472.png" + }, + { + "cwts": "F04", + "weaponName": "MK2", + "author": "Stats On Duty", + "lastUpdate": "2022-01-30T00:00:00Z", + "attachments": [ + "18.0 Sport Barrel", + "Stippled Grip Tape", + "MIP Sport Stock", + "Tactical Suppressor", + "OWC Laser - Tactical" + ], + "tags": ["Respawn", "Search And Destroy", "Aggressive", "Passive"], + "notes": "Max ADS Build", + "imageUrl": "https://media.discordapp.net/attachments/892540167783596092/938549907944517642/Screenshot_20220203-0303522.png" + } +] diff --git a/db/codm/melees.json b/db/codm/melees.json new file mode 100644 index 0000000..0a077d7 --- /dev/null +++ b/db/codm/melees.json @@ -0,0 +1,197 @@ +[ + { + "name": "Base Melee", + "value": "basemelee", + "range": "1.2", + "swingsPerMin": "68", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Knife", + "value": "knife", + "range": "1.2", + "swingsPerMin": "68", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Glow Stick", + "value": "glow Stick", + "range": "1.2", + "swingsPerMin": "68", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Karambit", + "value": "karambit", + "range": "1.2", + "swingsPerMin": "68", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Folding Knife", + "value": "foldingknife", + "range": "1.2", + "swingsPerMin": "68", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Ice Axe", + "value": "iceaxe", + "range": "1.2", + "swingsPerMin": "68", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Wrench", + "value": "wrench", + "range": "1.2", + "swingsPerMin": "68", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Sickle", + "value": "sickle", + "range": "1.2", + "swingsPerMin": "68", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Chainsaw", + "value": "chainsaw", + "range": "1.2", + "swingsPerMin": "70", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Prizefighters", + "value": "prizefighters", + "range": "1.3", + "swingsPerMin": "96 (48 x2)", + "hitRegDelay": "183 (+200)", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Kali Sticks", + "value": "kalisticks", + "range": "1.5", + "swingsPerMin": "000 (00 x2)", + "hitRegDelay": "", + "sprintSpeed": "7.26", + "raiseTime": "650", + "dropTime": "267", + "image": "" + }, + { + "name": "Machete", + "value": "machete", + "range": "1.6", + "swingsPerMin": "56", + "hitRegDelay": "267", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Nunchucks", + "value": "nunchucks", + "range": "1.6", + "swingsPerMin": "51", + "hitRegDelay": "167", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Assault Knife", + "value": "assaultknife", + "range": "1.6", + "swingsPerMin": "43", + "hitRegDelay": "183", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Katana", + "value": "katana", + "range": "1.7", + "swingsPerMin": "55", + "hitRegDelay": "250", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Axe", + "value": "axe", + "range": "1.9", + "swingsPerMin": "45", + "hitRegDelay": "283", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Bat", + "value": "bat", + "range": "1.9", + "swingsPerMin": "51", + "hitRegDelay": "400", + "sprintSpeed": "7.26", + "raiseTime": "", + "dropTime": "", + "image": "" + }, + { + "name": "Shovel", + "value": "shovel", + "range": "2", + "swingsPerMin": "55", + "hitRegDelay": "500", + "sprintSpeed": "7.26" + } +] \ No newline at end of file diff --git a/db/codm/perks.json b/db/codm/perks.json new file mode 100644 index 0000000..84fff8e --- /dev/null +++ b/db/codm/perks.json @@ -0,0 +1,182 @@ +[ + { + "name": "fastrecover", + "perk": "Fast Recover", + "effects": "\nReduces healing delay from 5 seconds to 3.3 seconds, Increases healing power from 20 per tick to 27 per tick but healing rate remains at 1 tick / second.", + "type": "red" + }, + { + "name": "persistence", + "perk": "Persistence", + "effects": "\nScorestreak progression no longer resets upon being killed. Applies to each scorestreak once per match.", + "type": "red" + }, + { + "name": "flakjacket", + "perk": "Flak Jacket", + "effects": "\nReduce explosion and continous damage received by 35%.", + "type": "red" + }, + { + "name": "skulker", + "perk": "Skulker", + "effects": "\nIncrease walking and strafing speed by 12%.", + "type": "red" + }, + { + "name": "agile", + "perk": "Agile", + "effects": "\nCurrently bugged so the advantage is insignificant, Previously, it reduces ADS time after sprinting by ?%. Reduce object vaulting time by ?%.", + "type": "red" + }, + { + "name": "lightweight", + "perk": "Lightweight", + "effects": "\nIncrease sprinting speed by 5%. Nullify fall damage.", + "type": "red" + }, + { + "name": "restock", + "perk": "Restock", + "effects": "\nReplenishes all equipment every 25 seconds after use.", + "type": "red" + }, + { + "name": "tactician", + "perk": "Tactician", + "effects": "\nSpawn with 1 extra piece of tactical equipment.", + "type": "red" + }, + { + "name": "overclock", + "perk": "Overclock", + "effects": "\nIncreases the charging speed of the Operator Skill.", + "type": "red" + }, + { + "name": "martydom", + "perk": "Martyrdom", + "effects": "\nDrops a live Frag Grenade upon death.", + "type": "red" + }, + { + "name": "ironlungs", + "perk": "Iron Lungs", + "effects": "\nIncreases the breath hold time while using a sniper rifle.", + "type": "red" + }, + { + "name": "vulture", + "perk": "Vulture", + "effects": "\nCollect ammo equivalent to one magazine of weapon in hand from enemies killed.", + "type": "green" + }, + { + "name": "toughness", + "perk": "Toughness", + "effects": "\nReduce hit flinch by 60%.", + "type": "green" + }, + { + "name": "tracker", + "perk": "Tracker", + "effects": "\nReveal enemy footsteps within the recent 4 seconds on the ground in bright red marks.", + "type": "green" + }, + { + "name": "ghost", + "perk": "Ghost", + "effects": "\nCompletely invisible against Enemy UAVs, Advance UAVs will not reveal direction, Unmarked on enemy VTOLs & Predator Missile, Will not alert enemies using Hight Alert.", + "type": "green" + }, + { + "name": "coldblooded", + "perk": "Cold Blooded", + "effects": "\nGrant invisibility towards AI operated enemy scorestreaks.", + "type": "green" + }, + { + "name": "hardwired", + "perk": "Hard Wired", + "effects": "\nDoes not trigger enemy tripmines, Provides immunity against enemy Counter UAVs and EMP effects. Reduce footstep mark duration for enemy Tracker users.", + "type": "green" + }, + { + "name": "quickfix", + "perk": "Quick Fix", + "effects": "\nWeapon kills and objective captures instantly activate health regeneration. Does not effect regeneration rate", + "type": "green" + }, + { + "name": "amped", + "perk": "Amped", + "effects": "\nReduce drop and raise time of all weapons and equipment. (Weapon drop 250ms, raise 350ms).\nIncreased throwing spped of lethal and tactical equipment\nFaster reload speed for launchers.", + "type": "green" + }, + { + "name": "recon", + "perk": "Recon", + "effects": "\nAfter killing enemy, nearby enemies will be scanned & displayed on the minimap.", + "type": "green" + }, + { + "name": "gungho", + "perk": "Gung-Ho", + "effects": "\nAllows sprinting while Hip Firing, Reloading & using Utilites.", + "type": "green" + }, + { + "name": "hardline", + "perk": "Hardline", + "effects": "\nIncrease all score income earned from kills by 25%.", + "type": "blue" + }, + { + "name": "demoexpert", + "perk": "Demo Expert", + "effects": "\nIncrease all explosive damage dealt by 25%.", + "type": "blue" + }, + { + "name": "tacticalmask", + "perk": "Tactical Mask", + "effects": "\nReduce the duration of tactical equipment effects by 40%.", + "type": "blue" + }, + { + "name": "alert", + "perk": "Alert", + "effects": "\nAmplify enemy footstep audio. Enemies moving within 3m radius will be shown with general direction on minimap.", + "type": "blue" + }, + { + "name": "engineer", + "perk": "Engineer", + "effects": "\nReveals enemy equipment and scorestreaks. Grant ability to re-roll and sabotage care packages.", + "type": "blue" + }, + { + "name": "deadsilence", + "perk": "Dead Silence", + "effects": "\nProvide silent movement when walking, crouching, strafing & proning. Reduce footstep audio towards Alert users by 50%.", + "type": "blue" + }, + { + "name": "shrapnel", + "perk": "Shrapnel", + "effects": "\nSpawn with 1 extra piece of lethal equipment. Explosive damage delays enemy health regeneration.", + "type": "blue" + }, + { + "name": "highalert", + "perk": "High Alert", + "effects": "\nScreen will flash bright orange if spotted by enemies outside of your FOV. Grant ability to ping and reveal enemy positions in direct lines of sight by ADSing and aiming in their general direction.", + "type": "blue" + }, + { + "name": "launcherplus", + "perk": "Launcher Plus", + "effects": "\nSpawn with 1 extra round of reserve ammo for equipped launchers.", + "type": "blue" + } +] diff --git a/db/codm/scorestreaks.json b/db/codm/scorestreaks.json new file mode 100644 index 0000000..0e41508 --- /dev/null +++ b/db/codm/scorestreaks.json @@ -0,0 +1,244 @@ +[ + { + "name": "Shield Turret", + "value": "shieldturret", + "description": "A manual shielded turret that can be deployed on most surfaces.", + "special": "", + "cost": 300, + "type": "lethal", + "manual": true, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936101283939643442/252.png", + "preview_video": "https://youtu.be/eXGgOqHHiRU" + }, + { + "name": "UAV", + "value": "uav", + "description": "Unmanned Aerial Vehicle that reveals enemy locations on the minimap.", + "special": "", + "cost": 400, + "type": "assist", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936101547983654963/240.png", + "preview_video": "https://youtu.be/ZAxzUCJ79SY" + }, + { + "name": "Shock RC", + "value": "shockrc", + "description": "Detects nerby enemies and paralyzes them in a continous eletric shock.", + "special": "Immobilize Enemies for x Seconds", + "cost": 450, + "type": "assist", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936102080274366525/241.png", + "preview_video": "https://youtu.be/qJaB0sjVs_E" + }, + { + "name": "Hunter Killer Drone", + "value": "hunterkillerdrone", + "description": "Infantry deployed drone that seeks out an enemy vehicle.", + "special": "", + "cost": 500, + "type": "lethal", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936102287905013780/242.png", + "preview_video": "https://youtu.be/B1srk2tL_IQ" + }, + { + "name": "Care Package", + "value": "carepackage", + "description": "Call in a care package containing one random scorestreak.", + "special": "Can be lethal if lands directly on enemies.", + "cost": 550, + "type": "assist", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936102675240587304/546.png", + "preview_video": "https://youtu.be/5GXfShLuqsE" + }, + { + "name": "Counter UAV", + "value": "cuav", + "description": "Jams enemy reconnaissance by temporarily disabiling the enemy minimap.", + "special": "", + "cost": 600, + "type": "assist", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936102817473646683/243.png", + "preview_video": "https://youtu.be/E4u-R7-VYl0" + }, + { + "name": "MQ-27 Dragonfire", + "value": "mq27dragonfire", + "description": "Use a drone to detect and eliminate enemies while it has power and ammo. It carries 3 infrared explosive probes.", + "special": "", + "cost": 650, + "type": "lethal", + "manual": true, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936102962403639357/241.png", + "preview_video": "https://youtu.be/6hqXKctuVaw" + }, + { + "name": "SAM Turret", + "value": "samturret", + "description": "The SAM Turret is an unmanned weapon which automaticaly locks onto any aircraft scorestreaks and fires missiles to destroy them.", + "special": "", + "cost": 660, + "type": "assist", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936103140695081010/582.png", + "preview_video": "https://youtu.be/z3_R47ojWm8" + }, + { + "name": "Predator Missile", + "value": "predatormissile", + "description": "Remote-controlled Predator Missile with a cluster bomb payload.", + "special": "", + "cost": 700, + "type": "lethal", + "manual": true, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936103410552426506/238.png", + "preview_video": "https://youtu.be/NmXL8O1WZSg" + }, + { + "name": "Hawk X3", + "value": "hawkx3", + "description": "Manually controlled drone with a machine gun as the weapon.", + "special": "", + "cost": 750, + "type": "lethal", + "manual": true, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936103603872096266/latest.png", + "preview_video": "https://youtu.be/bV0h1lFWr50" + }, + { + "name": "Sentry Gun", + "value": "sentrygun", + "description": "An unmanned weapon capable of autonomously acquiring and firing upon enemy targets through thermal detection.", + "special": "", + "cost": 800, + "type": "lethal", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936103868645920798/274.png", + "preview_video": "https://youtu.be/PU1YryF2hKo" + }, + { + "name": "Lightning Strike", + "value": "lightningstrike", + "description": "Launch a coordinated airstrike on three locations.", + "special": "", + "cost": 850, + "type": "lethal", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936103990578524200/239.png", + "preview_video": "https://youtu.be/3nXO_5TqfIY" + }, + { + "name": "Orbital Laser", + "value": "orbitallaser", + "description": "A powerful orbital laser that shoots down from the sky and moves along the route specified by the player. The laser can penetrate roofed structures and buildings if enemies try to hide inside.", + "special": "", + "cost": 890, + "type": "lethal", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936104097147396106/248.png", + "preview_video": "https://youtu.be" + }, + { + "name": "XS1 Goliath", + "value": "xs1goliath", + "description": "Call on an XS1 Goliath to equip powerful armor and a minigun with limitless ammo.", + "special": "", + "cost": 900, + "type": "lethal", + "manual": true, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936104192454565898/279.png", + "preview_video": "https://youtu.be/EvEI7rzages" + }, + { + "name": "Cluster Strike", + "value": "clusterstrike", + "description": "Bears down continous missile bombardment to a designated location.", + "special": "", + "cost": 950, + "type": "lethal", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936109477453778994/642.png", + "preview_video": "https://youtu.be/TIAsmBp5h0w" + }, + { + "name": "Chopper Gunner", + "value": "choppergunner", + "description": "Fire from the skies in a chopper with a gun that has unlimited ammo. Careful not to overheat!", + "special": "", + "cost": 980, + "type": "lethal", + "manual": true, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936106738686505031/Chopper_Gunner_model_CoDMobile.png", + "preview_video": "" + }, + { + "name": "Stealth Chopper", + "value": "stealthchopper", + "description": "Call in an attacking helicopter to the battlefiled for armed support.", + "special": "", + "cost": 1000, + "type": "lethal", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936104637596053545/256.png", + "preview_video": "https://youtu.be/1FzfpScAA-o" + }, + { + "name": "Swarm", + "value": "swarm", + "description": "Call in a swarm of lethal Hunter Killer drones.", + "special": "It calls in 3 Hunter Killer Drones at the same time.", + "cost": 1100, + "type": "lethal", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936118754457292810/237.png", + "preview_video": "https://youtu.be/5OveS1_eH5Q" + }, + { + "name": "Napalm", + "value": "napalm", + "description": "Scorch nearby enemies and fill the battlefield with smoke.", + "special": "", + "cost": 1190, + "type": "lethal", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936126606970351626/Napalm_model_CoDMobile.png", + "preview_video": "https://youtu.be/qy846hZx3bI" + }, + { + "name": "Advance UAV", + "value": "auav", + "description": "Orbital UAV that reveals the enemy's direction on the mini-map.", + "special": "", + "cost": 1200, + "type": "assist", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936128249107460146/imgbin_northrop-grumman-b-2-spirit-canada-png.png", + "preview_video": "https://youtu.be/-I4LeQTmy3w" + }, + { + "name": "EMP Systems", + "value": "empsystems", + "description": "Disables all enemy electronics. All items in enemy HUD will be removed and field of vision will be affected. Enemies affected cannot use throwables, Scorestreaks of Operator Skills.", + "special": "", + "cost": 1300, + "type": "assist", + "manual": false, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936128472181534780/256.png", + "preview_video": "https://youtu.be/gciYYZ1pZ1Y" + }, + { + "name": "VTOL", + "value": "vtol", + "description": "Call in a VTOL gunship to provide air support.", + "special": "", + "cost": 1600, + "type": "lethal", + "manual": true, + "preview": "https://media.discordapp.net/attachments/936100721328275506/936128641446838312/1000.png", + "preview_video": "https://youtu.be/NADOtqFmXzI" + } +] diff --git a/db/codm/stats.json b/db/codm/stats.json new file mode 100644 index 0000000..6b70973 --- /dev/null +++ b/db/codm/stats.json @@ -0,0 +1,5954 @@ +[ + { + "CWTS": { + "name": "Firearm", + "description": "Description", + "basic": [ + "RPM", + "Burst RPM / Burst Delay", + "PV (ms)", + "Bullets per Shot" + ], + "dmg_rng": { + "stop": [ + "R1 Stop", + "R2 Stop", + "R3 Stop", + "R4 Stop", + "R5 Stop", + "R6 Stop" + ], + "damage": [ + "Damage1", + "Damage2", + "Damage3", + "Damage4", + "Damage5", + "Damage 6" + ] + }, + "body_multi": [ + "Head", + "Chest", + "Stomach", + "Arm", + "Forearm", + "Groin", + "Leg" + ], + "bsa": [ + "BSA Score", + "Hipfire Spread (ring)" + ], + "mobility": [ + "ADS Time", + "Sprint to ADS", + "Sprint to Hipfire", + "Movement (m/s)", + "ADS Movement (m/s)", + "Raise time (ms)", + "Drop Time (ms)" + ], + "ammo": [ + "Base", + "Reserve", + "Half Reload", + "", // half reload frames + "Empty Reload", + "" // empty reload frames + ], + "recoil": { + "horizontal": "HORIZONTAL", + "vertical": "VERTICAL" + } + } + }, + { + "A03": { + "name": "AK117", + "description": "5.45x39mm carbine. Trades a fast rate of fire for unstable recoil. Highly accurate, but the damage decreases quickly over range.", + "basic": [ + "770", + "", + "78", + "1" + ], + "dmg_rng": { + "stop": [ + "4", + "21", + "36", + "100", + "", + "" + ], + "damage": [ + "26", + "22", + "19", + "15", + "", + "" + ] + }, + "body_multi": [ + "1.3", + "1.1", + "1", + "1.1", + "1.1", + "1", + "1" + ], + "bsa": [ + "6.95", + "7" + ], + "mobility": [ + "17", + "6", + "9", + "6.13", + "2.87", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.4", + "2.1", + "1.4", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A04": { + "name": "AK-47", + "description": "7.62x39mm assault rifle with high initial recoil and high damage over range.", + "basic": [ + "550", + "", + "109", + "1" + ], + "dmg_rng": { + "stop": [ + "21", + "31", + "100", + "", + "", + "" + ], + "damage": [ + "33", + "26", + "23", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "4.95", + "6" + ], + "mobility": [ + "18", + "8", + "11", + "6.08", + "2.84", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.9", + "2.4", + "1.8", + "3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A17": { + "name": "AS VAL", + "description": "\"9x39mm carbine with an unique built-in suppressor. Improved stealth at the expense of ballistic performance over range. \"", + "basic": [ + "800", + "", + "75", + "1" + ], + "dmg_rng": { + "stop": [ + "7", + "20", + "30", + "100", + "", + "" + ], + "damage": [ + "28", + "25", + "22", + "19", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "5.55", + "" + ], + "mobility": [ + "16", + "6", + "9", + "6.34", + "3.19", + "", + "" + ], + "ammo": [ + "35", + "140", + "1.8", + "2.3", + "1.9", + "3.1" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A05": { + "name": "ASM10", + "description": "\"5.45x39mm assault rifle featuring an unique barrel and bolt carrier which move back and forth upon firing. Improved accuracy. \"", + "basic": [ + "550", + "", + "109", + "1" + ], + "dmg_rng": { + "stop": [ + "15", + "32", + "100", + "", + "", + "" + ], + "damage": [ + "34", + "26", + "20", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.24", + "6" + ], + "mobility": [ + "19", + "8", + "12", + "5.97", + "2.7", + "", + "" + ], + "ammo": [ + "25", + "100", + "1.8", + "2.8", + "1.8", + "3.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A07": { + "name": "BK57", + "description": "7.62x39mm assault rifle with a bullpup design. High initial accuracy and an increased magazine size which trade for a high recoil acceleration.", + "basic": [ + "660", + "", + "91", + "1" + ], + "dmg_rng": { + "stop": [ + "20", + "30", + "100", + "", + "", + "" + ], + "damage": [ + "27", + "22", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.31", + "5" + ], + "mobility": [ + "16", + "6", + "10", + "6.29", + "3.19", + "", + "" + ], + "ammo": [ + "35", + "140", + "2", + "2.3", + "2", + "2.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A18": { + "name": "CR-AMAX", + "description": "\"7.62x39mm carbine. High rate of fire, but its damage quickly decays over distance. \"", + "basic": [ + "710", + "", + "85", + "1" + ], + "dmg_rng": { + "stop": [ + "13", + "18", + "26", + "100", + "", + "" + ], + "damage": [ + "25", + "24", + "20", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1.3", + "1.1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "18", + "10", + "7", + "6.09", + "2.87", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.7", + "2.3", + "1.7", + "2.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A14": { + "name": "DR-H", + "description": "\"7.62x51mm battle rifle with high damage but reduced maneuverability. \"", + "basic": [ + "570", + "", + "105", + "1" + ], + "dmg_rng": { + "stop": [ + "8", + "14", + "17", + "25", + "35", + "100" + ], + "damage": [ + "32", + "31", + "28", + "25", + "24", + "19" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "3.89", + "6" + ], + "mobility": [ + "17", + "6", + "9", + "6.08", + "2.84", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.7", + "2.3", + "1.7", + "2.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A16": { + "name": "FR .556", + "description": "\"5.56x45mm assault rifle with a bullpup design. High initial accuracy and long effective range makes it powerful at medium range. Recoil increases as shots are fired. \"", + "basic": [ + "670", + "", + "90", + "1" + ], + "dmg_rng": { + "stop": [ + "26", + "100", + "", + "", + "", + "" + ], + "damage": [ + "25", + "19", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1.2", + "1", + "1", + "1", + "1", + "0.9" + ], + "bsa": [ + "6.8", + "4.5" + ], + "mobility": [ + "18", + "11", + "14", + "6.08", + "2.84", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.4", + "1.8", + "1.2", + "2.1" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A12": { + "name": "HBRa3", + "description": "\"5.56x45mm assualt rifle with moderate recoil. Reduced damage over distance. \"", + "basic": [ + "700", + "", + "86", + "1" + ], + "dmg_rng": { + "stop": [ + "14", + "26", + "100", + "", + "", + "" + ], + "damage": [ + "26", + "22", + "17", + "", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "4.92", + "6" + ], + "mobility": [ + "16", + "6", + "10", + "6.08", + "2.84", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.6", + "2.2", + "1.7", + "3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A13": { + "name": "HVK-30", + "description": "\"7.62x35mm carbine with a high rate of fire. Its superior ergonimic design allows a faster reaction time at close range. \"", + "basic": [ + "710", + "", + "85", + "1" + ], + "dmg_rng": { + "stop": [ + "20", + "34", + "100", + "", + "", + "" + ], + "damage": [ + "23", + "18", + "16", + "", + "", + "" + ] + }, + "body_multi": [ + "1.3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "4.98", + "6" + ], + "mobility": [ + "17", + "6", + "9", + "6.05", + "2.84", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.7", + "2.3", + "1.8", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A09": { + "name": "ICR-1", + "description": "\"5.56x45mm assault rifle. Sacrifices damage output for the lowest recoil in class. \"", + "basic": [ + "600", + "", + "100", + "1" + ], + "dmg_rng": { + "stop": [ + "16", + "36", + "100", + "", + "", + "" + ], + "damage": [ + "26", + "24", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "5.81", + "6" + ], + "mobility": [ + "18", + "6", + "9", + "6.15", + "2.96", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.2", + "1.5", + "1.4", + "2.3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A21": { + "name": "KILO-141", + "description": "No Description", + "basic": [ + "680", + "", + "88", + "1" + ], + "dmg_rng": { + "stop": [ + "17", + "26", + "46", + "100", + "", + "" + ], + "damage": [ + "29", + "25", + "23", + "19", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "7.14", + "" + ], + "mobility": [ + "16", + "9", + "9", + "6.17", + "2.96", + "600", + "383" + ], + "ammo": [ + "30", + "120", + "1.5", + "1.9", + "1.6", + "2.6" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A11": { + "name": "KN-44", + "description": "\"7.62x39mm carbine. Has a high accuracy and can be outfitted with numerous muzzle attachemnts to counter its unruly recoil. \"", + "basic": [ + "630", + "", + "95", + "1" + ], + "dmg_rng": { + "stop": [ + "21", + "33", + "100", + "", + "", + "" + ], + "damage": [ + "26", + "24", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.96", + "7" + ], + "mobility": [ + "16", + "6", + "9", + "6.13", + "2.96", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.5", + "1.9", + "1.6", + "2.6" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A08": { + "name": "LK24", + "description": "\"5.56x45mm carbine. Provides a relatively long effective range with low recoil. \"", + "basic": [ + "630", + "", + "95", + "1" + ], + "dmg_rng": { + "stop": [ + "23", + "40", + "100", + "", + "", + "" + ], + "damage": [ + "26", + "22", + "18", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "5.9", + "6" + ], + "mobility": [ + "18", + "6", + "10", + "6.08", + "2.84", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.3", + "1.9", + "1.5", + "2.7" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A06": { + "name": "M4", + "description": "\"5.56x45mm assault rifle. Sacrifices damage per shot for a longer barrel and lower recoil. Various barrel attachments avaialble for modifications. \"", + "basic": [ + "682", + "", + "88", + "1" + ], + "dmg_rng": { + "stop": [ + "16", + "36", + "100", + "", + "", + "" + ], + "damage": [ + "24", + "20", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "5.38", + "7" + ], + "mobility": [ + "17", + "6", + "9", + "6.17", + "2.99", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.5", + "1.8", + "1.6", + "2.5" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A19": { + "name": "M13", + "description": "No Description", + "basic": [ + "880", + "", + "68", + "1" + ], + "dmg_rng": { + "stop": [ + "26", + "39", + "100", + "", + "", + "" + ], + "damage": [ + "24", + "18", + "16", + "", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "17", + "6", + "9", + "6.04", + "3.06", + "600", + "383" + ], + "ammo": [ + "30", + "120", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A02": { + "name": "M16", + "description": "\"5.56x45mm assault rifle. The three-round burst firing mechanism provides outstanding ballistic performance over range. \"", + "basic": [ + "450", + "800 / 15", + "133", + "1" + ], + "dmg_rng": { + "stop": [ + "21", + "41", + "100", + "", + "", + "" + ], + "damage": [ + "30", + "27", + "22", + "", + "", + "" + ] + }, + "body_multi": [ + "1.4", + "1.4", + "1", + "1.2", + "1.2", + "1", + "1" + ], + "bsa": [ + "8.54", + "4" + ], + "mobility": [ + "17", + "6", + "10", + "6.17", + "2.99", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.5", + "1.9", + "1.6", + "2.5" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A10": { + "name": "Man-O-War", + "description": "\"7.8x54mm (fictional) battle rifle utilizing built-in recoil reduction mechanism. Fires devastating rounds at a slower rate of fire. \"", + "basic": [ + "500", + "", + "120", + "1" + ], + "dmg_rng": { + "stop": [ + "23", + "43", + "100", + "", + "", + "" + ], + "damage": [ + "37", + "30", + "24", + "", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "5.06", + "7" + ], + "mobility": [ + "20", + "8", + "11", + "5.36", + "2.7", + "", + "" + ], + "ammo": [ + "25", + "100", + "2", + "2.5", + "2", + "3.3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A15": { + "name": "PMK2", + "description": "\"7.62x35mm carbine, capable of modifying its rate of fire through a number of barrel attachments, making it a remarkably versatile platform. \"", + "basic": [ + "650", + "", + "92", + "1" + ], + "dmg_rng": { + "stop": [ + "11", + "26", + "40", + "100", + "", + "" + ], + "damage": [ + "26", + "24", + "19", + "18", + "", + "" + ] + }, + "body_multi": [ + "1.24", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.4", + "6.5" + ], + "mobility": [ + "17", + "6", + "9", + "6.24", + "3.15", + "", + "" + ], + "ammo": [ + "25", + "100", + "1.4", + "2", + "1.7", + "3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A20": { + "name": "SWORDFISH", + "description": "No Description", + "basic": [ + "600", + "960/13", + "100", + "1" + ], + "dmg_rng": { + "stop": [ + "20", + "100", + "", + "", + "", + "" + ], + "damage": [ + "21.62", + "19.83", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1.33", + "1.22", + "1.33", + "1.33", + "1.22", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "19", + "11", + "14", + "6.09", + "2.85", + "600", + "383" + ], + "ammo": [ + "40", + "200", + "1.55", + "2.5", + "1.55", + "3.5" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A01": { + "name": "Type 25", + "description": "\"5.8x42mm assault rifle with a bullpup design. Has a high rate of fire as well as high mobility. \"", + "basic": [ + "857", + "", + "70", + "1" + ], + "dmg_rng": { + "stop": [ + "10", + "17", + "26", + "100", + "", + "" + ], + "damage": [ + "24", + "22", + "19", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1.1", + "1.1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.7", + "6" + ], + "mobility": [ + "15", + "7", + "10", + "6.32", + "3.26", + "600", + "383" + ], + "ammo": [ + "30", + "120", + "1.6", + "2", + "1.5", + "2.5" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A04": { + "name": "AK-47 5.45", + "description": "\"A 5.45x39mm conversion of AK47 is for a faster rate of fire at the cost of damage output at long range. \"", + "basic": [ + "705", + "", + "85", + "1" + ], + "dmg_rng": { + "stop": [ + "14", + "24", + "35", + "100", + "", + "" + ], + "damage": [ + "25", + "20", + "17", + "15", + "", + "" + ] + }, + "body_multi": [ + "1.25", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "4.95", + "6" + ], + "mobility": [ + "18", + "8", + "11", + "6.08", + "2.84", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.9", + "2.4", + "1.8", + "3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A17": { + "name": "AS VAL (FMJ)", + "description": "\"A Full Metal Jacket version of 9x39mm carbine with an unique built-in suppressor. Improved stealth at the expense of ballistic performance over range. \"", + "basic": [ + "277", + "", + "216", + "1" + ], + "dmg_rng": { + "stop": [ + "26", + "38", + "75", + "100", + "", + "" + ], + "damage": [ + "48", + "44", + "35.4", + "30.8", + "", + "" + ] + }, + "body_multi": [ + "2.11", + "1.3", + "1", + "1", + "1.3", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "16", + "6", + "9", + "6.34", + "3.19", + "", + "" + ], + "ammo": [ + "35", + "140", + "1.8", + "2.3", + "1.9", + "3.1" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A14": { + "name": "DR-H OTM", + "description": "\"7.62x51mm battle rifle with high damage but reduced maneuverability. \"", + "basic": [ + "570", + "", + "105", + "1" + ], + "dmg_rng": { + "stop": [ + "8", + "14", + "17", + "26", + "35", + "100" + ], + "damage": [ + "32", + "31", + "28", + "25", + "24", + "19" + ] + }, + "body_multi": [ + "1.2", + "1.2", + "1", + "1.2", + "1", + "1", + "1" + ], + "bsa": [ + "3.89", + "6" + ], + "mobility": [ + "18", + "6", + "9", + "6.08", + "2.84", + "", + "" + ], + "ammo": [ + "25", + "100", + "1.7", + "2.3", + "1.7", + "2.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A13": { + "name": "HVK-30 LC", + "description": "\"7.62x35mm carbine with a high rate of fire. Its superior ergonimic design allows a faster reaction time at close range. \"", + "basic": [ + "710", + "", + "85", + "1" + ], + "dmg_rng": { + "stop": [ + "6", + "26", + "100", + "", + "", + "" + ], + "damage": [ + "33.91", + "30.9", + "19.8", + "", + "", + "" + ] + }, + "body_multi": [ + "1.6", + "1", + "1", + "0.8", + "1", + "0.8", + "0.8" + ], + "bsa": [ + "4.98", + "6" + ], + "mobility": [ + "18", + "6", + "9", + "6.05", + "2.84", + "", + "" + ], + "ammo": [ + "24", + "96", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A15": { + "name": "PMK2 RFB", + "description": "\"7.62x35mm carbine, capable of modifying its rate of fire through a number of barrel attachments, making it a remarkably versatile platform. \"", + "basic": [ + "740", + "", + "81", + "1" + ], + "dmg_rng": { + "stop": [ + "7", + "16", + "25", + "100", + "", + "" + ], + "damage": [ + "31", + "29", + "18", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.24", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.4", + "6.5" + ], + "mobility": [ + "17", + "6", + "9", + "6.24", + "3.15", + "", + "" + ], + "ammo": [ + "25", + "100", + "1.4", + "2", + "1.7", + "3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A15": { + "name": "PMK2 TF", + "description": "\"7.62x35mm carbine, capable of modifying its rate of fire through a number of barrel attachments, making it a remarkably versatile platform. \"", + "basic": [ + "720", + "", + "83", + "1" + ], + "dmg_rng": { + "stop": [ + "16", + "38", + "60", + "100", + "", + "" + ], + "damage": [ + "26", + "24", + "19", + "18", + "", + "" + ] + }, + "body_multi": [ + "1.24", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.4", + "6.5" + ], + "mobility": [ + "17", + "6", + "9", + "6.24", + "3.15", + "", + "" + ], + "ammo": [ + "25", + "100", + "1.4", + "2", + "1.7", + "3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A15": { + "name": "PMK2 WF", + "description": "\"7.62x35mm carbine, capable of modifying its rate of fire through a number of barrel attachments, making it a remarkably versatile platform. \"", + "basic": [ + "650", + "", + "92", + "1" + ], + "dmg_rng": { + "stop": [ + "16", + "38", + "60", + "100", + "", + "" + ], + "damage": [ + "26", + "24", + "19", + "18", + "", + "" + ] + }, + "body_multi": [ + "1.24", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.4", + "6.5" + ], + "mobility": [ + "17", + "6", + "9", + "6.24", + "3.15", + "", + "" + ], + "ammo": [ + "25", + "100", + "1.4", + "2", + "1.7", + "3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A20": { + "name": "SWORDFISH Halbred", + "description": "No Description", + "basic": [ + "642", + "960/13", + "93", + "1" + ], + "dmg_rng": { + "stop": [ + "40", + "100", + "", + "", + "", + "" + ], + "damage": [ + "20.18", + "18.09", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.8", + "1.3", + "1.1", + "1.3", + "1.3", + "1.1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "19", + "11", + "14", + "6.09", + "2.85", + "600", + "383" + ], + "ammo": [ + "40", + "200", + "1.55", + "2.5", + "1.55", + "3.5" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "A01": { + "name": "Type 25 SP", + "description": "\"5.8x42mm assault rifle with a bullpup design. Has a high rate of fire as well as high mobility. \"", + "basic": [ + "857", + "", + "70", + "1" + ], + "dmg_rng": { + "stop": [ + "10", + "17", + "26", + "100", + "", + "" + ], + "damage": [ + "28", + "23", + "19", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1.1", + "1.1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.7", + "6" + ], + "mobility": [ + "16", + "7", + "10", + "6.36", + "3.21", + "600", + "383" + ], + "ammo": [ + "30", + "120", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D12": { + "name": "AGR", + "description": "No Description", + "basic": [ + "750", + "", + "80", + "1" + ], + "dmg_rng": { + "stop": [ + "13", + "21", + "30", + "100", + "", + "" + ], + "damage": [ + "25", + "21", + "17", + "15", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "6.78", + "6" + ], + "mobility": [ + "15", + "5", + "8", + "6.37", + "3.73", + "", + "" + ], + "ammo": [ + "25", + "100", + "1.3", + "1.8", + "1.4", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D16": { + "name": "CBR-4", + "description": "No Description", + "basic": [ + "800", + "", + "75", + "1" + ], + "dmg_rng": { + "stop": [ + "11", + "17", + "26", + "100", + "", + "" + ], + "damage": [ + "24", + "23", + "17", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.35", + "1.2", + "1.2", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "13", + "8", + "8", + "6.41", + "3.39", + "500", + "317" + ], + "ammo": [ + "58", + "200", + "1.4", + "2.1", + "1.4", + "2.3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D02": { + "name": "Chicom", + "description": "No Description", + "basic": [ + "600", + "720 / 9", + "100", + "1" + ], + "dmg_rng": { + "stop": [ + "9", + "17", + "21", + "100", + "", + "" + ], + "damage": [ + "27", + "24", + "20", + "17", + "", + "" + ] + }, + "body_multi": [ + "1.4", + "1.3", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "9.04", + "7" + ], + "mobility": [ + "13", + "4", + "8", + "6.71", + "4.16", + "", + "" + ], + "ammo": [ + "33", + "132", + "1.8", + "2.1", + "1.7", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D09": { + "name": "Cordite", + "description": "No Description", + "basic": [ + "800", + "", + "75", + "1" + ], + "dmg_rng": { + "stop": [ + "8", + "19", + "26", + "33", + "100", + "" + ], + "damage": [ + "24", + "22", + "19", + "18", + "16", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "5.81", + "6" + ], + "mobility": [ + "16", + "5", + "8", + "6.68", + "4.05", + "533", + "417" + ], + "ammo": [ + "40", + "160", + "1.7", + "2.3", + "2", + "3.0" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D11": { + "name": "Fennec", + "description": "No Description", + "basic": [ + "1110", + "", + "54", + "1" + ], + "dmg_rng": { + "stop": [ + "13", + "18", + "25", + "100", + "", + "" + ], + "damage": [ + "24", + "18.02", + "13.02", + "12.05", + "", + "" + ] + }, + "body_multi": [ + "1.05", + "1.05", + "1", + "0.8", + "0.8", + "0.8", + "0.8" + ], + "bsa": [ + "5.57", + "4" + ], + "mobility": [ + "13", + "6", + "13", + "6.68", + "4.17", + "516", + "417" + ], + "ammo": [ + "30", + "160", + "1.2", + "1.8", + "1.3", + "2.1" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D08": { + "name": "GKS", + "description": "No Description", + "basic": [ + "600", + "", + "100", + "1" + ], + "dmg_rng": { + "stop": [ + "20", + "30", + "100", + "", + "", + "" + ], + "damage": [ + "28", + "24", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.3", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "3.55", + "6" + ], + "mobility": [ + "16", + "6", + "9", + "6.36", + "3.72", + "", + "" + ], + "ammo": [ + "25", + "100", + "1.4", + "1.9", + "1.5", + "2.5" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D06": { + "name": "HG 40", + "description": "No Description", + "basic": [ + "665", + "", + "90", + "1" + ], + "dmg_rng": { + "stop": [ + "10", + "16", + "25", + "100", + "", + "" + ], + "damage": [ + "26", + "24", + "20", + "17", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1.1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "5.6", + "5" + ], + "mobility": [ + "15", + "6", + "8", + "6.33", + "3.86", + "", + "" + ], + "ammo": [ + "32", + "128", + "1.7", + "2.0", + "1.9", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D05": { + "name": "MSMC", + "description": "No Description", + "basic": [ + "915", + "", + "66", + "1" + ], + "dmg_rng": { + "stop": [ + "9", + "14", + "19", + "100", + "", + "" + ], + "damage": [ + "25", + "21", + "18", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "4.66", + "8" + ], + "mobility": [ + "12", + "5", + "8", + "6.67", + "4.17", + "", + "" + ], + "ammo": [ + "25", + "100", + "1.6", + "2.0", + "1.7", + "2.4" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D15": { + "name": "MX-9", + "description": "No Description", + "basic": [ + "850", + "", + "71", + "1" + ], + "dmg_rng": { + "stop": [ + "12", + "16", + "21", + "100", + "", + "" + ], + "damage": [ + "25", + "21", + "18", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.7" + ], + "bsa": [ + "5.5", + "" + ], + "mobility": [ + "13", + "5", + "9", + "6.37", + "3.38", + "", + "" + ], + "ammo": [ + "35", + "140", + "1.2", + "1.8", + "1.2", + "1.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D03": { + "name": "PDW-57", + "description": "No Description", + "basic": [ + "750", + "", + "80", + "1" + ], + "dmg_rng": { + "stop": [ + "6", + "16", + "29", + "100", + "", + "" + ], + "damage": [ + "27", + "22", + "17", + "15", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "4.24", + "6" + ], + "mobility": [ + "15", + "6", + "8", + "6.62", + "4.04", + "", + "" + ], + "ammo": [ + "50", + "200", + "2.0", + "2.5", + "1.9", + "2.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D07": { + "name": "Pharo", + "description": "No Description", + "basic": [ + "626", + "833 / 10", + "96", + "1" + ], + "dmg_rng": { + "stop": [ + "11", + "18", + "25", + "30", + "100", + "" + ], + "damage": [ + "34", + "26", + "21", + "19", + "16", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "5", + "8" + ], + "mobility": [ + "15", + "6", + "8", + "6.75", + "4.17", + "", + "" + ], + "ammo": [ + "28", + "112", + "1.8", + "2.3", + "1.9", + "2.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D14": { + "name": "PP19 Bizon", + "description": "No Description", + "basic": [ + "650", + "", + "92", + "1" + ], + "dmg_rng": { + "stop": [ + "15", + "21", + "31", + "100", + "", + "" + ], + "damage": [ + "28", + "24", + "22", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.3", + "1.15", + "1", + "1", + "1", + "0.8", + "0.8" + ], + "bsa": [ + "5.82", + "" + ], + "mobility": [ + "15", + "6", + "8", + "6.39", + "3.93", + "", + "" + ], + "ammo": [ + "64", + "256", + "1.3", + "1.8", + "1.4", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D17": { + "name": "PPSH-41", + "description": "No Description", + "basic": [ + "820", + "", + "73", + "1" + ], + "dmg_rng": { + "stop": [ + "9", + "15", + "22", + "100", + "", + "" + ], + "damage": [ + "23", + "21", + "19", + "17", + "", + "" + ] + }, + "body_multi": [ + "1.35", + "1.2", + "1.1", + "1.2", + "1.2", + "1.1", + "1" + ], + "bsa": [ + "4.81", + "" + ], + "mobility": [ + "15", + "9", + "11", + "6.4", + "3.38", + "500", + "300" + ], + "ammo": [ + "65", + "260", + "1.9", + "2.7", + "1.6", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D10": { + "name": "QQ9", + "description": "No Description", + "basic": [ + "830", + "", + "72", + "1" + ], + "dmg_rng": { + "stop": [ + "12", + "19", + "24", + "100", + "", + "" + ], + "damage": [ + "26", + "23", + "17", + "15", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "1", + "0.9" + ], + "bsa": [ + "3.54", + "7" + ], + "mobility": [ + "13", + "3", + "6", + "6.43", + "3.89", + "500", + "367" + ], + "ammo": [ + "30", + "120", + "1.7", + "2.2", + "1.8", + "2.7" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D13": { + "name": "QXR", + "description": "No Description", + "basic": [ + "860", + "", + "70", + "1" + ], + "dmg_rng": { + "stop": [ + "10", + "16", + "26", + "100", + "", + "" + ], + "damage": [ + "22", + "19", + "18", + "12", + "", + "" + ] + }, + "body_multi": [ + "1.3", + "1.3", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "4.04", + "7" + ], + "mobility": [ + "16", + "6", + "8", + "6.47", + "3.94", + "", + "" + ], + "ammo": [ + "40", + "160", + "1.5", + "2.1", + "1.6", + "2.4" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D04": { + "name": "Razorback", + "description": "No Description", + "basic": [ + "634", + "", + "95", + "1" + ], + "dmg_rng": { + "stop": [ + "16", + "29", + "100", + "", + "", + "" + ], + "damage": [ + "30", + "23", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "5.47", + "5" + ], + "mobility": [ + "15", + "6", + "9", + "6.37", + "3.7", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.7", + "2.1", + "1.6", + "2.6" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D01": { + "name": "RUS-79U", + "description": "No Description", + "basic": [ + "770", + "", + "78", + "1" + ], + "dmg_rng": { + "stop": [ + "5", + "19", + "32", + "100", + "", + "" + ], + "damage": [ + "28", + "24", + "18", + "15", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "7.03", + "7" + ], + "mobility": [ + "16", + "6", + "9", + "6.5", + "3.96", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.8", + "2.2", + "1.7", + "1.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D12": { + "name": "AGR 5.56mm", + "description": "No Description", + "basic": [ + "675", + "", + "89", + "1" + ], + "dmg_rng": { + "stop": [ + "16", + "21", + "30", + "100", + "", + "" + ], + "damage": [ + "27", + "23", + "20", + "18", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "6.78", + "6" + ], + "mobility": [ + "15", + "5", + "8", + "6.37", + "3.73", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.3", + "1.8", + "1.4", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D11": { + "name": "Fennec Akimbo", + "description": "No Description", + "basic": [ + "1110", + "", + "54", + "2" + ], + "dmg_rng": { + "stop": [ + "7", + "11", + "16", + "23", + "100", + "" + ], + "damage": [ + "12", + "11", + "10", + "9", + "7", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "0.9", + "0.9", + "0.9", + "0.9" + ], + "bsa": [ + "5.57", + "6" + ], + "mobility": [ + "-", + "-", + "13", + "6.68", + "-", + "", + "" + ], + "ammo": [ + "60", + "240", + "1.2", + "1.8", + "1.3", + "2.1" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D14": { + "name": "PP19 Bizon LC", + "description": "No Description", + "basic": [ + "650", + "", + "92", + "1" + ], + "dmg_rng": { + "stop": [ + "12", + "17", + "25", + "100", + "", + "" + ], + "damage": [ + "28", + "24", + "22", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.3", + "1.15", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "5.82", + "" + ], + "mobility": [ + "15", + "6", + "8", + "6.39", + "3.93", + "", + "" + ], + "ammo": [ + "64", + "256", + "1.3", + "1.8", + "1.4", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D15": { + "name": "MX-9 LC", + "description": "No Description", + "basic": [ + "850", + "", + "71", + "1" + ], + "dmg_rng": { + "stop": [ + "12", + "16", + "21", + "100", + "", + "" + ], + "damage": [ + "25", + "21", + "18", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.7" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "13", + "6", + "10", + "6.37", + "3.38", + "", + "" + ], + "ammo": [ + "35", + "140", + "1.2", + "1.8", + "1.2", + "1.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D10": { + "name": "QQ9 10mm", + "description": "No Description", + "basic": [ + "750", + "", + "80", + "1" + ], + "dmg_rng": { + "stop": [ + "12", + "19", + "24", + "100", + "", + "" + ], + "damage": [ + "26", + "23", + "17", + "15", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "1", + "0.9" + ], + "bsa": [ + "3.54", + "7" + ], + "mobility": [ + "13", + "3", + "6", + "6.43", + "3.89", + "", + "" + ], + "ammo": [ + "30", + "120", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D13": { + "name": "QXR EB", + "description": "No Description", + "basic": [ + "990", + "", + "61", + "1" + ], + "dmg_rng": { + "stop": [ + "10", + "16", + "21", + "100", + "", + "" + ], + "damage": [ + "22", + "19", + "18", + "12", + "", + "" + ] + }, + "body_multi": [ + "1.3", + "1.1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "4.04", + "7" + ], + "mobility": [ + "16", + "6", + "8", + "6.47", + "3.94", + "", + "" + ], + "ammo": [ + "40", + "160", + "1.5", + "2.1", + "1.6", + "2.4" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "D04": { + "name": "Razorback RF", + "description": "No Description", + "basic": [ + "694", + "", + "86", + "1" + ], + "dmg_rng": { + "stop": [ + "16", + "29", + "100", + "", + "", + "" + ], + "damage": [ + "30", + "23", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "0.9", + "0.9" + ], + "bsa": [ + "5.47", + "5" + ], + "mobility": [ + "15", + "6", + "9", + "6.37", + "3.7", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.7", + "2.1", + "1.6", + "2.6" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "C05": { + "name": "Chopper", + "description": "No Description", + "basic": [ + "750", + "", + "80", + "1" + ], + "dmg_rng": { + "stop": [ + "10", + "36", + "100", + "", + "", + "" + ], + "damage": [ + "25", + "21", + "17", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "4.16", + "7" + ], + "mobility": [ + "28", + "10", + "14", + "5.57", + "2.39", + "", + "" + ], + "ammo": [ + "100", + "400", + "3.5", + "4.6", + "2.7", + "5.2" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "C07": { + "name": "Hades", + "description": "No Description", + "basic": [ + "650", + "", + "92", + "1" + ], + "dmg_rng": { + "stop": [ + "24", + "36", + "100", + "", + "", + "" + ], + "damage": [ + "29", + "22", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "4.36", + "" + ], + "mobility": [ + "28", + "9", + "11", + "5.81", + "2.49", + "", + "" + ], + "ammo": [ + "65", + "260", + "2.7", + "5", + "2.7", + "5" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "C07": { + "name": "Hades RFB", + "description": "No Description", + "basic": [ + "740", + "", + "81", + "1" + ], + "dmg_rng": { + "stop": [ + "17", + "25", + "100", + "", + "", + "" + ], + "damage": [ + "31", + "22", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "28", + "9", + "11", + "5.81", + "2.49", + "", + "" + ], + "ammo": [ + "65", + "260", + "2.7", + "5", + "2.7", + "5" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "C06": { + "name": "Holger-26", + "description": "No Description", + "basic": [ + "706", + "", + "85", + "1" + ], + "dmg_rng": { + "stop": [ + "17", + "20", + "50", + "100", + "", + "" + ], + "damage": [ + "31", + "25", + "21", + "19", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "34", + "9", + "11", + "5.71", + "2.45", + "", + "" + ], + "ammo": [ + "100", + "400", + "2", + "3", + "2", + "3.2" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "C04": { + "name": "M4LMG", + "description": "No Description", + "basic": [ + "630", + "", + "95", + "1" + ], + "dmg_rng": { + "stop": [ + "21", + "51", + "100", + "", + "", + "" + ], + "damage": [ + "32", + "23", + "19", + "", + "", + "" + ] + }, + "body_multi": [ + "1.1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "4.95", + "7" + ], + "mobility": [ + "32", + "8", + "10", + "5.85", + "1.81", + "", + "" + ], + "ammo": [ + "100", + "400", + "2.1", + "3", + "2.3", + "3.7" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "C08": { + "name": "PKM", + "description": "No Description", + "basic": [ + "631", + "", + "95", + "1" + ], + "dmg_rng": { + "stop": [ + "25", + "35", + "100", + "", + "", + "" + ], + "damage": [ + "32", + "31", + "24", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1.07", + "1", + "1.07", + "1", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "36", + "9", + "11", + "5.37", + "1.45", + "1183", + "817" + ], + "ammo": [ + "100", + "400", + "4.5", + "6", + "5.2", + "6.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "C03": { + "name": "RPD", + "description": "No Description", + "basic": [ + "666", + "", + "90", + "1" + ], + "dmg_rng": { + "stop": [ + "21", + "56", + "100", + "", + "", + "" + ], + "damage": [ + "31", + "23", + "18", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "5.44", + "7" + ], + "mobility": [ + "32", + "8", + "10", + "5.47", + "2.34", + "", + "" + ], + "ammo": [ + "100", + "400", + "4.1", + "5.5", + "3.3", + "6" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "C01": { + "name": "S36", + "description": "No Description", + "basic": [ + "750", + "", + "80", + "1" + ], + "dmg_rng": { + "stop": [ + "16", + "38", + "100", + "", + "", + "" + ], + "damage": [ + "30", + "23", + "18", + "", + "", + "" + ] + }, + "body_multi": [ + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "5.41", + "8" + ], + "mobility": [ + "30", + "8", + "10", + "5.68", + "2.44", + "", + "" + ], + "ammo": [ + "50", + "200", + "2", + "2.6", + "2", + "3.2" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "C02": { + "name": "UL736", + "description": "No Description", + "basic": [ + "620", + "", + "97", + "1" + ], + "dmg_rng": { + "stop": [ + "26", + "36", + "56", + "100", + "", + "" + ], + "damage": [ + "25", + "22", + "20", + "19", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "4.01", + "7" + ], + "mobility": [ + "24", + "8", + "10", + "5.8", + "2.48", + "", + "" + ], + "ammo": [ + "30", + "120", + "1.9", + "2.3", + "1.9", + "3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "E02": { + "name": "BY15", + "description": "No Description", + "basic": [ + "81", + "", + "741", + "8" + ], + "dmg_rng": { + "stop": [ + "5", + "7", + "16", + "41", + "", + "" + ], + "damage": [ + "35", + "27", + "24", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "7", + "5" + ], + "mobility": [ + "12", + "8", + "10", + "6.34", + "2.97", + "", + "" + ], + "ammo": [ + "8", + "32", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "E06": { + "name": "Echo", + "description": "No Description", + "basic": [ + "205", + "", + "293", + "8" + ], + "dmg_rng": { + "stop": [ + "6", + "12", + "33", + "", + "", + "" + ], + "damage": [ + "17", + "15", + "13", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6", + "6" + ], + "mobility": [ + "12", + "8", + "10", + "6.46", + "3.02", + "", + "" + ], + "ammo": [ + "8", + "32", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "E03": { + "name": "HS0405", + "description": "No Description", + "basic": [ + "49", + "", + "1224", + "10" + ], + "dmg_rng": { + "stop": [ + "7", + "12", + "15", + "37", + "", + "" + ], + "damage": [ + "39", + "28", + "16", + "10", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6", + "5.5" + ], + "mobility": [ + "13", + "9", + "10", + "6.44", + "3.02", + "", + "" + ], + "ammo": [ + "7", + "28", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "E01": { + "name": "HS2126", + "description": "No Description", + "basic": [ + "", + "", + "", + "11" + ], + "dmg_rng": { + "stop": [ + "5", + "10", + "33", + "", + "", + "" + ], + "damage": [ + "12", + "9", + "6", + "", + "", + "" + ] + }, + "body_multi": [ + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "5", + "6.5" + ], + "mobility": [ + "12", + "8", + "10", + "6.34", + "2.97", + "", + "" + ], + "ammo": [ + "16", + "64", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "E05": { + "name": "KRM 262", + "description": "No Description", + "basic": [ + "59", + "", + "1017", + "8" + ], + "dmg_rng": { + "stop": [ + "5", + "8", + "12", + "37", + "", + "" + ], + "damage": [ + "36", + "34", + "22", + "16", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "7.5", + "4.5" + ], + "mobility": [ + "12", + "9", + "10", + "6.34", + "2.97", + "", + "" + ], + "ammo": [ + "8", + "32", + "2.1", + "2.9", + "1.7", + "3.4" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "E04": { + "name": "Striker", + "description": "No Description", + "basic": [ + "260", + "", + "231", + "8" + ], + "dmg_rng": { + "stop": [ + "8", + "12", + "33", + "", + "", + "" + ], + "damage": [ + "12", + "10", + "7", + "", + "", + "" + ] + }, + "body_multi": [ + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "6.5", + "6" + ], + "mobility": [ + "12", + "9", + "10", + "6.46", + "3.02", + "", + "" + ], + "ammo": [ + "12", + "48", + "1.9", + "3.1", + "2.5", + "3.4" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "B02": { + "name": "Arctic .50", + "description": "No Description", + "basic": [ + "116", + "", + "518", + "1" + ], + "dmg_rng": { + "stop": [ + "62", + "100", + "", + "", + "", + "" + ], + "damage": [ + "85", + "80", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.6", + "1.4", + "1", + "1.4", + "1.4", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "27", + "", + "", + "5.37", + "1.46", + "", + "" + ], + "ammo": [ + "7", + "28", + "2.1", + "2.9", + "1.7", + "3.4" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "B04": { + "name": "DLQ", + "description": "No Description", + "basic": [ + "48", + "", + "1250", + "1" + ], + "dmg_rng": { + "stop": [ + "100", + "", + "", + "", + "", + "" + ], + "damage": [ + "135", + "", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.2", + "1", + "1", + "1", + "1", + "0.67", + "0.67" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "29", + "", + "", + "5.48", + "1.49", + "", + "" + ], + "ammo": [ + "6", + "24", + "1.9", + "3.1", + "2.5", + "3.4" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "B05": { + "name": "Locus", + "description": "No Description", + "basic": [ + "57", + "", + "1053", + "1" + ], + "dmg_rng": { + "stop": [ + "66", + "100", + "", + "", + "", + "" + ], + "damage": [ + "95", + "90", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1.5", + "1", + "1.5", + "1.5", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "28", + "", + "", + "5.59", + "1.52", + "", + "" + ], + "ammo": [ + "8", + "32", + "1.9", + "2.7", + "1.9", + "3.0" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "B03": { + "name": "M21 EBR", + "description": "No Description", + "basic": [ + "189", + "", + "317", + "1" + ], + "dmg_rng": { + "stop": [ + "75", + "100", + "", + "", + "", + "" + ], + "damage": [ + "60", + "55", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "21", + "", + "", + "5.82", + "2.03", + "", + "" + ], + "ammo": [ + "10", + "40", + "2.1", + "2.8", + "1.8", + "3.2" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "B06": { + "name": "NA-45", + "description": "No Description", + "basic": [ + "350", + "", + "172", + "1" + ], + "dmg_rng": { + "stop": [ + "100", + "", + "", + "", + "", + "" + ], + "damage": [ + "30", + "", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "3.5", + "1.1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "27", + "", + "", + "", + "1.49", + "", + "" + ], + "ammo": [ + "2", + "32", + "1.5", + "2.0", + "1.9", + "1.9" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "B07": { + "name": "Outlaw", + "description": "No Description", + "basic": [ + "64", + "", + "935", + "1" + ], + "dmg_rng": { + "stop": [ + "30", + "100", + "", + "", + "", + "" + ], + "damage": [ + "90", + "75", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1.5", + "1", + "1.5", + "1.2", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "26", + "", + "", + "6.02", + "2.09", + "", + "" + ], + "ammo": [ + "6", + "24", + "2.0", + "2.5", + "1.6", + "3.0" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "B01": { + "name": "XPR-50", + "description": "No Description", + "basic": [ + "240", + "", + "250", + "1" + ], + "dmg_rng": { + "stop": [ + "63", + "100", + "", + "", + "", + "" + ], + "damage": [ + "55", + "50", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "2", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "21", + "", + "", + "5.8", + "", + "", + "" + ], + "ammo": [ + "8", + "32", + "2.0", + "2.7", + "1.8", + "3.2" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "B02": { + "name": "Arctic .50 SP", + "description": "No Description", + "basic": [ + "105", + "", + "571", + "1" + ], + "dmg_rng": { + "stop": [ + "80", + "100", + "", + "", + "", + "" + ], + "damage": [ + "85", + "80", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.85", + "1.8", + "1.5", + "1.8", + "1.8", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "30", + "", + "", + "", + "", + "", + "" + ], + "ammo": [ + "5", + "20", + "2.2", + "2.5", + "2.4", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "B05": { + "name": "Locus SP", + "description": "No Description", + "basic": [ + "44", + "", + "1370", + "1" + ], + "dmg_rng": { + "stop": [ + "", + "", + "", + "", + "", + "" + ], + "damage": [ + "", + "", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "", + "", + "", + "", + "", + "", + "" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "30", + "", + "", + "", + "", + "", + "" + ], + "ammo": [ + "8", + "32", + "1.7", + "2.7", + "2", + "3.2" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "F01": { + "name": "Kilo", + "description": "No Description", + "basic": [ + "61", + "", + "980", + "1" + ], + "dmg_rng": { + "stop": [ + "40", + "100", + "", + "", + "", + "" + ], + "damage": [ + "85", + "80", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1.3", + "1", + "1.3", + "1.2", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "23", + "", + "", + "", + "2.04", + "", + "" + ], + "ammo": [ + "5", + "20", + "2.2", + "2.5", + "2.4", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "F02": { + "name": "SKS", + "description": "No Description", + "basic": [ + "327", + "", + "183", + "1" + ], + "dmg_rng": { + "stop": [ + "40", + "100", + "", + "", + "", + "" + ], + "damage": [ + "60", + "58", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "2", + "1", + "0.9", + "0.8", + "0.8", + "0.9", + "0.8" + ], + "bsa": [ + "6.5", + "" + ], + "mobility": [ + "20", + "", + "", + "", + "2.04", + "", + "" + ], + "ammo": [ + "20", + "80", + "1.4", + "2.5", + "1.6", + "3.2" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "F03": { + "name": "SPR", + "description": "No Description", + "basic": [ + "49", + "", + "1224", + "" + ], + "dmg_rng": { + "stop": [ + "", + "", + "", + "", + "", + "" + ], + "damage": [ + "", + "", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "", + "", + "", + "", + "", + "", + "" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "23", + "11", + "12", + "", + "2.03", + "", + "" + ], + "ammo": [ + "5", + "20", + "1.7", + "2.7", + "2.0", + "3.2" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "F03": { + "name": "SPR .300", + "description": "No Description", + "basic": [ + "44", + "", + "1364", + "" + ], + "dmg_rng": { + "stop": [ + "", + "", + "", + "", + "", + "" + ], + "damage": [ + "", + "", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "", + "", + "", + "", + "", + "", + "" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "23", + "11", + "12", + "", + "", + "", + "" + ], + "ammo": [ + "5", + "20", + "1.7", + "2.7", + "2.0", + "3.2" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "F03": { + "name": "SPR .338", + "description": "No Description", + "basic": [ + "", + "", + "", + "" + ], + "dmg_rng": { + "stop": [ + "", + "", + "", + "", + "", + "" + ], + "damage": [ + "", + "", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "", + "", + "", + "", + "", + "", + "" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "", + "", + "", + "", + "", + "", + "" + ], + "ammo": [ + "", + "", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "F04": { + "name": "MK2", + "description": "No Description", + "basic": [ + "57", + "", + "1364", + "" + ], + "dmg_rng": { + "stop": [ + "25", + "55", + "100", + "", + "", + "" + ], + "damage": [ + "120", + "112", + "105", + "", + "", + "" + ] + }, + "body_multi": [ + "", + "", + "", + "", + "", + "", + "" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "26", + "13", + "14", + "5.51", + "1.51", + "", + "" + ], + "ammo": [ + "6", + "24", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "F04": { + "name": "MK2 .30", + "description": "No Description", + "basic": [ + "112", + "", + "536", + "" + ], + "dmg_rng": { + "stop": [ + "", + "", + "", + "", + "", + "" + ], + "damage": [ + "", + "", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "", + "", + "", + "", + "", + "", + "" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "", + "", + "", + "", + "", + "", + "" + ], + "ammo": [ + "", + "", + "", + "", + "", + "" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "F01": { + "name": "Kilo SP", + "description": "No Description", + "basic": [ + "52", + "", + "1149", + "1" + ], + "dmg_rng": { + "stop": [ + "50", + "100", + "", + "", + "", + "" + ], + "damage": [ + "110", + "104", + "", + "", + "", + "" + ] + }, + "body_multi": [ + "1.16", + "1", + "1.16", + "1", + "1", + "0.78", + "0.78" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "26/7", + "", + "", + "", + "", + "", + "" + ], + "ammo": [ + "5", + "20", + "2.2", + "2.5", + "2.4", + "2.8" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "G02": { + "name": "MW11", + "description": "No Description", + "basic": [ + "300", + "", + "200", + "1" + ], + "dmg_rng": { + "stop": [ + "9", + "20", + "25", + "30", + "100", + "" + ], + "damage": [ + "35", + "26", + "20", + "17", + "16", + "" + ] + }, + "body_multi": [ + "1.75", + "1.15", + "1.15", + "1", + "1", + "1.15", + "1" + ], + "bsa": [ + "", + "5.5" + ], + "mobility": [ + "12", + "", + "", + "6.81", + "", + "", + "" + ], + "ammo": [ + "6", + "24", + "1.9", + "2.6", + "2.5", + "2.6" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "G01": { + "name": "J358", + "description": "No Description", + "basic": [ + "200", + "", + "300", + "1" + ], + "dmg_rng": { + "stop": [ + "19", + "21", + "36", + "100", + "", + "" + ], + "damage": [ + "60", + "40", + "34", + "25", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "5" + ], + "mobility": [ + "12", + "", + "", + "6.81", + "", + "", + "" + ], + "ammo": [ + "6", + "24", + "1.9", + "2.6", + "2.5", + "2.6" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "G03": { + "name": ".50 GS", + "description": "No Description", + "basic": [ + "164", + "", + "366", + "1" + ], + "dmg_rng": { + "stop": [ + "11", + "26", + "100", + "", + "", + "" + ], + "damage": [ + "70", + "55", + "48", + "", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "5" + ], + "mobility": [ + "12", + "", + "", + "6.78", + "", + "", + "" + ], + "ammo": [ + "7", + "28", + "1.4", + "2.0", + "1.6", + "2.3" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "G04": { + "name": "Renetti", + "description": "No Description", + "basic": [ + "348", + "", + "172", + "1" + ], + "dmg_rng": { + "stop": [ + "7", + "16", + "100", + "", + "", + "" + ], + "damage": [ + "28", + "25", + "22", + "", + "", + "" + ] + }, + "body_multi": [ + "2", + "1.5", + "1", + "1.5", + "1.5", + "1", + "1" + ], + "bsa": [ + "", + "" + ], + "mobility": [ + "12", + "5", + "7", + "6.81", + "4.26", + "", + "" + ], + "ammo": [ + "15", + "60", + "1.3", + "1.8", + "1.5", + "2.1" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "G03": { + "name": ".50 GS Akimbo", + "description": "No Description", + "basic": [ + "164", + "", + "366", + "2" + ], + "dmg_rng": { + "stop": [ + "11", + "26", + "100", + "", + "", + "" + ], + "damage": [ + "60", + "45", + "40", + "", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "5" + ], + "mobility": [ + "-", + "", + "", + "6.78", + "", + "", + "" + ], + "ammo": [ + "14", + "56", + "1.1", + "1.5", + "1.6", + "1.7" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + }, + { + "G01": { + "name": "J358 SP", + "description": "No Description", + "basic": [ + "166", + "", + "361", + "1" + ], + "dmg_rng": { + "stop": [ + "19", + "21", + "36", + "100", + "", + "" + ], + "damage": [ + "70", + "50", + "44", + "35", + "", + "" + ] + }, + "body_multi": [ + "1.5", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "bsa": [ + "", + "5" + ], + "mobility": [ + "12", + "", + "", + "6.81", + "", + "", + "" + ], + "ammo": [ + "6", + "24", + "1.8", + "2.5", + "2.6", + "2.6" + ], + "recoil": { + "horizontal": "0,80", + "vertical": "0, 248" + } + } + } +] \ No newline at end of file diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..b8d6842 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..cf69baa --- /dev/null +++ b/next.config.js @@ -0,0 +1,16 @@ +/** @type {import('next').NextConfig} */ +if ( + process.env.LD_LIBRARY_PATH == null || + !process.env.LD_LIBRARY_PATH.includes( + `${process.env.PWD}/node_modules/canvas/build/Release:` + ) +) { + process.env.LD_LIBRARY_PATH = `${ + process.env.PWD + }/node_modules/canvas/build/Release:${process.env.LD_LIBRARY_PATH || ""}`; +} +const nextConfig = { + reactStrictMode: true, +}; + +module.exports = nextConfig; diff --git a/package.json b/package.json new file mode 100644 index 0000000..ea2f374 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "cath-api", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start" + }, + "dependencies": { + "canvas": "^2.6.1", + "discord.js": "^14.9.0", + "mongodb": "^5.1.0", + "next": "13.2.4", + "node-fetch": "^2.6.9", + "react": "18.2.0", + "react-dom": "18.2.0" + } +} diff --git a/public/image/alone.jpg b/public/image/alone.jpg new file mode 100644 index 0000000..033a782 Binary files /dev/null and b/public/image/alone.jpg differ diff --git a/public/image/bestmeme.jpg b/public/image/bestmeme.jpg new file mode 100644 index 0000000..dee3b6b Binary files /dev/null and b/public/image/bestmeme.jpg differ diff --git a/public/image/busted.jpg b/public/image/busted.jpg new file mode 100644 index 0000000..4a50056 Binary files /dev/null and b/public/image/busted.jpg differ diff --git a/public/image/communism.jpg b/public/image/communism.jpg new file mode 100644 index 0000000..989526c Binary files /dev/null and b/public/image/communism.jpg differ diff --git a/public/image/gun.jpg b/public/image/gun.jpg new file mode 100644 index 0000000..dcda99c Binary files /dev/null and b/public/image/gun.jpg differ diff --git a/public/image/mask.jpg b/public/image/mask.jpg new file mode 100644 index 0000000..bf276ae Binary files /dev/null and b/public/image/mask.jpg differ diff --git a/public/image/moment.jpg b/public/image/moment.jpg new file mode 100644 index 0000000..0067d96 Binary files /dev/null and b/public/image/moment.jpg differ diff --git a/public/image/pray.jpg b/public/image/pray.jpg new file mode 100644 index 0000000..2667f56 Binary files /dev/null and b/public/image/pray.jpg differ diff --git a/public/image/pressplay.jpg b/public/image/pressplay.jpg new file mode 100644 index 0000000..e4db136 Binary files /dev/null and b/public/image/pressplay.jpg differ diff --git a/public/image/rifleshoot.jpg b/public/image/rifleshoot.jpg new file mode 100644 index 0000000..e46e8a6 Binary files /dev/null and b/public/image/rifleshoot.jpg differ diff --git a/public/image/robert.jpg b/public/image/robert.jpg new file mode 100644 index 0000000..e4cba79 Binary files /dev/null and b/public/image/robert.jpg differ diff --git a/public/image/saveonlyone.jpg b/public/image/saveonlyone.jpg new file mode 100644 index 0000000..1adf380 Binary files /dev/null and b/public/image/saveonlyone.jpg differ diff --git a/public/image/toilet.jpg b/public/image/toilet.jpg new file mode 100644 index 0000000..ad8fbcd Binary files /dev/null and b/public/image/toilet.jpg differ diff --git a/public/image/vr.jpg b/public/image/vr.jpg new file mode 100644 index 0000000..28a99ad Binary files /dev/null and b/public/image/vr.jpg differ diff --git a/public/image/whodidthis.jpg b/public/image/whodidthis.jpg new file mode 100644 index 0000000..cb0d99f Binary files /dev/null and b/public/image/whodidthis.jpg differ diff --git a/src/pages/_app.js b/src/pages/_app.js new file mode 100644 index 0000000..39b86cd --- /dev/null +++ b/src/pages/_app.js @@ -0,0 +1,3 @@ +export default function App({ Component, pageProps }) { + return ; +} diff --git a/src/pages/_document.js b/src/pages/_document.js new file mode 100644 index 0000000..54e8bf3 --- /dev/null +++ b/src/pages/_document.js @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from 'next/document' + +export default function Document() { + return ( + + + +
+ + + + ) +} diff --git a/src/pages/api/v1/codm/build.js b/src/pages/api/v1/codm/build.js new file mode 100644 index 0000000..eaba611 --- /dev/null +++ b/src/pages/api/v1/codm/build.js @@ -0,0 +1,26 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import builds from "../../../../../db/codm/builds.json"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default function melee(req, res) { + const cwts = req.query.cwts; + const cc = req.query.cc; + const tag = req.query.tag; + const auth = req.headers.authorization; + if (auth !== process.env.auth || !auth) + return res.status(401).send({ error: "Unauthorized", code: 401 }); + else { + const obj = builds.find( + p => + p.cwts == cwts && + p.author.toLowerCase() == cc.toLowerCase() && + p.tags.map(x => x.toLowerCase()).includes(tag.toLowerCase()) + ); + if (!obj) + return res.status(404).send({ error: "Build Not Found", code: 404 }); + res.status(200).send(obj); + } +} diff --git a/src/pages/api/v1/codm/melee.js b/src/pages/api/v1/codm/melee.js new file mode 100644 index 0000000..e9f6641 --- /dev/null +++ b/src/pages/api/v1/codm/melee.js @@ -0,0 +1,19 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import melees from "../../../../../db/codm/melees.json"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default function melee(req, res) { + const name = req.query.name; + const auth = req.headers.authorization; + if (auth !== process.env.auth || !auth) + return res.status(401).send({ error: "Unauthorized", code: 401 }); + else { + const obj = melees.find(p => p.value == name.toLowerCase()); + if (!obj) + return res.status(404).send({ error: "Unknown Melee", code: 404 }); + res.status(200).send(obj); + } +} diff --git a/src/pages/api/v1/codm/perk.js b/src/pages/api/v1/codm/perk.js new file mode 100644 index 0000000..7872036 --- /dev/null +++ b/src/pages/api/v1/codm/perk.js @@ -0,0 +1,18 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import perks from "../../../../../db/codm/perks.json"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default function perk(req, res) { + const name = req.query.name; + const auth = req.headers.authorization; + if (auth !== process.env.auth || !auth) + return res.status(401).send({ error: "Unauthorized", code: 401 }); + else { + const obj = perks.find(p => p.name == name); + if (!obj) return res.status(404).send({ error: "Unknown Perk", code: 404 }); + res.status(200).send(obj); + } +} diff --git a/src/pages/api/v1/codm/scorestreak.js b/src/pages/api/v1/codm/scorestreak.js new file mode 100644 index 0000000..4355c56 --- /dev/null +++ b/src/pages/api/v1/codm/scorestreak.js @@ -0,0 +1,19 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import scorestreaks from "../../../../../db/codm/scorestreaks.json"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default function scorestreak(req, res) { + const name = req.query.name; + const auth = req.headers.authorization; + if (auth !== process.env.auth || !auth) + return res.status(401).send({ error: "Unauthorized", code: 401 }); + else { + const obj = scorestreaks.find(p => p.value == name.toLowerCase()); + if (!obj) + return res.status(404).send({ error: "Unknown Scorestreak", code: 404 }); + res.status(200).send(obj); + } +} diff --git a/src/pages/api/v1/fun/8ball.js b/src/pages/api/v1/fun/8ball.js new file mode 100644 index 0000000..d5b9052 --- /dev/null +++ b/src/pages/api/v1/fun/8ball.js @@ -0,0 +1,36 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default function random8ball(req, res) { + const answers = [ + "Maybe.", + "Certainly not.", + "I hope so.", + "Not in your wildest dreams.", + "There is a good chance.", + "Quite likely.", + "I think so.", + "I hope not.", + "I hope so.", + "Never!", + "Fuhgeddaboudit.", + "Ahaha! Really?!?", + "Pfft.", + "Sorry, bucko.", + "Hell, yes.", + "Hell to the no.", + "The future is bleak.", + "The future is uncertain.", + "I would rather not say.", + "Who cares?", + "Possibly.", + "Never, ever, ever.", + "There is a small chance.", + "Yes!", + ]; + const answered = answers[Math.floor(Math.random() * answers.length)]; + res.status(200).send({ answer: answered }); +} diff --git a/src/pages/api/v1/fun/doublestruck.js b/src/pages/api/v1/fun/doublestruck.js new file mode 100644 index 0000000..3bd3f47 --- /dev/null +++ b/src/pages/api/v1/fun/doublestruck.js @@ -0,0 +1,61 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default function doublestruck(req, res) { + const texts = req.query.text; + if (!texts) return res.status(400).send({ error: "Missing Text", code: 400 }); + var w = { + " ": " ", + 0: "𝟘", + 1: "πŸ™", + 2: "𝟚", + 3: "πŸ›", + 4: "𝟜", + 5: "𝟝", + 6: "𝟞", + 7: "𝟟", + 8: "𝟠", + 9: "𝟑", + "+": "+", + "-": "-", + a: "𝕒", + b: "𝕓", + c: "𝕔", + d: "𝕕", + e: "𝕖", + f: "𝕗", + g: "π•˜", + h: "𝕙", + i: "π•š", + j: "𝕛", + k: "π•œ", + l: "𝕝", + m: "π•ž", + n: "𝕠", + o: "𝕑", + p: "𝕒", + r: "𝕣", + s: "𝕀", + t: "π•₯", + u: "𝕦", + v: "𝕧", + w: "𝕨", + x: "𝕩", + y: "π•ͺ", + z: "𝕫", + }; + + function toDoubleStruck(x) { + return x + .split("") + .map(c => { + if (c in w) return w[c]; + return ""; + }) + .join(""); + } + res.status(200).send({ text: toDoubleStruck(texts) }); +} diff --git a/src/pages/api/v1/fun/fractur.js b/src/pages/api/v1/fun/fractur.js new file mode 100644 index 0000000..23590ed --- /dev/null +++ b/src/pages/api/v1/fun/fractur.js @@ -0,0 +1,61 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default function fractur(req, res) { + const texts = req.query.text; + if (!texts) return res.status(400).send({ error: "Missing Text", code: 400 }); + var w = { + " ": " ", + 0: "Φ…", + 1: "Υ΅", + 2: "Υ·", + 3: "Υ…", + 4: "Υ―", + 5: "Տ", + 6: "Υ³", + 7: "Τ΄", + 8: "Υ‘", + 9: "Υ£", + "+": "+", + "-": "-", + a: "𝖆", + b: "𝖇", + c: "π–ˆ", + d: "𝖉", + e: "π–Š", + f: "𝖋", + g: "π–Œ", + h: "𝖍", + i: "π–Ž", + j: "𝖏", + k: "𝖐", + l: "𝖑", + m: "𝖒", + n: "𝖔", + o: "𝖕", + p: "𝖖", + r: "𝖗", + s: "π–˜", + t: "𝖙", + u: "π–š", + v: "𝖛", + w: "π–œ", + x: "𝖝", + y: "π–ž", + z: "π–Ÿ", + }; + + function tofractur(x) { + return x + .split("") + .map(c => { + if (c in w) return w[c]; + return ""; + }) + .join(""); + } + res.status(200).send({ text: tofractur(texts) }); +} diff --git a/src/pages/api/v1/fun/reverse.js b/src/pages/api/v1/fun/reverse.js new file mode 100644 index 0000000..ed47034 --- /dev/null +++ b/src/pages/api/v1/fun/reverse.js @@ -0,0 +1,12 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default function reverse(req, res) { + const texts = req.query.text; + if (!texts) return res.status(400).send({ error: "Missing Text", code: 400 }); + const reversed = texts.split("").reverse().join(""); + res.status(200).send({ text: reversed }); +} diff --git a/src/pages/api/v1/fun/superscript.js b/src/pages/api/v1/fun/superscript.js new file mode 100644 index 0000000..8dbe2b2 --- /dev/null +++ b/src/pages/api/v1/fun/superscript.js @@ -0,0 +1,61 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default function superscript(req, res) { + const texts = req.query.text; + if (!texts) return res.status(400).send({ error: "Missing Text", code: 400 }); + var w = { + " ": " ", + 0: "⁰", + 1: "ΒΉ", + 2: "Β²", + 3: "Β³", + 4: "⁴", + 5: "⁡", + 6: "⁢", + 7: "⁷", + 8: "⁸", + 9: "⁹", + "+": "⁺", + "-": "⁻", + a: "ᡃ", + b: "ᡇ", + c: "ᢜ", + d: "ᡈ", + e: "ᡉ", + f: "αΆ ", + g: "ᡍ", + h: "Κ°", + i: "ⁱ", + j: "Κ²", + k: "ᡏ", + l: "Λ‘", + m: "ᡐ", + n: "ⁿ", + o: "α΅’", + p: "α΅–", + r: "Κ³", + s: "Λ’", + t: "α΅—", + u: "ᡘ", + v: "α΅›", + w: "Κ·", + x: "Λ£", + y: "ΚΈ", + z: "αΆ»", + }; + + function toSuperScript(x) { + return x + .split("") + .map(c => { + if (c in w) return w[c]; + return ""; + }) + .join(""); + } + res.status(200).send({ text: toSuperScript(texts) }); +} diff --git a/src/pages/api/v1/image/alone.js b/src/pages/api/v1/image/alone.js new file mode 100644 index 0000000..65230a7 --- /dev/null +++ b/src/pages/api/v1/image/alone.js @@ -0,0 +1,25 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function alone(req, res) { + try { + const query = req.query.image; + if (!query) + return res.json({ error: "Missing 'Image' Property", code: 400 }); + const avatar = await loadImage(query); + const canvas = createCanvas(1100, 892); + const ctx = canvas.getContext("2d"); + const background = await loadImage("public/image/alone.jpg"); + ctx.drawImage(background, 0, 0, canvas.width, canvas.height); + ctx.drawImage(avatar, 480, 350, 205, 205); + res.setHeader("Content-Type", "image/jpg"); + res.status(200).send(canvas.toBuffer()); + } catch (e) { + res.status(400).send({ error: e.stack, code: 400 }); + console.log(e); + } +} diff --git a/src/pages/api/v1/image/bestmeme.js b/src/pages/api/v1/image/bestmeme.js new file mode 100644 index 0000000..0f1825c --- /dev/null +++ b/src/pages/api/v1/image/bestmeme.js @@ -0,0 +1,28 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function bestmeme(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ error: true, message: "Missing 'Image' Property" }); + try { + const bg = await loadImage("public/image/bestmeme.jpg"); + const img = await loadImage(req.query.image); + const canvas = createCanvas(966, 1145); + const ctx = canvas.getContext("2d"); + + ctx.drawImage(img, 693, 970, 127, 127); + ctx.drawImage(img, 114, 734, 239, 239); + ctx.drawImage(bg, 0, 0, 966, 1145); + + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + return res.status(400).send({ error: true, message: e.message }); + } +} diff --git a/src/pages/api/v1/image/busted.js b/src/pages/api/v1/image/busted.js new file mode 100644 index 0000000..2a40f60 --- /dev/null +++ b/src/pages/api/v1/image/busted.js @@ -0,0 +1,25 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function busted(req, res) { + try { + const query = req.query.image; + if (!query) + return res.json({ error: "Missing 'Image' Property", code: 400 }); + const avatar = await loadImage(query); + let bg = await loadImage("public/image/busted.jpg"); + const canvas = createCanvas(1000, 1000); + const ctx = canvas.getContext(`2d`); + ctx.drawImage(avatar, 0, 0, 1000, 1000); + ctx.drawImage(bg, 0, 0, 1000, 1000); + res.setHeader("Content-Type", "image/jpg"); + res.status(200).send(canvas.toBuffer()); + } catch (e) { + res.status(400).send({ error: e.stack, code: 400 }); + console.log(e); + } +} diff --git a/src/pages/api/v1/image/communism.js b/src/pages/api/v1/image/communism.js new file mode 100644 index 0000000..ca6dd17 --- /dev/null +++ b/src/pages/api/v1/image/communism.js @@ -0,0 +1,26 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function communism(req, res) { + try { + const query = req.query.image; + if (!query) + return res.json({ error: "Missing 'Image' Property", code: 400 }); + const baseAvatar = await loadImage(query); + const overlayAvatar = await loadImage("public/image/communism.jpg"); + const canvas = createCanvas(1024, 1024); + const ctx = canvas.getContext("2d"); + ctx.globalAlpha = 0.3; + ctx.drawImage(baseAvatar, 0, 0, canvas.width, canvas.height); + ctx.drawImage(overlayAvatar, 0, 0, 1024, 1024); + res.setHeader("Content-Type", "image/jpg"); + res.status(200).send(canvas.toBuffer()); + } catch (e) { + res.status(400).send({ error: e.stack, code: 400 }); + console.log(e); + } +} diff --git a/src/pages/api/v1/image/gun.js b/src/pages/api/v1/image/gun.js new file mode 100644 index 0000000..e5483a6 --- /dev/null +++ b/src/pages/api/v1/image/gun.js @@ -0,0 +1,27 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function gun(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ error: true, message: "Missing 'Image' Property" }); + try { + const bg = await loadImage("public/image/gun.jpg"); + const img = await loadImage(req.query.image); + const canvas = createCanvas(550, 550); + const ctx = canvas.getContext("2d"); + + ctx.drawImage(img, 0, 0, 550, 550); + ctx.drawImage(bg, -70, 190, 350, 350); + + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + return res.status(400).send({ error: true, message: e.message }); + } +} diff --git a/src/pages/api/v1/image/mask.js b/src/pages/api/v1/image/mask.js new file mode 100644 index 0000000..9506edd --- /dev/null +++ b/src/pages/api/v1/image/mask.js @@ -0,0 +1,27 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function mask(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ error: true, message: "Missing 'Image' Property" }); + try { + const bg = await loadImage("public/image/mask.jpg"); + const img = await loadImage(req.query.image); + const canvas = createCanvas(1080, 960); + const ctx = canvas.getContext("2d"); + + ctx.drawImage(img, 64, 571, 269, 269); + ctx.drawImage(bg, 0, 0, 1080, 960); + + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + return res.status(400).send({ error: true, message: e.message }); + } +} diff --git a/src/pages/api/v1/image/moment.js b/src/pages/api/v1/image/moment.js new file mode 100644 index 0000000..681a6af --- /dev/null +++ b/src/pages/api/v1/image/moment.js @@ -0,0 +1,25 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function moment(req, res) { + try { + const query = req.query.image; + if (!query) + return res.json({ error: "Missing 'Image' Property", code: 400 }); + const canvas = createCanvas(500, 670); + const ctx = canvas.getContext("2d"); + const background = await loadImage("public/image/moment.jpg"); + ctx.drawImage(background, 0, 0, canvas.width, canvas.height); + const avatar = await loadImage(query); + ctx.drawImage(avatar, 150, 100, 205, 205); + res.setHeader("Content-Type", "image/jpg"); + res.status(200).send(canvas.toBuffer()); + } catch (e) { + res.status(400).send({ error: e.stack, code: 400 }); + console.log(e); + } +} diff --git a/src/pages/api/v1/image/pray.js b/src/pages/api/v1/image/pray.js new file mode 100644 index 0000000..ba38098 --- /dev/null +++ b/src/pages/api/v1/image/pray.js @@ -0,0 +1,27 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function pray(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ error: true, message: "Missing 'Image' Property" }); + try { + const bg = await loadImage("public/image/pray.jpg"); + const img = await loadImage(req.query.image); + const canvas = createCanvas(396, 275); + const ctx = canvas.getContext("2d"); + + ctx.drawImage(img, 214, 10, 143, 136); + ctx.drawImage(bg, 0, 0, 396, 275); + + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + return res.status(400).send({ error: true, message: e.message }); + } +} diff --git a/src/pages/api/v1/image/pressplay.js b/src/pages/api/v1/image/pressplay.js new file mode 100644 index 0000000..56e1432 --- /dev/null +++ b/src/pages/api/v1/image/pressplay.js @@ -0,0 +1,27 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function pressplay(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ error: true, message: "Missing 'Image' Property" }); + try { + const bg = await loadImage("public/image/pressplay.jpg"); + const img = await loadImage(req.query.image); + const canvas = createCanvas(474, 474); + const ctx = canvas.getContext("2d"); + + ctx.drawImage(img, 218, 208, 228, 228); + ctx.drawImage(bg, 0, 0, 474, 474); + + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + return res.status(400).send({ error: true, message: e.message }); + } +} diff --git a/src/pages/api/v1/image/rifleshoot.js b/src/pages/api/v1/image/rifleshoot.js new file mode 100644 index 0000000..c35cd28 --- /dev/null +++ b/src/pages/api/v1/image/rifleshoot.js @@ -0,0 +1,27 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function rifleshoot(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ error: true, message: "Missing 'Image' Property" }); + try { + const bg = await loadImage("public/image/rifleshoot.jpg"); + const img = await loadImage(req.query.image); + const canvas = createCanvas(318, 299); + const ctx = canvas.getContext("2d"); + + ctx.drawImage(img, 55, 28, 118, 118); + ctx.drawImage(bg, 0, 0, 318, 299); + + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + return res.status(400).send({ error: true, message: e.message }); + } +} diff --git a/src/pages/api/v1/image/robert.js b/src/pages/api/v1/image/robert.js new file mode 100644 index 0000000..b683529 --- /dev/null +++ b/src/pages/api/v1/image/robert.js @@ -0,0 +1,30 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function robert(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ error: true, message: "Missing 'Image' Property" }); + try { + const bg = await loadImage("public/image/robert.jpg"); + const glasses = await loadImage("public/image/glasses.jpg"); + const img = await loadImage(req.query.image); + const canvas = createCanvas(295, 406); + const ctx = canvas.getContext("2d"); + + ctx.drawImage(img, 50, 115, 53, 53); + ctx.drawImage(img, 218, 115, 53, 53); + ctx.drawImage(glasses, 62, 130, 36, 19); + ctx.drawImage(bg, 0, 0, 295, 406); + + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + return res.status(400).send({ error: true, message: e.message }); + } +} diff --git a/src/pages/api/v1/image/saveonlyone.js b/src/pages/api/v1/image/saveonlyone.js new file mode 100644 index 0000000..3b5079b --- /dev/null +++ b/src/pages/api/v1/image/saveonlyone.js @@ -0,0 +1,39 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function saveonlyone(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ message: "Missing 'Image' Property", error: 400 }); + if (!req.query.image2) + return res + .status(400) + .send({ message: "Missing 'Image' Property", error: 400 }); + if (!req.query.image3) + return res + .status(400) + .send({ message: "Missing 'Image' Property", error: 400 }); + + try { + const bg = await loadImage("public/image/saveonlyone.jpg"); + const img = await loadImage(req.query.image); + const img2 = await loadImage(req.query.image2); + const img3 = await loadImage(req.query.image3); + const canvas = createCanvas(910, 799); + const ctx = canvas.getContext("2d"); + ctx.drawImage(img, 465, 135, 158, 158); + ctx.drawImage(img2, 729, 107, 158, 158); + ctx.drawImage(img3, 170, 478, 104, 104); + ctx.drawImage(bg, 0, 0, 910, 799); + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + res.status(400).send({ error: e.stack, code: 400 }); + console.log(e); + } +} diff --git a/src/pages/api/v1/image/toilet.js b/src/pages/api/v1/image/toilet.js new file mode 100644 index 0000000..7c1e910 --- /dev/null +++ b/src/pages/api/v1/image/toilet.js @@ -0,0 +1,25 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function toilet(req, res) { + try { + const query = req.query.image; + if (!query) + return res.json({ error: "Missing 'Image' Property", code: 400 }); + const canvas = createCanvas(500, 670); + const ctx = canvas.getContext("2d"); + const background = await loadImage("public/image/toilet.jpg"); + ctx.drawImage(background, 0, 0, canvas.width, canvas.height); + const avatar = await loadImage(query); + ctx.drawImage(avatar, 135, 350, 205, 205); + res.setHeader("Content-Type", "image/jpg"); + res.status(200).send(canvas.toBuffer()); + } catch (e) { + res.status(400).send({ error: e.stack, code: 400 }); + console.log(e); + } +} diff --git a/src/pages/api/v1/image/vr.js b/src/pages/api/v1/image/vr.js new file mode 100644 index 0000000..ba86954 --- /dev/null +++ b/src/pages/api/v1/image/vr.js @@ -0,0 +1,27 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function vr(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ error: true, message: "Missing 'Image' Property" }); + try { + const bg = await loadImage("public/image/vr.jpg"); + const img = await loadImage(req.query.image); + const canvas = createCanvas(780, 768); + const ctx = canvas.getContext("2d"); + + ctx.drawImage(img, 46, 409, 305, 305); + ctx.drawImage(bg, 0, 0, 780, 768); + + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + return res.status(400).send({ error: true, message: e.message }); + } +} diff --git a/src/pages/api/v1/image/whodidthis.js b/src/pages/api/v1/image/whodidthis.js new file mode 100644 index 0000000..cecd893 --- /dev/null +++ b/src/pages/api/v1/image/whodidthis.js @@ -0,0 +1,27 @@ +import { NextApiRequest, NextApiResponse } from "next/dist/shared/lib/utils"; +import { createCanvas, loadImage } from "canvas"; +/** + * + * @param {NextApiRequest} req + * @param {NextApiResponse} res + */ +export default async function whodidthis(req, res) { + if (!req.query.image) + return res + .status(400) + .send({ error: true, message: "Missing 'Image' Property" }); + try { + const bg = await loadImage("public/image/whodidthis.jpg"); + const img = await loadImage(req.query.image); + const canvas = createCanvas(512, 512); + const ctx = canvas.getContext("2d"); + + ctx.drawImage(img, 0, 109, 512, 295); + ctx.drawImage(bg, 0, 0, 512, 512); + + res.setHeader("Content-Type", "image/jpg"); + return res.status(200).send(canvas.toBuffer()); + } catch (e) { + return res.status(400).send({ error: true, message: e.message }); + } +} diff --git a/src/pages/api/v1/rpc/[id].js b/src/pages/api/v1/rpc/[id].js new file mode 100644 index 0000000..d3d3b6b --- /dev/null +++ b/src/pages/api/v1/rpc/[id].js @@ -0,0 +1,371 @@ +const { + DiscordAPIError, + Client, + Partials, + GatewayIntentBits, +} = require("discord.js"); +const fetch = require("node-fetch"); +const allowlistGames = [ + "visual studio code", + "visual studio", + "atom", + "sublime text", + "adobe illustrator", + "adobe photoshop", + "adobe xd", + "adobe dimension", + "adobe after effects", + "vim", + "neovim", + "blender", + "autodesk 3ds max", + "aseprite", + "intellij idea ultimate", + "intellij idea community", + "phpstorm", + "jetbrains ide", + "youtube music", + "code", +]; +const statusColors = { + online: "#43b581", + idle: "#faa61a", + dnd: "#f04747", + streaming: "#6441a5", + offline: "#555555", +}; + +const statusNames = { + online: "Online", + idle: "Away", + dnd: "Do Not Disturb", + streaming: "Streaming", + offline: "Offline", +}; +function processText(input) { + input = input.length > 32 ? `${input.substring(0, 32)}...` : input; + return input + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +} + +async function parsePresence(user) { + const username = processText(user.user.username); + let pfpImage = + "data:image/png;base64," + + (await fetch( + user.displayAvatarURL({ + format: "jpg", + dynamic: true, + size: 512, + }) + ) + .then(res => res.buffer()) + .then(buffer => buffer.toString("base64"))); + + const statuses = user.presence?.clientStatus; + if (!statuses) { + return { + username, + pfpImage, + status: "offline", + gameType: "Offline", + game: "", + details: "", + detailsImage: false, + state: "", + height: 97, + }; + } + const status = statuses?.desktop || statuses?.mobile || statuses?.web; + const playingRichGame = user.presence.activities + .reverse() + .find( + e => + allowlistGames.includes(e.name.toLowerCase()) && (e.details || e.state) + ); + const playingGame = user.presence.activities + .reverse() + .find( + e => + allowlistGames.includes(e.name.toLowerCase()) && !e.details && !e.state + ); + const spotifyGame = user.presence.activities.find( + e => e.type == 2 && e.name == "Spotify" + ); + const gameObject = spotifyGame || playingRichGame || playingGame; + + if (!gameObject) { + return { + username, + pfpImage, + status, + gameType: "", + game: "", + details: "", + detailsImage: false, + state: "", + height: 97, + }; + } + const game = processText(gameObject.name); + let gameType = game == "Spotify" ? "Listening to" : "Playing"; + + if (!gameObject.details && !gameObject.state) { + return { + username, + pfpImage, + status, + gameType, + game, + details: "", + detailsImage: false, + state: "", + height: 97, + }; + } + var details = gameObject.details ? processText(gameObject.details) : ""; + if (game == "IntelliJ IDEA Ultimate" || game == "IntelliJ IDEA Community") + details = game; + let detailsImage = false; + let detialsURL = ""; + if (gameObject.assets && gameObject.assets.largeImage) { + if (gameObject.assets.largeImage.startsWith("mp:")) { + detialsURL = `https://media.discordapp.net/${gameObject.assets.largeImage.substring( + 3 + )}`; + } else { + detialsURL = `https://cdn.discordapp.com/app-assets/${gameObject.applicationId}/${gameObject.assets.largeImage}.png`; + if (game == "Spotify") + detialsURL = `https://i.scdn.co/image/${gameObject.assets.largeImage.replace( + "spotify:", + "" + )}`; + } + if (detialsURL) + detailsImage = + "data:image/png;base64," + + (await fetch(detialsURL) + .then(res => res.buffer()) + .then(buffer => buffer.toString("base64"))); + } + + const state = gameObject.state ? processText(gameObject.state) : ""; + + return { + username, + pfpImage, + status, + game, + gameType, + details, + detailsImage, + state, + height: 187, + }; +} +class Card { + constructor({ + username, + pfpImage, + status, + game, + gameType, + details, + detailsImage, + state, + height, + }) { + this.username = username; + this.pfpImage = pfpImage; + this.status = status; + this.game = game; + this.gameType = gameType; + this.details = details; + this.detailsImage = detailsImage; + this.state = state; + this.height = height; + + this.statusColor = statusColors[status]; + + if (!this.game) { + this.gameType = statusNames[status]; + } + } + + render() { + return ` + + + + + + + + + + + + ${ + this.username + } + + ${ + this.gameType + } ${this.game} + + + + + + + + + + + + + + + ${ + this.detailsImage + ? `` + : '' + } + + + + ${ + this.details + } + + + ${ + this.state + } + + + `; + } + // +} +export default async function handler(req, res) { + res.setHeader("Content-Type", "image/svg+xml"); + res.setHeader("Cache-Control", "public, max-age=30"); + const client = new Client({ + shards: "auto", + partials: [Partials.GuildMember], + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMembers, + GatewayIntentBits.GuildPresences, + ], + }); + return new Promise((resolve, reject) => { + client.login(process.env.TOKEN).then(async () => { + const member = await client.guilds + .fetch(process.env.GUILD_ID) + .then(async guild => { + return await guild.members + .fetch({ + user: req.query.id, + cache: false, + force: true, + }) + .catch(error => { + return error; + }); + }); + client.destroy(); + + let card; + if (member instanceof DiscordAPIError) { + card = new Card({ + username: "Error", + pfpImage: + "https://sparkcdnwus2.azureedge.net/sparkimageassets/XPDC2RH70K22MN-08afd558-a61c-4a63-9171-d3f199738e9f", + status: "online", + game: "Discord", + gameType: "Playing", + details: "Member Not Found", + detailsImage: + "https://sparkcdnwus2.azureedge.net/sparkimageassets/XPDC2RH70K22MN-08afd558-a61c-4a63-9171-d3f199738e9f", + state: "Join discord.gg/SbQHChmGcp", + height: 187, + }); + } else { + card = new Card(await parsePresence(member)); + } + res.status(200).send(card.render()); + resolve(); + }); + }); +} diff --git a/src/pages/api/v1/rpc/json/[id].js b/src/pages/api/v1/rpc/json/[id].js new file mode 100644 index 0000000..82a333a --- /dev/null +++ b/src/pages/api/v1/rpc/json/[id].js @@ -0,0 +1,148 @@ +const { + DiscordAPIError, + Client, + Partials, + GatewayIntentBits, +} = require("discord.js"); +export default async function handler(req, res) { + const client = new Client({ + shards: "auto", + partials: [Partials.GuildMember], + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMembers, + GatewayIntentBits.GuildPresences, + ], + }); + return new Promise((resolve, reject) => { + client.login(process.env.TOKEN).then(async () => { + const member = await client.guilds + .fetch(process.env.GUILD_ID) + .then(async guild => { + return await guild.members + .fetch({ + user: req.query.id, + cache: false, + force: true, + }) + .catch(error => { + return error; + }); + }); + + client.destroy(); + const discord_user = { + username: member.user.username, + public_flags: member.user.flags, + id: member.user.id, + discriminator: member.user.discriminator, + avatar: member.user.avatar, + }; + const discord_status = member?.presence?.status || "offline"; + const spo_activity = member?.presence?.activities.find( + activity => activity.name == "Spotify" + ); + let spotify = null; + if (spo_activity) { + spotify = { + timestamps: { + start: Date.parse(spo_activity.timestamps.start), + end: Date.parse(spo_activity.timestamps.end), + }, + song: spo_activity.details, + artist: spo_activity.state, + album_art_url: `https://i.scdn.co/image/${spo_activity.assets.largeImage.slice( + 8 + )}`, + album: spo_activity.assets.largeText, + }; + } + const activities = member?.presence?.activities.map(activity => { + if (activity.name == "Spotify") { + return { + type: activity.type, + timestamps: { + start: Date.parse(activity.timestamps.start), + end: Date.parse(activity.timestamps.end), + }, + state: activity.state, + party: { + id: activity.party?.id, + }, + name: activity.name, + id: activity.id, + flags: activity.flags, + details: activity.details, + created_at: activity.createdTimestamp, + assets: { + large_text: activity.assets?.largeText, + large_image: activity.assets?.largeImage, + }, + }; + } + let activity_obj = {}; + activity.type != null ? (activity_obj["type"] = activity.type) : ""; + activity.state ? (activity_obj["state"] = activity.state) : ""; + activity.details ? (activity_obj["details"] = activity.details) : ""; + activity.flags ? (activity_obj["flags"] = activity.flags) : ""; + activity.name ? (activity_obj["name"] = activity.name) : ""; + activity.id ? (activity_obj["id"] = activity.id) : ""; + activity.createdTimestamp + ? (activity_obj["timestamps"] = { start: activity.createdTimestamp }) + : ""; + activity.buttons.length != 0 + ? (activity_obj["buttons"] = activity.buttons) + : ""; + activity.emoji + ? (activity_obj["emoji"] = { + name: activity.emoji?.name, + id: activity.emoji?.id, + animated: activity.emoji?.animated, + }) + : ""; + activity.assets + ? (activity_obj["assets"] = { + small_text: activity.assets?.smallText, + small_image: activity.assets?.smallImage, + large_text: activity.assets?.largeText, + large_image: activity.assets?.largeImage, + }) + : ""; + activity.applicationId + ? (activity_obj["application_id"] = activity.applicationId) + : ""; + + return activity_obj; + }); + const active_on_discord_web = member?.presence?.clientStatus?.web + ? true + : false; + const active_on_discord_mobile = member?.presence?.clientStatus?.mobile + ? true + : false; + const active_on_discord_desktop = member?.presence?.clientStatus?.desktop + ? true + : false; + if (member instanceof DiscordAPIError) { + resolve(); + return res + .status(400) + .json({ success: false, message: "User not found" }); + } else { + resolve(); + return res.status(200).json({ + success: true, + data: { + spotify, + discord_user, + discord_status, + activities, + active_on_discord_web, + active_on_discord_mobile, + active_on_discord_desktop, + }, + }); + } + }); + }); +} diff --git a/src/pages/api/v1/server/[invite].js b/src/pages/api/v1/server/[invite].js new file mode 100644 index 0000000..e730dd4 --- /dev/null +++ b/src/pages/api/v1/server/[invite].js @@ -0,0 +1,105 @@ +export default async function handler(req, res) { + // return a promise to avoid stalled requests + return new Promise(resolve => { + let { logoColor, style, theme, presenceTheme, compact, invite } = req.query; + + theme = theme || presenceTheme; + style = style || "for-the-badge"; + + async function getServerInfo() { + const apiResult = await fetch( + `https://discord.com/api/v10/invites/${invite}?with_counts=true&with_expiration=true`, + { + method: "GET", + } + ).catch(e => console.error("[err]", e, Date.now())); + const serverInfo = await apiResult.json(); + + let renderData = {}; + if (serverInfo.code === 10006) { + renderData = { + t: "Error", + p: "Unknown invite", + }; + } else { + renderData = { + t: serverInfo.guild.name, + p: `${serverInfo.approximate_member_count} members`, + }; + } + + return renderData; + } + + // get the shield from shields.io and returns it + async function makeShield() { + let { t, p } = await getServerInfo(); + + // a lookup table for the presence colors + const presenceColors = { + online: "43b581", + idle: "faa81a", + "do not disturb": "ed4245", + offline: "555", + }; + + // a lookup table for the themes + const themes = { + default: ["555", "5865F2"], + "default-inverted": ["5865F2", "555"], + clean: ["555", presenceColors[p]], + "clean-inverted": [`${presenceColors[p]}`, "555"], + discord: ["5865F2", presenceColors[p]], + "discord-inverted": [presenceColors[p], "5865F2"], + "full-presence": [presenceColors[p], presenceColors[p]], + gray: ["555", "555"], + grey: ["555", "555"], + blurple: ["5865F2", "5865F2"], + }; + + if (logoColor) { + logoColor = logoColor === "presence" ? presenceColors[p] : logoColor; + } else { + logoColor = style === "social" ? "#5865F2" : "white"; + } + + const colors = themes[theme] || themes["default"]; + + let text; + // if compact is true, we set the text accordingly + if (compact) { + text = { + label: "", + message: encodeURIComponent(t), + }; + } else { + text = { + label: encodeURIComponent(t), + message: encodeURIComponent(p), + }; + } + + const shieldURL = `https://img.shields.io/static/v1?label=${text.label}&message=${text.message}&style=${style}&color=${colors[0]}&labelColor=${colors[1]}&logo=discord&logoColor=${logoColor}`; + const rawShield = await fetch(shieldURL); + const svgShield = await rawShield.text(); + + // fix the server name being capitalized + let svgShieldFix = svgShield.replace(new RegExp(t.toUpperCase(), "g"), t); + + // make the server name bold + svgShieldFix = svgShieldFix.replace( + new RegExp(`fill="#fff">${t}`, "g"), + `fill="#fff" font-weight="bold">${t}` + ); + + res.setHeader("Cache-Control", "s-maxage=1200"); + res.setHeader("Content-Type", "image/svg+xml"); + res.status(200).send(svgShieldFix); + } + + // call the function and resolve the promise + makeShield().then(() => { + resolve; + }); + }); +} diff --git a/src/pages/api/v1/shield/[user].js b/src/pages/api/v1/shield/[user].js new file mode 100644 index 0000000..76085c8 --- /dev/null +++ b/src/pages/api/v1/shield/[user].js @@ -0,0 +1,142 @@ +const { + DiscordAPIError, + Client, + Partials, + GatewayIntentBits, +} = require("discord.js"); + +export default async function handler(req, res) { + // return a promise to avoid stalled requests + return new Promise(resolve => { + let { logoColor, style, theme, presenceTheme, compact, user, bot } = + req.query; + + // presenceTheme is present for legacy purposes, theme should be used instead + theme = theme || presenceTheme; + style = style || "for-the-badge"; + const client = new Client({ + shards: "auto", + partials: [Partials.GuildMember], + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMembers, + GatewayIntentBits.GuildPresences, + ], + }); + async function getUserInfo() { + return new Promise(resolve => { + client.login(process.env.TOKEN).then(async () => { + const member = await client.guilds + .fetch(process.env.GUILD_ID) + .then(async guild => { + return await guild.members + .fetch({ + user: req.query.user, + cache: false, + force: true, + }) + .catch(_ => { + return resolve({ + t: "Error", + p: "Join discord.gg/SbQHChmGcp", + }); + }); + }); + client.destroy(); + if (member instanceof DiscordAPIError) { + return resolve({ + t: "Error", + p: "Join discord.gg/SbQHChmGcp", + }); + } else { + let presence = member?.presence?.status || "offline"; + const tag = member.user.tag; + if (presence == "dnd") { + presence = "do not disturb"; + } + return resolve({ t: tag, p: presence }); + } + }); + }); + } + + // get the shield from shields.io and returns it + async function makeShield() { + let { t, p } = await getUserInfo(); + + // Quick temp overwrite + if (t === "Error") { + p = "Join discord.gg/SbQHChmGcp"; + } + + // a lookup table for the presence colors + const presenceColors = { + online: "3ba55d", + idle: "faa81a", + "do not disturb": "ed4245", + offline: "555", + }; + + // a lookup table for the themes + const themes = { + default: ["555", "5865F2"], + "default-inverted": ["5865F2", "555"], + clean: ["555", presenceColors[p]], + "clean-inverted": [`${presenceColors[p]}`, "555"], + discord: ["5865F2", presenceColors[p]], + "discord-inverted": [presenceColors[p], "5865F2"], + "full-presence": [presenceColors[p], presenceColors[p]], + gray: ["555", "555"], + grey: ["555", "555"], + blurple: ["5865F2", "5865F2"], + }; + + if (logoColor) { + logoColor = logoColor === "presence" ? presenceColors[p] : logoColor; + } else { + logoColor = style === "social" ? "#5865F2" : "white"; + } + + const colors = themes[theme] || themes["default"]; + + let text; + // if compact is true, we set the text accordingly + if (compact) { + text = { + label: "", + message: encodeURIComponent(t), + }; + } else { + text = { + label: encodeURIComponent(t), + message: encodeURIComponent(p), + }; + } + + const shieldURL = `https://img.shields.io/static/v1?label=${text.label}&message=${text.message}&style=${style}&color=${colors[0]}&labelColor=${colors[1]}&logo=discord&logoColor=${logoColor}`; + const rawShield = await fetch(shieldURL); + const svgShield = await rawShield.text(); + + // fix the username and invite url being capitalized + let svgShieldFix = svgShield.replace(new RegExp(t.toUpperCase(), "g"), t); + svgShieldFix = svgShieldFix.replace( + new RegExp("HTTPS://DISCORD.GG/ZKSPFFWQDG", "g"), + "https://discord.gg/zkspfFwqDg" + ); + + // make the username bold + svgShieldFix = svgShieldFix.replace( + new RegExp(`fill="#fff">${t}`, "g"), + `fill="#fff" font-weight="bold">${t}` + ); + + res.setHeader("Content-Type", "image/svg+xml"); + res.status(200).send(svgShieldFix); + } + + // call the function and resolve the promise + makeShield().then(() => { + resolve; + }); + }); +} diff --git a/src/pages/api/v1/skyblock.js b/src/pages/api/v1/skyblock.js new file mode 100644 index 0000000..b6b0e00 --- /dev/null +++ b/src/pages/api/v1/skyblock.js @@ -0,0 +1,33 @@ +const { getItemNetworth } = require("skyhelper-networth"); +const nbt = require("prismarine-nbt"); +const parseNbt = require("util").promisify(nbt.parse); +async function decodeData(buffer) { + const parsedNbt = await parseNbt(Buffer.from(buffer, "base64")); + return nbt.simplify(parsedNbt); +} +export default async function handler(req, res) { + if (req.method == "POST" || req.method == "GET" || req.method == "PUT") { + if (req.body == "") { + res.status(400).json({ error: "No body was provided" }); + return; + } + console.log(req.body); + let dat = req.body; + if (typeof dat !== "string" || typeof dat == "undefined") { + res.status(400).json({ error: "ByteData is not a string or undefined" }); + return; + } + try { + const data = await getItemNetworth((await decodeData(dat)).i[0], { + cache: true, + }); + res.status(200).json(data); + } catch { + res.status(400).json({ error: "Invalid ByteData" }); + } + } else { + res + .status(400) + .json({ error: "This endpoint only accepts GET, POST and PUT requests" }); + } +} diff --git a/src/pages/index.js b/src/pages/index.js new file mode 100644 index 0000000..0eaf073 --- /dev/null +++ b/src/pages/index.js @@ -0,0 +1,41 @@ +import Head from "next/head"; + +export default function Home() { + return ( + <> + + API + +

Endpoints

+

/api/v1/codm/build Get details about a build

+

/api/v1/codm/melee Get details about a melee

+

api/v1/codm/perk Get details about a perk

+

/api/v1/codm/scorestreak Get details about a scorestreak

+

/api/v1/fun/8ball 8ball a question

+

/api/v1/fun/doublestruck Doublestruck a text

+

/api/v1/fun/fractur Fractur a text

+

/api/v1/fun/reverse Reverse a text

+

/api/v1/fun/superscript Superscript a text

+

/api/v1/image/alone Create a alone meme

+

/api/v1/image/awesome Create a awesome meme

+

/api/v1/image/bestmeme Create a bestmeme meme

+

/api/v1/image/busted Create a busted meme

+

/api/v1/image/communism Create a communism meme

+

/api/v1/image/gun Create a gun meme

+

/api/v1/image/mask Create a mask meme

+

/api/v1/image/moment Create a moment meme

+

/api/v1/image/pray Create a pray meme

+

/api/v1/image/pressplay Create a pressplay meme

+

/api/v1/image/rifleshoot Create a rifleshoot meme

+

/api/v1/image/robert Create a robert meme

+

/api/v1/image/saveonlyone Create a saveonlyone meme

+

/api/v1/image/toilet Create a toilet meme

+

/api/v1/image/vr Create a vr meme

+

/api/v1/image/whodidthis Create a whodidthis meme

+

/api/v1/rpc/json/[id] Get rich presence of user with json

+

/api/v1/rpc/[id] Get rich presence of user with image

+

/api/v1/server/[invite] Get server information based on invite code

+

/api/v1/shield/[user] Get user shield using shield.io

+ + ); +}