Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Как получить координаты крипов?

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Июн 2021
Сообщения
10
Реакции
0
Vector3 vec = pCGameEntitySystem->GetBaseEntityFromHandle(handle)->pSceneNode()->vecAbsOrigin();
в этом все по 0.
Есть еще CNetworkOriginCellCoordQuantizedVector m_vecOrigin; // 0x0090
нашел в инете такую структуру, но так и не смог расшифровать эти значения, возможно решение за ними?
vecOrigin:
Expand Collapse Copy
m_cellX: uint16
m_cellY: uint16
m_cellZ: uint16
m_nOutsideWorld: uint16
m_vecX: CNetworkedQuantizedFloat
m_vecY: CNetworkedQuantizedFloat
m_vecZ: CNetworkedQuantizedFloat

и еще я не понимаю почему в списке энтити - крипы далеко не всегда находятся. Изначально я писал в методе onRender (хотел сделать хп бар крипам другой). Брал циклом всех энтити из pCGameEntitySystem, с лимитом GetHighestEntityIndex() (у которого устарел оффсет, я поменял на 0x2090, нашел по сигнатуре в чит энжене, но я хз насколько он верен). И в этом цикле сравнивал название схемы с нужным мне strstr(pInst->GetSchemaClassBinding()->m_bindingName(), "C_DOTA_BaseNPC_Creep_Lane"), крипы находились только иногда, хотя должны были находится каждый тик функции.

Сейчас попробовал писать в методе хука OnAddEntity, но и тут не все так просто, этот хук возвращает наличие крипа уже куда стабильнее, но срабатывает в не очень ясные моменты, не только при добавлении крипа, а еще и раз в несколько секунд просто так.


По итогу 2 вопроса, как получить координаты крипа и как сделать стабильное получение его энтити каждый тик рендера.
 
я сомневаюсь что без кода можно как то нормально ответить на твои вопросы потому что условно с позицией ты на бумаге правильно ее получаешь ентитя->pSceneNode->vecAbsOrigin так что у тебя скорее всего или ентитя хуйня или оффсеты хуйня чето явно хуйня
 
я сомневаюсь что без кода можно как то нормально ответить на твои вопросы потому что условно с позицией ты на бумаге правильно ее получаешь ентитя->pSceneNode->vecAbsOrigin так что у тебя скорее всего или ентитя хуйня или оффсеты хуйня чето явно хуйня
вот первая попытка сделать в рендере
Код:
Expand Collapse Copy
auto CAndromedaClient::OnRender() -> void
{
    if (GetAndromedaGUI()->IsVisible())
        GetAndromedaMenu()->OnRenderMenu();

    GetFontManager()->FirstInitFonts();
    GetFontManager()->m_VerdanaFont.DrawString(1, 1, ImColor(255, 255, 0), FW1_LEFT, XorStr(CHEAT_NAME));

    CGameEntitySystem* ges = SDK::Interfaces::GameEntitySystem();
    int max = ges->GetHighestEntityIndex();
    for (int i = 0; i < max; i++) {
        auto e = ges->GetBaseEntity(i);
        if (e) {
            if (strstr(e->GetSchemaClassBinding()->m_bindingName(), "C_DOTA_BaseNPC_Creep_Lane")) {
                Vector3 vec = e->pSceneNode()->vecAbsOrigin();
                char buffer[256];
                sprintf_s(buffer, "x: %f, y: %f, z: %f", vec.m_x, vec.m_y, vec.m_z);
                DEV_LOG(buffer);
            }
        }
    }
}
вторая - прямо в хуке
Код:
Expand Collapse Copy
auto Hook_OnAddEntity( CGameEntitySystem* pCGameEntitySystem    , CEntityInstance* pInst , CHandle handle ) -> void
{
    DEV_LOG( "Hook_OnAddEntity: %p , %s\n" , pInst->pEntityIdentity() , pInst->GetSchemaClassBinding()->m_bindingName() );
    if (strstr(pInst->GetSchemaClassBinding()->m_bindingName(), "C_DOTA_BaseNPC_Creep_Lane")) {
        Vector3 vec = pCGameEntitySystem->GetBaseEntityFromHandle(handle)->pSceneNode()->vecAbsOrigin();
        char buffer[256];
        sprintf_s(buffer, "x: %f, y: %f, z: %f", vec.m_x, vec.m_y, vec.m_z);
        DEV_LOG(buffer);
    }
    return OnAddEntity_o( pCGameEntitySystem , pInst , handle );
}

