Гайд [Not Easy] [НЕ Обновляемый] Фикс | Добавление функций для читов на базе Антарио, ХУО и так далее

Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
1.2. Запрещено выделять всё сообщение жирным шрифтом, курсивом, подчеркиванием, цветом. Пользуйтесь BB-кодами с умом, выделяя лишь самое важное в теме, на что следует обратить внимание.
Всем привет, пользователи священного сайта великих гениев и программистов, для которых не так уж и сложно написать свой чит с нуля и реализовать 10-тап в один тик.
Я бы хотел помочь вам изгнать из "вашего" чита злых бесов, которые пытают опытных кодеров.
Поэтому для начала, давайте ознакомимся с тем, что мы будем делать.
Мы изменим базу и определения(Вам придётся попрощаться с тем, что вы понапихали в свои исходники).
Мы излечим хуки, которые прямо-косвенно относятся к вызываемым ошибкам.
И судя по тегу данного гайда, это будет не легко, потому что не понимание кода оставит вас с проблемами.
Подмечу, что СКОПИРОВАТЬ + ВСТАВИТЬ, никто не отменял. Но не понимающему даже это не поможет.
Теперь ваши мысли о том, что софтам на базе Антарио (а так же xy0 и последующие) пришёл конец, рассеялись.
Но не стоит забывать тот факт, что ты ничего не сможешь.
:kappa:


И так, приступим, для начала нам нужно как вы уже знаете изменить базу (CEntity.h):

C++:
class C_BaseEntity : public IClientUnknown, public IClientRenderable, public IClientNetworkable
{

private:

    template<class T>
    T GetPointer(const int offset)
    {
        return reinterpret_cast<T*>(reinterpret_cast<std::uintptr_t>(this) + offset);
    }


    template<class T>
    T GetValue(const int offset)
    {
        return *reinterpret_cast<T*>(reinterpret_cast<std::uintptr_t>(this) + offset);
    }


    template <typename T>
    T& SetValue(uintptr_t offset)
    {
        return *reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(this) + offset);
    }

public:

    C_AnimState *AnimState()
    {
        return *reinterpret_cast<C_AnimState**>(uintptr_t(this) + 0x3900);
    }

    float m_fDuckSpeed()
    {
        static int m_flDuckSpeed = g_pNetvars->GetOffset("DT_BasePlayer", "m_flDuckSpeed");
        return *(float*)((uintptr_t)this + (uintptr_t)m_flDuckSpeed);
    }

    c_animstate *AnimStatev2()
    {
        return *reinterpret_cast<c_animstate**>(uintptr_t(this) + 0x3900);
    }


    AnimationLayer *AnimOverlays()
    {
        return *reinterpret_cast<AnimationLayer**>(uintptr_t(this) + 0x2980);
    }

    float * m_flPoseParameter() {
        static int offset = g_pNetvars->GetOffset("DT_BaseAnimating", "m_flPoseParameter");

        return reinterpret_cast<float *>(uintptr_t(this) + offset);
    }

    AnimationLayer *GetAnimOverlays4()
    {
        return *(AnimationLayer**)((DWORD)this + 0x2980);
    }

    AnimationLayer *GetAnimOverlay4(int i)
    {
        if (i < 16)
            return &GetAnimOverlays4()[i];
    }


    int GetNumAnimOverlays()
    {
        return *(int*)((DWORD)this + 0x298C);
    }


    int NumOverlays()
    {
        return 15;
    }

    void UpdateClientAnimation()
    {
        Utils::GetVFunc<void(__thiscall*)(void*)>(this, 223)(this);
    }


    template <typename T>
    T& read(uintptr_t offset)
    {
        return *reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(this) + offset);
    }

    std::array<float, 24>* get_ragdoll_pos()
    {
        return read<std::array<float, 24>*>(g_pNetvars->GetOffset("DT_Ragdoll", "m_ragPos"));
    }


    void ClientAnimations(bool value)
    {
        static int m_bClientSideAnimation = g_pNetvars->GetOffset("DT_BaseAnimating", "m_bClientSideAnimation");
        *reinterpret_cast<bool*>(uintptr_t(this) + m_bClientSideAnimation) = value;
    }


    template<class T, class U>

    static T clamp(T in, U low, U high)
    {
        if (in <= low)
            return low;

        if (in >= high)
            return high;

        return in;
    }

    float GetMaxDelta(C_AnimState* animstate)
    {

        float flRunningSpeed = clamp(animstate->m_flFeetSpeedForwardsOrSideWays, 0.f, 1.f);
        float flYawModifier = ((animstate->m_flStopToFullRunningFraction * -0.3f) - 0.2f) * flRunningSpeed;
        float flYawModifier2 = flYawModifier + 1.f;


        if (animstate->m_fDuckAmount > 0.f)
        {
            float maxVelocity = clamp(animstate->m_flFeetSpeedForwardsOrSideWays, 0.f, 1.f);
            float duckSpeed = animstate->m_fDuckAmount * maxVelocity;
            flYawModifier2 += (duckSpeed * (0.5f - flYawModifier2));
        }

        return *(float*)((uintptr_t)animstate + 0x334) * flYawModifier2;
    }


    int GetSequence()
    {
        static int m_nSequence = g_pNetvars->GetOffset("DT_BaseAnimating", "m_nSequence");
        return GetValue<int>(m_nSequence);
    }


    void SetSequence(int Sequence)
    {
        static int m_nSequence = g_pNetvars->GetOffset("DT_BaseAnimating", "m_nSequence");
        *reinterpret_cast<int*>(uintptr_t(this) + m_nSequence) = Sequence;
    }


    int Money()
    {
        static int m_ArmorValue = g_pNetvars->GetOffset("DT_CSPlayer", "m_iAccount");
        return GetValue<int>(m_ArmorValue);
    }


    void SimulatedEveryTick(bool value)
    {
        static int m_bSimulatedEveryTick = g_pNetvars->GetOffset("DT_BaseEntity", "m_bSimulatedEveryTick");
        *reinterpret_cast<bool*>(uintptr_t(this) + m_bSimulatedEveryTick) = value;
    }

    void SetAbsAngles(Vector angles);

    void SetAbsOrigin(Vector origin);

    void InvalidateBoneCache();


    Vector GetAbsOrigin()
    {
        return Utils::GetVFunc<Vector&(__thiscall*)(void*)>(this, 10)(this);
    }


    Vector& GetAbsAngles()
    {
        typedef Vector& (__thiscall* OriginalFn)(void*);
        return ((OriginalFn)Utils::GetVFunc<OriginalFn>(this, 11))(this);
    }


    void SetAbsVelocity(Vector velocity);


    C_BaseCombatWeapon* GetActiveWeapon()
    {
        static int m_hActiveWeapon = g_pNetvars->GetOffset("DT_BaseCombatCharacter", "m_hActiveWeapon");
        const auto weaponData = GetValue<CBaseHandle>(m_hActiveWeapon);
        return reinterpret_cast<C_BaseCombatWeapon*>(g_pEntityList->GetClientEntityFromHandle(weaponData));
    }


    int GetActiveWeaponIndex()
    {
        static int m_hActiveWeapon = g_pNetvars->GetOffset("DT_BaseCombatCharacter", "m_hActiveWeapon");
        return *reinterpret_cast<int*>(uintptr_t(this) + m_hActiveWeapon) & 0xFFF;
    }

    int GetTeam()
    {
        static int m_iTeamNum = g_pNetvars->GetOffset("DT_BaseEntity", "m_iTeamNum");
        return GetValue<int>(m_iTeamNum);
    }

    float GetFireReadyTime()
    {
        static int m_flPostponeFireReadyTime = g_pNetvars->GetOffset("DT_WeaponCSBase", "m_flPostponeFireReadyTime");
        return GetValue<float>(m_flPostponeFireReadyTime);
    }

    EntityFlags GetFlags()
    {
        static int m_fFlags = g_pNetvars->GetOffset("DT_BasePlayer", "m_fFlags");
        return GetValue<EntityFlags>(m_fFlags);
    }

    void SetFlags(int offset)
    {
        static int m_fFlags = g_pNetvars->GetOffset("DT_BasePlayer", "m_fFlags");
        *reinterpret_cast<int*>(uintptr_t(this) + m_fFlags) = offset;
    }

    MoveType_t GetMoveType()
    {
        static int m_Movetype = g_pNetvars->GetOffset("DT_BaseEntity", "m_nRenderMode") + 1;
        return GetValue<MoveType_t>(m_Movetype);
    }

    float GetSimulationTime()
    {
        static int m_flSimulationTime = g_pNetvars->GetOffset("DT_BaseEntity", "m_flSimulationTime");
        return GetValue<float>(m_flSimulationTime);
    }

    float GetOldSimulationTime()
    {
        static int m_flOldSimulationTime = g_pNetvars->GetOffset("DT_BaseEntity", "m_flSimulationTime") + 4;
        return GetValue<float>(m_flOldSimulationTime);
    }

    float GetLowerBodyYaw()
    {
        static int m_flLowerBodyYawTarget = g_pNetvars->GetOffset("DT_CSPlayer", "m_flLowerBodyYawTarget");
        return GetValue<float>(m_flLowerBodyYawTarget);
    }


    CBaseHandle owner()
    {
        static int m_hOwnerEntity = g_pNetvars->GetOffset("DT_BaseEntity", "m_hOwnerEntity");

        return GetValue<CBaseHandle>(m_hOwnerEntity);
    }


    auto ObserverTarget() -> CBaseHandle
    {
        return *(CBaseHandle  *)((uintptr_t)this + 0x3388);
    }


    auto observer_target() -> uintptr_t {
        return *(uintptr_t *)((uintptr_t)this + g_pNetvars->GetOffset("DT_BaseEntity", "m_hObserverTarget"));
    }


    auto observer_mode() -> int32_t& {
        return *(int32_t *)((uintptr_t)this + g_pNetvars->GetOffset("DT_BaseEntity", "m_iObserverMode"));
    };

    matrix3x4_t GetBoneMatrix(int BoneID)
    {
        matrix3x4_t matrix;

        auto offset = *reinterpret_cast<uintptr_t*>(uintptr_t(this) + 0x26A8);
        if (offset)
            matrix = *reinterpret_cast<matrix3x4_t*>(offset + 0x30 * BoneID);

        return matrix;
    }

    void SetLowerBodyYaw(float value)
    {
        static int m_flLowerBodyYawTarget = g_pNetvars->GetOffset("DT_CSPlayer", "m_flLowerBodyYawTarget");
        *reinterpret_cast<float*>(uintptr_t(this) + m_flLowerBodyYawTarget) = value;
    }


    const matrix3x4_t& m_rgflCoordinateFrame()
    {
        static auto _m_rgflCoordinateFrame = g_pNetvars->GetOffset("DT_BaseEntity", "m_CollisionGroup") - 0x30;
        return *(matrix3x4_t*)((uintptr_t)this + _m_rgflCoordinateFrame);
    }

    bool GetHeavyArmor()
    {
        static int m_bHasHeavyArmor = g_pNetvars->GetOffset("DT_CSPlayer", "m_bHasHeavyArmor");
        return GetValue<bool>(m_bHasHeavyArmor);
    }

    int ArmorValue()
    {
        static int m_ArmorValue = g_pNetvars->GetOffset("DT_CSPlayer", "m_ArmorValue");
        return GetValue<int>(m_ArmorValue);
    }

    float* m_flFlashMaxAlpha()
    {
        return (float*)((uintptr_t)this + 0xA3DC);
    }

    bool HasHelmet()
    {
        static int m_bHasHelmet = g_pNetvars->GetOffset("DT_CSPlayer", "m_bHasHelmet");
        return GetValue<bool>(m_bHasHelmet);
    }

    bool GetLifeState()
    {
        static int m_lifeState = g_pNetvars->GetOffset("DT_BasePlayer", "m_lifeState");
        return GetValue<bool>(m_lifeState);
    }

    bool IsScoped()
    {
        static int m_bIsScoped = g_pNetvars->GetOffset("DT_CSPlayer", "m_bIsScoped");
        return GetValue<bool>(m_bIsScoped);
    }

    int GetHealth()
    {
        static int m_iHealth = g_pNetvars->GetOffset("DT_BasePlayer", "m_iHealth");
        return GetValue<int>(m_iHealth);
    }

    CHandle<C_BaseCombatWeapon> *m_hMyWeapons() const
    {
        static int _m_hMyWeapons = 0x2DF8;
        return (CHandle<C_BaseCombatWeapon>*)((uintptr_t)this + (_m_hMyWeapons / 2));
    }

    CBaseHandle *GetWeapons()
    {
        return (CBaseHandle*)((DWORD)this + 0x2DE8);
    }

    bool IsKnifeorNade();

    bool IsKnife();

    bool IsPistol();

    bool IsShotgun();

    bool IsSniper();

    bool IsScopableWeapon();

    int GetSequenceActivity(int sequence);

    float DesyncValue();

    void SetModelIndex(const int index)
    {
        Utils::GetVFunc<void(__thiscall*)(C_BaseEntity*, int)>(this, 75)(this, index);
    }


    int* FallbackPaintKit()
    {
        return (int*)((uintptr_t)this + 0x31B8);
    }


    inline int* GetFallbackPaintKit()
    {
        return (int*)((DWORD)this + 0x31B8);
    }


    short* ItemDefinitionIndex2()
    {
        return (short*)((DWORD)this + g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iItemDefinitionIndex"));
    }


    int* ViewModelIndex()
    {
        return (int*)((uintptr_t)this + g_pNetvars->GetOffset("DT_BaseViewModel", "m_nViewModelIndex"));
    }


    int* OwnerXuidLow()
    {
        return (int*)((uintptr_t)this + 0x31B0);
    }


    int* OwnerXuidHigh()
    {
        return (int*)((uintptr_t)this + 0x31B4);
    }


    int* ItemIDHigh()
    {
        return (int*)((uintptr_t)this + 0x2FC0);
    }

    float* FallbackWear()
    {
        return (float*)((uintptr_t)this + 0x31C0);
    }


    int* FallbackSeed()
    {
        return (int*)((uintptr_t)this + 0x31AC);
    }

    int& GetItemIDHigh()
    {
        return *(int *)((DWORD)this + g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iItemIDHigh"));
    }

    int& GetItemIDLow()
    {
        return *(int *)((DWORD)this + g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iItemIDLow"));
    }

    int& GetAccountID()
    {
        return *(int *)((DWORD)this + g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iAccountID"));
    }

    bool IsAlive()
    {
        return this->GetHealth() > 0 && this->GetLifeState() == 0;
    }


    bool IsNade();

    bool is_valid(C_BaseEntity* local_player = nullptr, bool is_player = true, bool dormant = true, bool team_check = true)
    {
        if (!this)
            return false;

        if (dormant)
            if (this->IsDormant())
                return false;

        if (team_check && local_player)
            if (this->GetTeam() == local_player->GetTeam())
                return false;

        if (is_player)
            if (!this->IsPlayer())
                return false;

        if (this->GetHealth() <= 0)
            return false;

        return true;
    }

    bool IsPlayer()
    {
        using original_fn = bool(__thiscall*)(C_BaseEntity*);
        return (*(original_fn**)this)[157](this);
    }

    bool IsEnemy();

    bool IsImmune()
    {
        static int m_bGunGameImmunity = g_pNetvars->GetOffset("DT_CSPlayer", "m_bGunGameImmunity");
        return GetValue<bool>(m_bGunGameImmunity);
    }

    int GetTickBase()
    {
        static int m_nTickBase = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_nTickBase");
        return GetValue<int>(m_nTickBase);
    }

    int GetShotsFired()
    {
        static int m_iShotsFired = g_pNetvars->GetOffset("DT_CSPlayer", "cslocaldata", "m_iShotsFired");
        return GetValue<int>(m_iShotsFired);
    }

    void SetTickBase(int TickBase)
    {
        static int m_nTickBase = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_nTickBase");
        *reinterpret_cast<int*>(uintptr_t(this) + m_nTickBase) = TickBase;
    }

    Vector GetEyeAngles()
    {
        static int m_angEyeAngles = g_pNetvars->GetOffset("DT_CSPlayer", "m_angEyeAngles");
        return GetValue<Vector>(m_angEyeAngles);
    }
    Vector* GetEyeAnglesPointer()
    {
        return (Vector*)((DWORD)this + g_pNetvars->GetOffset("DT_CSPlayer", "m_angEyeAngles"));
    }

    Vector* GetEyeAngles2()
    {
        static int m_angEyeAngles = g_pNetvars->GetOffset("DT_CSPlayer", "m_angEyeAngles");
        return GetValue<Vector*>(m_angEyeAngles);
    }

    void SetEyeAngles(Vector Angle)
    {
        static int m_angEyeAngles = g_pNetvars->GetOffset("DT_CSPlayer", "m_angEyeAngles");
        *reinterpret_cast<Vector*>(uintptr_t(this) + m_angEyeAngles) = Angle;
    }

    void update_state(C_AnimState* state, Vector ang)
    {
        using fn = void(__vectorcall*)(void*, void*, float, float, float, void*);
        static auto ret = reinterpret_cast<fn>(Utils::FindSignature("client_panorama.dll", "55 8B EC 83 E4 F8 83 EC 18 56 57 8B F9 F3 0F 11 54 24"));

        if (!ret)
            return;

        ret(state, NULL, NULL, ang.y, ang.x, NULL);
    }

    Vector GetOrigin()
    {
        static int m_vecOrigin = g_pNetvars->GetOffset("DT_BaseEntity", "m_vecOrigin");
        return GetValue<Vector>(m_vecOrigin);
    }

    Vector GetOldOrigin()
    {
        static int m_vecOldOrigin = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_flFriction") + 12;
        return GetValue<Vector>(m_vecOldOrigin);
    }

    Vector GetNetworkOrigin()
    {
        static int m_vecNetworkOrigin = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_flFriction") + 40;
        return GetValue<Vector>(m_vecNetworkOrigin);
    }

    void SetOrigin(Vector Origin)
    {
        static int m_vecOrigin = g_pNetvars->GetOffset("DT_BaseEntity", "m_vecOrigin");
        *reinterpret_cast<Vector*>(uintptr_t(this) + m_vecOrigin) = Origin;
    }

    Vector GetVelocity()
    {
        static int m_vecVelocity = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_vecVelocity[0]");
        return GetValue<Vector>(m_vecVelocity);
    }

    void SetVelocity(Vector velocity)
    {
        static int m_vecVelocity = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_vecVelocity[0]");
        *reinterpret_cast<Vector*>(uintptr_t(this) + m_vecVelocity) = velocity;
    }

    Vector GetAimPunchAngle()
    {
        return *reinterpret_cast<Vector*>(uintptr_t(this) + uintptr_t(0x302C));
    }

    Vector GetViewPunchAngle()
    {
        return *reinterpret_cast<Vector*>(uintptr_t(this) + uintptr_t(0x3020));
    }

    Vector m_vecViewOffset()
    {
        return *reinterpret_cast<Vector*>(uintptr_t(this) + uintptr_t(0x108));
    }

    Vector GetViewOffset()
    {
        return *reinterpret_cast<Vector*>(uintptr_t(this) + 0x104);
    }

    int Deadflag()
    {
        static int m_iShotsFired = g_pNetvars->GetOffset("DT_CSPlayer", "deadflag");
        return GetValue<int>(m_iShotsFired);
    }

    Vector GetVecOrigin()
    {
        return *reinterpret_cast<Vector*>(uintptr_t(this) + g_pNetvars->GetOffset("DT_BaseEntity", "m_vecOrigin"));
    }

    Vector GetEyePosition()
    {
        if (!this)
            return Vector(0, 0, 0);

        Vector ret;
        typedef void(__thiscall *OrigFn)(void *, Vector&);
        Utils::GetVFunc<OrigFn>(this, 284)(this, ret);

        return ret;
    }

    inline Vector ExtrapolateTick(Vector p0, Vector v0)
    {
        return p0 + (v0 * g_pGlobalVars->intervalPerTick);
    }

    Vector GetPredicted(Vector p0)
    {
        return ExtrapolateTick(p0, this->GetVelocity());
    }

    Vector GetBonePosition(int iBone)
    {
        matrix3x4_t boneMatrixes[128];
        if (this->SetupBones(boneMatrixes, 128, 0x100, 0))
        {
            matrix3x4_t boneMatrix = boneMatrixes[iBone];
            return Vector(boneMatrix.flMatVal[0][3], boneMatrix.flMatVal[1][3], boneMatrix.flMatVal[2][3]);
        }
        else
            return Vector(0, 0, 0);
    }

    ICollideable* GetCollideable()
    {
        return (ICollideable*)((DWORD)this + 0x318);
    }

    void SetCurrentCommand(CUserCmd *cmd)
    {
        static int m_hConstraintEntity = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_hConstraintEntity");
        *reinterpret_cast<CUserCmd**>(uintptr_t(this) + m_hConstraintEntity - 0xC) = cmd;
    }

    float FireRate();

    void FixSetupBones(matrix3x4_t *Matrix);
    Vector GetHitboxPosition(int Hitbox, matrix3x4_t *Matrix, float *Radius);
    Vector GetHitboxPosition(int Hitbox, matrix3x4_t *Matrix);
};
class viewmodel_t;
class C_BaseCombatWeapon : public C_BaseEntity
{
private:
    template<class T>
    T GetPointer(const int offset)
    {
        return reinterpret_cast<T*>(reinterpret_cast<std::uintptr_t>(this) + offset);
    }

    template<class T>
    T GetValue(const int offset)
    {
        return *reinterpret_cast<T*>(reinterpret_cast<std::uintptr_t>(this) + offset);
    }

public:

    ItemDefinitionIndex GetItemDefinitionIndex()
    {
        static int m_iItemDefinitionIndex = g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iItemDefinitionIndex");
        return GetValue<ItemDefinitionIndex>(m_iItemDefinitionIndex);
    }


    CBaseHandle GetWeaponWorldModel()
    {
        return *(CBaseHandle*)((uintptr_t)this + g_pNetvars->GetOffset("DT_BaseCombatWeapon", "m_hWeaponWorldModel")); //m_hWeaponWorldModel
    }

#define VirtualFn( cast ) typedef cast( __thiscall* OriginalFn )

    void SetModelIndex(int nModelIndex)
    {
        VirtualFn(void)(PVOID, int);
        Utils::GetVFunc< OriginalFn >(this, 75)(this, nModelIndex);
    }

    CBaseHandle m_hWeaponWorldModel_h()
    {
        return *(CBaseHandle*)((uintptr_t)this + 0x3234); //m_hWeaponWorldModel
    }

    HANDLE m_hWeaponWorldModel_c()
    {
        return *(HANDLE*)((uintptr_t)this + 0x3234); //m_hWeaponWorldModel
    }

    short* ItemDefinitionIndex2()
    {
        return (short*)((DWORD)this + g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iItemDefinitionIndex"));
    }

    int* ModelIndex()
    {
        return (int*)((uintptr_t)this + 0x258);
    }

    int* WorldModelIndex()
    {
        return (int*)((uintptr_t)this + g_pNetvars->GetOffset("DT_BaseCombatWeapon", "m_iWorldModelIndex"));
    }

    int* GetEntityQuality()
    {
        return (int*)((uintptr_t)this + 0x2FAC);
    }

    short* fixskins()
    {
        return (short*)((uintptr_t)this + 0x2FAA);
    }

    int* FallbackPaintKit()
    {
        return (int*)((uintptr_t)this + 0x31B8);
    }

    inline int* GetFallbackPaintKit()
    {
        return (int*)((DWORD)this + 0x31B8);
    }

    int* ViewModelIndex()
    {
        return (int*)((uintptr_t)this + g_pNetvars->GetOffset("DT_BaseViewModel", "m_nViewModelIndex"));
    }

    int* OwnerXuidLow()
    {
        return (int*)((uintptr_t)this + 0x31B0);
    }

    int* OwnerXuidHigh()
    {
        return (int*)((uintptr_t)this + 0x31B4);
    }

    int* ItemIDHigh()
    {
        return (int*)((uintptr_t)this + 0x2FC0);
    }

    float* FallbackWear()
    {
        return (float*)((uintptr_t)this + 0x31C0);
    }

    inline int* GetFallbackStatTrak()
    {
        static int it = g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_nFallbackStatTrak");
        return (int*)((DWORD)this + it);
    }

    int* FallbackSeed()
    {
        return (int*)((uintptr_t)this + 0x31AC);
    }

    int& GetItemIDHigh()
    {
        return *(int *)((DWORD)this + g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iItemIDHigh"));
    }

    int& GetItemIDLow()
    {
        return *(int *)((DWORD)this + g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iItemIDLow"));
    }

    int& GetAccountID()
    {
        return *(int *)((DWORD)this + g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iAccountID"));
    }


    float GetInaccuracy()
    {
        typedef float(__thiscall* oInaccuracy)(PVOID);
        return Utils::GetVFunc< oInaccuracy >(this, 482)(this);
    }

    float GetSpread()
    {
        typedef float(__thiscall* oWeaponSpread)(PVOID);
        return Utils::GetVFunc< oWeaponSpread >(this, 452)(this);
    }

    float GetAccuracyPenalty()
    {
        static int m_fAccuracyPenalty = g_pNetvars->GetOffset("DT_WeaponCSBase", "m_fAccuracyPenalty");
        return GetValue<float>(m_fAccuracyPenalty);
    }

    float GetLastShotTime()
    {
        static int m_fLastShotTime = g_pNetvars->GetOffset("DT_WeaponCSBase", "m_fLastShotTime");
        return GetValue<float>(m_fLastShotTime);
    }

    int GetZoomLevel()
    {
        static int m_fLastShotTime = g_pNetvars->GetOffset("DT_WeaponCSBase", "m_zoomLevel");
        return GetValue<int>(m_fLastShotTime);
    }

    void AccuracyPenalty()
    {
        typedef void(__thiscall *OrigFn)(void *);
        return Utils::GetVFunc<OrigFn>(this, 483)(this);
    }

    float GetNextPrimaryAttack()
    {
        static int m_flNextPrimaryAttack = g_pNetvars->GetOffset("DT_BaseCombatWeapon", "LocalActiveWeaponData", "m_flNextPrimaryAttack");
        return GetValue<float>(m_flNextPrimaryAttack);
    }

    float m_flPostponeFireReadyTime()
    {
        static int m_flNextPrimaryAttack = g_pNetvars->GetOffset("DT_BaseCombatWeapon", "LocalActiveWeaponData", "m_flPostponeFireReadyTime");
        return GetValue<float>(m_flNextPrimaryAttack);
    }

    int GetAmmo()
    {
        static int m_iClip1 = g_pNetvars->GetOffset("DT_BaseCombatWeapon", "m_iClip1");
        return GetValue<int>(m_iClip1);
    }

    int GetAmmo2()
    {
        static int m_iClip1 = g_pNetvars->GetOffset("DT_BaseCombatWeapon", "m_iClip2");
        return GetValue<int>(m_iClip1);
    }

    WeaponInfo_t* GetCSWpnData()
    {
        if (!this)
            return nullptr;

        return Utils::CallVFunc<460, WeaponInfo_t*>(this);
    }

    std::string GetName()
    {
        ///TODO: Test if szWeaponName returns proper value for m4a4 / m4a1-s or it doesnt recognize them.
        return std::string(this->GetCSWpnData()->weapon_name);
    }
};



Далее переходим в определения (Definitions.h):

C++:
#pragma once
#include <Windows.h>

typedef void*   (*CreateInterfaceFn)        (const char *pName, int *pReturnCode);
typedef void    (*pfnDemoCustomDataCallback)(unsigned char *pData, size_t iSize);

enum class EClassIds : int
{
    CAI_BaseNPC = 0,
    CAK47,
    CBaseAnimating,
    CBaseAnimatingOverlay,
    CBaseAttributableItem,
    CBaseButton,
    CBaseCombatCharacter,
    CBaseCombatWeapon,
    CBaseCSGrenade,
    CBaseCSGrenadeProjectile,
    CBaseDoor,
    CBaseEntity,
    CBaseFlex,
    CBaseGrenade,
    CBaseParticleEntity,
    CBasePlayer,
    CBasePropDoor,
    CBaseTeamObjectiveResource,
    CBaseTempEntity,
    CBaseToggle,
    CBaseTrigger,
    CBaseViewModel,
    CBaseVPhysicsTrigger,
    CBaseWeaponWorldModel,
    CBeam,
    CBeamSpotlight,
    CBoneFollower,
    CBRC4Target,
    CBreachCharge,
    CBreachChargeProjectile,
    CBreakableProp,
    CBreakableSurface,
    CBumpMine,
    CBumpMineProjectile,
    CC4,
    CCascadeLight,
    CChicken,
    CColorCorrection,
    CColorCorrectionVolume,
    CCSGameRulesProxy,
    CCSPlayer,
    CCSPlayerResource,
    CCSRagdoll,
    CCSTeam,
    CDangerZone,
    CDangerZoneController,
    CDEagle,
    CDecoyGrenade,
    CDecoyProjectile,
    CDrone,
    CDronegun,
    CDynamicLight,
    CDynamicProp,
    CEconEntity,
    CEconWearable,
    CEmbers,
    CEntityDissolve,
    CEntityFlame,
    CEntityFreezing,
    CEntityParticleTrail,
    CEnvAmbientLight,
    CEnvDetailController,
    CEnvDOFController,
    CEnvGasCanister,
    CEnvParticleScript,
    CEnvProjectedTexture,
    CEnvQuadraticBeam,
    CEnvScreenEffect,
    CEnvScreenOverlay,
    CEnvTonemapController,
    CEnvWind,
    CFEPlayerDecal,
    CFireCrackerBlast,
    CFireSmoke,
    CFireTrail,
    CFish,
    CFists,
    CFlashbang,
    CFogController,
    CFootstepControl,
    CFunc_Dust,
    CFunc_LOD,
    CFuncAreaPortalWindow,
    CFuncBrush,
    CFuncConveyor,
    CFuncLadder,
    CFuncMonitor,
    CFuncMoveLinear,
    CFuncOccluder,
    CFuncReflectiveGlass,
    CFuncRotating,
    CFuncSmokeVolume,
    CFuncTrackTrain,
    CGameRulesProxy,
    CGrassBurn,
    CHandleTest,
    CHEGrenade,
    CHostage,
    CHostageCarriableProp,
    CIncendiaryGrenade,
    CInferno,
    CInfoLadderDismount,
    CInfoMapRegion,
    CInfoOverlayAccessor,
    CItem_Healthshot,
    CItemCash,
    CItemDogtags,
    CKnife,
    CKnifeGG,
    CLightGlow,
    CMaterialModifyControl,
    CMelee,
    CMolotovGrenade,
    CMolotovProjectile,
    CMovieDisplay,
    CParadropChopper,
    CParticleFire,
    CParticlePerformanceMonitor,
    CParticleSystem,
    CPhysBox,
    CPhysBoxMultiplayer,
    CPhysicsProp,
    CPhysicsPropMultiplayer,
    CPhysMagnet,
    CPhysPropAmmoBox,
    CPhysPropLootCrate,
    CPhysPropRadarJammer,
    CPhysPropWeaponUpgrade,
    CPlantedC4,
    CPlasma,
    CPlayerPing,
    CPlayerResource,
    CPointCamera,
    CPointCommentaryNode,
    CPointWorldText,
    CPoseController,
    CPostProcessController,
    CPrecipitation,
    CPrecipitationBlocker,
    CPredictedViewModel,
    CProp_Hallucination,
    CPropCounter,
    CPropDoorRotating,
    CPropJeep,
    CPropVehicleDriveable,
    CRagdollManager,
    CRagdollProp,
    CRagdollPropAttached,
    CRopeKeyframe,
    CSCAR17,
    CSceneEntity,
    CSensorGrenade,
    CSensorGrenadeProjectile,
    CShadowControl,
    CSlideshowDisplay,
    CSmokeGrenade,
    CSmokeGrenadeProjectile,
    CSmokeStack,
    CSnowball,
    CSnowballPile,
    CSnowballProjectile,
    CSpatialEntity,
    CSpotlightEnd,
    CSprite,
    CSpriteOriented,
    CSpriteTrail,
    CStatueProp,
    CSteamJet,
    CSun,
    CSunlightShadowControl,
    CSurvivalSpawnChopper,
    CTablet,
    CTeam,
    CTeamplayRoundBasedRulesProxy,
    CTEArmorRicochet,
    CTEBaseBeam,
    CTEBeamEntPoint,
    CTEBeamEnts,
    CTEBeamFollow,
    CTEBeamLaser,
    CTEBeamPoints,
    CTEBeamRing,
    CTEBeamRingPoint,
    CTEBeamSpline,
    CTEBloodSprite,
    CTEBloodStream,
    CTEBreakModel,
    CTEBSPDecal,
    CTEBubbles,
    CTEBubbleTrail,
    CTEClientProjectile,
    CTEDecal,
    CTEDust,
    CTEDynamicLight,
    CTEEffectDispatch,
    CTEEnergySplash,
    CTEExplosion,
    CTEFireBullets,
    CTEFizz,
    CTEFootprintDecal,
    CTEFoundryHelpers,
    CTEGaussExplosion,
    CTEGlowSprite,
    CTEImpact,
    CTEKillPlayerAttachments,
    CTELargeFunnel,
    CTEMetalSparks,
    CTEMuzzleFlash,
    CTEParticleSystem,
    CTEPhysicsProp,
    CTEPlantBomb,
    CTEPlayerAnimEvent,
    CTEPlayerDecal,
    CTEProjectedDecal,
    CTERadioIcon,
    CTEShatterSurface,
    CTEShowLine,
    CTesla,
    CTESmoke,
    CTESparks,
    CTESprite,
    CTESpriteSpray,
    CTest_ProxyToggle_Networkable,
    CTestTraceline,
    CTEWorldDecal,
    CTriggerPlayerMovement,
    CTriggerSoundOperator,
    CVGuiScreen,
    CVoteController,
    CWaterBullet,
    CWaterLODControl,
    CWeaponAug,
    CWeaponAWP,
    CWeaponBaseItem,
    CWeaponBizon,
    CWeaponCSBase,
    CWeaponCSBaseGun,
    CWeaponCycler,
    CWeaponElite,
    CWeaponFamas,
    CWeaponFiveSeven,
    CWeaponG3SG1,
    CWeaponGalil,
    CWeaponGalilAR,
    CWeaponGlock,
    CWeaponHKP2000,
    CWeaponM249,
    CWeaponM3,
    CWeaponM4A1,
    CWeaponMAC10,
    CWeaponMag7,
    CWeaponMP5Navy,
    CWeaponMP7,
    CWeaponMP9,
    CWeaponNegev,
    CWeaponNOVA,
    CWeaponP228,
    CWeaponP250,
    CWeaponP90,
    CWeaponSawedoff,
    CWeaponSCAR20,
    CWeaponScout,
    CWeaponSG550,
    CWeaponSG552,
    CWeaponSG556,
    CWeaponShield,
    CWeaponSSG08,
    CWeaponTaser,
    CWeaponTec9,
    CWeaponTMP,
    CWeaponUMP45,
    CWeaponUSP,
    CWeaponXM1014,
    CWorld,
    CWorldVguiText,
    DustTrail,
    MovieExplosion,
    ParticleSmokeGrenade,
    RocketTrail,
    SmokeTrail,
    SporeExplosion,
    SporeTrail,
};

enum class MoveType_t
{
    MOVETYPE_NONE = 0,
    MOVETYPE_ISOMETRIC,
    MOVETYPE_WALK,
    MOVETYPE_STEP,
    MOVETYPE_FLY,
    MOVETYPE_FLYGRAVITY,
    MOVETYPE_VPHYSICS,
    MOVETYPE_PUSH,
    MOVETYPE_NOCLIP,
    MOVETYPE_LADDER,
    MOVETYPE_OBSERVER,
    MOVETYPE_CUSTOM,
    MOVETYPE_LAST = MOVETYPE_CUSTOM,
    MOVETYPE_MAX_BITS = 4
};

enum EntityFlags : int
{
    FL_ONGROUND =   (1 << 0),
    FL_DUCKING =    (1 << 1),
    FL_WATERJUMP =  (1 << 2),
    FL_ONTRAIN =    (1 << 3),
    FL_INRAIN =     (1 << 4),
    FL_FROZEN =     (1 << 5),
    FL_ATCONTROLS = (1 << 6),
    FL_CLIENT =     (1 << 7),
    FL_FAKECLIENT = (1 << 8)
};

enum class ItemDefinitionIndex : short
{
    WEAPON_NONE = 0,
    WEAPON_DEAGLE,
    WEAPON_ELITE,
    WEAPON_FIVESEVEN,
    WEAPON_GLOCK,
    WEAPON_AK47 = 7,
    WEAPON_AUG,
    WEAPON_AWP,
    WEAPON_FAMAS,
    WEAPON_G3SG1,
    WEAPON_GALILAR = 13,
    WEAPON_M249,
    WEAPON_M4A1 = 16,
    WEAPON_MAC10,
    WEAPON_P90 = 19,
    WEAPON_MP5SD = 23,
    WEAPON_UMP45,
    WEAPON_XM1014,
    WEAPON_BIZON,
    WEAPON_MAG7,
    WEAPON_NEGEV,
    WEAPON_SAWEDOFF,
    WEAPON_TEC9,
    WEAPON_TASER,
    WEAPON_HKP2000,
    WEAPON_MP7,
    WEAPON_MP9,
    WEAPON_NOVA,
    WEAPON_P250,
    WEAPON_SHIELD,
    WEAPON_SCAR20,
    WEAPON_SG556,
    WEAPON_SSG08,
    WEAPON_KNIFEGG,
    WEAPON_KNIFE,
    WEAPON_FLASHBANG,
    WEAPON_HEGRENADE,
    WEAPON_SMOKEGRENADE,
    WEAPON_MOLOTOV,
    WEAPON_DECOY,
    WEAPON_INCGRENADE,
    WEAPON_C4,
    WEAPON_HEALTHSHOT = 57,
    WEAPON_KNIFE_T = 59,
    WEAPON_M4A1_SILENCER,
    WEAPON_USP_SILENCER,
    WEAPON_CZ75A = 63,
    WEAPON_REVOLVER,
    WEAPON_TAGRENADE = 68,
    WEAPON_FISTS,
    WEAPON_BREACHCHARGE,
    WEAPON_TABLET = 72,
    WEAPON_MELEE = 74,
    WEAPON_AXE,
    WEAPON_HAMMER,
    WEAPON_SPANNER = 78,
    WEAPON_KNIFE_GHOST = 80,
    WEAPON_FIREBOMB,
    WEAPON_DIVERSION,
    WEAPON_FRAG_GRENADE,
    WEAPON_SNOWBALL,
    WEAPON_BUMPMINE,
    WEAPON_BAYONET = 500,
    WEAPON_KNIFE_FLIP = 505,
    WEAPON_KNIFE_GUT,
    WEAPON_KNIFE_KARAMBIT,
    WEAPON_KNIFE_M9_BAYONET,
    WEAPON_KNIFE_TACTICAL,
    WEAPON_KNIFE_FALCHION = 512,
    WEAPON_KNIFE_SURVIVAL_BOWIE = 514,
    WEAPON_KNIFE_BUTTERFLY,
    WEAPON_KNIFE_PUSH,
    WEAPON_KNIFE_URSUS = 519,
    WEAPON_KNIFE_GYPSY_JACKKNIFE,
    WEAPON_KNIFE_STILETTO = 522,
    WEAPON_KNIFE_WIDOWMAKER = 523,
    WEAPON_KNIFE_SKELETON = 525
};

enum class CSWeaponType : int
{
    WEAPONTYPE_KNIFE = 0,
    WEAPONTYPE_PISTOL,
    WEAPONTYPE_SUBMACHINEGUN,
    WEAPONTYPE_RIFLE,
    WEAPONTYPE_SHOTGUN,
    WEAPONTYPE_SNIPER_RIFLE,
    WEAPONTYPE_MACHINEGUN,
    WEAPONTYPE_C4,
    WEAPONTYPE_PLACEHOLDER,
    WEAPONTYPE_GRENADE,
    WEAPONTYPE_UNKNOWN
};

class WeaponInfo_t
{
public:
    char _0x0000[20];
    __int32 max_clip;            //0x0014
    char _0x0018[12];
    __int32 max_reserved_ammo;    //0x0024
    char _0x0028[96];
    char* hud_name;                //0x0088
    char* weapon_name;            //0x008C
    char _0x0090[60];
    __int32 type;                //0x00CC
    __int32 price;                //0x00D0
    __int32 reward;                //0x00D4
    char _0x00D8[20];
    BYTE full_auto;                //0x00EC
    char _0x00ED[3];
    __int32 damage;                //0x00F0
    float armor_ratio;            //0x00F4
    __int32 bullets;            //0x00F8
    float penetration;            //0x00FC
    char _0x0100[8];
    float range;                //0x0108
    float range_modifier;        //0x010C
    char _0x0110[16];
    BYTE silencer;                //0x0120
    char _0x0121[15];
    float max_speed;            //0x0130
    float max_speed_alt;        //0x0134
    char _0x0138[76];
    __int32 recoil_seed;        //0x0184
    char _0x0188[32];
};// Size=0x01A8



Теперь переходим сюда и добавляем следующие определения, если есть, заменяем (Hooks.cpp):

C++:
enum ItemDefinitionIndexv2 : int
{
    WEAPON_NONE = 0,

    WEAPON_DEAGLE,
    WEAPON_ELITE,
    WEAPON_FIVESEVEN,
    WEAPON_GLOCK,
    WEAPON_AK47 = 7,
    WEAPON_AUG,
    WEAPON_AWP,
    WEAPON_FAMAS,
    WEAPON_G3SG1,
    WEAPON_GALILAR = 13,
    WEAPON_M249,
    WEAPON_M4A1 = 16,
    WEAPON_MAC10,
    WEAPON_P90 = 19,
    WEAPON_MP5SD = 23,
    WEAPON_UMP45,
    WEAPON_XM1014,
    WEAPON_BIZON,
    WEAPON_MAG7,
    WEAPON_NEGEV,
    WEAPON_SAWEDOFF,
    WEAPON_TEC9,
    WEAPON_TASER,
    WEAPON_HKP2000,
    WEAPON_MP7,
    WEAPON_MP9,
    WEAPON_NOVA,
    WEAPON_P250,
    WEAPON_SHIELD,
    WEAPON_SCAR20,
    WEAPON_SG556,
    WEAPON_SSG08,
    WEAPON_KNIFEGG,
    WEAPON_KNIFE,
    WEAPON_FLASHBANG,
    WEAPON_HEGRENADE,
    WEAPON_SMOKEGRENADE,
    WEAPON_MOLOTOV,
    WEAPON_DECOY,
    WEAPON_INCGRENADE,
    WEAPON_C4,
    WEAPON_HEALTHSHOT = 57,
    WEAPON_KNIFE_T = 59,
    WEAPON_M4A1_SILENCER,
    WEAPON_USP_SILENCER,
    WEAPON_CZ75A = 63,
    WEAPON_REVOLVER,
    WEAPON_TAGRENADE = 68,
    WEAPON_FISTS,
    WEAPON_BREACHCHARGE,
    WEAPON_TABLET = 72,
    WEAPON_MELEE = 74,
    WEAPON_AXE,
    WEAPON_HAMMER,
    WEAPON_SPANNER = 78,
    WEAPON_KNIFE_GHOST = 80,
    WEAPON_FIREBOMB,
    WEAPON_DIVERSION,
    WEAPON_FRAG_GRENADE,
    WEAPON_SNOWBALL,
    WEAPON_BUMPMINE,
    WEAPON_BAYONET = 500,
    WEAPON_KNIFE_FLIP = 505,
    WEAPON_KNIFE_GUT,
    WEAPON_KNIFE_KARAMBIT,
    WEAPON_KNIFE_M9_BAYONET,
    WEAPON_KNIFE_TACTICAL,
    WEAPON_KNIFE_FALCHION = 512,
    WEAPON_KNIFE_SURVIVAL_BOWIE = 514,
    WEAPON_KNIFE_BUTTERFLY,
    WEAPON_KNIFE_PUSH,
    WEAPON_KNIFE_URSUS = 519,
    WEAPON_KNIFE_GYPSY_JACKKNIFE,
    WEAPON_KNIFE_STILETTO = 522,
    WEAPON_KNIFE_WIDOWMAKER
};



Вауля, всё готово.
Теперь те методы которые были мусором в вашей базе, которые вызываются с других классов, меняйте на имеющиеся. Если вы хотите что либо вернуть, делайте это аккуратно и тестируйте, крашнет ли метод.
Ну а на этом всё, всем желаю удачи.
:CoolStoryBob:
________________________________________________________________________________________________
Ниже будет обновляемая информация о всевозможных крашах и их решений, а так же добавление новых и интересных функций
________________________________________________________________________________________________


Советую закоментить клан тег, из за него возможен краш
Подождёт


________________________________________________________________________________________________


Назойливый метод, который крашит игру после смены карты, сервера, загрузки кфг.
Но это не значит, что он единственный был на то причиной.

Только что потестил, всё работает, если где то у вас остался вызов метода GetValue - дайте знать :roflanEbalo:

C++:
float GetNextPrimaryAttack()
{
    static int m_flNextPrimaryAttack = g_pNetvars->GetOffset("DT_BaseCombatWeapon", "LocalActiveWeaponData", "m_flNextPrimaryAttack");
    return *(float*)((uintptr_t)this + m_flNextPrimaryAttack);
}

float m_flPostponeFireReadyTime()
{
    static int m_flNextPrimaryAttack = g_pNetvars->GetOffset("DT_BaseCombatWeapon", "LocalActiveWeaponData", "m_flPostponeFireReadyTime");
    return *(float*)((uintptr_t)this + m_flNextPrimaryAttack);
}

int GetAmmo()
{
    static int m_iClip1 = g_pNetvars->GetOffset("DT_BaseCombatWeapon", "m_iClip1");
    return *(int*)((uintptr_t)this + m_iClip1);
}

int GetAmmo2()
{
    static int m_iClip1 = g_pNetvars->GetOffset("DT_BaseCombatWeapon", "m_iClip2");
    return *(int*)((uintptr_t)this + m_iClip1);
}


float GetAccuracyPenalty()
{
    static int m_fAccuracyPenalty = g_pNetvars->GetOffset("DT_WeaponCSBase", "m_fAccuracyPenalty");
    return *(float*)((uintptr_t)this + m_fAccuracyPenalty);
}

float GetLastShotTime()
{
    static int m_fLastShotTime = g_pNetvars->GetOffset("DT_WeaponCSBase", "m_fLastShotTime");
    return *(float*)((uintptr_t)this + m_fLastShotTime);
}

int GetZoomLevel()
{
    static int m_fLastShotTime = g_pNetvars->GetOffset("DT_WeaponCSBase", "m_zoomLevel");
    return *(int*)((uintptr_t)this + m_fLastShotTime);
}

int Deadflag()
{
    static int m_iShotsFired = g_pNetvars->GetOffset("DT_CSPlayer", "deadflag");
    return *(int*)((uintptr_t)this + m_iShotsFired);
}

Vector GetVelocity()
{
    static int m_vecVelocity = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_vecVelocity[0]");
    return *(Vector*)((uintptr_t)this + m_vecVelocity);
}

Vector GetOrigin()
{
    static int m_vecOrigin = g_pNetvars->GetOffset("DT_BaseEntity", "m_vecOrigin");
    return *(Vector*)((uintptr_t)this + m_vecOrigin);
}

Vector GetOldOrigin()
{
    static int m_vecOldOrigin = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_flFriction") + 12;
    return *(Vector*)((uintptr_t)this + m_vecOldOrigin);
}

Vector GetNetworkOrigin()
{
    static int m_vecNetworkOrigin = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_flFriction") + 40;
    return *(Vector*)((uintptr_t)this + m_vecNetworkOrigin);
}

Vector GetEyeAngles()
{
    static int m_angEyeAngles = g_pNetvars->GetOffset("DT_CSPlayer", "m_angEyeAngles");
    return *(Vector*)((uintptr_t)this + m_angEyeAngles);
}


Vector* GetEyeAnglesPointer()
{
    return (Vector*)((DWORD)this + g_pNetvars->GetOffset("DT_CSPlayer", "m_angEyeAngles"));
}


Vector* GetEyeAngles2()
{
    static int m_angEyeAngles = g_pNetvars->GetOffset("DT_CSPlayer", "m_angEyeAngles");
    return (Vector*)((uintptr_t)this + m_angEyeAngles);
}



bool IsImmune()
{
    static int m_bGunGameImmunity = g_pNetvars->GetOffset("DT_CSPlayer", "m_bGunGameImmunity");
    return *(bool*)((uintptr_t)this + m_bGunGameImmunity);
}

int GetTickBase()
{
    static int m_nTickBase = g_pNetvars->GetOffset("DT_BasePlayer", "localdata", "m_nTickBase");
    return *(int*)((uintptr_t)this + m_nTickBase);
}

int GetShotsFired()
{
    static int m_iShotsFired = g_pNetvars->GetOffset("DT_CSPlayer", "cslocaldata", "m_iShotsFired");
    return *(int*)((uintptr_t)this + m_iShotsFired);
}

bool HasHelmet()
{
    static int m_bHasHelmet = g_pNetvars->GetOffset("DT_CSPlayer", "m_bHasHelmet");
    return *(bool*)((uintptr_t)this + m_bHasHelmet);
}

bool GetLifeState()
{
    static int m_lifeState = g_pNetvars->GetOffset("DT_BasePlayer", "m_lifeState");
    return *(bool*)((uintptr_t)this + m_lifeState);
}

bool IsScoped()
{
    static int m_bIsScoped = g_pNetvars->GetOffset("DT_CSPlayer", "m_bIsScoped");
    return *(bool*)((uintptr_t)this + m_bIsScoped);
}

int GetHealth()
{
    static int m_iHealth = g_pNetvars->GetOffset("DT_BasePlayer", "m_iHealth");
    return *(int*)((uintptr_t)this + m_iHealth);
}


bool GetHeavyArmor()
{
    static int m_bHasHeavyArmor = g_pNetvars->GetOffset("DT_CSPlayer", "m_bHasHeavyArmor");
    return *(bool*)((uintptr_t)this + m_bHasHeavyArmor);
}

int ArmorValue()
{
    static int m_ArmorValue = g_pNetvars->GetOffset("DT_CSPlayer", "m_ArmorValue");
    return *(int*)((uintptr_t)this + m_ArmorValue);
}

int GetTeam()
{
    static int m_iTeamNum = g_pNetvars->GetOffset("DT_BaseEntity", "m_iTeamNum");
    return *(int*)((uintptr_t)this + m_iTeamNum);
}

float GetFireReadyTime()
{
    static int m_flPostponeFireReadyTime = g_pNetvars->GetOffset("DT_WeaponCSBase", "m_flPostponeFireReadyTime");
    return *(float*)((uintptr_t)this + m_flPostponeFireReadyTime);
}

EntityFlags GetFlags()
{
    static int m_fFlags = g_pNetvars->GetOffset("DT_BasePlayer", "m_fFlags");
    return *(EntityFlags*)((uintptr_t)this + m_fFlags);
}

void SetFlags(int offset)
{
    static int m_fFlags = g_pNetvars->GetOffset("DT_BasePlayer", "m_fFlags");
    *reinterpret_cast<int*>(uintptr_t(this) + m_fFlags) = offset;
}

MoveType_t GetMoveType()
{
    static int m_Movetype = g_pNetvars->GetOffset("DT_BaseEntity", "m_nRenderMode") + 1;
    return *(MoveType_t*)((uintptr_t)this + m_Movetype);
}

float GetSimulationTime()
{
    static int m_flSimulationTime = g_pNetvars->GetOffset("DT_BaseEntity", "m_flSimulationTime");
    return *(float*)((uintptr_t)this + m_flSimulationTime);
}

float GetOldSimulationTime()
{
    static int m_flOldSimulationTime = g_pNetvars->GetOffset("DT_BaseEntity", "m_flSimulationTime") + 4;
    return *(float*)((uintptr_t)this + m_flOldSimulationTime);
}

float GetLowerBodyYaw()
{
    static int m_flLowerBodyYawTarget = g_pNetvars->GetOffset("DT_aCSPlayer", "m_flLowerBodyYawTarget");
    return *(float*)((uintptr_t)this + m_flLowerBodyYawTarget);
}


CBaseHandle owner()
{
    static int m_hOwnerEntity = g_pNetvars->GetOffset("DT_BaseEntity", "m_hOwnerEntity");
    return *(CBaseHandle*)((uintptr_t)this + m_hOwnerEntity);
}

int Money()
{
    static int m_ArmorValue = g_pNetvars->GetOffset("DT_CSPlayer", "m_iAccount");
    return *(int*)((uintptr_t)this + m_ArmorValue);
}


int GetSequence()
{
    static int m_nSequence = g_pNetvars->GetOffset("DT_BaseAnimating", "m_nSequence");
    return *(int*)((uintptr_t)this + m_nSequence);
}

ItemDefinitionIndex GetItemDefinitionIndex()
{
    static int m_iItemDefinitionIndex = g_pNetvars->GetOffset("DT_BaseAttributableItem", "m_AttributeManager", "m_Item", "m_iItemDefinitionIndex");
    return *(ItemDefinitionIndex*)((uintptr_t)this + m_iItemDefinitionIndex); //m_hWeaponWorldModel
}


________________________________________________________________________________________________

[CRASH SKIN]
Устарелый адрес, реализован не в том месте

[FIX SKIN]
Отдельное спасибо ему - Likiorniok1234
Для этого перейдите в Hooks::FrameStageNotify
Далее вы увидите следующий код:
C++:
    if (curStage == FRAME_NET_UPDATE_POSTDATAUPDATE_START)
    {
         skinsApply();
        if (Globals::LocalPlayer && Globals::LocalPlayer->IsAlive())
        {
            backtracking->Update(g_pGlobalVars->tickcount);
        }
    }
Удалите строчку skinsApply();
Она у вас может быть по другому названа, либо реализована отдельно от FRAME_NET_UPDATE_POSTDATAUPDATE_START
Но главное помнить, что в Hooks::FrameStageNotify, скинченджер быть не должен, это не правильная реализация
Поэтому оставьте просто как должно быть:
C++:
    if (curStage == FRAME_NET_UPDATE_POSTDATAUPDATE_START)
    {
        if (Globals::LocalPlayer && Globals::LocalPlayer->IsAlive())
        {
            backtracking->Update(g_pGlobalVars->tickcount);
        }
    }
________________________________________________________________________________________________

[CRASH FakeLag]
Для тех у кого по сей видимости крашат фейк лаги, хотя я уже 4 сурс чекаю и не наблюдаю такого

[FIX FakeLag]
Отдельное спасибо ему - train67

C++:
public:
    void request_full_update()
    {
        delta_tick = -1;
    };

    char pad_0000[0x9C];
    CNetChannel* net_channel;
    uint32_t m_nChallengeNr;
    char pad_00A4[0x64];
    uint32_t m_nSignonState;
    char pad_010C[0x8];
    float m_flNextCmdTime;
    uint32_t m_nServerCount;
    uint32_t current_sequence;
    char pad_0120[4];
    CClockDriftMgr clock_drift_mgr;
    int32_t delta_tick;
    bool m_bPaused;
    char pad_0179[7];
    uint32_t m_nViewEntity;
    uint32_t m_nPlayerSlot;
    char m_szLevelName[260];
    char m_szLevelNameShort[80];
    char m_szGroupName[80];
    char pad_02DC[92];
    uint32_t m_nMaxClients;
    char pad_0314[18820];
    float m_flLastServerTickTime;
    bool in_simulation;
    char pad_4C9D[3];
    uint32_t oldtickcount;
    float m_tickRemainder;
    float m_frameTime;
    uint32_t last_command;
    uint32_t choked_commands;
    uint32_t last_command_ack;
    uint32_t command_ack;
    uint32_t m_nSoundSequence;
    char pad_4CC0[80];
    Vector viewangles;
    char pad_4D14[0xD0];
    CEventInfo* events;

g_pClientState = reinterpret_cast< IClientState* > ( ( *reinterpret_cast< uintptr_t** > ( g_pEngine ) )[ 12 ] + 0x10 );
 
Последнее редактирование модератором:
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
Если будут какие то проблемы, отписывайте сюда (Ну логично же), будем решать их вместе, не одному мне всё расхлёбывать, я и так потным стал после написания гайда :roflanPominki:
 
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
[UPD] - Добавил фикс на GetValue, смотрите выше
 
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
могу сказать там не только это крашит
Сейчас в основном крашит из за GetValue фикс на который я уже скинул. На все остальные ошибочки, так же будут сделаны фиксы :CoolStoryBob:
 
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
[UPD] - Исправляем краш связанный с дерьмовой прогрузкой скинов (Не стоит удалять его, закоментить - достаточно, будет фикс)
 
Участник
Статус
Оффлайн
Регистрация
26 Апр 2018
Сообщения
851
Реакции[?]
181
Поинты[?]
0
[UPD] - Исправляем краш связанный с дерьмовой прогрузкой скинов (Не стоит удалять его, закоментить - достаточно, будет фикс)
ты смещон там только патерн исправить
 
Участник
Статус
Оффлайн
Регистрация
26 Апр 2018
Сообщения
851
Реакции[?]
181
Поинты[?]
0
Код:
void engine_prediction::RunEnginePred()
{
    static int nTickBase;
    static CUserCmd* pLastCmd;

    if (pLastCmd)
    {
        if (pLastCmd->hasbeenpredicted)
            nTickBase = Globals::LocalPlayer->GetTickBase();
        else
            ++nTickBase;
    }

    const auto getRandomSeed = []()
    {
        using MD5_PseudoRandomFn = unsigned long(__cdecl*)(std::uintptr_t);
        static auto offset = Utils::FindSignature("client_panorama.dll", "55 8B EC 83 E4 F8 83 EC 70 6A 58");
        static auto MD5_PseudoRandom = reinterpret_cast<MD5_PseudoRandomFn>(offset);
        return MD5_PseudoRandom(Globals::pCmd->command_number) & 0x7FFFFFFF;
    };

    pLastCmd = Globals::pCmd;
    flOldCurtime = g_pGlobalVars->curtime;
    flOldFrametime = g_pGlobalVars->frametime;

    Globals::uRandomSeed = getRandomSeed();
    g_pGlobalVars->curtime = nTickBase * g_pGlobalVars->intervalPerTick;
    g_pGlobalVars->frametime = g_pGlobalVars->intervalPerTick;

    g_pMovement->StartTrackPredictionErrors(Globals::LocalPlayer);

    CMoveData data;
    memset(&data, 0, sizeof(CMoveData));

    g_pMoveHelper->SetHost(Globals::LocalPlayer);
    g_pPrediction->SetupMove(Globals::LocalPlayer, Globals::pCmd, g_pMoveHelper, &data);
    g_pMovement->ProcessMovement(Globals::LocalPlayer, &data);
    g_pPrediction->FinishMove(Globals::LocalPlayer, Globals::pCmd, &data);
}

void engine_prediction::EndEnginePred()
{
    g_pMovement->FinishTrackPredictionErrors(Globals::LocalPlayer);
    g_pMoveHelper->SetHost(nullptr);

    Globals::uRandomSeed = -1;

    g_pGlobalVars->curtime = flOldCurtime;
    g_pGlobalVars->frametime = flOldFrametime;
}
затем ищите class Utils
туда
template<unsigned int IIdx, typename TRet, typename ... TArgs>
    static auto CallVFunc(void* thisptr, TArgs ... argList) -> TRet
    {
        using Fn = TRet(__thiscall)(void, decltype(argList)...);
        return (*static_cast<Fn**>(thisptr))[IIdx](thisptr, argList...);
    }
ищите class IMoveHelper
заменяете его на
class IMoveHelper
{
public:
    void SetHost(C_BaseEntity* host)
    {
        return Utils::CallVFunc<1, void>(this, host);
    }
};
extern IMoveHelper* g_pMoveHelper;
фикс краша предикта
 
Участник
Статус
Оффлайн
Регистрация
26 Апр 2018
Сообщения
851
Реакции[?]
181
Поинты[?]
0
Код:
framestage hook fix (mapchange crashes)
void __stdcall Hooks::FrameStageNotify(ClientFrameStage_t curStage)
{
    static auto oFrameStage = g_Hooks.pClientHook->GetOriginal<FrameStageNotify_t>(vtable_indexes::frameStage);
    switch (curStage)
    {
        case FRAME_UNDEFINED:
            break;

        case FRAME_START:
            break;

        case FRAME_NET_UPDATE_START:
            break;

        case FRAME_NET_UPDATE_POSTDATAUPDATE_START:

            if (Globals::LocalPlayer && Globals::LocalPlayer->IsAlive()) {
                backtracking->Update(g_pGlobalVars->tickcount);
            }

            break;

        case FRAME_NET_UPDATE_POSTDATAUPDATE_END:

            g_Resolver.FrameStage(curStage);
            break;

        case FRAME_NET_UPDATE_END:
            break;

        case FRAME_RENDER_START:

            g_Misc.Thirdperson_FSN(curStage);
            g_Misc.NightMode();
            g_Misc.AsusProps();
            break;

        case FRAME_RENDER_END:
            break;
        }

    oFrameStage(curStage);
}
фикс фромстейдж хука
 
Участник
Статус
Оффлайн
Регистрация
26 Апр 2018
Сообщения
851
Реакции[?]
181
Поинты[?]
0
Код:
public:
    void request_full_update()
    {
        delta_tick = -1;
    };

    char pad_0000[0x9C];
    CNetChannel* net_channel;
    uint32_t m_nChallengeNr;
    char pad_00A4[0x64];
    uint32_t m_nSignonState;
    char pad_010C[0x8];
    float m_flNextCmdTime;
    uint32_t m_nServerCount;
    uint32_t current_sequence;
    char pad_0120[4];
    CClockDriftMgr clock_drift_mgr;
    int32_t delta_tick;
    bool m_bPaused;
    char pad_0179[7];
    uint32_t m_nViewEntity;
    uint32_t m_nPlayerSlot;
    char m_szLevelName[260];
    char m_szLevelNameShort[80];
    char m_szGroupName[80];
    char pad_02DC[92];
    uint32_t m_nMaxClients;
    char pad_0314[18820];
    float m_flLastServerTickTime;
    bool in_simulation;
    char pad_4C9D[3];
    uint32_t oldtickcount;
    float m_tickRemainder;
    float m_frameTime;
    uint32_t last_command;
    uint32_t choked_commands;
    uint32_t last_command_ack;
    uint32_t command_ack;
    uint32_t m_nSoundSequence;
    char pad_4CC0[80];
    Vector viewangles;
    char pad_4D14[0xD0];
    CEventInfo* events;

g_pClientState = reinterpret_cast< IClientState* > ( ( *reinterpret_cast< uintptr_t** > ( g_pEngine ) )[ 12 ] + 0x10 );
фикс фек лагов
 
Участник
Статус
Оффлайн
Регистрация
26 Апр 2018
Сообщения
851
Реакции[?]
181
Поинты[?]
0
притом что сурфейс говно и жрет фпс каждый раз когда ты открываеш миню и срет в движок игры, чтоб исправить перейти нужно на имгуи
И это еще не все если я буду все фиксы выдовать то тут весь день уйдет на это
 
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
притом что сурфейс говно и жрет фпс каждый раз когда ты открываеш миню и срет в движок игры, чтоб исправить перейти нужно на имгуи
И это еще не все если я буду все фиксы выдовать то тут весь день уйдет на это
У меня подавно сурс пофикшен и полностью переписан, я сюда кидаю те решения, которые часто вижу в других исходниках, для того, чтобы просто нормализовать работу, сюда не обязательно кидать как ты говоришь все фиксы, потому что тут не сброд за халявой. Здесь решаются краши, а ты кидаешь фикс предикшона и так далее. Из за них как такового краша нет, ты просто кидаешь "нормально" реализованый код, который хоть как то делает исход рабочим. Поэтому и смысла в этом я не вижу.
UPD: фикс фейклагов добавил в гайд, но не встречал связанные с ними краши вообще
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
Код:
framestage hook fix (mapchange crashes)
void __stdcall Hooks::FrameStageNotify(ClientFrameStage_t curStage)
{
    static auto oFrameStage = g_Hooks.pClientHook->GetOriginal<FrameStageNotify_t>(vtable_indexes::frameStage);
    switch (curStage)
    {
        case FRAME_UNDEFINED:
            break;

        case FRAME_START:
            break;

        case FRAME_NET_UPDATE_START:
            break;

        case FRAME_NET_UPDATE_POSTDATAUPDATE_START:

            if (Globals::LocalPlayer && Globals::LocalPlayer->IsAlive()) {
                backtracking->Update(g_pGlobalVars->tickcount);
            }

            break;

        case FRAME_NET_UPDATE_POSTDATAUPDATE_END:

            g_Resolver.FrameStage(curStage);
            break;

        case FRAME_NET_UPDATE_END:
            break;

        case FRAME_RENDER_START:

            g_Misc.Thirdperson_FSN(curStage);
            g_Misc.NightMode();
            g_Misc.AsusProps();
            break;

        case FRAME_RENDER_END:
            break;
        }

    oFrameStage(curStage);
}
фикс фромстейдж хука
И кстати здесь он реализован не правильно
 
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
мы говорим ою хуо ( геминисофт вере ) а не о разных пастах из него сделаных
Всё равно реализация не правильная, краши не исчезнут, но при этом будут редкими
 
quality solution
Участник
Статус
Оффлайн
Регистрация
30 Май 2019
Сообщения
579
Реакции[?]
193
Поинты[?]
0
Крашит при смене мапы не GetValue,а предикшн,фиксы твои бесполезны,комментить проблему не означает ее решить.
 
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
Крашит при смене мапы не GetValue,а предикшн,фиксы твои бесполезны,комментить проблему не означает ее решить.
Ну во первых фик с GetValue помог двум сурсам, во вторых если крашит предикш, то земля пухом тем кто сидит с этим badреализованным говном, так что мои фиксы не бесполезны :roflanEbalo:
 
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
Крашит при смене мапы не GetValue,а предикшн,фиксы твои бесполезны,комментить проблему не означает ее решить.
Ну а если ты не понимаешь того что с говённым предикшеном всё нормально и фикс составляется в одну строку, то мне очень жаль что ты так думаешь
 
Сверху Снизу