-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Привет всем кто это читает.
Все адреса актуальны на "22.05.21".
Клиент 'GameDX11'
Создание комнат и обновление статуса игрока в комнате:
Пример использования CGameRoom:
Автоматический запуск в рейтинговые матчи:
Пример использования CFlowchartManager:
Указатели на данные классы:
Все адреса актуальны на "22.05.21".
Клиент 'GameDX11'
Создание комнат и обновление статуса игрока в комнате:
Код:
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
};
Код:
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;
};
Код:
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:
Код:
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
Код:
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;
};
Код:
if (m_ptr->m_currentState == EFlowchartState::eFS_Lobby) {
m_ptr->SpawnAction("quickplay_rating");
}
Код:
CGame {
CFlowchartManager* m_pFlowchartManager; //0x0210
CGameRoom* m_pGameRoom; //0x0268
}