вот схемы оффсетов
Код:
Expand Collapse Copy
class CGameSceneNode {
public:
    SCHEMA_OFFSET("CGameSceneNode", "m_vecAbsOrigin", vecAbsOrigin, Vector3);
    SCHEMA_OFFSET("CGameSceneNode", "m_vecOrigin", m_vecOrigin, CNetworkOriginCellCoordQuantizedVector);
};

class CEntityInstance : public IHandleEntity
{
public:
    auto GetSchemaClassBinding() -> CSchemaClassBinding*
    {
        CSchemaClassBinding* pBinding = nullptr;

        VirtualFn( void )( CEntityInstance* , CSchemaClassBinding** );
        vget< Fn >( this , SDK::VMT_Index::CSchemaSystem::SchemaClassInfo )( this , &pBinding );

        return pBinding;
    }

public:
    SCHEMA_OFFSET("CEntityInstance", "m_pSceneNode", pSceneNode, CGameSceneNode*);
    SCHEMA_OFFSET( "CEntityInstance" , "m_pEntity" , pEntityIdentity , CEntityIdentity* );
};

вот оффсет для получения лимита энтити

Код:
Expand Collapse Copy
// Check -> CGameEntitySystem_OnAddEntity 15 vmt index -> "FF 81 ? ? ? ? 48 85 D2"
static constexpr auto OFFSET_CGameEntitySystem_GetHighestEntityIndex = 0x2090;
вот первая попытка сделать в рендере
Код:
Expand Collapse Copy
auto CAndromedaClient::OnRender() -> void
{
    if (GetAndromedaGUI()->IsVisible())
        GetAndromedaMenu()->OnRenderMenu();

    GetFontManager()->FirstInitFonts();
    GetFontManager()->m_VerdanaFont.DrawString(1, 1, ImColor(255, 255, 0), FW1_LEFT, XorStr(CHEAT_NAME));

    CGameEntitySystem* ges = SDK::Interfaces::GameEntitySystem();
    int max = ges->GetHighestEntityIndex();
    for (int i = 0; i < max; i++) {
        auto e = ges->GetBaseEntity(i);
        if (e) {
            if (strstr(e->GetSchemaClassBinding()->m_bindingName(), "C_DOTA_BaseNPC_Creep_Lane")) {
                Vector3 vec = e->pSceneNode()->vecAbsOrigin();
                char buffer[256];
                sprintf_s(buffer, "x: %f, y: %f, z: %f", vec.m_x, vec.m_y, vec.m_z);
                DEV_LOG(buffer);
            }
        }
    }
}
вторая - прямо в хуке
Код:
Expand Collapse Copy
auto Hook_OnAddEntity( CGameEntitySystem* pCGameEntitySystem    , CEntityInstance* pInst , CHandle handle ) -> void
{
    DEV_LOG( "Hook_OnAddEntity: %p , %s\n" , pInst->pEntityIdentity() , pInst->GetSchemaClassBinding()->m_bindingName() );
    if (strstr(pInst->GetSchemaClassBinding()->m_bindingName(), "C_DOTA_BaseNPC_Creep_Lane")) {
        Vector3 vec = pCGameEntitySystem->GetBaseEntityFromHandle(handle)->pSceneNode()->vecAbsOrigin();
        char buffer[256];
        sprintf_s(buffer, "x: %f, y: %f, z: %f", vec.m_x, vec.m_y, vec.m_z);
        DEV_LOG(buffer);
    }
    return OnAddEntity_o( pCGameEntitySystem , pInst , handle );
}

вот схемы оффсетов
Код:
Expand Collapse Copy
class CGameSceneNode {
public:
    SCHEMA_OFFSET("CGameSceneNode", "m_vecAbsOrigin", vecAbsOrigin, Vector3);
    SCHEMA_OFFSET("CGameSceneNode", "m_vecOrigin", m_vecOrigin, CNetworkOriginCellCoordQuantizedVector);
};

class CEntityInstance : public IHandleEntity
{
public:
    auto GetSchemaClassBinding() -> CSchemaClassBinding*
    {
        CSchemaClassBinding* pBinding = nullptr;

        VirtualFn( void )( CEntityInstance* , CSchemaClassBinding** );
        vget< Fn >( this , SDK::VMT_Index::CSchemaSystem::SchemaClassInfo )( this , &pBinding );

        return pBinding;
    }

public:
    SCHEMA_OFFSET("CEntityInstance", "m_pSceneNode", pSceneNode, CGameSceneNode*);
    SCHEMA_OFFSET( "CEntityInstance" , "m_pEntity" , pEntityIdentity , CEntityIdentity* );
};

