Вопрос Странность ishero

Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
355
Реакции[?]
24
Поинты[?]
12K
Допустим я итерирую сущность от 0 до highestentityindex.

Есть ли другой способ проверить является ли данная сущность героем (не используя !strcmp(SchemaBindingName C_DOTABaseNPC_Hero). Я пробовал вызывать JS.IsHero но проблема в том не все ентити считается BaseNpc и вызов её крашит (read outside of memory)
C++:
char __fastcall C_DOTA_BaseNPC::IsHero(__int64 a1)
{
  return *(a1 + 0x14) & 1;  // a1 eto  entity + 0xa80,    +14 - m_iUnitType (0xa94)
}
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
851
Реакции[?]
335
Поинты[?]
67K
Допустим я итерирую сущность от 0 до highestentityindex.

Есть ли другой способ проверить является ли данная сущность героем (не используя !strcmp(SchemaBindingName C_DOTABaseNPC_Hero). Я пробовал вызывать JS.IsHero но проблема в том не все ентити считается BaseNpc и вызов её крашит (read outside of memory)
C++:
char __fastcall C_DOTA_BaseNPC::IsHero(__int64 a1)
{
  return *(a1 + 0x14) & 1;  // a1 eto  entity + 0xa80,    +14 - m_iUnitType (0xa94)
}
неполноценный у тебя IsHero; не так игра делает, она сначала чекает бейзнпс.
можешь альтернативно по CEntityClass смотреть(либо массив булеан/битов по CEntityClassNetworkInstance::m_ClassID с единичками для всех детей бейзнпс, либо чекаешь цепочку наследования и ищешь там бейзнпс(либо по имени либо напрямую по указателю, они статичные))
C++:
class CEntityClass
{
public:
    CPanoramaGameScriptScope* m_pPanoramaGameScriptScope;
    EntInput_t* m_pInputs;
    EntOutput_t* m_pOutputs;
    uint32_t m_nInputCount;
    uint32_t m_nOutputCount;
    struct CEntitySharedGapSignature* unk_CEntitySharedGapSignature;
    EntClassComponentOverride_t* m_pComponentOverrides;
    CEntityClassInfo* m_pClassInfo;
    CEntityClassInfo* m_pBaseClassInfo;
    const char* m_designerName;
    void* unk1;
    std::uint32_t m_flags;
    std::uint32_t m_nAllHelpersFlags;
    CUtlVector<std::int16_t> m_ComponentOffsets;
    CUtlVector<void*> m_AllHelpers;
    void* BaseClassPlus80;
    void* unk2;
    datamapField* m_pDataMapFields;
    void* unk4;
    void* unk5;
    std::uint16_t m_iDataMapFieldCount;
    std::uint16_t unk6;
    std::uint16_t unk7;
    std::uint16_t unk8;
    const char* m_pszScopedName;
    FlattenedSerializerHandle_t* m_pFlattenedSerializer;
    CUtlVector<void*> EntInputMap_StringToEntInput_t;
    void* unk9;
    void* unk10;
    void* unk11;
    std::int32_t m_requiredEHandle;
    std::uint32_t pad;
    CEntityClass* m_pForwardLinkNextClass;
    CEntityIdentity* m_pNextClass;
    CEntityClassNetworkInstance* m_pNetworkInstance;
};
class CEntityClassNetworkInstance
{
public:
    const char* m_pszClientName;
    const char* m_pszServerName;
    CEntityClass* m_pClass;
    const char* m_pszScopedName;
    FlattenedSerializerHandle_t* m_pSerializerHandle;
    std::int32_t m_ClassID;
    std::int32_t m_iRuntimeIndex;
    void* unk1;
    void* unk2;
};
class CEntityClassInfo
{
public:
    const char* m_pszClassname;
    const char* m_pszCPPClassname;
    const char* m_pszDescription;
    CEntityClass* m_pClass;
    CEntityClassInfo* m_pBaseClassInfo;
    CSchemaClassBinding* m_pSchemaClassBinding;
    void* m_pDataDescMap;
    void* m_pPredDescMap;
};
1736607286751.png
1736607330185.png
1736607341202.png
 
Сверху Снизу