Merge remote-tracking branch 'origin/main'

# Conflicts:
#	static/filterWeapons.js
#	static/operative.json
This commit is contained in:
IM23a-spirgif
2025-01-22 13:24:05 +01:00
11 changed files with 2451 additions and 203 deletions
+128 -98
View File
@@ -2,52 +2,52 @@
{
"id": 1,
"name": "G18",
"damage": 32,
"damage": 34,
"damage_multiplier": 1,
"rpm": 550,
"mag_size": 18,
"rpm": 800,
"mag_size": 17,
"reload_time": 2,
"guntype": "PISTOL"
"guntype": ["PISTOL", "SECONDARY"]
},
{
"id": 2,
"name": "M1911",
"damage": 37,
"damage": 45,
"damage_multiplier": 1,
"rpm": 580,
"mag_size": 8,
"reload_time": 1.15,
"guntype": "PISTOL"
"guntype": ["PISTOL", "SECONDARY", "WW2"]
},
{
"id": 3,
"name": "M9A",
"damage": 31,
"damage": 65,
"damage_multiplier": 1,
"rpm": 850,
"rpm": 300,
"mag_size": 15,
"reload_time": 2,
"guntype": "PISTOL"
"guntype": ["PISTOL", "SECONDARY"]
},
{
"id": 4,
"name": "M1911MK2",
"damage": 48,
"damage": 60,
"damage_multiplier": 1,
"rpm": 720,
"mag_size": 16,
"reload_time": 3,
"guntype": "PISTOL"
"guntype": ["PISTOL", "SECONDARY"]
},
{
"id": 5,
"name": "Luger",
"damage": 58,
"damage": 150,
"damage_multiplier": 1,
"rpm": 500,
"mag_size": 8,
"reload_time": 1.95,
"guntype": "PISTOL"
"guntype": ["PISTOL", "WW2", "SECONDARY"]
},
{
"id": 6,
@@ -57,7 +57,7 @@
"rpm": 600,
"mag_size": 30,
"reload_time": 2.1,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY","SOVIET"]
},
{
"id": 7,
@@ -67,7 +67,7 @@
"rpm": 700,
"mag_size": 30,
"reload_time": 2.4,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 8,
@@ -77,7 +77,7 @@
"rpm": 400,
"mag_size": 24,
"reload_time": 2.6,
"guntype": "RIFLE"
"guntype": ["RIFLE", "SEMI-AUTO", "PRIMARY"]
},
{
"id": 9,
@@ -87,7 +87,7 @@
"rpm": 670,
"mag_size": 30,
"reload_time": 3.25,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 10,
@@ -97,7 +97,7 @@
"rpm": 700,
"mag_size": 30,
"reload_time": 2.35,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 11,
@@ -107,7 +107,7 @@
"rpm": 60,
"mag_size": 8,
"reload_time": 2.8,
"guntype": "RIFLE"
"guntype": ["RIFLE", "SEMI-AUTO", "PRIMARY"]
},
{
"id": 12,
@@ -117,7 +117,17 @@
"rpm": 70,
"mag_size": 12,
"reload_time": 12,
"guntype": "SHOTGUN"
"guntype": ["SHOTGUN", "PRIMARY"]
},
{
"id": 87,
"name": "R870-B",
"damage": 92,
"damage_multiplier": 6,
"rpm": 70,
"mag_size": 12,
"reload_time": 12,
"guntype": ["SHOTGUN", "PRIMARY"]
},
{
"id": 14,
@@ -126,18 +136,18 @@
"damage_multiplier": 4,
"rpm": 300,
"mag_size": 7,
"reload_time": 4,
"guntype": "SHOTGUN"
"reload_time": 4.5,
"guntype": ["SHOTGUN", "PRIMARY"]
},
{
"id": 16,
"name": "Shorty",
"damage": 29,
"damage": 40,
"damage_multiplier": 4,
"rpm": 185,
"rpm": 150,
"mag_size": 8,
"reload_time": 3.5,
"guntype": "SHOTGUN"
"guntype": ["SHOTGUN", "SECONDARY"]
},
{
"id": 18,
@@ -147,7 +157,7 @@
"rpm": 300,
"mag_size": 20,
"reload_time": 2.2,
"guntype": "SHOTGUN"
"guntype": ["SHOTGUN", "PRIMARY"]
},
{
"id": 20,
@@ -157,7 +167,7 @@
"rpm": 900,
"mag_size": 50,
"reload_time": 3,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 21,
@@ -167,17 +177,17 @@
"rpm": 750,
"mag_size": 50,
"reload_time": 2.5,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY", "WW2"]
},
{
"id": 22,
"name": "Uzi",
"damage": 20,
"damage": 32,
"damage_multiplier": 1,
"rpm": 850,
"mag_size": 32,
"rpm": 950,
"mag_size": 20,
"reload_time": 2,
"guntype": "SMG"
"guntype": ["SMG", "SECONDARY"]
},
{
"id": 23,
@@ -187,67 +197,67 @@
"rpm": 1050,
"mag_size": 33,
"reload_time": 2,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 24,
"name": "MP5",
"damage": 23,
"damage": 26,
"damage_multiplier": 1,
"rpm": 800,
"mag_size": 30,
"reload_time": 2.1,
"guntype": "SMG"
"guntype": ["SMG", "SECONDARY"]
},
{
"id": 25,
"name": "U10",
"damage": 18,
"damage": 22,
"damage_multiplier": 1,
"rpm": 750,
"mag_size": 65,
"reload_time": 2,
"guntype": "SMG"
"guntype": ["SMG", "SECONDARY"]
},
{
"id": 26,
"name": "MPX",
"damage": 28,
"damage": 36,
"damage_multiplier": 1,
"rpm": 780,
"mag_size": 30,
"reload_time": 2.65,
"guntype": "SMG"
"guntype": ["SMG", "SECONDARY"]
},
{
"id": 27,
"name": "UMP45",
"damage": 28,
"damage": 36,
"damage_multiplier": 1,
"rpm": 600,
"mag_size": 25,
"reload_time": 2,
"guntype": "SMG"
"guntype": ["SMG", "SECONDARY"]
},
{
"id": 28,
"name": "Prototype",
"damage": 21,
"damage": 28,
"damage_multiplier": 1,
"rpm": 800,
"mag_size": 25,
"reload_time": 2.5,
"guntype": "SMG"
"guntype": ["SMG", "SECONDARY"]
},
{
"id": 29,
"name": "Prototype (Overcharged)",
"damage": 21,
"damage": 28,
"damage_multiplier": 1.35,
"rpm": 800,
"mag_size": 25,
"reload_time": 2.5,
"guntype": "SMG"
"guntype": ["SMG", "SECONDARY"]
},
{
"id": 30,
@@ -257,7 +267,7 @@
"rpm": 550,
"mag_size": 32,
"reload_time": 3,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY", "WW2"]
},
{
"id": 31,
@@ -267,7 +277,7 @@
"rpm": 750,
"mag_size": 100,
"reload_time": 5.5,
"guntype": "LMG"
"guntype": ["LMG", "PRIMARY","SOVIET"]
},
{
"id": 32,
@@ -277,7 +287,7 @@
"rpm": 850,
"mag_size": 100,
"reload_time": 6,
"guntype": "LMG"
"guntype": ["LMG", "PRIMARY"]
},
{
"id": 33,
@@ -287,7 +297,7 @@
"rpm": 780,
"mag_size": 125,
"reload_time": 5.5,
"guntype": "LMG"
"guntype": ["LMG", "PRIMARY"]
},
{
"id": 34,
@@ -297,7 +307,7 @@
"rpm": 700,
"mag_size": 50,
"reload_time": 3.25,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 35,
@@ -307,7 +317,7 @@
"rpm": 850,
"mag_size": 125,
"reload_time": 5.5,
"guntype": "LMG"
"guntype": ["LMG", "PRIMARY"]
},
{
"id": 36,
@@ -317,7 +327,7 @@
"rpm": 750,
"mag_size": 50,
"reload_time": 3.25,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 37,
@@ -327,7 +337,7 @@
"rpm": 30,
"mag_size": 5,
"reload_time": 3.5,
"guntype": "RIFLE?"
"guntype": ["RIFLE", "SEMI-AUTO", "PRIMARY"]
},
{
"id": 38,
@@ -337,7 +347,7 @@
"rpm": 800,
"mag_size": 50,
"reload_time": 2.5,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 39,
@@ -347,7 +357,7 @@
"rpm": 900,
"mag_size": 64,
"reload_time": 4,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 40,
@@ -357,7 +367,7 @@
"rpm": 1000,
"mag_size": 50,
"reload_time": 2.45,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 41,
@@ -367,7 +377,7 @@
"rpm": 3000,
"mag_size": 10000000000000000000,
"reload_time": 0,
"guntype": "SPECIAL"
"guntype": ["SPECIAL"]
},
{
"id": 42,
@@ -377,7 +387,7 @@
"rpm": 500,
"mag_size": 650,
"reload_time": 0,
"guntype": "SPECIAL"
"guntype": ["SPECIAL"]
},
{
"id": 43,
@@ -387,7 +397,7 @@
"rpm": 300,
"mag_size": 650,
"reload_time": 0,
"guntype": "SPECIAL"
"guntype": ["SPECIAL"]
},
{
"id": 44,
@@ -397,7 +407,17 @@
"rpm": 650,
"mag_size": 18,
"reload_time": 2,
"guntype": "PISTOL"
"guntype": ["PISTOL"]
},
{
"id": 89,
"name": "Improved G18 (150+ Kills)",
"damage": 51,
"damage_multiplier": 1,
"rpm": 650,
"mag_size": 23,
"reload_time": 2,
"guntype": ["PISTOL"]
},
{
"id": 45,
@@ -407,7 +427,7 @@
"rpm": 550,
"mag_size": 18,
"reload_time": 2,
"guntype": "PISTOL"
"guntype": ["PISTOL"]
},
{
"id": 46,
@@ -417,7 +437,7 @@
"rpm": 225,
"mag_size": 10,
"reload_time": 5,
"guntype": "SHOTGUN"
"guntype": ["SHOTGUN", "PRIMARY"]
},
{
"id": 48,
@@ -427,7 +447,7 @@
"rpm": 550,
"mag_size": 30,
"reload_time": 2.35,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 49,
@@ -437,7 +457,7 @@
"rpm": 600,
"mag_size": 30,
"reload_time": 2.35,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 50,
@@ -447,7 +467,7 @@
"rpm": 600,
"mag_size": 32,
"reload_time": 2.45,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 51,
@@ -457,7 +477,7 @@
"rpm": 650,
"mag_size": 32,
"reload_time": 2.45,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 52,
@@ -467,7 +487,7 @@
"rpm": 625,
"mag_size": 100,
"reload_time": 4.5,
"guntype": "LMG"
"guntype": ["LMG", "PRIMARY"]
},
{
"id": 53,
@@ -477,17 +497,17 @@
"rpm": 700,
"mag_size": 100,
"reload_time": 4.5,
"guntype": "LMG"
"guntype": ["LMG", "PRIMARY"]
},
{
"id": 54,
"name": "Improved P90",
"damage": 32,
"damage": 34,
"damage_multiplier": 1,
"rpm": 800,
"mag_size": 50,
"reload_time": 2.6,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 55,
@@ -497,7 +517,7 @@
"rpm": 550,
"mag_size": 32,
"reload_time": 2.5,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY", "WW2"]
},
{
"id": 56,
@@ -507,7 +527,7 @@
"rpm": 700,
"mag_size": 34,
"reload_time": 3.5,
"guntype": "PISTOL"
"guntype": ["PISTOL"]
},
{
"id": 57,
@@ -517,7 +537,7 @@
"rpm": 440,
"mag_size": 18,
"reload_time": 3.5,
"guntype": "RIFLE"
"guntype": ["RIFLE", "SEMI-AUTO", "PRIMARY"]
},
{
"id": 58,
@@ -527,7 +547,7 @@
"rpm": 540,
"mag_size": 18,
"reload_time": 3.5,
"guntype": "RIFLE"
"guntype": ["RIFLE", "SEMI-AUTO", "PRIMARY"]
},
{
"id": 59,
@@ -537,7 +557,7 @@
"rpm": 780,
"mag_size": 30,
"reload_time": 2.25,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 60,
@@ -547,7 +567,7 @@
"rpm": 900,
"mag_size": 26,
"reload_time": 2.5,
"guntype": "SMG?"
"guntype": ["PISTOL"]
},
{
"id": 61,
@@ -557,7 +577,7 @@
"rpm": 1200,
"mag_size": 26,
"reload_time": 2,
"guntype": "SMG?"
"guntype": ["PISTOL"]
},
{
"id": 62,
@@ -567,7 +587,7 @@
"rpm": 800,
"mag_size": 30,
"reload_time": 1.5,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 63,
@@ -587,7 +607,17 @@
"rpm": 1050,
"mag_size": 30,
"reload_time": 2,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 88,
"name": "Improved Vector (150+ Kills)",
"damage": 39,
"damage_multiplier": 1,
"rpm": 1050,
"mag_size": 33,
"reload_time": 2,
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 65,
@@ -597,7 +627,7 @@
"rpm": 850,
"mag_size": 30,
"reload_time": 2,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 66,
@@ -607,7 +637,7 @@
"rpm": 850,
"mag_size": 30,
"reload_time": 2,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 67,
@@ -637,7 +667,7 @@
"rpm": 830,
"mag_size": 30,
"reload_time": 2.5,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 70,
@@ -647,7 +677,7 @@
"rpm": 900,
"mag_size": 30,
"reload_time": 2.5,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 71,
@@ -667,7 +697,7 @@
"rpm": 700,
"mag_size": 30,
"reload_time": 3.25,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 73,
@@ -677,7 +707,7 @@
"rpm": 400,
"mag_size": 18,
"reload_time": 2.1,
"guntype": "PISTOL"
"guntype": ["PISTOL", "DEAGLE"]
},
{
"id": 74,
@@ -687,7 +717,7 @@
"rpm": 400,
"mag_size": 36,
"reload_time": 3.5,
"guntype": "PISTOL"
"guntype": ["PISTOL", "DEAGLE"]
},
{
"id": 75,
@@ -697,7 +727,7 @@
"rpm": 300,
"mag_size": 10,
"reload_time": 3,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY", "SEMI-AUTO"]
},
{
"id": 76,
@@ -707,7 +737,7 @@
"rpm": 700,
"mag_size": 10,
"reload_time": 2,
"guntype": "RIFLE?"
"guntype": "RIFLE"
},
{
"id": 77,
@@ -717,7 +747,7 @@
"rpm": 1000,
"mag_size": 71,
"reload_time": 2.5,
"guntype": "UNKOWN"
"guntype": ["SMG", "PRIMARY", "SOVIET"]
},
{
"id": 78,
@@ -727,7 +757,7 @@
"rpm": 690,
"mag_size": 30,
"reload_time": 2.5,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY", "SOVIET"]
},
{
"id": 79,
@@ -737,7 +767,7 @@
"rpm": 800,
"mag_size": 64,
"reload_time": 4,
"guntype": "SMG"
"guntype": ["SMG"]
},
{
"id": 80,
@@ -747,7 +777,7 @@
"rpm": 800,
"mag_size": 60,
"reload_time": 4,
"guntype": "SMG"
"guntype": ["SMG"]
},
{
"id": 81,
@@ -757,7 +787,7 @@
"rpm": 800,
"mag_size": 50,
"reload_time": 2.5,
"guntype": "SMG"
"guntype": ["SMG", "PRIMARY"]
},
{
"id": 82,
@@ -767,7 +797,7 @@
"rpm": 400,
"mag_size": 12,
"reload_time": 2.6,
"guntype": "RIFLE"
"guntype": ["RIFLE"]
},
{
"id": 83,
@@ -777,7 +807,7 @@
"rpm": 150,
"mag_size": 8,
"reload_time": 2.2,
"guntype": "SHOTGUN"
"guntype": ["SHOTGUN", "PRIMARY"]
},
{
"id": 84,
@@ -787,7 +817,7 @@
"rpm": 200,
"mag_size": 1000000000000000000000000000000000000000000000000000000000000000,
"reload_time": 0,
"guntype": "SHOTGUN"
"guntype": ["SHOTGUN", "PRIMARY"]
},
{
"id": 85,
@@ -797,7 +827,7 @@
"rpm": 900,
"mag_size": 30,
"reload_time": 4,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
},
{
"id": 86,
@@ -807,6 +837,6 @@
"rpm": 9999,
"mag_size": 999,
"reload_time": 1,
"guntype": "RIFLE"
"guntype": ["RIFLE", "PRIMARY"]
}
]
@@ -4,25 +4,29 @@
"id": "damage-item-additive-elite-he-rounds",
"label": "Elite HE Rounds (+14 damage)",
"value": 14,
"type": "additive"
"type": "additive",
"operatives": ""
},
{
"id": "damage-item-additive-he-rounds",
"label": "HE Rounds (+8 damage)",
"value": 8,
"type": "additive"
"type": "additive",
"operatives": ""
},
{
"id": "damage-item-multiplicative-strength-mixture",
"label": "Strength Mixture (+20% damage)",
"value": 1.2,
"type": "multiplicative"
"type": "multiplicative",
"operatives": ""
},
{
"id": "damage-item-multiplicative-fortunos-necklace",
"label": "Fortunos Necklace (+15% damage)",
"value": 1.15,
"type": "multiplicative"
"type": "multiplicative",
"operatives": ""
},
{
"id": "multiple-buffs-bloxy-cola",
@@ -38,19 +42,22 @@
"value": 0,
"buffType": "multiplicative"
}
]
],
"operatives": ""
},
{
"id": "damage-item-multiplicative-enhancer",
"label": "Enhancer (+10% damage)",
"value": 1.1,
"type": "multiplicative"
"type": "multiplicative",
"operatives": ""
},
{
"id": "damage-item-multiplicative-teleport-device",
"label": "Teleport Device (+25% damage)",
"value": 1.25,
"type": "multiplicative"
"type": "multiplicative",
"operatives": ""
}
],
"operativePerks": [
@@ -58,25 +65,35 @@
"id": "damage-perk-multiplicative-fbi-badge",
"label": "FBI Badge (+10% Damage)",
"value": 1.1,
"type": "multiplicative"
"type": "multiplicative",
"operatives": "UIU"
},
{
"id": "damage-perk-multiplicative-anatomy-book",
"label": "Anatomy Book (+5% Damage)",
"value": 1.05,
"type": "multiplicative"
"type": "multiplicative",
"operatives": ""
},
{
"id": "damage-perk-multiplicative-silly-soldier",
"label": "Silly Soldier (+10% Damage)",
"value": 1.10,
"type": "multiplicative"
"type": "multiplicative",
"operatives": ""
},
{
"id": "damage-perk-multiplicative-precise-shots",
"label": "Precise Shots (+15% Damage)",
"value": 1.15,
"type": "multiplicative"
"buffs": [
{
"type": "damage",
"value": 1.15,
"buffType": "multiplicative-headshot"
}
],
"appliesTo": "",
"operatives": ""
},
{
"id": "damage-perk-multiplicative-goc-insignia",
@@ -92,10 +109,23 @@
"value": 0.85,
"buffType": "multiplicative"
}
]
],
"operatives": "GOC"
}
],
"abilityPerks": [
{
"id": "headshot-damage-buff",
"label": "[All Operatives] Headshot (+25% Damage)",
"buffs": [
{
"type": "damage",
"value": 1.25,
"buffType": "multiplicative-headshot-base"
}
],
"appliesTo": ""
},
{
"id": "multiple-buffs-firefight",
"label": "[All Operatives] Firefight (+35% Damage, +40% Reload Speed)",
@@ -110,17 +140,22 @@
"value": 0.6,
"buffType": "multiplicative"
}
]
],
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-ability-multiplicative-heath-spawn",
"label": "[All Operatives] Heath Spawn (+30% Damage)",
"value": 1.3,
"type": "multiplicative"
"type": "multiplicative",
"operatives": "",
"appliesTo": ""
},
{
"id": "multiple-buffs-warcry",
"label": "[All Operatives] War Cry(+25% Damage, +?% Reload Speed)",
"operatives": "",
"buffs": [
{
"type": "damage",
@@ -132,37 +167,125 @@
"value": 1,
"buffType": "multiplicative"
}
]
],
"appliesTo": ""
},
{
"id": "reload-buff-focus-fire",
"label": "[All Operatives] Focus Fire (+20% Reload Speed)",
"buffs": [
{
"type": "reloadTime",
"value": 0.8,
"buffType": "multiplicative"
}
],
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-ability-multiplicative-blackout",
"label": "[All Operatives] Blackout (+30% Damage)",
"value": 1.3,
"type": "multiplicative"
"type": "multiplicative",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-ability-demoman",
"label": "[All Operatives] Enemy hit by Demolitionist Explosive (+15% Damage)",
"value": 1.15,
"type": "multiplicative",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-ability-multiplicative-red-scan",
"label": "[All Operatives] Red Scan (+30% Damage)",
"value": 1.3,
"type": "multiplicative"
"type": "multiplicative",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-ability-multiplicative-red-scan",
"label": "[All Operatives] Green Scan (+50% Damage)",
"value": 1.5,
"type": "multiplicative"
"type": "multiplicative",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-ability-multiplicative-point-out",
"label": "[All Operatives] Point Out (+50% Damage)",
"value": 1.5,
"type": "multiplicative"
"type": "multiplicative",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-item-additive-5-uiu-elite",
"label": "[All Operatives] 5 UIU Elite nearby (+25 damage)",
"value": 25,
"type": "additive"
"type": "additive",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-item-additive-field-support",
"label": "[All Operatives] MTF Commander Field Support (+8 damage)",
"value": 8,
"type": "additive",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-ability-multiplicative-scan grenade",
"label": "[All Operatives] Scan Grenade (+15% Damage)",
"value": 1.15,
"type": "multiplicative",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-upgrade-multiplicative-upgraded-bullets",
"label": "[All Operatives] Experimental Bullets (+30% Damage)",
"value": 1.3,
"type": "multiplicative",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-item-additive-GOC",
"label": "[All Operatives] GOC Ally (+8 damage)",
"value": 8,
"type": "additive",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-item-additive-GOC-1",
"label": "[All Operatives] Weak Points (+8 damage)",
"value": 8,
"type": "additive",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-item-additive-GOC-3",
"label": "[All Operatives] GOC Ally: Kraken Buff (+3 damage)",
"value": 3,
"type": "additive",
"operatives": "",
"appliesTo": ""
},
{
"id": "damage-item-additive-uiu-1",
"label": "[All Operatives] UIU Upgraded Towers (+10% damage)",
"value": 1.1,
"type": "multiplicative",
"operatives": "",
"appliesTo": ""
}
]
}
}
File diff suppressed because it is too large Load Diff
+32 -14
View File
@@ -1,8 +1,28 @@
document.addEventListener('DOMContentLoaded', () => {
fetch('/api/guns')
fetch('/static/json/data.json') // Fetch the JSON file directly
.then(response => response.json())
.then(data => {
populateTable(data);
const updatedGuns = data.map(gun => {
const original_damage = gun['damage'];
const total_damage = original_damage * gun['damage_multiplier'];
const rps = gun['rpm'] / 60;
const dps = total_damage * rps;
const reload_time_min = gun['reload_time'] / 60;
const dpm = (gun['mag_size'] * total_damage) / (reload_time_min + (gun['mag_size'] / gun['rpm']));
const avg_dps = dpm / 60;
// Add the calculated stats to the gun object
return {
...gun,
total_damage: total_damage,
rps: rps,
dps: dps,
dpm: dpm,
avg_dps: avg_dps
};
});
populateTable(updatedGuns);
});
});
@@ -11,16 +31,14 @@ function populateTable(data) {
table.innerHTML = ''; // Clear existing table data
data.forEach(gun => {
const row = table.insertRow();
row.insertCell(0).innerText = gun.id;
row.insertCell(1).innerText = gun.name;
row.insertCell(2).innerText = gun.total_damage;
row.insertCell(3).innerText = gun.rpm;
row.insertCell(4).innerText = gun.mag_size;
row.insertCell(5).innerText = gun.reload_time;
row.insertCell(6).innerText = gun.guntype;
row.insertCell(7).innerText = gun.rps.toFixed(2);
row.insertCell(8).innerText = gun.dps.toFixed(2);
row.insertCell(9).innerText = gun.dpm.toFixed(2);
row.insertCell(10).innerText = gun.avg_dps.toFixed(2);
row.insertCell(0).innerText = gun.name;
row.insertCell(1).innerText = gun.total_damage.toFixed(2);
row.insertCell(2).innerText = gun.rpm;
row.insertCell(3).innerText = gun.mag_size;
row.insertCell(4).innerText = gun.reload_time;
row.insertCell(5).innerText = gun.rps.toFixed(2);
row.insertCell(6).innerText = gun.dps.toFixed(2);
row.insertCell(7).innerText = gun.dpm.toFixed(2);
row.insertCell(8).innerText = gun.avg_dps.toFixed(2);
});
}
}
+158 -1
View File
@@ -1,9 +1,34 @@
input[type="text"] {
width: 100%;
padding: 8px;
margin: 10px 0;
box-sizing: border-box;
font-size: 16px;
}
#modifiers-container {
display: flex;
justify-content: space-between; /* Distribute space between the items */
flex-wrap: wrap; /* Allow wrapping to avoid overflow */
}
/* Style for the modifiers section */
#modifiers {
display: flex; /* Use flexbox for alignment */
flex-direction: column; /* Stack items vertically */
width: 50%;
}
#abilities {
width: 42.5%; /* Adjust this value as needed */
}
body {
background-image: url("/static/img/trlbg1.jpg");
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
position: relative; /* This allows the z-index on children elements to work */
position: relative;
z-index: -1; /* Send the background behind the content */
font-family: Arial, sans-serif;
margin: 20px;
@@ -229,3 +254,135 @@ nav {
.button1 {
background-color: black;
}
/* Suggestion Form Enhancements */
main h1 {
font-size: 2.5em;
color: black;
text-align: center;
margin-bottom: 20px;
}
.suggestion-title {
font-size: 1.5em;
color: black;
text-align: center;
margin-bottom: 30px;
}
article label {
font-weight: bold;
font-size: 1.1em;
color: #333;
margin-bottom: 10px;
display: block;
}
input[type="text"], input[type="number"], textarea {
width: 95%;
padding: 12px;
font-size: 1em;
border: 1px solid #ccc;
border-radius: 8px;
margin-bottom: 20px;
background-color: #f9f9f9;
transition: border-color 0.3s, box-shadow 0.3s;
}
/* Focus effect to highlight the active input field */
input[type="text"]:focus, input[type="number"]:focus, textarea:focus {
border-color: black;
box-shadow: 0 0 5px darkred;
background-color: #fff;
outline: none;
}
textarea {
resize: none;
height: 150px;
}
/* Submit button improvements */
.button1 {
background-color: darkred;
color: white;
font-size: 1.2em;
padding: 12px 24px;
border: none;
border-radius: 8px;
cursor: pointer;
display: block;
margin: 0 auto;
transition: background-color 0.3s ease, transform 0.3s ease;
}
/* Button hover effect */
.button1:hover {
background-color: #45a049;
transform: scale(1.05);
}
/* Success message styling */
#successMessage {
font-size: 1.1em;
color: green;
text-align: center;
margin-top: 20px;
}
/* Adjustments for mobile responsiveness */
@media screen and (max-width: 600px) {
input[type="text"], input[type="number"], textarea {
width: 80%;
font-size: 0.95em;
}
.suggestion-title {
font-size: 1.2em;
}
#modifiers {
width: 100%; /* Adjust this percentage to control the width */
}
#abilities {
width: 100%;
}
/* Adjust spacing between different ability modifiers */
#abilities label {
display: block;
margin-bottom: 10px;
line-height: 1.2;
white-space: nowrap;
}
/* Optional: Adjust margin between checkbox and text */
#abilities input[type="checkbox"] {
margin-right: 5px;
}
}
/* Styling for horizontal table */
.weapon-stats-table {
width: 100%;
border-collapse: collapse;
margin: 10px 0;
}
.weapon-stats-table th, .weapon-stats-table td {
border: 1px solid #ddd;
padding: 8px;
text-align: center; /* Centers the text */
}
.weapon-stats-table th {
background-color: #f2f2f2;
color: black;
}
/* Horizontal styling specifically for the table */
.horizontal-table tr:first-child th {
text-align: center;
font-weight: bold;
}
+96
View File
@@ -0,0 +1,96 @@
const cooldownDuration = 10 * 360000;
const prohibitedWords = ['fuck', 'shit', 'asshole', 'bitch', 'bastard', 'damn', 'crap', 'dick', 'piss', 'cunt', 'motherfucker', 'douche',
'prick', 'whore', 'slut', 'fag', 'nigger', 'spic', 'retard', 'twat', 'bollocks', 'wanker', 'bugger', 'arse',
'shithead', 'dumbass', 'jackass', 'dipshit', 'dildo', 'knobhead', 'ballsack', 'buttfucker', 'cum', 'jizz',
'cocksucker', 'fucker', 'skank', 'pussy', 'tits', 'clit', 'schlong', 'dickhead', 'goddamn', 'hell', 'bitchass',
'fuckface', 'shitfaced', 'asshat', 'bint', 'chink', 'gook', 'jap', 'negro', 'dyke', 'queer', 'tranny', 'tosser',
'spaz', 'mong', 'coon', 'beaner', 'cracker', 'wetback', 'homo', 'fudgepacker', 'tard', 'cocks', 'bollocks',
'numbnuts', 'knob', 'muppet', 'git', 'shag', 'minge', 'git', 'bugger', 'tosser', 'nonce', 'plonker', 'pillock']
; // Example word filtering
// Function to get the last submission time from localStorage
function getLastSubmissionTime() {
const storedTime = localStorage.getItem('lastSubmissionTime');
return storedTime ? parseInt(storedTime, 10) : 0;
}
// Function to save the last submission time to localStorage
function setLastSubmissionTime(time) {
localStorage.setItem('lastSubmissionTime', time.toString());
}
function sendMessage() {
// Get the current time
const currentTime = Date.now();
// Retrieve the last submission time from localStorage
const lastSubmissionTime = getLastSubmissionTime();
// Cooldown logic to prevent spamming
if (currentTime - lastSubmissionTime < cooldownDuration) {
alert(`Please wait for ${cooldownDuration / 1000} seconds between submissions.`);
return;
}
// Get the values from the input fields
const pseudoname = document.getElementById("name").value || "Anonymous";
const rating = parseInt(document.getElementById("rate").value, 10);
const comment = document.getElementById("text").value.trim();
// Validation: Rating should be between 1 and 10
if (isNaN(rating) || rating < 1 || rating > 10) {
alert("Rating must be a number between 1 and 10.");
return;
}
// Validation: Comment length (min 5, max 500) and simple prohibited word check
if (comment.length < 5 || comment.length > 500) {
alert("Comment must be between 5 and 500 characters.");
return;
}
// Check for prohibited words (basic check)
for (const word of prohibitedWords) {
if (comment.toLowerCase().includes(word)) {
alert("Your comment contains inappropriate content.");
return;
}
}
// If all checks pass, send the message to the Discord webhook
const request = new XMLHttpRequest();
request.open("POST", "https://discord.com/api/webhooks/1284936894890901649/Zi-2ZV12L1v1OSBoM-DluE1V1LECXilrNNRZYJcxelnwO7rGgXNH47dxvfFEOK7Fe9_J");
request.setRequestHeader('Content-type', 'application/json');
// Create the content to send to the Discord webhook
const content = `**Rating:** ${rating}\n**Comment:**\n${comment}`;
// Debugging information
console.log('Sending message with content:', content);
// Send the message payload to the Discord webhook
const params = {
username: pseudoname, // Pseudoname will appear as the username
content: content // The combined content (pseudoname, rating, and comment)
};
request.send(JSON.stringify(params));
// Update the last submission time to the current time
setLastSubmissionTime(currentTime);
// Optionally, you can reset the form after sending
document.getElementById("name").value = "";
document.getElementById("rate").value = "";
document.getElementById("text").value = "";
// Display the success message
const successMessage = document.getElementById("successMessage");
successMessage.textContent = "Successfully sent the message!";
successMessage.style.display = "block"; // Ensure the message is visible
// Optionally hide the message after a few seconds
setTimeout(() => {
successMessage.style.display = "none"; // Hide message after 3 seconds
}, 3000);
}