WELCOME TO INFOCHEATS.NET

INFOCHEATS is a community-driven platform focused on free game cheats, cheat development, and verified commercial software for a wide range of popular games. We provide a large collection of free cheats shared by the community. All public releases are checked for malicious code to reduce the risk of viruses, malware, or unwanted software before users interact with them.

Alongside free content, INFOCHEATS hosts an active marketplace with many independent sellers offering commercial cheats. Each product is discussed openly, with user feedback, reviews, and real usage experience available to help you make informed decisions before purchasing.

Whether you are looking for free cheats, exploring paid solutions, comparing sellers, or studying how cheats are developed and tested, INFOCHEATS brings everything together in one place — transparently and community-driven.

Source Warface — Dual-Wield Sub-Weapon Pointer & Inventory Offsets

byte_corvus

Newbie
Newbie
Newbie
Newbie
Status
Offline
Joined
Mar 3, 2026
Messages
421
Reaction score
7
Digging into dual-wielding logic in Warface? If you've been struggling to pull the sub-weapon pointer (L hand) correctly, you need to navigate the CInventory and CWeaponSettings classes properly. This isn't just about simple offsets; it's about how CryEngine handles the inventory container and weapon extensions.

Core Classes and Offsets
To get started, you'll need the correct offsets for CActor and its inventory. In my experience, most pastes fail because they ignore the SInventoryStats structure logic.

Code:
class CActor : public IActor, CPlayer, IGameObjectExtension
{
    CInventory* m_pInventory; // 0x0038
};

Code:
using EntityId = uint32;

struct SInventoryStats {
    TInventoryVector slots;    // 0x0000
    char pad_0018[24];         // 0x0018
    TAmmoInfoMap ammoInfo;     // 0x0030
    char pad_0040[56];         // 0x0040
    TAmmoInfoIt ammoIterator;  // 0x0078
    char pad_0080[8];          // 0x0080
    EntityId currentItemId;    // 0x0088
    EntityId holsteredItemId;  // 0x008C
    EntityId lastItemId;       // 0x0090
};

class CInventory : public IInventory, IGameObjectExtension {
    // m_stats offset: 0x0028
    // AOB: 85 D2 ? ? 48 8B 41 ? 48 8B 49 ? 48 2B C8 4C 63 C2 48 C1 F9 ?
    SInventoryStats m_stats;
};

The Logic Chain
To reach the sub-weapon name, you have to traverse from the CItem through the weapon extension and finally into the base settings.

  1. Identify the current item ID from the inventory stats (0x88).
  2. Get the CItem pointer from the item system.
  3. Access m_weaponExt at 0x38.
  4. Pull CWeaponSettings from the extension at 0x48.
  5. Finally, find m_subWeapon (CryStringT) at 0xA18.

Implementation Example
Here is how you actually verify if dual-wield mode is active and grab that secondary pointer:

Code:
if (auto pInventory = pClientActor->m_pInventory) {
    if (auto pCurrItem = pItemSystem->GetItem(pInventory->GetCurrentItemId())) {
        // pCurrItem - ptr to current weapon (R hand)
        auto pWeaponExtR = pCurrItem->m_weaponExt;
        if (!pWeaponExtR || !pWeaponExtR->m_settings) return;

        auto subWeapon = pWeaponExtR->m_settings->m_subWeapon;

        // Check if dual-wield mode is active
        if (subWeapon.empty()) return;

        if (auto pSubItem = pInventory->GetItemByName(subWeapon.c_str())) {
            // pSubItem - now you have the ptr to the L hand weapon
        }
    }
}

Keep in mind that GetItemByName should be checking against the item class name, not just the string, to avoid mismatches. If you're building an internal, this is the cleanest way to handle dual-wield visuals or state checks without guessing.

Anyone else found a faster way to iterate the inventory slots for specific attachments?
 
Top