Вопрос Как получить account id игроков во время катки

Начинающий
Статус
Оффлайн
Регистрация
19 Фев 2022
Сообщения
6
Реакции[?]
0
Поинты[?]
0
Здравствуйте! Хочу получить account id всех 10х человек с которыми я попался в катке. Раньше можно было через server_log уже как год это не работает
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
если ничего особо не изменилось(доту не обновлял давно) то в PlayerResourcePlayerData_t поищи, там было(и щас наверно тоже есть) поле m_iPlayerSteamID
стимайди32 это (m_iPlayerSteamID & 0xFFFFFFFF)
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Какой-то ты странненький. Инфа же на поверхности лежит. Сдампи C_DOTAPlayerController и посмотри.
C++:
class CDOTAPlayerController : public VClass {
public:
    GETTER(uint64_t, GetSteamID, Netvars::Offsets.m_steamID);
};
Чтобы его (их) найти, можно просто по энтити листу пробежаться после загрузки карты (ну или хукнуть OnAddEntity и себе куда-то в map сохранять плееров).

Внимание, экстремальный говнокод (Либералист, не стукай). Добавляешь его в CBaseEntity, ну и в хуке OnAddEntity чекаешь.
C++:
    bool IsPlayer() {
        const char* typeName = SchemaDynamicBinding()->bindingName;
        if (!typeName)
            return false;
        if (!strcmp(typeName, "C_DOTAPlayerController"))
            return true;
        return false;
    }
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Какой-то ты странненький. Инфа же на поверхности лежит. Сдампи C_DOTAPlayerController и посмотри.
C++:
class CDOTAPlayerController : public VClass {
public:
    GETTER(uint64_t, GetSteamID, Netvars::Offsets.m_steamID);
};
Чтобы его (их) найти, можно просто по энтити листу пробежаться после загрузки карты (ну или хукнуть OnAddEntity и себе куда-то в map сохранять плееров).

Внимание, экстремальный говнокод (Либералист, не стукай). Добавляешь его в CBaseEntity, ну и в хуке OnAddEntity чекаешь.
C++:
    bool IsPlayer() {
        const char* typeName = SchemaDynamicBinding()->bindingName;
        if (!typeName)
            return false;
        if (!strcmp(typeName, "C_DOTAPlayerController"))
            return true;
        return false;
    }
я предпочитаю IsInstanceOfClass, который чекает сам класс, и всех его родителей и проверяет есть ли там нужный
(разумеется ниже == это std::string_view::operator== а не pointer::operator==, мало ли у кого GetName возвращает конст чар*)
C++:
bool helper_check_hierarchy_for_name(const CSchemaClassBinding& binding, std::string_view name) noexcept
{
    for (const auto& parent_node : binding.GetParents())
    {
        if (const auto* parent = parent_node.GetParent(); parent)
        {
            if (parent->GetName() == name || helper_check_hierarchy_for_name(*parent, name))
                return true;
        }
    }
    return false;
}
//C_BaseEntity vvv
    const CSchemaClassBinding& GetBinding() const
    {
        const auto* result = CallVFunc<0, CSchemaClassBinding*>();
        if (!result)
            throw std::runtime_error{ "C_BaseEntity::GetBinding returned nullptr!" };
        return *result;
    }
    bool IsInstanceOfClass(std::string_view cls) const
    {
        const auto& binding = GetBinding();
        if (binding.GetName() == cls)
            return true;
        else
            return helper_check_hierarchy_for_name(binding, cls);
        return false;
    }
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
^^^ вверху
vvv внизу
другими словами, после
//C_BaseEntity vvv
идет код который принадлежит/связан с C_BaseEntity
из STL мсфт спиздил
C++:
#if !_HAS_EXCEPTIONS
            const bool _Zero_uncaught_exceptions = true;
#elif _HAS_DEPRECATED_UNCAUGHT_EXCEPTION
            const bool _Zero_uncaught_exceptions = !_STD uncaught_exception(); // TRANSITION, ArchivedOS-12000909
#else // ^^^ _HAS_DEPRECATED_UNCAUGHT_EXCEPTION / !_HAS_DEPRECATED_UNCAUGHT_EXCEPTION vvv
            const bool _Zero_uncaught_exceptions = _STD uncaught_exceptions() == 0;
#endif // !_HAS_DEPRECATED_UNCAUGHT_EXCEPTION
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
я предпочитаю IsInstanceOfClass, который чекает сам класс, и всех его родителей и проверяет есть ли там нужный
(разумеется ниже == это std::string_view::operator== а не pointer::operator==, мало ли у кого GetName возвращает конст чар*)
C++:
bool helper_check_hierarchy_for_name(const CSchemaClassBinding& binding, std::string_view name) noexcept
{
    for (const auto& parent_node : binding.GetParents())
    {
        if (const auto* parent = parent_node.GetParent(); parent)
        {
            if (parent->GetName() == name || helper_check_hierarchy_for_name(*parent, name))
                return true;
        }
    }
    return false;
}
//C_BaseEntity vvv
    const CSchemaClassBinding& GetBinding() const
    {
        const auto* result = CallVFunc<0, CSchemaClassBinding*>();
        if (!result)
            throw std::runtime_error{ "C_BaseEntity::GetBinding returned nullptr!" };
        return *result;
    }
    bool IsInstanceOfClass(std::string_view cls) const
    {
        const auto& binding = GetBinding();
        if (binding.GetName() == cls)
            return true;
        else
            return helper_check_hierarchy_for_name(binding, cls);
        return false;
    }
Ну попросил же не стукать 🙄
 
Сверху Снизу