diff --git a/vMenu/data/ValidWeapon.cs b/vMenu/data/ValidWeapon.cs index d7ac7202..7f892a21 100644 --- a/vMenu/data/ValidWeapon.cs +++ b/vMenu/data/ValidWeapon.cs @@ -27,7 +27,6 @@ public struct ValidWeapon public float Damage { get { Game.WeaponHudStats stats = new Game.WeaponHudStats(); Game.GetWeaponHudStats(Hash, ref stats); return stats.hudDamage; } } public float Range { get { Game.WeaponHudStats stats = new Game.WeaponHudStats(); Game.GetWeaponHudStats(Hash, ref stats); return stats.hudRange; } } public float Speed { get { Game.WeaponHudStats stats = new Game.WeaponHudStats(); Game.GetWeaponHudStats(Hash, ref stats); return stats.hudSpeed; } } - } public static class ValidWeapons @@ -47,8 +46,42 @@ public static List WeaponList } } + + private static Dictionary _components = new Dictionary(); + public static Dictionary GetWeaponComponents() + { + if (_components.Count == 0) + { + string addons = LoadResourceFile(GetCurrentResourceName(), "config/addons.json") ?? "{}"; + _components = weaponComponentNames; + try + { + var addonsFile = JsonConvert.DeserializeObject>>(addons); + if (addonsFile.ContainsKey("weapon_components")) + { + foreach (var item in addonsFile["weapon_components"]) + { + string name = item; + string displayName = GetLabelText(name) ?? name; + int unused = 0; + if (GetWeaponComponentHudStats((uint)GetHashKey(name), ref unused)) + { + _components.Add(name, displayName); + } + } + } + } + catch + { + Log("[WARNING] The addons.json contains invalid JSON."); + } + } + return _components; + } + private static void CreateWeaponsList() { + _weaponsList.Clear(); foreach (var weapon in weaponNames) { string realName = weapon.Key; @@ -57,13 +90,13 @@ private static void CreateWeaponsList() { uint hash = (uint)GetHashKey(weapon.Key); Dictionary componentHashes = new Dictionary(); - foreach (var comp in weaponComponentNames.Keys) + foreach (var comp in GetWeaponComponents().Keys) { if (DoesWeaponTakeWeaponComponent(hash, (uint)GetHashKey(comp))) { - if (!componentHashes.ContainsKey(weaponComponentNames[comp])) + if (!componentHashes.ContainsKey(GetWeaponComponents()[comp])) { - componentHashes.Add(weaponComponentNames[comp], (uint)GetHashKey(comp)); + componentHashes.Add(GetWeaponComponents()[comp], (uint)GetHashKey(comp)); } } } @@ -374,7 +407,7 @@ private static void CreateWeaponsList() #endregion #region weapon component names - public static readonly Dictionary weaponComponentNames = new Dictionary() + private static readonly Dictionary weaponComponentNames = new Dictionary() { ["COMPONENT_ADVANCEDRIFLE_CLIP_01"] = GetLabelText("WCT_CLIP1"), ["COMPONENT_ADVANCEDRIFLE_CLIP_02"] = GetLabelText("WCT_CLIP2"), diff --git a/vMenuServer/config/addons.json b/vMenuServer/config/addons.json index 58c0c138..b2f1a750 100644 --- a/vMenuServer/config/addons.json +++ b/vMenuServer/config/addons.json @@ -10,5 +10,9 @@ "weapons": [ "addonweaponname1", "addonweaponname2" + ], + "weapon_components": [ + "weapon_component_name_1", + "weapon_component_name_2" ] }