Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Исходник CGameRoom & CFlowchartManager

  • Автор темы Автор темы Yushkxn
  • Дата начала Дата начала
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
16 Фев 2021
Сообщения
45
Реакции
40
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Привет всем кто это читает.

Все адреса актуальны на "22.05.21".
Клиент 'GameDX11'


Создание комнат и обновление статуса игрока в комнате:
Код:
Expand Collapse Copy
enum EGameRoomType {

    eGRT_None = 0,
    eGRT_PvE_Private = 1,
    eGRT_PvP_Public = 2,
    eGRT_PvP_ClanWar = 4,
    eGRT_PvP_Autostart = 8,
    eGRT_PvE_Autostart = 0x10,
    eGRT_PvE = 0x11,
    eGRT_PvP_Rating = 0x20,
    eGRT_PvP = 0x2E,
    eGRT_All = 0x3F
};

enum EGameRoomPlayerStatus {

    eGRPS_NotReady,
    eGRPS_Ready,
    eGRPS_CantBeReady
};


Код:
Expand Collapse Copy
struct RestrictionValue {

    union unnamed_type_m_values {

        bool boolean;
        int int32;
        __int64 int64;
    };

    BYTE m_valueType[1];
    RestrictionValue::unnamed_type_m_values m_values;
};

struct SRoomCustomParameters {

    RestrictionValue friendlyFire;
    RestrictionValue enemyOutlines;
    RestrictionValue autobalance;
    RestrictionValue joinInTheProcess;
    RestrictionValue classes[5];
    RestrictionValue lockedSpectatorCamera;
    RestrictionValue highLatencyAutoKick;
    RestrictionValue overtimeMode;
    RestrictionValue inventorySlots;
    RestrictionValue maxPlayers;
    RestrictionValue roundLimit;
    RestrictionValue preRoundTime;
};


Код:
Expand Collapse Copy
class CGameRoom {
public:
    using fnOpenRoom = bool(__fastcall*)(CGameRoom*, EGameRoomType, const char*, const SRoomCustomParameters*, bool, const char*);
    using fnUpdatePvPRoom = bool(__fastcall*)(CGameRoom*, const char*, bool, const SRoomCustomParameters*);
    using fnSetRoomMission = bool(__fastcall*)(CGameRoom*, const char*);
    using fnSetPlayerStatus = bool(__fastcall*)(CGameRoom*, EGameRoomPlayerStatus);

    bool OpenRoom(EGameRoomType eRoomType, const char* roomName, const SRoomCustomParameters* params, bool isPrivate, const char* mission_key) { return fnOpenRoom(0x141191470)(this, eRoomType, roomName, params, isPrivate, mission_key); } // Find -> gameroom_open 0xEC LAST XREF
    bool UpdatePVPRoom(const char* missionKey, bool isPrivate, const SRoomCustomParameters* params) { return fnUpdatePvPRoom(0x1411923C0)(this, missionKey, isPrivate, params); } // Find -> room_settings_close + 102
    bool SetRoomMission(const char* missionKey) { return fnSetRoomMission(0x141191940)(this, missionKey); } // Find -> gameroom_setinfo 0xB7 LAST XREF
    bool SetPlayerStatus(EGameRoomPlayerStatus status) { return fnSetPlayerStatus(0x141192200)(this, status); } // Find -> gameroom_ready_status_changed LAST XREF (else __unsigned int8)
};


Пример использования CGameRoom:
Код:
Expand Collapse Copy
SRoomCustomParameters m_params;
::memset(&m_params, 0, sizeof SRoomCustomParameters);
{
    params.friendlyFire.m_values.boolean = false;
    params.enemyOutlines.m_values.boolean = false;
    params.autobalance.m_values.boolean = false;
    params.joinInTheProcess.m_values.boolean = false;

    params.classes[0].m_values.boolean = true;
    params.classes[1].m_values.boolean = true;
    params.classes[2].m_values.boolean = true;
    params.classes[3].m_values.boolean = true;
    params.classes[4].m_values.boolean = true;
    
    params.lockedSpectatorCamera.m_values.boolean = false;
    params.highLatencyAutoKick.m_values.boolean = true;
    
    params.overtimeMode.m_values.boolean = true;
    params.inventorySlots.m_values.int64 = 34326183935;
    
    params.maxPlayers.m_values.int32 = 8;
    params.roundLimit.m_values.int32 = 11;
    params.preRoundTime.m_values.boolean = true;
}

/* Обновление комнаты */
m_ptr->UpdatePVPRoom("e5981b6a-325d-42eb-a3fe-e6eed0bc4bf2", false, &m_params); // tdm_hangar_up

/* Создание комнаты */
m_ptr->OpenRoom(EGameRoomType::eGRT_PvP_Public, u8"Комната игрока", &m_params, false, "e5981b6a-325d-42eb-a3fe-e6eed0bc4bf2"); // tdm_hangar_up

/* Смена карты */
m_ptr->SetRoomMission("e5981b6a-325d-42eb-a3fe-e6eed0bc4bf2"); // tdm_hangar_up

Автоматический запуск в рейтинговые матчи:

Код:
Expand Collapse Copy
enum EFlowchartState {

    eFS_None = 0xFFFFFFFF,
    eFS_First = 0x0,
    eFS_NoUI = 0x0,
    eFS_Login = 0x1,
    eFS_LoadingLobby = 0x2,
    eFS_CharacterCreation = 0x3,
    eFS_Lobby = 0x4,
    eFS_LoadingLevel = 0x5,
    eFS_Ingame = 0x6,
    eFS_Renaming = 0x7,
    eFS_PromoTutorial = 0x8,
    eFS_PostGame = 0x9,
    eFS_Count = 0xA,
};

class CFlowchartManager {
public:

    using fnSpawnAction = void(__fastcall*)(CFlowchartManager*, const char*);
    void SpawnAction(const char* action) { fnSpawnAction(0x141089D20)(this, action); } // Find -> room_settings_close

public:
    std::byte m_padding[48];
    EFlowchartState m_currentState;
};

Пример использования CFlowchartManager:
Код:
Expand Collapse Copy
if (m_ptr->m_currentState == EFlowchartState::eFS_Lobby) {
    
    m_ptr->SpawnAction("quickplay_rating");
}

Указатели на данные классы:
Код:
Expand Collapse Copy
CGame {
    CFlowchartManager* m_pFlowchartManager; //0x0210
    CGameRoom* m_pGameRoom; //0x0268
}
 
Назад
Сверху Снизу