вот оффсет для получения лимита энтити

Код:
Expand Collapse Copy
// Check -> CGameEntitySystem_OnAddEntity 15 vmt index -> "FF 81 ? ? ? ? 48 85 D2"
static constexpr auto OFFSET_CGameEntitySystem_GetHighestEntityIndex = 0x2090;
результат везде один x: -0.000000, y: 0.000000, z: -0.000000
 
Если крипов не видно значит сам считаешь позицию если видишь, то от позиции курсора берешь значение и вычитаешь позицию объекта который знаешь где находится. например сф в миду кидает койлы зная позицию сфа можно луч построить до крипа. и длину этого луча вычитаешь из позиции героя. если коротко.
 
вот первая попытка сделать в рендере
Код:
Expand Collapse Copy
auto CAndromedaClient::OnRender() -> void
{
    if (GetAndromedaGUI()->IsVisible())
        GetAndromedaMenu()->OnRenderMenu();

    GetFontManager()->FirstInitFonts();
    GetFontManager()->m_VerdanaFont.DrawString(1, 1, ImColor(255, 255, 0), FW1_LEFT, XorStr(CHEAT_NAME));

    CGameEntitySystem* ges = SDK::Interfaces::GameEntitySystem();
    int max = ges->GetHighestEntityIndex();
    for (int i = 0; i < max; i++) {
        auto e = ges->GetBaseEntity(i);
        if (e) {
            if (strstr(e->GetSchemaClassBinding()->m_bindingName(), "C_DOTA_BaseNPC_Creep_Lane")) {
                Vector3 vec = e->pSceneNode()->vecAbsOrigin();
                char buffer[256];
                sprintf_s(buffer, "x: %f, y: %f, z: %f", vec.m_x, vec.m_y, vec.m_z);
                DEV_LOG(buffer);
            }
        }
    }
}
вторая - прямо в хуке
Код:
Expand Collapse Copy
auto Hook_OnAddEntity( CGameEntitySystem* pCGameEntitySystem    , CEntityInstance* pInst , CHandle handle ) -> void
{
    DEV_LOG( "Hook_OnAddEntity: %p , %s\n" , pInst->pEntityIdentity() , pInst->GetSchemaClassBinding()->m_bindingName() );
    if (strstr(pInst->GetSchemaClassBinding()->m_bindingName(), "C_DOTA_BaseNPC_Creep_Lane")) {
        Vector3 vec = pCGameEntitySystem->GetBaseEntityFromHandle(handle)->pSceneNode()->vecAbsOrigin();
        char buffer[256];
        sprintf_s(buffer, "x: %f, y: %f, z: %f", vec.m_x, vec.m_y, vec.m_z);
        DEV_LOG(buffer);
    }
    return OnAddEntity_o( pCGameEntitySystem , pInst , handle );
}

вот схемы оффсетов
Код:
Expand Collapse Copy
class CGameSceneNode {
public:
    SCHEMA_OFFSET("CGameSceneNode", "m_vecAbsOrigin", vecAbsOrigin, Vector3);
    SCHEMA_OFFSET("CGameSceneNode", "m_vecOrigin", m_vecOrigin, CNetworkOriginCellCoordQuantizedVector);
};

class CEntityInstance : public IHandleEntity
{
public:
    auto GetSchemaClassBinding() -> CSchemaClassBinding*
    {
        CSchemaClassBinding* pBinding = nullptr;

        VirtualFn( void )( CEntityInstance* , CSchemaClassBinding** );
        vget< Fn >( this , SDK::VMT_Index::CSchemaSystem::SchemaClassInfo )( this , &pBinding );

        return pBinding;
    }

public:
    SCHEMA_OFFSET("CEntityInstance", "m_pSceneNode", pSceneNode, CGameSceneNode*);
    SCHEMA_OFFSET( "CEntityInstance" , "m_pEntity" , pEntityIdentity , CEntityIdentity* );
};

вот оффсет для получения лимита энтити

Код:
Expand Collapse Copy
// Check -> CGameEntitySystem_OnAddEntity 15 vmt index -> "FF 81 ? ? ? ? 48 85 D2"
static constexpr auto OFFSET_CGameEntitySystem_GetHighestEntityIndex = 0x2090;

результат везде один x: -0.000000, y: 0.000000, z: -0.000000
ты бы продебажил хотябы

проверь список сущностей, есть он вообще или нет, есть крипы или нет, если есть попробуй вывести их хп
если хп выводит, тогда дальше смотри проверь оффсеты мб они поменялись после патча
 
Назад
Сверху Снизу