датипа "видим ли ты для енеми"?
ну тип тебе код будет говорить видит ли тебя любой противник или нет (как я понял)нихуя не понял но очень интересно
class PlayerList
{
public:
IClientEntity* pLocalEz = hackManager.pLocal();
class CPlayer
{
public:
Vector ShootPos[125];
int index = -1;
IClientEntity* entity;
Vector reset = Vector(0, 0, 0);
float lastsim = 0;
Vector lastorigin = Vector(0, 0, 0);
std::vector< float > pastangles;
int ScannedNumber = 0;
int BestIndex = 0;
float difference = 0.f;
float Backtrack[360];
float flLastPelvisAng = 0.f;
float flEyeAng = 0.f;
float resolved = 0.f;
float posedifference = 0.f;
Hitbox* box;
CPlayer(IClientEntity* entity, int index, int lastsim) : entity(entity), index(index), lastsim(lastsim)
{
}
};
private:
std::vector< CPlayer > Players;
public:
void Update()
{
for (int i = 0; i < Players.size(); i++)
{
if (Players.entity == nullptr)
[*] {
[*] Players.erase(Players.begin() + i);
[*] continue;
[*] }
[*] if (Players.entity == pLocalEz)
[*] {
[*] Players.erase(Players.begin() + i);
[*] continue;
[*] };
[*] }
[*] }
[*]
[*] void UpdateSim()
[*] {
[*] Update();
[*] for (int i = 0; i < Players.size(); i++)
[*] {
[*] Players.lastsim = Players.entity->GetSimulationTime();
[*] }
[*] }
[*]
[*] void AddPlayer(IClientEntity* ent)
[*] {
[*] Players.emplace_back(CPlayer(ent, ent->GetIndex(), ent->GetSimulationTime()));
[*] }
[*]
[*] CPlayer* FindPlayer(IClientEntity* ent)
[*] {
[*] for (int i = 0; i < Players.size(); i++)
[*] if (Players.index == ent->GetIndex())
[*] return &Players;
[*] AddPlayer(ent);
[*] return FindPlayer(ent);
[*] }
[*]} plist;
[*]
[*]
[*]
[*]
[*] // perfect resolver [censored] tapping
[*] bool backtrackthis;
[*] int velocity;
[*]#define lerpticks rand() / 420 / velocity - 420 * 0
[*]
[*] class pEntity
[*] {
[*] public:
[*] int ViewAngles;
[*] int Velocity;
[*] int LBY;
[*] int EyeAngles;
[*] bool InAir;
[*] bool Forceatek;
[*] int tickcount;
[*] };
[*]
[*]
[*] void BackTrack()
[*] {
[*] pEntity* pLocal;
[*] pEntity* player;
[*] player->tickcount = player->Velocity / lerpticks * 0 + 420 - player->ViewAngles;
[*] }
[*]
[*] bool Baim;
[*] bool HsOnly;
[*] int BruteForce;
[*] bool lbyexposed;
[*] bool abouttoland;
[*] int OldAngles;
[*] float GetEyeAnglesXY;
[*] float UnresolvedAngle[64]; //Can't combine with next statement because otherwise huge {}; with values.
[*] float LBYEyeDelta; //This is for a later resolver that is not mine.
[*] float FinalAngle[64]; //Value to set after resolving is done.
[*] float MovingLBY[64]; //Value to be used if we can't resolve entity.
[*] float StoredLBY[64]; //This will be compared to BrokenLBY.
[*] float BlackListedAngles[64][3]; //A multidimensional array for blacklisting angles, will be reset upon round end.
[*] float BrokenLBY[64]; //Value to be assigned if the entity is fakewalking.
[*] float LowerBodyTargetToSubtract[64]; //This is for a later statement.
[*] bool BrokenLBYHasValue[64]; //Failsafe to make sure we don't assign the entity's eye angles to a garbage value.
[*] bool BlackListedAnglesHasValue[64][3]; //This must be multidimensional, as [0][0] might have a value, but [0][1] might not!
[*] bool ResolvedStatus[64]; //If we log an animation based LBY update, we know for sure that we have resolved the entity (if the entity is using a static angle).
[*] bool DidWeUseAnimation[64]; //For keeping track of the stupid number of sequence related variables.
[*] static unsigned short BlackListCounter[64]; //This is for keeping track of the second digit in the multi dimensional arrays. Due to the nature of this, only the most recent blacklisted angle will not be shot at, it will suffice though
[*] static unsigned short SequenceCounter[64]; //This is for keeping track of the subtraction of LowerBodyTargetToSubtract.
[*]
[*] namespace Menu
[*] {
[*] namespace Vars
[*] {
[*] bool BruteForce;
[*] }
[*] }
[*] bool onground;
[*] bool lbybroken;
[*]
[*]
[*]
[*]
[*] void dab(Vector* & Angle, PlayerList::CPlayer* Player)
[*] {
[*] pEntity* pLocal;
[*] pEntity* player;
[*] Player->reset.y = Angle->y;
[*] for (int i = 0; i < Interfaces::Engine->GetMaxClients(); ++i)
[*] if (Menu::Window.RageBotTab.AdvancedResolver1.GetState())
[*] //
[*] if (player->InAir && !HsOnly) // if the ent is in air and its not hs only
[*] {
[*] Baim = true;
[*] }
[*] else if (player->InAir && HsOnly)
[*] {
[*] if (Menu::Vars::BruteForce)
[*] {
[*] BruteForce = true;
[*] if (Angle->y != Player->resolved)
[*] {
[*] }
[*] else
[*] {
[*] if (abouttoland) // about to land reached peak of jump
[*] {
[*] Sleep(2); // wait 2 seconds so they hit the ground and lby updates
[*] pLocal->Forceatek = true; // fire
[*] }
[*] }
[*] }
[*] else
[*] {
[*] onground = true;
[*] }
[*]
[*] if (lbyexposed)
[*] {
[*] pLocal->Forceatek = true;
[*] }
[*] else
[*] {
[*] int delta = player->ViewAngles - player->LBY;
[*] if (delta > 29)
[*] {
[*] bool lbybroken;
[*] lbybroken = true;
[*] }
[*]
[*] if (onground)
[*] {
[*] if (player->Velocity > 0)
[*] {
[*] player->EyeAngles = player->LBY;
[*] }
[*] else
[*] {
[*] lbybroken = true;
[*] }
[*]
[*]
[*] if (lbybroken)
[*] {
[*] if (Menu::Vars::BruteForce)
[*] {
[*] BruteForce = true;
[*] if (Globals::missedshots >= 1 && Globals::missedshots <= 1)
[*] if (Angle->y != Player->resolved)
[*] {
[*] }
[*] else
[*] {
[*] Sleep(1.1);
[*] lbyexposed = true;
[*] player->EyeAngles = OldAngles;
[*] }
[*] }
[*]
[*]
[*] if (lbyexposed)
[*] {
[*] pLocal->Forceatek = true;
[*] }
[*] else
[*] {
[*] int delta = player->ViewAngles - player->LBY;
[*] if (delta > 29)
[*] {
[*] bool lbybroken;
[*] lbybroken = true;
[*]
[*] }
[*]
[*] if (lbybroken)
[*] player->ViewAngles = player->ViewAngles + delta;
[*] }
[*] }
[*] }
[*] }
[*] }
[*] }
inline uintptr_t GetAbsoluteAddress(uintptr_t instruction_ptr, int offset, int size)
{
return instruction_ptr + *reinterpret_cast<int32_t*>(instruction_ptr + offset) + size;
}
// спиздил с https://github.com/LWSS/McDota/tree/master/src
typedef uintptr_t(__fastcall* fGetBaseEntity)
(uintptr_t, uintptr_t);
fGetBaseEntity GetBaseEntityFunc;
uintptr_t CGameEntitySystem;
...
GetBaseEntityFunc = (fGetBaseEntity)GetAbsoluteAddress(
tvoya_siga + 0x5a/*начало инструкции*/,
1/*сколько отступить(call это e8 это 1 байт)*/,
5/*полный размер инструкции(1 байт сама инструкция и 4 байт DWORD)*/
);
CGameEntitySystem = (GetAbsoluteAddress(tvoya_siga + 0x51, 3, 7));/*это указатель на CGameEntitySystem*/
CGameEntitySystem = *reinterpret_cast<uintptr_t*>(CGameEntitySystem);/*получаешь значение этого указателя*/
/*дальше вызываешь:*/
for (
ent = GetBaseEntityFunc(CGameEntSystem, 0);
ent;
ent = GetBaseEntityFunc(CGameEntSystem, ent)
)
{
/*типа тут все ентити...*/
/*находишь нужную тебе ентити(ну допустим по имени, чисто ради теста):*/
/*где-то в пизде, вне цикла, очевидно*/
...
typedef int64_t(_fastcall* v_strcmp)(const char*, const char*);
v_strcmp vstrcmp;
typedef int64_t(_fastcall* v_stristr)(const char*, const char*);
v_stristr vstristr;
...
vstrcmp = (v_strcmp)GetProcAddress(GetModuleHandleA("tier0.dll"), "V_stricmp_fast");
vstristr = (v_stristr)((uintptr_t)vstrcmp-416);(сорри захардкодил как рак ебаный)
...
//старая функция. пореверсил ту функцию где была строка "Format: ent_find <substring>\n" и на ее основе сделал эту.
// наверно тебе придется ее обновить ибо это было дохуя патчей назад. ну это нихуя не сложно на самом деле
const char* getInternalName(uintptr_t baseent) {
uintptr_t trash = *reinterpret_cast<uintptr_t*>(baseent + 0x10);
uintptr_t internalname = *reinterpret_cast<uintptr_t*>(trash + 0x18);
return reinterpret_cast<const char*>(internalname);
}
...
/*а вот теперь в самом цикле*/
/*открываешь IDA, client.dll, ищешь строку m_iTaggedAsVisibleByTeam, находишь оффсет(это c8c)*/
/*битмаска вроде состоит из 5 бит: DIRE_RADIANT_2хуйни_NEUTRALS
например, 01110 это значит тебя не видит команда тьмы, видит команда света, видит две хуйни(внатуре две хуйни можешь не париться) и не видят нейтралы
11110 это тебя видит тьма свет две хуйни и не видят нейтралы
10110 это тебя видит тьма но не видит свет видят две хуйни и не видят нейтралы и так далее
*/
if (vstristr(getInternalName(ent), "npc_dota_hero_blablabla") != 0)
{
/* & это побитовое умножение. &0b11000 это значит первые 2 бит оставить как есть а остальные 3 бита поставить в ноль.*/
/* почему первые два? потому что тебе скорее всего нужно будет знать лишь видят ли тебя тьма и свет, а на нейтралов похуй*/
if(*reinterpret_cast<long*>(ent+0xc8c) & 0b11000 == 0b11000 )
{типа тебя видно свету и тьме}
else if(*reinterpret_cast<long*>(ent+0xc8c) & 0b11000 == 0b01000)
{типа тебя не видно тьме}
else if(*reinterpret_cast<long*>(ent+0xc8c) & 0b11000 == 0b10000)
{типа тебя не видно свету}
}
}
Нетвары не пробовал юзать,говорят упрощают жизнь,а так спасибо(хоть поздно ответили)обновил доту, нихуя не изменилось, все работает. 0xc8c оффсет m_iTaggedAsVisibleByTeam,сига на ent_find
48 83 EC 28 8B 02 83 F8 02 7D 12 48 8D 0D ? ? ? ? 48 83 C4 28 48 FF 25 ? ? ? ? 48 89 6C , оффсеты от нее 0x51 CGameEntitySystem, 0x5a GetCBaseEntity, getInternalName не изменилась. ваще нихуя не изменилось кароче, все работает.
нетвары:Нетвары не пробовал юзать,говорят упрощают жизнь,а так спасибо(хоть поздно ответили)
// спизжено с https://github.com/LWSS/McDota/blob/d02a5850260cd57679173eb87fc4e2d886369d16/src/Netvars.cpp
#define PACK( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop))
...
struct Netvar // Size: 0x138
{
const char* netvarName; // ex: m_nMinGPULevel
void* _pad[2]; // 0x8
uint32_t offset; // 0x18
uint32_t something; // 0x1C
void* _pad2[10];
const char* typeName; // ex: uint8
void* _pad3[5];
};
PACK(struct NetvarWrapper
{
Netvar* netVar;
char sevenByteSwag[7];
});
struct SchemaRecvTable {
const char* varName;
void* _pad;
int32_t numOfVars;
int32_t something;
NetvarWrapper* netVarsArray;
};
class ClientClass
{
public:
char* m_pNetworkName; //0x0000 //EX: CDOTAPlayer
char* m_pClassName; //0x0008 //EX: C_DOTAPlayer
ClientClass* m_pNext; //0x0010
void* m_pCreateFn; //0x0018
void* m_pCreateEventFn; //0x0020
void* m_pDestroyFn; //0x0028
char pad_0030[8]; //0x0030
char* m_pLibNameAndClassName; //0x0038 //EX: libclient.so!C_DOTAPlayer
SchemaRecvTable* recvTable; //0x0040
char pad_0048[20]; //0x0048
EClassIds m_ClassID; //0x005C
void* N00000046; //0x0060
void* N00000047; //0x0068
};
typedef uintptr_t(__fastcall* fGetAllClasses)();
fGetAllClasses GetAllClasses;
...
void* CSourceClient = CreateInterface<void*>("client.dll", "Source2Client002");
GetAllClasses = (fGetAllClasses)*reinterpret_cast<uintptr_t*>(
*reinterpret_cast<uintptr_t*>(CSourceClient)
+ 8 * 27
);
for (ClientClass* classes = (ClientClass*)GetAllClasses(); classes; classes = classes->m_pNext) {
if (!classes->recvTable || !classes->recvTable->netVarsArray || !classes->m_pClassName)
continue;
//какой-нибудь вывод куда-нибудь(например в файл)(я вывожу в консоль доты)(CMSG это Msg - экспорт с tier0.dll)
//CMSG("%s - NumOfVars: %d\n", (uintptr_t)classes->m_pClassName, (uintptr_t)classes->recvTable->numOfVars,0,0);
if (vstrcmp(classes->m_pClassName,"C_DOTA_BaseNPC") == 0) { // допустим конкретно для класса C_DOTA_BaseNPC(vstrcmp это V_stricmp_fast - экспорт с tier0.dll)
for (int i = 0; i < classes->recvTable->numOfVars; i++) {
Netvar* var = classes->recvTable->netVarsArray[i].netVar;
if (!var
|| !var->netvarName
|| !var->typeName)
break;
CMSG("\t(%d)%s -> %s @ 0x%x\n", i + 1, (uintptr_t)var->netvarName, (uintptr_t)var->typeName, (uintptr_t)var->offset);
}
}
}
можно проще в разы,зачем тут лишняя инфа?ща потестил в демке, битмаска 5 бит. потестил в пабчике на новом акке, битмаска 4 бит(DIRE_RADIANT_хз_хз). странно, но имейте ввиду.
C++:if(*reinterpret_cast<long*>(ent+0xc8c) & 0b11000 == 0b11000 || *reinterpret_cast<long*>(ent+0xc8c) & 0b11000 == 0b1100) {типа тебя видно свету и тьме} else if(*reinterpret_cast<long*>(ent+0xc8c) & 0b11000 == 0b01000 || *reinterpret_cast<long*>(ent+0xc8c) & 0b11000 == 0b0100) {типа тебя не видно тьме} else if(*reinterpret_cast<long*>(ent+0xc8c) & 0b11000 == 0b10000 || *reinterpret_cast<long*>(ent+0xc8c) & 0b11000 == 0b1000) {типа тебя не видно свету}
не ебу но ты прав.можно проще в разы,зачем тут лишняя инфа?
можно проще сделать,я не знаю зачем ты делаешь сложнее?не ебу но ты прав.
просто я туплю. бывает. просвети меня если не жалко.можно проще сделать,я не знаю зачем ты делаешь сложнее?
просто я туплю. бывает. просвети меня если не жалко.
bool IsVisibleByEnemyTeam() { | |
int offset = sourcesdk::NetVarManager::GetInstance() | |
.GetNetVarOffset("DT_DOTA_BaseNPC", "m_iTaggedAsVisibleByTeam"); | |
return *reinterpret_cast<byte*>(this + offset) == 30; | |
} |
до того как ты ответил в теме,про то как сделать vbe я узнал в гуглепросто я туплю. бывает. просвети меня если не жалко.
битмаска в пабе 4 бит. 4 бит не могут быть 30(0b11110). в том то и проблема. я сам ахуел когда в паб зашел.до того как ты ответил в теме,про то как сделать vbe я узнал в гуглеПожалуйста, авторизуйтесь для просмотра ссылки.
Ну это старое сдк так-то))битмаска в пабе 4 бит. 4 бит не могут быть 30(0b11110). в том то и проблема. я сам ахуел когда в паб зашел.
играл за дайр. открыл свою ентити в дебаггере и c8c было 0xa(0b1010) когда меня не видели враги, и 0xe(0b1110) когда видели. а в демке битмаска 5 бит, и когда не видят враги 22, а когда видят 30. конечно можно просто захардкодить что битмаска 4 бит, но все же. поэтому и написал в этой теме что в пабе битмаска 4 бит, чтобы люди чекали не == 30 а == 14
я пока еще не садился за эту тему,но буду иметь ввиду,спасибобитмаска в пабе 4 бит. 4 бит не могут быть 30(0b11110). в том то и проблема. я сам ахуел когда в паб зашел.
играл за дайр. открыл свою ентити в дебаггере и c8c было 0xa(0b1010) когда меня не видели враги, и 0xe(0b1110) когда видели. а в демке битмаска 5 бит, и когда не видят враги 22, а когда видят 30. конечно можно просто захардкодить что битмаска 4 бит, но все же. поэтому и написал в этой теме что в пабе битмаска 4 бит, чтобы люди чекали не == 30 а == 14
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz