-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В общем. Вот вам тру гайд для ваших ̶т̶р̶у̶ ̶2̶2̶8̶ ̶с̶а̶м̶о̶п̶и̶с̶а̶н̶н̶ы̶х̶ ̶п̶р̶и̶в̶а̶т̶о̶к̶ паст.
И так, приступим. Что же у нас есть:
Индус (любой сурц),
Прямые руки.
Начнём с добалвения CVar'ов в сурц:
Далее делаем нашу переменную в settings.cpp/h под названием NightMode
(Я её добавил в неймспуйс Esp) (Писать как её сделать думаю не нужно)
Далее добавляем сам найтмуд в esp.cpp и esp.h:
в esp.h добавляем в приват:
void NightMode();
Помимо этого ещё в esp.cpp реализуем такую х*йню:
bool done = false;
После этого делаем чекбокс в client.cpp и будет вам счастье и мир во всех пастах.
Ещё нам нужно обновить класс IMaterialSystem:
UPD: ещё добавьте в CEsp::Render такую строчку:
NightMode();
UPDV2: hitmarker кому нибудь нужен? :D + grenade prediction скоро солью.
И так, приступим. Что же у нас есть:
Индус (любой сурц),
Прямые руки.
Начнём с добалвения CVar'ов в сурц:
Идём крче в sdk.h добавляем эта:
Далее в sdk.cpp:
Далее создаём файл в проекте с названием CVar.h
Код:
#include "../CVar.h" // в столбик с инклудами
static ConVar* GetConVar(); // в публик класс Interfaces
static ConVar* g_pConVar; // в приват класс Interfaces
Код:
ConVar* Interfaces::g_pConVar = nullptr; // в начало неймспейса SDK
ConVar* Interfaces::GetConVar() // В конец неймспейса
{
if (!g_pConVar)
{
CreateInterfaceFn pfnFactory = CaptureFactory(VSTDLIB_DLL);
g_pConVar = CaptureInterface<ConVar>(pfnFactory, VENGINEVCAR_INTERFACE_VERSION);
}
return g_pConVar;
}
Код:
#pragma once
#include "SDK/SDK.h"
#define FORCEINLINE_CVAR
#pragma region CVAR Flags
#define FCVAR_NONE 0
#define FCVAR_UNREGISTERED (1<<0)
#define FCVAR_DEVELOPMENTONLY (1<<1)
#define FCVAR_GAMEDLL (1<<2)
#define FCVAR_CLIENTDLL (1<<3)
#define FCVAR_HIDDEN (1<<4)
// ConVar only
#define FCVAR_PROTECTED (1<<5)
#define FCVAR_SPONLY (1<<6)
#define FCVAR_ARCHIVE (1<<7)
#define FCVAR_NOTIFY (1<<8)
#define FCVAR_USERINFO (1<<9)
#define FCVAR_CHEAT (1<<14)
#define FCVAR_PRINTABLEONLY (1<<10)
#define FCVAR_UNLOGGED (1<<11)
#define FCVAR_NEVER_AS_STRING (1<<12)
#define FCVAR_REPLICATED (1<<13)
#define FCVAR_DEMO (1<<16)
#define FCVAR_DONTRECORD (1<<17)
#define FCVAR_NOT_CONNECTED (1<<22)
#define FCVAR_ARCHIVE_XBOX (1<<24)
#define FCVAR_SERVER_CAN_EXECUTE (1<<28)
#define FCVAR_SERVER_CANNOT_QUERY (1<<29)
#define FCVAR_CLIENTCMD_CAN_EXECUTE (1<<30)
#pragma endregion
namespace SDK
{
class ConVar
{
public:
char pad_0x0000[0x4]; //0x0000
ConVar* pNext; //0x0004
__int32 bRegistered; //0x0008
char* pszName; //0x000C
char* pszHelpString; //0x0010
__int32 nFlags; //0x0014
char pad_0x0018[0x4]; //0x0018
ConVar* pParent; //0x001C
char* pszDefaultValue; //0x0020
char* strString; //0x0024
__int32 StringLength; //0x0028
float fValue; //0x002C
__int32 nValue; //0x0030
__int32 bHasMin; //0x0034
float fMinVal; //0x0038
__int32 bHasMax; //0x003C
float fMaxVal; //0x0040
void* fnChangeCallback; //0x0044
void ConVar::SetValue(const char* value)
{
typedef void(__thiscall* OriginalFn)(void*, const char*);
return GetMethod<OriginalFn>(this, 14)(this, value);
}
void ConVar::SetValue(float value)
{
typedef void(__thiscall* OriginalFn)(void*, float);
return GetMethod<OriginalFn>(this, 15)(this, value);
}
void ConVar::SetValue(int value)
{
typedef void(__thiscall* OriginalFn)(void*, int);
return GetMethod<OriginalFn>(this, 16)(this, value);
}
void ConVar::SetValue(Color value)
{
typedef void(__thiscall* OriginalFn)(void*, Color);
return GetMethod<OriginalFn>(this, 17)(this, value);
}
char* ConVar::GetName()
{
typedef char*(__thiscall* OriginalFn)(void*);
return GetMethod<OriginalFn>(this, 5)(this);
}
char* ConVar::GetDefault()
{
return pszDefaultValue;
}
void RegisterConCommand(ConVar* pCommandBase)
{
typedef ConVar*(__thiscall* FindVarFn)(void*, ConVar*);
GetMethod< FindVarFn >(this, 12)(this, pCommandBase);
}
void UnRegisterConCommand(ConVar* pCommandBase)
{
typedef ConVar*(__thiscall* FindVarFn)(void*, ConVar*);
GetMethod< FindVarFn >(this, 13)(this, pCommandBase);
}
ConVar* FindVar(const char *var_name)
{
typedef ConVar*(__thiscall* FindVarFn)(void*, const char*);
return GetMethod< FindVarFn >(this, 15)(this, var_name);
}
};
}
(Я её добавил в неймспуйс Esp) (Писать как её сделать думаю не нужно)
Далее добавляем сам найтмуд в esp.cpp и esp.h:
Код:
void CEsp::NightMode()
{
if (Settings::Esp::NightMode)
{
if (!done)
{
static auto sv_skyname = Interfaces::GetConVar()->FindVar("sv_skyname");
static auto r_DrawSpecificStaticProp = Interfaces::GetConVar()->FindVar("r_DrawSpecificStaticProp");
r_DrawSpecificStaticProp->SetValue(1);
sv_skyname->SetValue("sky_csgo_night02");
for (MaterialHandle_t i = Interfaces::MaterialSystem()->FirstMaterial(); i != Interfaces::MaterialSystem()->InvalidMaterial(); i = Interfaces::MaterialSystem()->NextMaterial(i))
{
IMaterial *pMaterial = Interfaces::MaterialSystem()->GetMaterial(i);
if (!pMaterial)
continue;
const char* group = pMaterial->GetTextureGroupName();
const char* name = pMaterial->GetName();
if (strstr(group, "World textures"))
{
pMaterial->ColorModulate(0.10, 0.10, 0.10);
}
if (strstr(group, "StaticProp"))
{
pMaterial->ColorModulate(0.30, 0.30, 0.30);
}
if (strstr(name, "models/props/de_dust/palace_bigdome"))
{
pMaterial->SetMaterialVarFlag(MATERIAL_VAR_NO_DRAW, true);
}
if (strstr(name, "models/props/de_dust/palace_pillars"))
{
pMaterial->ColorModulate(0.30, 0.30, 0.30);
}
if (strstr(group, "Particle textures"))
{
pMaterial->SetMaterialVarFlag(MATERIAL_VAR_NO_DRAW, true);
}
done = true;
}
}
}
else
{
if (done)
{
for (MaterialHandle_t i = Interfaces::MaterialSystem()->FirstMaterial(); i != Interfaces::MaterialSystem()->InvalidMaterial(); i = Interfaces::MaterialSystem()->NextMaterial(i))
{
IMaterial *pMaterial = Interfaces::MaterialSystem()->GetMaterial(i);
if (!pMaterial)
continue;
const char* group = pMaterial->GetTextureGroupName();
const char* name = pMaterial->GetName();
if (strstr(group, "World textures"))
{
pMaterial->ColorModulate(1, 1, 1);
}
if (strstr(group, "StaticProp"))
{
pMaterial->ColorModulate(1, 1, 1);
}
if (strstr(name, "models/props/de_dust/palace_bigdome"))
{
pMaterial->SetMaterialVarFlag(MATERIAL_VAR_NO_DRAW, false);
}
if (strstr(name, "models/props/de_dust/palace_pillars"))
{
pMaterial->ColorModulate(1, 1, 1);
}
if (strstr(group, "Particle textures"))
{
pMaterial->SetMaterialVarFlag(MATERIAL_VAR_NO_DRAW, false);
}
}
done = false;
}
}
}
void NightMode();
bool done = false;
После этого делаем чекбокс в client.cpp и будет вам счастье и мир во всех пастах.
Ещё нам нужно обновить класс IMaterialSystem:
В IMaterialSystem.h в начале кода после строчки
#include "SDK.h"
добавляем
typedef unsigned short MaterialHandle_t;
Далее меняем класс IMaterialSystem на:
#include "SDK.h"
добавляем
typedef unsigned short MaterialHandle_t;
Далее меняем класс IMaterialSystem на:
Код:
class IMaterialSystem
{
public:
IMaterial* CreateMaterial( const char* pMaterialName , KeyValues* pVMTKeyValues )
{
VirtualFn( IMaterial* )( PVOID , const char* , KeyValues* );
return GetMethod< OriginalFn >( this , 83 )( this , pMaterialName , pVMTKeyValues );
}
IMaterial* FindMaterial( const char* pMaterialName , const char* pTextureGroupName , bool complain = true , const char* pComplainPrefix = 0 )
{
VirtualFn( IMaterial* )( PVOID , const char* , const char* , bool , const char* );
return GetMethod< OriginalFn >( this , 84 )( this , pMaterialName , pTextureGroupName , complain , pComplainPrefix );
}
MaterialHandle_t FirstMaterial()
{
typedef MaterialHandle_t(__thiscall* FirstMaterialFn)(void*);
return GetMethod <FirstMaterialFn>(this, 86)(this);
}
MaterialHandle_t NextMaterial(MaterialHandle_t h)
{
typedef MaterialHandle_t(__thiscall* NextMaterialFn)(void*, MaterialHandle_t);
return GetMethod <NextMaterialFn>(this, 87)(this, h);
}
MaterialHandle_t InvalidMaterial()
{
typedef MaterialHandle_t(__thiscall* InvalidMaterialFn)(void*);
return GetMethod <InvalidMaterialFn>(this, 88)(this);
}
IMaterial* GetMaterial(MaterialHandle_t h)
{
typedef IMaterial*(__thiscall* GetMaterialFn)(void*, MaterialHandle_t);
return GetMethod <GetMaterialFn>(this, 89)(this, h);
}
};
UPD: ещё добавьте в CEsp::Render такую строчку:
NightMode();
UPDV2: hitmarker кому нибудь нужен? :D + grenade prediction скоро солью.
Последнее редактирование: