Исходник Dota 2 SDK

🤡
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2014
Сообщения
127
Реакции[?]
163
Поинты[?]
21K
Типичное сдк, который сделан на основе схемы срс2, что-то примерно как у Liberalist , ток без дампов интерфейсов, геймсистем (Лень впиливать).
Эта ветка чисто дотавская, постараюсь её держать up2date для доты, но мб будет лень, посмотрим.

Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
30 Авг 2020
Сообщения
777
Реакции[?]
245
Поинты[?]
10K
Типичное сдк, который сделан на основе схемы срс2, что-то примерно как у Liberalist , ток без дампов интерфейсов, геймсистем (Лень впиливать).
Эта ветка чисто дотавская, постараюсь её держать up2date для доты, но мб будет лень, посмотрим.

Пожалуйста, авторизуйтесь для просмотра ссылки.
upd. извиняюсь, попутал.
 
🤡
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2014
Сообщения
127
Реакции[?]
163
Поинты[?]
21K
Обновил под Crownfall, заебали эти бэкфлипы с CUtlTsHash и схемой
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
777
Реакции[?]
331
Поинты[?]
63K
Типичное сдк, который сделан на основе схемы срс2, что-то примерно как у Liberalist , ток без дампов интерфейсов, геймсистем (Лень впиливать).
Эта ветка чисто дотавская, постараюсь её держать up2date для доты, но мб будет лень, посмотрим.

Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
это char[8] (см. CResourceSystem::GetTypeManager(ulong long). там как uint64_t передается(vsurf на скрине))
1714196037535.png
самый удобный варик метапропы идентифицировать как мне кажется это высирать рва в дамп когда value не равно нуллптр и не удалось идентифицировать по имени, и потом просто искать этот высер в классах идти фиксить и заново дампить и так пока они не кончатся

C++:
//super shitcode

template<class T, T sentinel_element>
struct TerminatedSequence
{
    const T* begin{};

    std::size_t GetLength() const noexcept
    {
        std::size_t result = 0;
        if (begin)
        {
            for (const T* i = begin; (*i != sentinel_element); ++i)
                ++result;
        }
        return result;
    }

    std::size_t GetLengthLimited(std::size_t limit) const noexcept
    {
        std::size_t result = 0;
        if (begin)
        {
            const T* const end = begin + limit;
            for (const T* i = begin; (i < end) && (*i != sentinel_element); ++i)
                ++result;
        }
        return result;
    }
};

using SZ_String = TerminatedSequence<char, '\x00'>;

struct SchemaMetadataHelper
{
    static DWORD _get_func_rva(const MemImage64& image, void* func)
    {
        if (image.IsTextPtr(func))
            return image.GetRVA(func);

        return 0;
    }
    struct named_filter
    {
        const char* name;
        void* func;
    };
    enum class MetaDataType
    {
        CHARS8,
        CSTRING_PTR,
        NAMED_FILTER_PTR,
        CSTRING_PTR_PTR,
        CSTRINGPAIR_PTR,
        I32,
        FLOAT32,
        FUNC,
        LAST = FUNC,
        NONE,
    };

    static constexpr auto _CHARS8 = std::to_array<std::string_view>({
        "MDiskDataForResourceType",
        "MResourceTypeForInfoType",
        });
    static constexpr auto _CSTRING_PTR = std::to_array<std::string_view>({
        "MAlternateAttributeName",
        "MAttributeName",
        "MClassScriptBase",
        "MClassScriptDescription",
        "MDefaultString",
        "MDmElementType",
        "MEmitKV3TransferPostLoadFn",
        "MEmitKV3TransferPostSaveFn",
        "MEmitKV3TransferPreSaveFn",
        "MKeyField",
        "MKeyfieldname",
        "MNetworkAlias",
        "MNetworkChangeCallback",
        "MNetworkEncoder",
        "MNetworkExcludeByName",
        "MNetworkExcludeByUserGroup",
        "MNetworkGroup",
        "MNetworkIncludeByName",
        "MNetworkIncludeByUserGroup",
        "MNetworkSerializer",
        "MNetworkTypeAlias",
        "MNetworkUserGroup",
        "MPropertyAttributeChoiceEnumName",
        "MPropertyAttributeChoiceName",
        "MPropertyAttributeEditor",
        "MPropertyAttributeRange",
        "MPropertyFriendlyName",
        "MPropertyGroupName",
        "MResourceBlockType",
        "MSrc1ImportAttributeName",
        "MSrc1ImportDmElementType",
        "MVectorIsSometimesCoordinate",
        "MCellForDomain",
        "MCustomFGDMetadata",
        "MParticleReplacementOp",
        "MPropertyCustomEditor",
        "MPropertyCustomFGDType",
        "MPropertyExtendedEditor",
        "MVDataOutlinerIcon",
        "MFieldVerificationName",
        "MKV3TransferName",
        "MPropertyDescription",
        "MPropertyStartGroup",
        "MPropertySuppressExpr",
        "MVDataUniqueMonotonicInt",
        "MScriptDescription",
        "MPropertyIconName",
        "MPropertyAttributeSuggestionName",
        });
    static constexpr auto _NAMED_FILTER_PTR = std::to_array<std::string_view>({
        "MNetworkUserGroupSendProxyRecipientsFilter",
        });
    static constexpr auto _CSTRING_PTR_PTR = std::to_array<std::string_view>({
        "MAliases",
        });
    static constexpr auto _CSTRINGPAIR_PTR = std::to_array<std::string_view>({
        "MNetworkOverride",
        "MNetworkVarNames",
        "MNetworkReplayCompatField",
        "MNetworkUserGroupProxy",
        "MNetworkVarTypeOverride",
        });
    static constexpr auto _I32 = std::to_array<std::string_view>({
        "MAlignment",
        "MGenerateArrayKeynamesFirstIndex",
        "MNetworkBitCount",
        "MNetworkEncodeFlags",
        "MNetworkPriority",
        "MParticleOperatorType",
        "MPropertySortPriority",
        "MResourceVersion",
        "MParticleMinVersion",
        "MParticleMaxVersion",
        "MVDataNodeType",
        "MVDataOverlayType",
        "MNetworkVarEmbeddedFieldOffsetDelta",
        });
    static constexpr auto _FLOAT32 = std::to_array<std::string_view>({
        "MNetworkMaxValue",
        "MNetworkMinValue",
        });
    static constexpr auto _FUNC = std::to_array<std::string_view>({
        "MNetworkSendProxyRecipientsFilter",
        "MPropertyChoiceProviderFn",
        "MPropertyElementNameFn",
        "MPreSerializationCallback",
        "MUnserializationCallback",
        });
    static constexpr auto mappings = std::to_array({
        std::span<const std::string_view, std::dynamic_extent>{ _CHARS8 },
        std::span<const std::string_view, std::dynamic_extent>{ _CSTRING_PTR },
        std::span<const std::string_view, std::dynamic_extent>{ _NAMED_FILTER_PTR },
        std::span<const std::string_view, std::dynamic_extent>{ _CSTRING_PTR_PTR },
        std::span<const std::string_view, std::dynamic_extent>{ _CSTRINGPAIR_PTR },
        std::span<const std::string_view, std::dynamic_extent>{ _I32 },
        std::span<const std::string_view, std::dynamic_extent>{ _FLOAT32 },
        std::span<const std::string_view, std::dynamic_extent>{ _FUNC },
        });

    static MetaDataType classify(std::string_view name)
    {
        for (std::size_t i = 0; i <= std::to_underlying(MetaDataType::LAST); ++i)
        {
            const auto& list = mappings[i];
            if (std::ranges::find(list, name) != list.end())
                return static_cast<MetaDataType>(i);
        }

        return MetaDataType::NONE;
    }

    static std::string extract(const MemImage64& image, MetaDataType type, void* value, const void* address)
    {
        std::string result{};
        if (value)
        {
            if (type == MetaDataType::CHARS8)
            {
                SZ_String str{ (const char*)value };
                return { str.begin, str.GetLengthLimited(8) };
            }
            else if (type == MetaDataType::CSTRING_PTR)
            {
                const auto str = *(const char**)value;
                if (str)
                    return { str };
            }
            else if (type == MetaDataType::NAMED_FILTER_PTR)
            {
                const auto filter = *(named_filter**)value;
                if (filter)
                {
                    if (filter->name)
                    {
                        result += std::format("name: {}", filter->name);
                        if (filter->func)
                            result += ' ';
                    }
                    if (filter->func)
                        result += std::format("func: {} + {}", image.name, (void*)_get_func_rva(image, filter->func));
                }
            }
            else if (type == MetaDataType::CSTRING_PTR_PTR)
            {
                const auto str_ptr = *(const char***)value;
                if (str_ptr)
                {
                    const auto str = *str_ptr;
                    if (str)
                        return { str };
                }
            }
            else if (type == MetaDataType::CSTRINGPAIR_PTR)
            {
                const auto str1 = *(const char**)value;
                const auto str2 = *(const char**)((void**)value + 1);
                if (str1)
                {
                    result += str1;
                    if (str2)
                        result += ' ';
                }
                if (str2)
                    result += str2;
            }
            else if (type == MetaDataType::I32)
            {
                result += std::format("{}", *(std::int32_t*)value);
            }
            else if (type == MetaDataType::FLOAT32)
            {
                result += std::format("{}", *(float*)value);
            }
            else if (type == MetaDataType::FUNC)
            {
                void* actual_fn = *(void**)value;
                if (!actual_fn)
                    result += "func: nullptr";
                else
                    result += std::format("func: {} + {}", image.name, (void*)_get_func_rva(image, actual_fn));
            }
            else
                result += std::format("<unidentified non-null meta: {} + {}>", image.name, (void*)image.GetRVA(address));
        }

        return result;
    }

};
и еще у вас с MI проблемы
Пожалуйста, авторизуйтесь для просмотра ссылки.
std::uint8_t m_bHasBaseClass; // 0x0023
это не булеана, это количество бейз классов.
C++:
// Registered binary: server.dll (project 'server')
// Alignment: 8
// Size: 0x1338
// Has VTable
// Is Abstract
class CDOTA_Buff : public CHorizontalMotionController
C++:
class CDOTA_Buff(size: 0x1338 bytes) extends CHorizontalMotionController,CVerticalMotionController
оффсет в SchemaBaseClassInfoData_t это оффсет на котором начинается порция данного родителя
C++:
base class CHorizontalMotionController(Multiple Inheritance offset 0x0)
base class CVerticalMotionController(Multiple Inheritance offset 0x10)
1714197650634.png
1714197675717.png
это из дампа 2016 года(см https://yougame.biz/threads/139802/page-7#post-3083895)
C++:
class SchemaClassInfoData_t(size: 0xc0 bytes, project "schemalib")
| SCHEMA_CLASS_HAS_TRIVIAL_CONSTRUCTOR
| SCHEMA_CLASS_HAS_TRIVIAL_DESTRUCTOR
| SCHEMA_CLASS_TEMP_HACK_HAS_NOSCHEMA_MEMBERS

-----members of class SchemaClassInfoData_t-----
    SchemaString_t m_Name(offset 0x0)
    int32 m_nSizeOf(offset 0x18)
    int32 m_nAlignOf(offset 0x1c)
    SchemaArray_t< SchemaClassFieldData_t > m_Fields(offset 0x20)
    SchemaArray_t< SchemaBaseClassInfoData_t > m_BaseClasses(offset 0x40)
    SchemaArray_t< SchemaFieldMetadataOverrideData_t > m_FieldMetadataOverrides(offset 0x50)
    SchemaArray_t< CSchemaClassInfo* > m_NestedClasses(offset 0x60)
    SchemaArray_t< CSchemaEnumInfo* > m_NestedEnums(offset 0x70)
    SchemaMetadataSetData_t m_Metadata(offset 0x80)
 
...
class SchemaBaseClassInfoData_t(size: 0x10 bytes, project "schemalib")
| SCHEMA_CLASS_HAS_TRIVIAL_CONSTRUCTOR
| SCHEMA_CLASS_HAS_TRIVIAL_DESTRUCTOR

-----members of class SchemaBaseClassInfoData_t-----
    uint32 m_nOffset(offset 0x0)
    CSchemaClassInfo* m_pClass(offset 0x8)
ну и еще интересный факт там не m_pSelf в SchemaClassInfoData_t. если быть точнее это указатель на первую зарегистрированную инстанцию(в большинстве случаев это указатель на себя). существуют "дубликаты"(в плане имени) классов(типа CDOTA_Buff - он есть в клиенте и в сервере - они правда совпадают практически полностью). шема заносит себе в таблицу только первую зареганную инстанцию - кто успел тот и съел(сервер регается до клиента), остальные как бы "инитятся" но не вносятся в таблицу и у них этот указатель указывает на первую зареганную инстанцию, которая их перекрывает. сами биндинги все еще рабочие и существуют(просто вне таблицы), но там в основном ничего не отличается(кроме адресов статик членов и подчеркиваний в классах типа C_BaseEntity/CBaseEntity и тд)
(2016 скрин)
 
Последнее редактирование:
🤡
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2014
Сообщения
127
Реакции[?]
163
Поинты[?]
21K
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
это char[8] (см. CResourceSystem::GetTypeManager(ulong long). там как uint64_t передается(vsurf на скрине))
Посмотреть вложение 275568
самый удобный варик метапропы идентифицировать как мне кажется это высирать рва в дамп когда value не равно нуллптр и не удалось идентифицировать по имени, и потом просто искать этот высер в классах идти фиксить и заново дампить и так пока они не кончатся

C++:
//super shitcode

template<class T, T sentinel_element>
struct TerminatedSequence
{
    const T* begin{};

    std::size_t GetLength() const noexcept
    {
        std::size_t result = 0;
        if (begin)
        {
            for (const T* i = begin; (*i != sentinel_element); ++i)
                ++result;
        }
        return result;
    }

    std::size_t GetLengthLimited(std::size_t limit) const noexcept
    {
        std::size_t result = 0;
        if (begin)
        {
            const T* const end = begin + limit;
            for (const T* i = begin; (i < end) && (*i != sentinel_element); ++i)
                ++result;
        }
        return result;
    }
};

using SZ_String = TerminatedSequence<char, '\x00'>;

struct SchemaMetadataHelper
{
    static DWORD _get_func_rva(const MemImage64& image, void* func)
    {
        if (image.IsTextPtr(func))
            return image.GetRVA(func);

        return 0;
    }
    struct named_filter
    {
        const char* name;
        void* func;
    };
    enum class MetaDataType
    {
        CHARS8,
        CSTRING_PTR,
        NAMED_FILTER_PTR,
        CSTRING_PTR_PTR,
        CSTRINGPAIR_PTR,
        I32,
        FLOAT32,
        FUNC,
        LAST = FUNC,
        NONE,
    };

    static constexpr auto _CHARS8 = std::to_array<std::string_view>({
        "MDiskDataForResourceType",
        "MResourceTypeForInfoType",
        });
    static constexpr auto _CSTRING_PTR = std::to_array<std::string_view>({
        "MAlternateAttributeName",
        "MAttributeName",
        "MClassScriptBase",
        "MClassScriptDescription",
        "MDefaultString",
        "MDmElementType",
        "MEmitKV3TransferPostLoadFn",
        "MEmitKV3TransferPostSaveFn",
        "MEmitKV3TransferPreSaveFn",
        "MKeyField",
        "MKeyfieldname",
        "MNetworkAlias",
        "MNetworkChangeCallback",
        "MNetworkEncoder",
        "MNetworkExcludeByName",
        "MNetworkExcludeByUserGroup",
        "MNetworkGroup",
        "MNetworkIncludeByName",
        "MNetworkIncludeByUserGroup",
        "MNetworkSerializer",
        "MNetworkTypeAlias",
        "MNetworkUserGroup",
        "MPropertyAttributeChoiceEnumName",
        "MPropertyAttributeChoiceName",
        "MPropertyAttributeEditor",
        "MPropertyAttributeRange",
        "MPropertyFriendlyName",
        "MPropertyGroupName",
        "MResourceBlockType",
        "MSrc1ImportAttributeName",
        "MSrc1ImportDmElementType",
        "MVectorIsSometimesCoordinate",
        "MCellForDomain",
        "MCustomFGDMetadata",
        "MParticleReplacementOp",
        "MPropertyCustomEditor",
        "MPropertyCustomFGDType",
        "MPropertyExtendedEditor",
        "MVDataOutlinerIcon",
        "MFieldVerificationName",
        "MKV3TransferName",
        "MPropertyDescription",
        "MPropertyStartGroup",
        "MPropertySuppressExpr",
        "MVDataUniqueMonotonicInt",
        "MScriptDescription",
        "MPropertyIconName",
        "MPropertyAttributeSuggestionName",
        });
    static constexpr auto _NAMED_FILTER_PTR = std::to_array<std::string_view>({
        "MNetworkUserGroupSendProxyRecipientsFilter",
        });
    static constexpr auto _CSTRING_PTR_PTR = std::to_array<std::string_view>({
        "MAliases",
        });
    static constexpr auto _CSTRINGPAIR_PTR = std::to_array<std::string_view>({
        "MNetworkOverride",
        "MNetworkVarNames",
        "MNetworkReplayCompatField",
        "MNetworkUserGroupProxy",
        "MNetworkVarTypeOverride",
        });
    static constexpr auto _I32 = std::to_array<std::string_view>({
        "MAlignment",
        "MGenerateArrayKeynamesFirstIndex",
        "MNetworkBitCount",
        "MNetworkEncodeFlags",
        "MNetworkPriority",
        "MParticleOperatorType",
        "MPropertySortPriority",
        "MResourceVersion",
        "MParticleMinVersion",
        "MParticleMaxVersion",
        "MVDataNodeType",
        "MVDataOverlayType",
        "MNetworkVarEmbeddedFieldOffsetDelta",
        });
    static constexpr auto _FLOAT32 = std::to_array<std::string_view>({
        "MNetworkMaxValue",
        "MNetworkMinValue",
        });
    static constexpr auto _FUNC = std::to_array<std::string_view>({
        "MNetworkSendProxyRecipientsFilter",
        "MPropertyChoiceProviderFn",
        "MPropertyElementNameFn",
        "MPreSerializationCallback",
        "MUnserializationCallback",
        });
    static constexpr auto mappings = std::to_array({
        std::span<const std::string_view, std::dynamic_extent>{ _CHARS8 },
        std::span<const std::string_view, std::dynamic_extent>{ _CSTRING_PTR },
        std::span<const std::string_view, std::dynamic_extent>{ _NAMED_FILTER_PTR },
        std::span<const std::string_view, std::dynamic_extent>{ _CSTRING_PTR_PTR },
        std::span<const std::string_view, std::dynamic_extent>{ _CSTRINGPAIR_PTR },
        std::span<const std::string_view, std::dynamic_extent>{ _I32 },
        std::span<const std::string_view, std::dynamic_extent>{ _FLOAT32 },
        std::span<const std::string_view, std::dynamic_extent>{ _FUNC },
        });

    static MetaDataType classify(std::string_view name)
    {
        for (std::size_t i = 0; i <= std::to_underlying(MetaDataType::LAST); ++i)
        {
            const auto& list = mappings[i];
            if (std::ranges::find(list, name) != list.end())
                return static_cast<MetaDataType>(i);
        }

        return MetaDataType::NONE;
    }

    static std::string extract(const MemImage64& image, MetaDataType type, void* value, const void* address)
    {
        std::string result{};
        if (value)
        {
            if (type == MetaDataType::CHARS8)
            {
                SZ_String str{ (const char*)value };
                return { str.begin, str.GetLengthLimited(8) };
            }
            else if (type == MetaDataType::CSTRING_PTR)
            {
                const auto str = *(const char**)value;
                if (str)
                    return { str };
            }
            else if (type == MetaDataType::NAMED_FILTER_PTR)
            {
                const auto filter = *(named_filter**)value;
                if (filter)
                {
                    if (filter->name)
                    {
                        result += std::format("name: {}", filter->name);
                        if (filter->func)
                            result += ' ';
                    }
                    if (filter->func)
                        result += std::format("func: {} + {}", image.name, (void*)_get_func_rva(image, filter->func));
                }
            }
            else if (type == MetaDataType::CSTRING_PTR_PTR)
            {
                const auto str_ptr = *(const char***)value;
                if (str_ptr)
                {
                    const auto str = *str_ptr;
                    if (str)
                        return { str };
                }
            }
            else if (type == MetaDataType::CSTRINGPAIR_PTR)
            {
                const auto str1 = *(const char**)value;
                const auto str2 = *(const char**)((void**)value + 1);
                if (str1)
                {
                    result += str1;
                    if (str2)
                        result += ' ';
                }
                if (str2)
                    result += str2;
            }
            else if (type == MetaDataType::I32)
            {
                result += std::format("{}", *(std::int32_t*)value);
            }
            else if (type == MetaDataType::FLOAT32)
            {
                result += std::format("{}", *(float*)value);
            }
            else if (type == MetaDataType::FUNC)
            {
                void* actual_fn = *(void**)value;
                if (!actual_fn)
                    result += "func: nullptr";
                else
                    result += std::format("func: {} + {}", image.name, (void*)_get_func_rva(image, actual_fn));
            }
            else
                result += std::format("<unidentified non-null meta: {} + {}>", image.name, (void*)image.GetRVA(address));
        }

        return result;
    }

};
и еще у вас с MI проблемы
Пожалуйста, авторизуйтесь для просмотра ссылки.
std::uint8_t m_bHasBaseClass; // 0x0023
это не булеана, это количество бейз классов.
C++:
// Registered binary: server.dll (project 'server')
// Alignment: 8
// Size: 0x1338
// Has VTable
// Is Abstract
class CDOTA_Buff : public CHorizontalMotionController
C++:
class CDOTA_Buff(size: 0x1338 bytes) extends CHorizontalMotionController,CVerticalMotionController
оффсет в SchemaBaseClassInfoData_t это оффсет на котором начинается порция данного родителя
C++:
base class CHorizontalMotionController(Multiple Inheritance offset 0x0)
base class CVerticalMotionController(Multiple Inheritance offset 0x10)
Посмотреть вложение 275569
Посмотреть вложение 275570
это из дампа 2016 года(см https://yougame.biz/threads/139802/page-7#post-3083895)
C++:
class SchemaClassInfoData_t(size: 0xc0 bytes, project "schemalib")
| SCHEMA_CLASS_HAS_TRIVIAL_CONSTRUCTOR
| SCHEMA_CLASS_HAS_TRIVIAL_DESTRUCTOR
| SCHEMA_CLASS_TEMP_HACK_HAS_NOSCHEMA_MEMBERS

-----members of class SchemaClassInfoData_t-----
    SchemaString_t m_Name(offset 0x0)
    int32 m_nSizeOf(offset 0x18)
    int32 m_nAlignOf(offset 0x1c)
    SchemaArray_t< SchemaClassFieldData_t > m_Fields(offset 0x20)
    SchemaArray_t< SchemaBaseClassInfoData_t > m_BaseClasses(offset 0x40)
    SchemaArray_t< SchemaFieldMetadataOverrideData_t > m_FieldMetadataOverrides(offset 0x50)
    SchemaArray_t< CSchemaClassInfo* > m_NestedClasses(offset 0x60)
    SchemaArray_t< CSchemaEnumInfo* > m_NestedEnums(offset 0x70)
    SchemaMetadataSetData_t m_Metadata(offset 0x80)

...
class SchemaBaseClassInfoData_t(size: 0x10 bytes, project "schemalib")
| SCHEMA_CLASS_HAS_TRIVIAL_CONSTRUCTOR
| SCHEMA_CLASS_HAS_TRIVIAL_DESTRUCTOR

-----members of class SchemaBaseClassInfoData_t-----
    uint32 m_nOffset(offset 0x0)
    CSchemaClassInfo* m_pClass(offset 0x8)
ну и еще интересный факт там не m_pSelf в SchemaClassInfoData_t. если быть точнее это указатель на первую зарегистрированную инстанцию(в большинстве случаев это указатель на себя). существуют "дубликаты"(в плане имени) классов(типа CDOTA_Buff - он есть в клиенте и в сервере - они правда совпадают практически полностью). шема заносит себе в таблицу только первую зареганную инстанцию - кто успел тот и съел(сервер регается до клиента), остальные как бы "инитятся" но не вносятся в таблицу и у них этот указатель указывает на первую зареганную инстанцию, которая их перекрывает. сами биндинги все еще рабочие и существуют(просто вне таблицы), но там в основном ничего не отличается(кроме адресов статик членов и подчеркиваний в классах типа C_BaseEntity/CBaseEntity и тд)
(2016 скрин)
Спасибо за замечания, поправлю позже, после того как pr (
Пожалуйста, авторизуйтесь для просмотра ссылки.
) зальется уже в майн ветку.
 
Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2023
Сообщения
120
Реакции[?]
0
Поинты[?]
0
Начинающий
Статус
Оффлайн
Регистрация
26 Авг 2023
Сообщения
307
Реакции[?]
22
Поинты[?]
21K
обновите плиз, хочу себе оффсеты в чит сделать, а ласт апдейт больше месяца назад
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
777
Реакции[?]
331
Поинты[?]
63K
обновите плиз, хочу себе оффсеты в чит сделать, а ласт апдейт больше месяца назад
собери то что в ОП и юзай.
либо альтернативно можешь собрать(там 1 .cpp файл)
либо на готовый на 7 июня
 
Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2023
Сообщения
120
Реакции[?]
0
Поинты[?]
0
собери то что в ОП и юзай.
либо альтернативно можешь собрать(там 1 .cpp файл)
либо на готовый на 7 июня
можешь сказать куда вводить
git checkout, ввожу в cmd не воркает, в гит тоже <branch_name
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
777
Реакции[?]
331
Поинты[?]
63K
можешь сказать куда вводить
git checkout, ввожу в cmd не воркает, в гит тоже <branch_name
а че ты пытаешься сделать и есть ли у тебя git в %PATH%? если нет то полный путь до ехе указывай. в стиле C:\Users\user\Desktop\Software\git\bin\git.exe checkout <branch_name> естественно находясь в нужной директории(cd <dir>)(сначала репо клонируешь туда cd'шишься и бренч чекаутишь нужный). если нет гита скачай. и возможно ты выбрал не самый лучший тред для таких вопросов.
 
🤡
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2014
Сообщения
127
Реакции[?]
163
Поинты[?]
21K
можешь сказать куда вводить
git checkout <branch_name
Тыб основы подучил сначала, что такое гит и как им пользоваться, прежде чем пытаться что-то сделать.

обновите плиз, хочу себе оффсеты в чит сделать, а ласт апдейт больше месяца назад
Что обновлять? Берешь, качаешь дампер, билдишь и делаешь себе оффсеты хоть каждый день.
 
Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2023
Сообщения
120
Реакции[?]
0
Поинты[?]
0
Тыб основы подучил сначала, что такое гит и как им пользоваться, прежде чем пытаться что-то сделать.


Что обновлять? Берешь, качаешь дампер, билдишь и делаешь себе оффсеты хоть каждый день.
3 день в этом.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
777
Реакции[?]
331
Поинты[?]
63K
ля бро скачай с гитхаба код(зеленая кнопка <> Code, Download ZIP) разархивируй, запусти x64 Native Tools Command Prompt for VS 2022 из пуска(подразумевается что у тебя есть визуалка 2022 если нет пойди скачай, + там компонент должен быть установлен C++ CMake tools for Windows), cd'шнись в директорию куда распаковал(надо чтобы CMakeLists.txt был в текущей директории), пишешь cmake -B build -DCMAKE_BUILD_TYPE=Release -DSOURCE2GEN_GAME=<игра, например DOTA2 или CS2>, потом пишешь cmake --build build --config Release
получаешь дллку инжектишь ее, тебе сгенерит сдк в dota 2 beta\game\bin\win64\sdk(в случае доты)
1717751062684.png
1717751031750.png
1717751083567.png
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2023
Сообщения
120
Реакции[?]
0
Поинты[?]
0
ля бро скачай с гитхаба код(зеленая кнопка <> Code, Download ZIP) разархивируй, запусти x64 Native Tools Command Prompt for VS 2022 из пуска(подразумевается что у тебя есть визуалка 2022 если нет пойди скачай), cd'шнись в директорию куда распаковал(надо чтобы CMakeLists.txt был в текущей директории), пишешь cmake -B build -DCMAKE_BUILD_TYPE=Release -DSOURCE2GEN_GAME=<игра, например DOTA2 или CS2>, потом пишешь cmake --build build --config Release
получаешь дллку инжектишь ее, тебе сгенерит сдк в dota 2 beta\game\bin\win64\sdk(в случае доты)
Посмотреть вложение 278638
Посмотреть вложение 278637
Посмотреть вложение 278639
уже допер 2 часа назад, а как пофиксить это?1717754762301.png
 
Начинающий
Статус
Оффлайн
Регистрация
26 Авг 2023
Сообщения
307
Реакции[?]
22
Поинты[?]
21K
Начинающий
Статус
Оффлайн
Регистрация
1 Янв 2023
Сообщения
5
Реакции[?]
0
Поинты[?]
0
если взять старый сурс чита и заменить там сигнатуры/оффсеты он будет воркать на сегодняшний день?
 
Сверху Снизу