-
Автор темы
- #1
1.2. Запрещено выделять всё сообщение жирным шрифтом, курсивом, подчеркиванием, цветом. Пользуйтесь BB-кодами с умом, выделяя лишь самое важное в теме, на что следует обратить внимание.
Всем привет, пользователи священного сайта великих гениев и программистов, для которых не так уж и сложно написать свой чит с нуля и реализовать 10-тап в один тик.
Я бы хотел помочь вам изгнать из "вашего" чита злых бесов, которые пытают опытных кодеров.
Поэтому для начала, давайте ознакомимся с тем, что мы будем делать.
Мы изменим базу и определения(Вам придётся попрощаться с тем, что вы понапихали в свои исходники).
Мы излечим хуки, которые прямо-косвенно относятся к вызываемым ошибкам.
И судя по тегу данного гайда, это будет не легко, потому что не понимание кода оставит вас с проблемами.
Подмечу, что СКОПИРОВАТЬ + ВСТАВИТЬ, никто не отменял. Но не понимающему даже это не поможет.
Теперь ваши мысли о том, что софтам на базе Антарио (а так же xy0 и последующие) пришёл конец, рассеялись.
Но не стоит забывать тот факт, что ты ничего не сможешь.
И так, приступим, для начала нам нужно как вы уже знаете изменить базу (CEntity.h):
Я бы хотел помочь вам изгнать из "вашего" чита злых бесов, которые пытают опытных кодеров.
Поэтому для начала, давайте ознакомимся с тем, что мы будем делать.
Мы изменим базу и определения(Вам придётся попрощаться с тем, что вы понапихали в свои исходники).
Мы излечим хуки, которые прямо-косвенно относятся к вызываемым ошибкам.
И судя по тегу данного гайда, это будет не легко, потому что не понимание кода оставит вас с проблемами.
Подмечу, что СКОПИРОВАТЬ + ВСТАВИТЬ, никто не отменял. Но не понимающему даже это не поможет.
Теперь ваши мысли о том, что софтам на базе Антарио (а так же xy0 и последующие) пришёл конец, рассеялись.
Но не стоит забывать тот факт, что ты ничего не сможешь.
И так, приступим, для начала нам нужно как вы уже знаете изменить базу (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
};
Вауля, всё готово.
Теперь те методы которые были мусором в вашей базе, которые вызываются с других классов, меняйте на имеющиеся. Если вы хотите что либо вернуть, делайте это аккуратно и тестируйте, крашнет ли метод.
Ну а на этом всё, всем желаю удачи.
________________________________________________________________________________________________
Ниже будет обновляемая информация о всевозможных крашах и их решений, а так же добавление новых и интересных функций
________________________________________________________________________________________________
Советую закоментить клан тег, из за него возможен краш
Подождёт
________________________________________________________________________________________________
Назойливый метод, который крашит игру после смены карты, сервера, загрузки кфг.
Но это не значит, что он единственный был на то причиной.
Но это не значит, что он единственный был на то причиной.
Только что потестил, всё работает, если где то у вас остался вызов метода GetValue - дайте знать
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, скинченджер быть не должен, это не правильная реализация
Поэтому оставьте просто как должно быть:
Она у вас может быть по другому названа, либо реализована отдельно от 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
[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 );
Последнее редактирование модератором: