Вопрос Visible by enemy

sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как можно его сделать?
 
sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как же хочется крашика
Забаненный
Статус
Оффлайн
Регистрация
13 Янв 2019
Сообщения
1,508
Реакции[?]
403
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
что бы не было глупых вопросов
1577199468295.png
 
Начинающий
Статус
Оффлайн
Регистрация
5 Май 2019
Сообщения
10
Реакции[?]
2
Поинты[?]
0
  1. Код:
    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;
    [*]                }
    [*]            }
    [*]        }
    [*]        }
    [*]            }
    [*]            }
 
Последнее редактирование модератором:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
1. заходишь в IDA, выбираешь client.dll, ищешь строку "Format: ent_find <substring>\n", приходишь в определенную функцию. декомпилишь, видишь цикл:
for ( i = GetCBaseEntity(CGameEntitySystem, 0i64); i; i = GetCBaseEntity(CGameEntitySystem, i) ) {...}
это и есть итерация ентитей.
делаешь сигу на функцию и находишь от этой сиги оффсет на котором лежит инструкция(1) 48 8B 0D ?? ?? ?? ?? mov rcx, cs:CGameEntitySystem ( в моем случае оффсет от начала функции +51),
далее находишь оффсет от сиги на котором лежит инструкция(2) E8 ?? ?? ?? ?? call GetCBaseEntity(в моем случае +5A)
1577703970800.png
2.в своем чите находишь функцию по сиге, получаешь из инструкции(1) CGameEntitySystem с помощью функции:
(uintptr_t это unsigned long long)
C++:
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
с помощью той же функции получаешь GetCBaseEntity, дальше прототип и получение адреса функции:
C++:
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)
                   {типа тебя не видно свету}
                }
}
если че внатуре давно доту не обновлял, поэтому в IDA у меня база от старой client.dll но это не проблема, не думаю что там все радикально поменялось.
вот и все. а ваще берешь IDA,x64dbg,Microsoft Visual Studio и ебашишь реверсить и писать код.
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
обновил доту, нихуя не изменилось, все работает. 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 не изменилась. ваще нихуя не изменилось кароче, все работает.
 
sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
обновил доту, нихуя не изменилось, все работает. 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 не изменилась. ваще нихуя не изменилось кароче, все работает.
Нетвары не пробовал юзать,говорят упрощают жизнь,а так спасибо(хоть поздно ответили)
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Нетвары не пробовал юзать,говорят упрощают жизнь,а так спасибо(хоть поздно ответили)
нетвары:
C++:
// спизжено с 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);
                }
            }
        }
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
ща потестил в демке, битмаска 5 бит. потестил в пабчике на новом акке, битмаска 4 бит(DIRE_RADIANT_хз_хз). странно, но имейте ввиду.
 
Последнее редактирование:
sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ща потестил в демке, битмаска 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)
                   {типа тебя не видно свету}
можно проще в разы,зачем тут лишняя инфа?
 
sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
просто я туплю. бывает. просвети меня если не жалко.
bool IsVisibleByEnemyTeam() {
int offset = sourcesdk::NetVarManager::GetInstance()
.GetNetVarOffset("DT_DOTA_BaseNPC", "m_iTaggedAsVisibleByTeam");
return *reinterpret_cast<byte*>(this + offset) == 30;
}
 
sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
до того как ты ответил в теме,про то как сделать vbe я узнал в гугле
Пожалуйста, авторизуйтесь для просмотра ссылки.
битмаска в пабе 4 бит. 4 бит не могут быть 30(0b11110). в том то и проблема. я сам ахуел когда в паб зашел.
играл за дайр. открыл свою ентити в дебаггере и c8c было 0xa(0b1010) когда меня не видели враги, и 0xe(0b1110) когда видели. а в демке битмаска 5 бит, и когда не видят враги 22, а когда видят 30. конечно можно просто захардкодить что битмаска 4 бит, но все же. поэтому и написал в этой теме что в пабе битмаска 4 бит, чтобы люди чекали не == 30 а == 14
 
Последнее редактирование:
sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
битмаска в пабе 4 бит. 4 бит не могут быть 30(0b11110). в том то и проблема. я сам ахуел когда в паб зашел.
играл за дайр. открыл свою ентити в дебаггере и c8c было 0xa(0b1010) когда меня не видели враги, и 0xe(0b1110) когда видели. а в демке битмаска 5 бит, и когда не видят враги 22, а когда видят 30. конечно можно просто захардкодить что битмаска 4 бит, но все же. поэтому и написал в этой теме что в пабе битмаска 4 бит, чтобы люди чекали не == 30 а == 14
Ну это старое сдк так-то))
 
sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
битмаска в пабе 4 бит. 4 бит не могут быть 30(0b11110). в том то и проблема. я сам ахуел когда в паб зашел.
играл за дайр. открыл свою ентити в дебаггере и c8c было 0xa(0b1010) когда меня не видели враги, и 0xe(0b1110) когда видели. а в демке битмаска 5 бит, и когда не видят враги 22, а когда видят 30. конечно можно просто захардкодить что битмаска 4 бит, но все же. поэтому и написал в этой теме что в пабе битмаска 4 бит, чтобы люди чекали не == 30 а == 14
я пока еще не садился за эту тему,но буду иметь ввиду,спасибо
 
Сверху Снизу