Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 107 additions & 2 deletions managed/src/SwiftlyS2.Core/Modules/Helpers/Helpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,94 @@ namespace SwiftlyS2.Core.Services;

internal class HelpersService : IHelpers
{
public static readonly Dictionary<string, int> 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);
Expand All @@ -21,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;
}

}
98 changes: 97 additions & 1 deletion managed/src/SwiftlyS2.Shared/Modules/Helpers/IHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
/// <summary>
Expand All @@ -19,5 +102,18 @@ public interface IHelpers
/// <returns>The weapon vdata.</returns>
public CCSWeaponBaseVData? GetWeaponCSDataFromKey(int itemDefinitionIndex);

/// <summary>
/// Get weapon classname from item definition index.
/// </summary>
/// <param name="itemDefinitionIndex">The item definition index of the weapon.</param>
/// <returns>The weapon classname (e.g., "weapon_awp") or null if not found.</returns>
public string? GetClassnameByDefinitionIndex(int itemDefinitionIndex);

/// <summary>
/// Get item definition index from weapon classname.
/// </summary>
/// <param name="classname">The weapon classname (e.g., "weapon_awp").</param>
/// <returns>The item definition index or null if not found.</returns>
public int? GetDefinitionIndexByClassname(string classname);

}
}
Loading