From e0b4c48a5ab44d49a5b3dc577eacea1fac8cf62a Mon Sep 17 00:00:00 2001 From: T3Marius <168598779+T3Marius@users.noreply.github.com> Date: Sun, 9 Nov 2025 14:23:49 +0200 Subject: [PATCH 1/2] Add ItemDefinitionIndex enum and weapon mapping dictionary to Helpers --- .../SwiftlyS2.Core/Modules/Helpers/Helpers.cs | 88 ++++++++++++++++++- .../Modules/Helpers/IHelpers.cs | 85 +++++++++++++++++- 2 files changed, 170 insertions(+), 3 deletions(-) diff --git a/managed/src/SwiftlyS2.Core/Modules/Helpers/Helpers.cs b/managed/src/SwiftlyS2.Core/Modules/Helpers/Helpers.cs index 1174c86b0..68a8fadd1 100644 --- a/managed/src/SwiftlyS2.Core/Modules/Helpers/Helpers.cs +++ b/managed/src/SwiftlyS2.Core/Modules/Helpers/Helpers.cs @@ -7,10 +7,94 @@ namespace SwiftlyS2.Core.Services; internal class HelpersService : IHelpers { + private static readonly Dictionary WeaponItemDefinitionIndices = new() + { + // Pistols + { "weapon_deagle", 1 }, + { "weapon_elite", 2 }, + { "weapon_fiveseven", 3 }, + { "weapon_glock", 4 }, + { "weapon_tec9", 30 }, + { "weapon_hkp2000", 32 }, + { "weapon_p250", 36 }, + { "weapon_usp_silencer", 61 }, + { "weapon_cz75a", 63 }, + { "weapon_revolver", 64 }, + + // Rifles + { "weapon_ak47", 7 }, + { "weapon_aug", 8 }, + { "weapon_awp", 9 }, + { "weapon_famas", 10 }, + { "weapon_g3sg1", 11 }, + { "weapon_galilar", 13 }, + { "weapon_m249", 14 }, + { "weapon_m4a1", 16 }, + { "weapon_mac10", 17 }, + { "weapon_p90", 19 }, + { "weapon_mp5sd", 23 }, + { "weapon_ump45", 24 }, + { "weapon_xm1014", 25 }, + { "weapon_bizon", 26 }, + { "weapon_mag7", 27 }, + { "weapon_negev", 28 }, + { "weapon_sawedoff", 29 }, + { "weapon_mp7", 33 }, + { "weapon_mp9", 34 }, + { "weapon_nova", 35 }, + { "weapon_scar20", 38 }, + { "weapon_sg556", 39 }, + { "weapon_ssg08", 40 }, + { "weapon_m4a1_silencer", 60 }, + + // Grenades + { "weapon_flashbang", 43 }, + { "weapon_hegrenade", 44 }, + { "weapon_smokegrenade", 45 }, + { "weapon_molotov", 46 }, + { "weapon_decoy", 47 }, + { "weapon_incgrenade", 48 }, + + // Knives and Equipment + { "weapon_taser", 31 }, + { "weapon_knifegg", 41 }, + { "weapon_knife", 42 }, + { "weapon_c4", 49 }, + { "weapon_knife_t", 59 }, + { "weapon_bayonet", 500 }, + { "weapon_knife_css", 503 }, + { "weapon_knife_flip", 505 }, + { "weapon_knife_gut", 506 }, + { "weapon_knife_karambit", 507 }, + { "weapon_knife_m9_bayonet", 508 }, + { "weapon_knife_tactical", 509 }, + { "weapon_knife_falchion", 512 }, + { "weapon_knife_survival_bowie", 514 }, + { "weapon_knife_butterfly", 515 }, + { "weapon_knife_push", 516 }, + { "weapon_knife_cord", 517 }, + { "weapon_knife_canis", 518 }, + { "weapon_knife_ursus", 519 }, + { "weapon_knife_gypsy_jackknife", 520 }, + { "weapon_knife_outdoor", 521 }, + { "weapon_knife_stiletto", 522 }, + { "weapon_knife_widowmaker", 523 }, + { "weapon_knife_skeleton", 525 }, + { "weapon_knife_kukri", 526 }, + + // Utility + { "item_kevlar", 50 }, + { "item_assaultsuit", 51 }, + { "item_heavyassaultsuit", 52 }, + { "item_defuser", 55 }, + { "ammo_50ae", 0 } + }; + public CCSWeaponBaseVData? GetWeaponCSDataFromKey(int unknown, string key) { nint weaponDataPtr = GameFunctions.GetWeaponCSDataFromKey(unknown, key); - if (weaponDataPtr == 0) { + if (weaponDataPtr == 0) + { return null; } return new CCSWeaponBaseVDataImpl(weaponDataPtr); @@ -21,4 +105,4 @@ internal class HelpersService : IHelpers return GetWeaponCSDataFromKey(-1, itemDefinitionIndex.ToString()); } -} \ No newline at end of file +} diff --git a/managed/src/SwiftlyS2.Shared/Modules/Helpers/IHelpers.cs b/managed/src/SwiftlyS2.Shared/Modules/Helpers/IHelpers.cs index 9f1e39d64..ddd0c8309 100644 --- a/managed/src/SwiftlyS2.Shared/Modules/Helpers/IHelpers.cs +++ b/managed/src/SwiftlyS2.Shared/Modules/Helpers/IHelpers.cs @@ -2,6 +2,89 @@ namespace SwiftlyS2.Shared.Helpers; +public enum ItemDefinitionIndex +{ + // Pistols + Deagle = 1, + Elite = 2, + FiveSeven = 3, + Glock = 4, + Tec9 = 30, + HkP2000 = 32, + P250 = 36, + UspSilencer = 61, + Cz75a = 63, + Revolver = 64, + + // Rifles + Ak47 = 7, + Aug = 8, + Awp = 9, + Famas = 10, + G3sg1 = 11, + Galilar = 13, + M249 = 14, + M4a1 = 16, + Mac10 = 17, + P90 = 19, + Mp5sd = 23, + Ump45 = 24, + Xm1014 = 25, + Bizon = 26, + Mag7 = 27, + Negev = 28, + Sawedoff = 29, + Mp7 = 33, + Mp9 = 34, + Nova = 35, + Scar20 = 38, + Sg556 = 39, + Ssg08 = 40, + M4a1Silencer = 60, + + // Grenades + Flashbang = 43, + Hegrenade = 44, + Smokegrenade = 45, + Molotov = 46, + Decoy = 47, + Incgrenade = 48, + + // Knives and Equipment + Taser = 31, + Knifegg = 41, + Knife = 42, + C4 = 49, + KnifeT = 59, + Bayonet = 500, + KnifeCss = 503, + KnifeFlip = 505, + KnifeGut = 506, + KnifeKarambit = 507, + KnifeM9Bayonet = 508, + KnifeTactical = 509, + KnifeFalchion = 512, + KnifeSurvivalBowie = 514, + KnifeButterfly = 515, + KnifePush = 516, + KnifeCord = 517, + KnifeCanis = 518, + KnifeUrsus = 519, + KnifeGypsyJackknife = 520, + KnifeOutdoor = 521, + KnifeStiletto = 522, + KnifeWidowmaker = 523, + KnifeSkeleton = 525, + KnifeKukri = 526, + + // Utility + ItemKevlar = 50, + ItemAssaultsuit = 51, + ItemHeavyassaultsuit = 52, + ItemDefuser = 55, + Ammo50ae = 0 +} + public interface IHelpers { /// @@ -20,4 +103,4 @@ public interface IHelpers public CCSWeaponBaseVData? GetWeaponCSDataFromKey(int itemDefinitionIndex); -} \ No newline at end of file +} From a5902bf60a53d04212dc2ae8dfc00ddb824b31bd Mon Sep 17 00:00:00 2001 From: T3Marius <168598779+T3Marius@users.noreply.github.com> Date: Sun, 9 Nov 2025 14:32:23 +0200 Subject: [PATCH 2/2] Add GetClassnameByDefinitionIndex and GetDefinitionIndexByClassname helper methods --- .../SwiftlyS2.Core/Modules/Helpers/Helpers.cs | 23 ++++++++++++++++++- .../Modules/Helpers/IHelpers.cs | 13 +++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/managed/src/SwiftlyS2.Core/Modules/Helpers/Helpers.cs b/managed/src/SwiftlyS2.Core/Modules/Helpers/Helpers.cs index 68a8fadd1..445486b74 100644 --- a/managed/src/SwiftlyS2.Core/Modules/Helpers/Helpers.cs +++ b/managed/src/SwiftlyS2.Core/Modules/Helpers/Helpers.cs @@ -7,7 +7,7 @@ namespace SwiftlyS2.Core.Services; internal class HelpersService : IHelpers { - private static readonly Dictionary WeaponItemDefinitionIndices = new() + public static readonly Dictionary WeaponItemDefinitionIndices = new() { // Pistols { "weapon_deagle", 1 }, @@ -105,4 +105,25 @@ internal class HelpersService : IHelpers return GetWeaponCSDataFromKey(-1, itemDefinitionIndex.ToString()); } + public string? GetClassnameByDefinitionIndex(int itemDefinitionIndex) + { + foreach (var kvp in WeaponItemDefinitionIndices) + { + if (kvp.Value == itemDefinitionIndex) + { + return kvp.Key; + } + } + return null; + } + + public int? GetDefinitionIndexByClassname(string classname) + { + if (WeaponItemDefinitionIndices.TryGetValue(classname, out int index)) + { + return index; + } + return null; + } + } diff --git a/managed/src/SwiftlyS2.Shared/Modules/Helpers/IHelpers.cs b/managed/src/SwiftlyS2.Shared/Modules/Helpers/IHelpers.cs index ddd0c8309..90dff8cfe 100644 --- a/managed/src/SwiftlyS2.Shared/Modules/Helpers/IHelpers.cs +++ b/managed/src/SwiftlyS2.Shared/Modules/Helpers/IHelpers.cs @@ -102,5 +102,18 @@ public interface IHelpers /// The weapon vdata. public CCSWeaponBaseVData? GetWeaponCSDataFromKey(int itemDefinitionIndex); + /// + /// Get weapon classname from item definition index. + /// + /// The item definition index of the weapon. + /// The weapon classname (e.g., "weapon_awp") or null if not found. + public string? GetClassnameByDefinitionIndex(int itemDefinitionIndex); + + /// + /// Get item definition index from weapon classname. + /// + /// The weapon classname (e.g., "weapon_awp"). + /// The item definition index or null if not found. + public int? GetDefinitionIndexByClassname(string classname); }