Welcome to Ramleague,

Ramleague - the best site for pinoy chat, games chat and mobiles chat,

Sign Up
  1. Hello guest Guest , Are you tired from Ads? to remove some ads you need to register and be active. :D

[Source Code] CObjectMgr

Discussion in 'CrossFire Source Code & Tutorials' started by ACEOFEAGLE, Mar 10, 2020.

  1. ACEOFEAGLE RAML Expert
    Contributor Member Lvl2

    Joined:
    Dec 25, 2016
    Gender:
    Female
    Posts:
    1,310
    Reputation:
    743
    Thanks:
    994
    Bored

    CObjectMgr

    Code:
    //CObjectMgr.h
    
    /*!
    Different object types.  Some can only be created on the client.
    */
    enum
    {
    //! Invisible object.  Note, client's aren't told about
        OT_NORMAL =           0,
    
    //! Model object.
        OT_MODEL =            1,
    
    //! WorldModel.
        OT_WORLDMODEL =       2,
    
    //! Sprite.
        OT_SPRITE =           3,
    
    //! Dynamic light.
        OT_LIGHT =            4,
    
    //! Camera.
        OT_CAMERA =           5,
    
    //! Particle system.
        OT_PARTICLESYSTEM =   6,
    
    //! Poly grid.
        OT_POLYGRID =         7,
    
    //! Line system.
        OT_LINESYSTEM =       8,
    
    //! Container.
        OT_CONTAINER =        9,
    
    //! Canvas (game code renders it).
        OT_CANVAS =           10,
    
    //! Volume effect.
        OT_VOLUMEEFFECT =     11,
    
    /*!
    NOTE: the high bit of the object type is reserved
    for the engine's networking.
    ALSO NOTE: The networking assumes there are < 16 object types!
    */
        NUM_OBJECTTYPES =     12,
    };
    
    
    class IBase
    {
    public:
        const char*        ClassName(void);
    };
    
    class WorldTreeHelper : public IBase
    {
    public:
    
    };
    
    class Link : public IBase
    {
    public:
        Link* m_pPrev, *m_pNext;
        void* m_pData;
    };
    
    class List
    {
    public:
        unsigned long m_nElements;
        Link m_Head;
    };
    
    class ObjectMgr : public WorldTreeHelper
    {
    public:
        char pad_0000[612];
        List m_ObjectLists[NUM_OBJECTTYPES];
    
        static CharacFX*               GetCharacFX(int id);
        static CDroppedWeaponFX*       GetCDroppedWeaponFX(int id);
        static CDroppedWeaponFX_BR*    GetCDroppedWeaponFX_BR(int id);
        static CAIClient*              GetCAIClient(int id);
        static CThrowingWeaponFX*      GetCThrowingWeaponFX(int id);
    };
    Code:
    //CObjectMgr.cpp
    
    CharacFX*                ObjectMgr::GetCharacFX(int id)
    {
        if (!I::g_pObjectMgr)
            return NULL;
    
        Link* pListHead = &I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_Head;
    
        int x = -1;
        for (auto pCur = pListHead->m_pNext; pCur != pListHead; pCur = pCur->m_pNext)
        {
            x += 1;
            if (pCur == NULL)
                break;
    
            auto pModelInst = (ModelInstance*)pCur->m_pData;
            if (pModelInst->IsModel()) {
                if (pModelInst->GetObjectType()) {
                    if (pModelInst->GetObjectType()->IsPlayer())
                        return pModelInst->GetObjectType()->GetCharacFX();
                }
            }
    
            if (x >= I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_nElements)
                break;
        }
    
        return NULL;
    }
    
    CDroppedWeaponFX*        ObjectMgr::GetCDroppedWeaponFX(int id)
    {
        if (!I::g_pObjectMgr)
            return NULL;
    
        Link* pListHead = &I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_Head;
    
        int x = -1;
        for (auto pCur = pListHead->m_pNext; pCur != pListHead; pCur = pCur->m_pNext)
        {
            x += 1;
            if (pCur == NULL)
                break;
    
            auto pModelInst = (ModelInstance*)pCur->m_pData;
            if (pModelInst->IsModel()) {
                if (pModelInst->GetObjectType()) {
                    if (pModelInst->GetObjectType()->IsWeapon())
                        return pModelInst->GetObjectType()->GetCWeaponDroppedFX();
                }
            }
    
            if (x >= I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_nElements)
                break;
        }
    
        return NULL;
    }
    
    CDroppedWeaponFX_BR*    ObjectMgr::GetCDroppedWeaponFX_BR(int id)
    {
        if (!I::g_pObjectMgr)
            return NULL;
    
        Link* pListHead = &I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_Head;
    
        int x = -1;
        for (auto pCur = pListHead->m_pNext; pCur != pListHead; pCur = pCur->m_pNext)
        {
            x += 1;
            if (pCur == NULL)
                break;
    
            auto pModelInst = (ModelInstance*)pCur->m_pData;
            if (pModelInst->IsModel()) {
                if (pModelInst->GetObjectType()) {
                    if (pModelInst->GetObjectType()->IsRifleBR())
                        return pModelInst->GetObjectType()->GetCWeaponDroppedFX_BR();
                }
            }
    
            if (x >= I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_nElements)
                break;
        }
    
        return NULL;
    }
    
    CAIClient*                ObjectMgr::GetCAIClient(int id)
    {
        if (!I::g_pObjectMgr)
            return NULL;
    
        Link* pListHead = &I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_Head;
    
        int x = -1;
        for (auto pCur = pListHead->m_pNext; pCur != pListHead; pCur = pCur->m_pNext)
        {
            x += 1;
            if (pCur == NULL)
                break;
    
            auto pModelInst = (ModelInstance*)pCur->m_pData;
            if (pModelInst->IsModel()) {
                if (pModelInst->GetObjectType()) {
                    if (pModelInst->GetObjectType()->IsAIZombie())
                        return pModelInst->GetObjectType()->GetAIClient();
                }
            }
    
            if (x >= I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_nElements)
                break;
        }
    
        return NULL;
    }
    
    CThrowingWeaponFX*        ObjectMgr::GetCThrowingWeaponFX(int id)
    {
        if (!I::g_pObjectMgr)
            return NULL;
    
        Link* pListHead = &I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_Head;
    
        int x = -1;
        for (auto pCur = pListHead->m_pNext; pCur != pListHead; pCur = pCur->m_pNext)
        {
            x += 1;
            if (pCur == NULL)
                break;
    
            auto pModelInst = (ModelInstance*)pCur->m_pData;
            if (pModelInst->IsModel()) {
                if (pModelInst->GetObjectType()) {
                    if (pModelInst->GetObjectType()->IsGrenade())
                        return pModelInst->GetObjectType()->GetCThrowingWeaponFX();
                }
            }
    
            if (x >= I::g_pObjectMgr->m_ObjectLists[OT_MODEL].m_nElements)
                break;
        }
    
        return NULL;
    }
    Code:
    //ModelInstance.h
    
    class LTObject
    {
    public:
    };
    
    class ModelInstance : public LTObject
    {
    public:
        bool                IsVisible_CastRay();
        bool __cdecl        IsVisible(bool useVT = true);
        LTRectCF            GetBox(bool useVT = true);
        D3DXVECTOR3            GetEyeLevel();
        unsigned int        UnknownFn();
        void                SetCurrAnim(unsigned __int8 TrackerID, unsigned int AnimID);
        void                SetAnimRate(unsigned __int8 TrackerID, float fRate);
        float                GetAnimRate(unsigned __int8 TrackerID);
        void                SetPosition(D3DXVECTOR3 NewPosition);
        __int32                GetNumNodes();
        void                SetObjectFlags(const ObjFlagType flagType, uint32 dwFlags, uint32 dwMask);
        void                SetRespawnInvulnerability();
        void                SetObjectEnableRefraction(char a2);
    
        CObjectType*        GetObjectType();
        Outline&            GlowOutline(); //ESP Glow
        bool                IsGlowEnabled();
        BYTE&                GlowStatus();
        void                TurnOffGlow();
        Model*                GetModel();
        CAnimation*            GetAnimation();
      
        D3DXVECTOR3            GetPosition(bool useVT = true);
        D3DXVECTOR3&        GetDimension();
        CObjectMgr*            GetObjectMgr();
      
        BYTE                ObjectType() const;
        // Is this object derived from Model?
        bool                IsModel() const;
        // Is this object derived from WorldModel?
        bool                HasWorldModel() const;
        D3DXVECTOR3            GetBoxMin();
        D3DXVECTOR3            GetBoxMax();
    
    };
    Code:
    //ModelInstance.cpp
    
    Outline&            ModelInstance::GlowOutline() //ESP Glow
    {
        return *(Outline*)((uintptr_t)this + NetVar::DT_ModelInstance::m_GlowOutline);
    }
    
    bool                ModelInstance::IsGlowEnabled()
    {
        if (!this)
            return false;
        if ((DWORD)this < 0x400000)
            return false;
        if (NetVar::DT_ModelInstance::m_GlowOutline == NULL)
            return false;
        return this->GlowStatus() == 1;
    }
    
    BYTE&                ModelInstance::GlowStatus()
    {
        return *(BYTE*)((uintptr_t)this + NetVar::DT_ModelInstance::m_GlowOutline);
    }
    
    void                ModelInstance::TurnOffGlow()
    {
        if (!this)
            return;
        if ((DWORD)this < 0x400000)
            return;
        /*if (this->GlowOutline()[0] == 1)
            this->GlowOutline()[0] = 0;*/
        if (this->IsGlowEnabled())
            this->GlowStatus() = 0;
    }
    
    CObjectMgr*            ModelInstance::GetObjectMgr()
    {
        if (!this)
            return NULL;
        if ((DWORD)this < 0x400000)
            return NULL;
        return *(CObjectMgr**)((uintptr_t)this + 0x0078); //0x0074
    }
    
    BYTE                 ModelInstance::ObjectType() const
    {
        if (!this)
            return -1;
        return *(BYTE*)((uintptr_t)this + 0x00B0);
    }
    
    bool                 ModelInstance::IsModel() const
    {
        if (!this)
            return false;
        return this->ObjectType() == OT_MODEL;
    }
    
    bool                 ModelInstance::HasWorldModel() const
    {
        if (!this)
            return false;
        return this->ObjectType() == OT_WORLDMODEL || this->ObjectType() == OT_CONTAINER;
    }
    
    CObjectType*        ModelInstance::GetObjectType()
    {
        if (!this) return NULL;
        return *reinterpret_cast<CObjectType**>((uintptr_t)this + 0x00B4); //0x00B4
       
    }
    
    D3DXVECTOR3            ModelInstance::GetBoxMin()
    {
        if (!this)
            return D3DXVECTOR3(0, 0, 0);
        return *(D3DXVECTOR3*)((uintptr_t)this + 0x0004);
    }
    
    D3DXVECTOR3            ModelInstance::GetBoxMax()
    {
        if (!this)
            return D3DXVECTOR3(0, 0, 0);
        return *(D3DXVECTOR3*)((uintptr_t)this + 0x0010);
    }
    
    Code:
    //CObjectType.h
    
    enum SFXMsgId
    {
        SFX_CHARACTER_ID = 1,
        SFX_WEAPON_ID = 3,
        SFX_EXPLOSION_ID = 4,
        SFX_WEAPON_BR_ID = 33,
        SFX_NANO_ID = 8,
        SFX_AI_ID = 10,
        SFX_MZGADGET_ID = 23,
        CDistributionBox = 7,
    
        SFX_TRIGGER_ID = 9, //CTriggerFX
        CIndoorVolumeFX = 0,
        CDamageSiteFX = 11 //CAmmoSupplySiteFX //CSupplyBox,
    
    };
    
    Class CObjectType
    {
    public:
        __int32                    SFX_ID();
        CAIClient*                GetAIClient();
        CThrowingWeaponFX*        GetCThrowingWeaponFX();
        CDroppedWeaponFX*        GetCWeaponDroppedFX();
        CDroppedWeaponFX_BR*    GetCWeaponDroppedFX_BR();
        CharacFX*                GetCharacFX();
        __int32                    GetHeadIndex();
        __int32                    GetWeaponID();
        CWeaponMgr*                GetWeapon();
        D3DXVECTOR3                GetBonePosition(UINT Bone);
        D3DXVECTOR3                GetHeadPosition();
        char*                    GetName();
        std::string                GetFXName();
    
    #pragma region FILTER
        bool IsWeapon()
        {
            if (!this) return false;
            if ((DWORD)this < 0x400000) return false;
            return (
                (this->SFX_ID() == SFXMsgId::SFX_WEAPON_ID) ||
                (this->SFX_ID() == SFXMsgId::SFX_EXPLOSION_ID) ||
                (this->SFX_ID() == SFXMsgId::SFX_MZGADGET_ID) ||
                (this->SFX_ID() == SFXMsgId::SFX_WEAPON_BR_ID));
        }
        bool IsPlayer()
        {
            if (!this) return false;
            if ((DWORD)this < 0x400000) return false;
            return ((this->SFX_ID() == SFXMsgId::SFX_CHARACTER_ID));
        }
        bool IsRifle()
        {
            if (!this) return false;
            if ((DWORD)this < 0x400000) return false;
            return ((this->SFX_ID() == SFXMsgId::SFX_WEAPON_ID));
        }
        bool IsGrenade()
        {
            if (!this) return false;
            if ((DWORD)this < 0x400000) return false;
            return ((this->SFX_ID() == SFXMsgId::SFX_EXPLOSION_ID));
        }
        bool IsRifleBR()
        {
            if (!this) return false;
            if ((DWORD)this < 0x400000) return false;
            return ((this->SFX_ID() == SFXMsgId::SFX_WEAPON_BR_ID));
        }
        bool IsAIZombie()
        {
            if (!this) return false;
            if ((DWORD)this < 0x400000) return false;
            return ((this->SFX_ID() == SFXMsgId::SFX_AI_ID));
        }
    #pragma endregion
    };
    Code:
    //CObjectType.cpp
    
    __int32                        CObjectType::SFX_ID()
    {
        if (!this) return -1;
        if ((DWORD)this < 0x400000) return -1;
        return *(__int32*)((uintptr_t)this + 0x0000);
    }
    
    CAIClient*                    CObjectType::GetAIClient()
    {
        if (!this) return NULL;
        if ((DWORD)this < 0x400000) return NULL;
        return *reinterpret_cast<CAIClient**>((uintptr_t)this + 0x0004);
    }
    
    CThrowingWeaponFX*            CObjectType::GetCThrowingWeaponFX()
    {
        if (!this) return NULL;
        if ((DWORD)this < 0x400000) return NULL;
        return *reinterpret_cast<CThrowingWeaponFX**>((uintptr_t)this + 0x0004);
    }
    
    CDroppedWeaponFX*            CObjectType::GetCWeaponDroppedFX()
    {
        if (!this) return NULL;
        if ((DWORD)this < 0x400000) return NULL;
        return *reinterpret_cast<CDroppedWeaponFX**>((uintptr_t)this + 0x0004);
    }
    
    CharacFX*                    CObjectType::GetCharacFX()
    {
        if (!this) return NULL;
        if ((DWORD)this < 0x400000) return NULL;
        return *reinterpret_cast<CharacFX**>((uintptr_t)this + 0x0004);
    }
    
    CDroppedWeaponFX_BR*        CObjectType::GetCWeaponDroppedFX_BR()
    {
        if (!this) return NULL;
        if ((DWORD)this < 0x400000) return NULL;
        return *reinterpret_cast<CDroppedWeaponFX_BR**>((uintptr_t)this + 0x0004);
    }
    
    __int32                        CObjectType::GetWeaponID() //ESP WEAPON
    {
        if (this) {
            if (this->IsWeapon()) {
                if (this->GetCWeaponDroppedFX()) {
                    if (this->GetCWeaponDroppedFX()->WeaponIndex()) { //0x0032 or 0x0036
                        return (__int32)this->GetCWeaponDroppedFX()->WeaponIndex();
                    }
                }
            }
        }
        return -1;
    }
    
    D3DXVECTOR3                    CObjectType::GetBonePosition(UINT Bone)
    {
        Transform Trans;
        if (this) {
            if (this->IsAIZombie()) {
                if (this->GetAIClient()) {
                    if (this->GetAIClient()->AIObject()) {
                        if (I::g_pModelLT->GetNodeTransform(
                            this->GetAIClient()->AIObject(), Bone, &Trans, true) == LT_OK) {
                            return (Trans.m_vPos);
                        }
                    }
                }
            }
        }
        return D3DXVECTOR3(0, 0, 0);
    }
    
    __int32                        CObjectType::GetHeadIndex()
    {
        int NodeIndex = 1;
        return NodeIndex;
    }
    
    D3DXVECTOR3                    CObjectType::GetHeadPosition()
    {
        Transform Trans;
        if (this)
        {
            if (this->IsAIZombie())
            {
                if (this->GetAIClient() != NULL)
                {
                    if (this->GetAIClient()->AIObject() != NULL)
                    {
                        if (I::g_pModelLT->GetNodeTransform(
                            this->GetAIClient()->AIObject(), this->GetHeadIndex(), &Trans, true) == LT_OK)
                        {
                            return (Trans.m_vPos);
                        }
                    }
                }
            }
        }
        return D3DXVECTOR3(0, 0, 0);
    }
    
    char*                        CObjectType::GetName()
    {
        char szName[128] = { 0 };
        sprintf(szName, "%s", "");
        return szName;
    }
    
    std::string                    CObjectType::GetFXName()
    {
        if (!this) return "";
        if ((DWORD)this < 0x400000) return "";
        /*if (!this->GetObjectFXRTTI()) return "";
        if (!this->GetObjectFXRTTI()->GetASCII()) return "";
    
        std::string r_name = this->GetObjectFXRTTI()->GetASCII();
        std::size_t pos2 = r_name.find_last_of("@@");
        r_name = r_name.substr(0, pos2 - 1);
    
        return r_name;*/
        return "";
    }
    Code:
    class Nano : public BaseFX
    {
    public:
        DWORD                    NanoType();
        DWORD                    NanoType0();
        DWORD                    NanoType1();
        bool                    IsNano();
        bool                    IsNano0();
        bool                    IsNano1();
        int                        NanoWeaponID();
        const char*                GetNanoName();
    };
    
    class Player : public Nano
    {
    public:
        //\x55\x8B\xEC\x83\xEC\x10\x56\x8B\xF1\x57\x83\xBE\x00\x02\x00\x00\x00
        ModelInstance*            PlayerObject(); //EF54 : A0
        bool                    IsBlackListTeam();
        D3DXVECTOR3&            GetViewAngle();
        __int32                    MoveType();
        bool                    IsMoving();
        bool                    IsPlayer();
        CWeaponMgr*                GetWeapon();
        bool                    IsHit();
        bool                    IsDead();
        int&                    CharacterID();
        int&                    SetImmune();
        bool                    IsImmune();
        int                        GetWeaponID();
        int&                    GetTeamID(); //EF45
        int&                    GetBagSlot(); //EF1C
        int&                    Grenade1(); //EF08 = -1 if grenade , 0 if rifle knife
        int&                    Grenade2(); //EF0C = -1 if grenade , 0 if rifle knife
    };
    
    class CharacFX : public Player
    {
    public:
        //CPlayer->ModelInstance->14E4->224 return max count of ModelSocket
        int                        TotalSocketItem();
        CharacterItem*            GetCharacterItem(int index);
        CharacterSocket*        GetCharacterSocket(int index);
        ModelInstance*            CharacterSocketItem(int index);
        ModelInstance*            LeftHandWeaponObject();
        ModelInstance*            RightHandWeaponObject();
    };
    
    
    
    class CDroppedWeaponFX : public BaseFX
    {
    public:
        ModelInstance*            WeaponObject();
        bool                    IsWeapon();
        bool                    IsGrenade();
        bool                    IsGrenadeOnAir();
        bool                    CheckGrenade();
        void                    GrenadeMOD();
        bool                    IsGrenadeContactWall();
        bool                    IsWeaponOnGround();
        WORD                    WeaponIndex();
        CWeaponMgr*                GetWeapon();
    };
    
    
    //BattleRoyale
    enum eItemType
    {
        IT_WEAPON,
        IT_GRENADE,
        IT_REVIVE_KIT,
        IT_AMMO,
        IT_HELMET,
        IT_VEST,
        IT_CONEHEAD,
        IT_UN_7,
        IT_WEAPON_MAGAZINE,
        IT_MASK,
        IT_UN_10,
        IT_MAGAZINE,
        IT_UN_12,
        IT_LOOT
    };
    
    struct BR_ITEMS
    {
        __int32 ItemID;
        std::string ItemName;
    };
    
    static BR_ITEMS ItemName_BR[]
    {
        { 0, "M4A1 - Custom" },
        { 1, "C8" },
        { 2, "HK 417 - Scope" },
        { 3, "SR99" },
        { 4, "QBZ-03-Scope Volcano" },
        { 5, "QBZ - 95 - Silencer Volcano" },
        { 6, "Dual Scorpion VZ61" },
        { 7, "" },
        { 8, "QBU-09 Volcano" },
        { 9, "Kar 98K Volcano" },
        { 10, "Kriss Super V - Volcano" },
        { 11, "870P Breachers - Volcano" },
        { 12, "18C - Digital Camo" },
        { 13, "" },
        { 14, "Vepr" },
        { 15, "M67 Grenade" },
        { 16, "Smoke" },
        { 17, "Dumpling" },
        { 18, "EG Drink 1" },
        { 19, "RF Ammo (30)" },
        { 20, "SMG Ammo (30)" },
        { 21, "SG Ammo (5)" },
        { 22, "SN Ammo (10)" },
        { 23, "PI Ammo (20)" },
        { 24, "Protect Helmet Lv. 1" },
        { 25, "Protect Helmet Lv. 2" },
        { 26, "Protect Helmet Lv. 3" },
        { 27, "Pumpkin Helmet Lv. 1" },
        { 28, "Viking Helmet Lv. 1" },
        { 29, "Protect Vest Lv. 1" },
        { 30, "Protect Vest Lv. 2" },
        { 31, "Protect Vest Lv. 3" },
        { 32, "Conehead" },
        { 33, "Warrior Headband" },
        { 34, "Ballistic Mask" },
        { 35, "Goblin Mask" },
        { 36, "Rifle Magazine" },
        { 37, "SMG Magazine" },
        { 38, "SG Magazine" },
        { 39, "Sniper Magazine" },
        { 40, "" },
        { 41, "Gas Mask" },
        { 42, "" },
        { 43, "Magazine" },
        { 44, "Weapon Holster" },
        { 45, "Loot" },
    };
    
    class CDroppedWeaponFX_BR : public BaseFX
    {
    public:
        bool                IsWeaponMgr();
        ModelInstance*        WeaponObject();
        __int32                ItemID();
        __int32                ItemType();
        __int32                m_ClassID();
        __int32                WeaponIndex();
        __int32                WeaponType();
        __int32                _0x28();
        __int32                _0x1C();
        __int32                _0x2C();
    };
    
    
    class CDroppedWeaponFX : public BaseFX
    {
    public:
        ModelInstance*            WeaponObject();
        bool                    IsWeapon();
        bool                    IsGrenade();
        bool                    IsGrenadeOnAir();
        bool                    CheckGrenade();
        void                    GrenadeMOD();
        bool                    IsGrenadeContactWall();
        bool                    IsWeaponOnGround();
        WORD                    WeaponIndex();
        CWeaponMgr*                GetWeapon();
    };
    Code:
    CFPH CObjectMgr:: 0x1155754
    hkchen
    darkratos
    dreek
    reclass....
    etc......
     
    Depressed, rusel bio and Devs Hacks thanks this.
    • BE A GAMER - RAMLeague
  2. rusel bio True God Gamer
    Staff Member Level 1 Moderator Member Lvl2

    Joined:
    Feb 21, 2016
    Gender:
    Male
    Posts:
    807
    Reputation:
    104
    Thanks:
    244
    Location:
    @ Games\Crossfire 2.0\rez
    Curious
    cejas02nd
    sanaol
     
  3. Member Lvl2

    Davinci Junior the MXVIII
    Joined:
    Mar 23, 2016
    Gender:
    Male
    Posts:
    862
    Reputation:
    225
    Thanks:
    250
    Location:
    Locating...
    Angelic
    Is there a CPlayer class call in CharacFX ?

    class CharacFX
    {
    ......
    ......
    _spacer xx
    CPlayer* xxxx
    };
     
  4. busyguy2021 Newbie Member

    busyguy2021
    Joined:
    May 20, 2021
    Gender:
    Male
    Posts:
    2
    Reputation:
    0
    Thanks:
    0
    I wanna buy a CFPH VIP Hack project. Just the updated project. Preferably supports win7 (x64) and win10 (x64) platform.

    Will send via gcash. Please send me a message. Thanks
     

Tags for this Thread

:

Share This Page