experiments pt8
This commit is contained in:
parent
e8616b25df
commit
184855ad14
@ -17,6 +17,11 @@ namespace dedicated
|
||||
{
|
||||
namespace
|
||||
{
|
||||
bool party_is_server_dedicated_stub()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void sync_gpu_stub()
|
||||
{
|
||||
std::this_thread::sleep_for(1ms);
|
||||
@ -109,6 +114,9 @@ namespace dedicated
|
||||
|
||||
dvars::override::register_bool("intro", false, game::DVAR_FLAG_READ);
|
||||
|
||||
// Is party dedicated
|
||||
utils::hook::jump(0x5DFC10_b, party_is_server_dedicated_stub);
|
||||
|
||||
// Hook R_SyncGpu
|
||||
utils::hook::jump(0xE08AE0_b, sync_gpu_stub, true);
|
||||
|
||||
@ -192,46 +200,51 @@ namespace dedicated
|
||||
//utils::hook::set<uint8_t>(0x3A1940_b, 0xC3); // DB_ReadPackedLoadedSounds // not done
|
||||
|
||||
// iw7 patches
|
||||
utils::hook::set<uint8_t>(0xE06060_b, 0xC3); // directx
|
||||
utils::hook::set<uint8_t>(0xE05B80_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xDD2760_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xE05E20_b, 0xC3); // ^ buffer
|
||||
utils::hook::set<uint8_t>(0xE11270_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xDD3C50_b, 0xC3); // ^
|
||||
utils::hook::set(0xE06060_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE06060_b, 0xC3); // directx
|
||||
utils::hook::set(0xE05B80_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE05B80_b, 0xC3); // ^
|
||||
utils::hook::set(0xDD2760_b, 0xC3C033); //utils::hook::set<uint8_t>(0xDD2760_b, 0xC3); // ^
|
||||
utils::hook::set(0xE05E20_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE05E20_b, 0xC3); // ^ buffer
|
||||
utils::hook::set(0xE11270_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE11270_b, 0xC3); // ^
|
||||
utils::hook::set(0xDD3C50_b, 0xC3C033); //utils::hook::set<uint8_t>(0xDD3C50_b, 0xC3); // ^
|
||||
utils::hook::set(0x0C1210_b, 0xC3C033); //utils::hook::set<uint8_t>(0x0C1210_b, 0xC3); // ^ idk
|
||||
utils::hook::set<uint8_t>(0x0C12B0_b, 0xC3); // ^ idk
|
||||
utils::hook::set<uint8_t>(0xE423A0_b, 0xC3); // directx
|
||||
utils::hook::set<uint8_t>(0xE04680_b, 0xC3); // ^
|
||||
utils::hook::set(0x0C12B0_b, 0xC3C033); //utils::hook::set<uint8_t>(0x0C12B0_b, 0xC3); // ^ idk
|
||||
utils::hook::set(0xE423A0_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE423A0_b, 0xC3); // directx
|
||||
utils::hook::set(0xE04680_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE04680_b, 0xC3); // ^
|
||||
|
||||
utils::hook::set<uint8_t>(0xE00ED0_b, 0xC3); // Image_Create1DTexture_PC
|
||||
utils::hook::set<uint8_t>(0xE00FC0_b, 0xC3); // Image_Create2DTexture_PC
|
||||
utils::hook::set<uint8_t>(0xE011A0_b, 0xC3); // Image_Create3DTexture_PC
|
||||
utils::hook::set<uint8_t>(0xE015C0_b, 0xC3); // Image_CreateCubeTexture_PC
|
||||
utils::hook::set<uint8_t>(0xE01300_b, 0xC3); // Image_CreateArrayTexture_PC
|
||||
utils::hook::set(0xE00ED0_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE00ED0_b, 0xC3); // Image_Create1DTexture_PC
|
||||
utils::hook::set(0xE00FC0_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE00FC0_b, 0xC3); // Image_Create2DTexture_PC
|
||||
utils::hook::set(0xE011A0_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE011A0_b, 0xC3); // Image_Create3DTexture_PC
|
||||
utils::hook::set(0xE015C0_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE015C0_b, 0xC3); // Image_CreateCubeTexture_PC
|
||||
utils::hook::set(0xE01300_b, 0xC3C033); //utils::hook::set<uint8_t>(0xE01300_b, 0xC3); // Image_CreateArrayTexture_PC
|
||||
|
||||
utils::hook::set<uint8_t>(0x5F1EA0_b, 0xC3); // renderer
|
||||
utils::hook::set<uint8_t>(0x0C1370_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xDD26E0_b, 0xC3); // directx
|
||||
utils::hook::set<uint8_t>(0x5F0610_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0x5F0580_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0x5F0820_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0x5F0790_b, 0xC3); // ^
|
||||
utils::hook::set(0x5F1EA0_b, 0xC3C033); //utils::hook::set<uint8_t>(0x5F1EA0_b, 0xC3); // renderer
|
||||
utils::hook::set(0x0C1370_b, 0xC3C033); //utils::hook::set<uint8_t>(0x0C1370_b, 0xC3); // ^
|
||||
utils::hook::set(0xDD26E0_b, 0xC3C033); //utils::hook::set<uint8_t>(0xDD26E0_b, 0xC3); // directx
|
||||
utils::hook::set(0x5F0610_b, 0xC3C033); //utils::hook::set<uint8_t>(0x5F0610_b, 0xC3); // ^
|
||||
utils::hook::set(0x5F0580_b, 0xC3C033); //utils::hook::set<uint8_t>(0x5F0580_b, 0xC3); // ^
|
||||
utils::hook::set(0x5F0820_b, 0xC3C033); //utils::hook::set<uint8_t>(0x5F0820_b, 0xC3); // ^
|
||||
utils::hook::set(0x5F0790_b, 0xC3C033); //utils::hook::set<uint8_t>(0x5F0790_b, 0xC3); // ^
|
||||
|
||||
utils::hook::set(0xDD42A0_b, 0xC3C033); // shutdown
|
||||
utils::hook::set(0xDD42E0_b, 0xC3C033); // ^
|
||||
utils::hook::set(0xDD42E0_b, 0xC3C033); // ^
|
||||
utils::hook::set(0xDD4280_b, 0xC3C033); // ^
|
||||
|
||||
// r_loadForRenderer
|
||||
utils::hook::set<uint8_t>(0xE114A0_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xE11380_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xE113D0_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xE476F0_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xE11420_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xDD2300_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xDD2610_b, 0xC3); // ^
|
||||
utils::hook::set<uint8_t>(0xE11F40_b, 0xC3); // ^
|
||||
//utils::hook::set<uint8_t>(0xE114A0_b, 0xC3); // ^
|
||||
//utils::hook::set<uint8_t>(0xE11380_b, 0xC3); // ^
|
||||
//utils::hook::set<uint8_t>(0xE113D0_b, 0xC3); // ^
|
||||
//utils::hook::set<uint8_t>(0xE476F0_b, 0xC3); // ^
|
||||
//utils::hook::set<uint8_t>(0xE11420_b, 0xC3); // ^
|
||||
//utils::hook::set<uint8_t>(0xDD2300_b, 0xC3); // ^
|
||||
//utils::hook::set<uint8_t>(0xDD2610_b, 0xC3); // ^
|
||||
//utils::hook::set<uint8_t>(0xE11F40_b, 0xC3); // ^
|
||||
|
||||
// skip R_GetFrameIndex check in DB_LoadLevelXAssets
|
||||
utils::hook::set<uint8_t>(0x3B9E72_b, 0xEB);
|
||||
|
||||
// don't release buffer
|
||||
utils::hook::set<uint8_t>(0xDD4430_b, 0xEB);
|
||||
utils::hook::set<uint8_t>(0xDD4430_b, 0xC3);
|
||||
|
||||
// R_LoadWorld
|
||||
utils::hook::set<uint8_t>(0xDD14C0_b, 0xC3);
|
||||
@ -240,7 +253,13 @@ namespace dedicated
|
||||
utils::hook::set<uint8_t>(0xD02CB0_b, 0xC3);
|
||||
|
||||
// renderer
|
||||
utils::hook::set<uint8_t>(0xDD4370_b, 0xC3);
|
||||
//utils::hook::set<uint8_t>(0xDD4370_b, 0xC3);
|
||||
|
||||
// image stream (pak)
|
||||
utils::hook::set<uint8_t>(0xA7DB10_b, 0xC3); // DB_CreateGfxImageStreamInternal
|
||||
|
||||
// sound stream (sabl, sabs)
|
||||
//utils::hook::nop(0xCFDC03_b, 2);
|
||||
|
||||
command::add("startserver", []()
|
||||
{
|
||||
|
@ -60,16 +60,6 @@ namespace network
|
||||
return cl_dispatch_connectionless_packet_hook.invoke<bool>(client_num, from, msg, time);
|
||||
}
|
||||
|
||||
void sockadr_to_netadr(const sockaddr* s, game::netadr_s* a)
|
||||
{
|
||||
if (s->sa_family == 2)
|
||||
{
|
||||
a->type = game::NA_IP;
|
||||
*(int*)&a->ip = *(int*)&s->sa_data[2];
|
||||
a->port = *(unsigned short*)(&s->sa_data[0]);
|
||||
}
|
||||
}
|
||||
|
||||
int dw_send_to_stub(const int length, const char* data, game::netadr_s* to)
|
||||
{
|
||||
if (!*game::query_socket || *game::query_socket == INVALID_SOCKET)
|
||||
@ -85,6 +75,16 @@ namespace network
|
||||
return sendto(*game::query_socket, data, length, 0, &s, sizeof(sockaddr));
|
||||
}
|
||||
|
||||
void sockadr_to_netadr(const sockaddr* s, game::netadr_s* a)
|
||||
{
|
||||
if (s->sa_family == 2)
|
||||
{
|
||||
a->type = game::NA_IP;
|
||||
*(int*)&a->ip = *(int*)&s->sa_data[2];
|
||||
a->port = *(unsigned short*)(&s->sa_data[0]);
|
||||
}
|
||||
}
|
||||
|
||||
int dw_recv_from_stub(game::netadr_s* from, char* data, int maxsize)
|
||||
{
|
||||
sockaddr s = {};
|
||||
@ -166,28 +166,28 @@ namespace network
|
||||
if (sock == INVALID_SOCKET)
|
||||
{
|
||||
console::warn("WARNING: UDP_OpenSocket: socket\n");
|
||||
return INVALID_SOCKET;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u_long arg = 1;
|
||||
if (ioctlsocket(sock, FIONBIO, &arg) == SOCKET_ERROR)
|
||||
{
|
||||
console::warn("WARNING: UDP_OpenSocket: ioctl FIONBIO\n");
|
||||
return INVALID_SOCKET;
|
||||
return 0;
|
||||
}
|
||||
char optval[4] = { 0 };
|
||||
optval[0] = 1;
|
||||
if (setsockopt(sock, 0xFFFF, SO_BROADCAST, optval, 4) == SOCKET_ERROR)
|
||||
|
||||
char optval[4] = { 1, 0, 0, 0 };
|
||||
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, optval, sizeof(optval)) == SOCKET_ERROR)
|
||||
{
|
||||
console::warn("WARNING: UDP_OpenSocket: setsockopt SO_BROADCAST\n");
|
||||
return INVALID_SOCKET;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (bind(sock, reinterpret_cast<sockaddr*>(&address), sizeof(address)) == SOCKET_ERROR)
|
||||
{
|
||||
console::warn("WARNING: UDP_OpenSocket: bind\n");
|
||||
closesocket(sock);
|
||||
return INVALID_SOCKET;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return sock;
|
||||
@ -203,13 +203,13 @@ namespace network
|
||||
{
|
||||
*game::query_socket = create_socket(
|
||||
net_ip->current.string, net_port->current.integer + port_diff, IPPROTO_UDP);
|
||||
if (*game::query_socket != INVALID_SOCKET)
|
||||
if (*game::query_socket)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (*game::query_socket == INVALID_SOCKET)
|
||||
if (!*game::query_socket)
|
||||
{
|
||||
console::warn("WARNING: Couldn't allocate IP/UDP port, LAN discovery will not work!\n");
|
||||
return;
|
||||
@ -230,6 +230,11 @@ namespace network
|
||||
return PROTOCOL;
|
||||
}
|
||||
|
||||
int dw_get_addr_handle_connection_task_status_stub()
|
||||
{
|
||||
return 1; // TASK_COMPLETE
|
||||
}
|
||||
|
||||
void reconnect_migratated_client(void*, game::netadr_s* from, const int, const int, const char*,
|
||||
const char*, bool)
|
||||
{
|
||||
@ -330,7 +335,7 @@ namespace network
|
||||
utils::hook::set<uint8_t>(0xC56030_b, 0xEB);
|
||||
utils::hook::set<uint8_t>(0xC5341A_b, 0xEB);
|
||||
utils::hook::set<uint8_t>(0xC4FFC6_b, 0xEB);
|
||||
utils::hook::nop(0xC533BD_b, 2);
|
||||
utils::hook::set<uint8_t>(0xC533B4_b, 0xEB);
|
||||
|
||||
// ignore unregistered connection
|
||||
utils::hook::jump(0xC4F200_b, 0xC4F1AB_b);
|
||||
@ -379,12 +384,20 @@ namespace network
|
||||
// increase snaps
|
||||
//dvars::override::register_int("sv_remote_client_snapshot_msec", 33, 33, 100, game::DVAR_FLAG_NONE);
|
||||
|
||||
dvars::override::register_float("cl_timeout", 3600.0f, 0.0f, 3600.0f, game::DVAR_FLAG_NONE);
|
||||
dvars::override::register_float("cl_connectTimeout", 3600.0f, 0.0f, 3600.0f, game::DVAR_FLAG_NONE);
|
||||
|
||||
dvars::override::register_int("sv_timeout", 1800, 0, 1800, game::DVAR_FLAG_NONE); // no work
|
||||
dvars::override::register_int("sv_connectTimeout", 1800, 0, 1800, game::DVAR_FLAG_NONE); // ^
|
||||
|
||||
//dvars::override::register_int("sv_zombietime", 1800, 0, 1800, game::DVAR_FLAG_NONE); // ^
|
||||
|
||||
dvars::override::register_int("pt_connectTimeout", 60000, 0, 60000, game::DVAR_FLAG_READ);
|
||||
|
||||
dvars::override::register_int("ds_serverConnectTimeout", 60000, 0, -1, game::DVAR_FLAG_READ);
|
||||
|
||||
dvars::override::register_int("dw_addrHandleTimeout", -1, 0, -1, game::DVAR_FLAG_READ);
|
||||
|
||||
// ignore built in "print" oob command and add in our own
|
||||
//utils::hook::set<uint8_t>(0x9B0326_b, 0xEB);
|
||||
//network::on("print", [](const game::netadr_s&, const std::string_view& data)
|
||||
@ -393,18 +406,26 @@ namespace network
|
||||
// console::info(message.data());
|
||||
//});
|
||||
|
||||
// Use our own socket since the game's socket doesn't work with non localhost addresses
|
||||
// why? no idea
|
||||
//utils::hook::jump(0x0, create_socket);
|
||||
|
||||
// initialize query_socket
|
||||
utils::hook::jump(0xD57C7E_b, net_init_stub);
|
||||
|
||||
// use our own protocol version
|
||||
utils::hook::jump(0xCE8290_b, get_protocol_version_stub);
|
||||
//utils::hook::jump(0xCE8290_b, get_protocol_version_stub);
|
||||
|
||||
//utils::hook::set<uint8_t>(0x4030F0_b, 0xC3);
|
||||
//utils::hook::nop(0x9B014B_b, 2);
|
||||
|
||||
// don't establish secure conenction pt2
|
||||
/*utils::hook::nop(0xC572A2_b, 2);
|
||||
utils::hook::nop(0xC72980_b, 2);
|
||||
utils::hook::nop(0xC73512_b, 2);
|
||||
utils::hook::nop(0xC739C9_b, 2);
|
||||
utils::hook::set<uint8_t>(0xCFD928_b, 0xEB);*/
|
||||
//utils::hook::jump(0xD93390_b, dw_get_addr_handle_connection_task_status_stub);
|
||||
|
||||
#ifdef DEBUG
|
||||
//dvars::override::register_bool("frontEndSceneEnabled", false, game::DVAR_FLAG_READ);
|
||||
#endif
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -31,9 +31,13 @@ namespace party
|
||||
void perform_game_initialization()
|
||||
{
|
||||
command::execute("onlinegame 1", true);
|
||||
//command::execute("exec default_xboxlive.cfg", true);
|
||||
command::execute("xblive_privatematch 1", true);
|
||||
//command::execute("xstartprivateparty", true);
|
||||
command::execute("xstartprivatematch", true);
|
||||
//command::execute("xstopparty 0", true);
|
||||
//command::execute("xstartprivateparty 0", true);
|
||||
command::execute("xstartprivatematch 0", true);
|
||||
command::execute("uploadstats", true);
|
||||
//command::execute("entitlements_delay 0", true);
|
||||
}
|
||||
|
||||
void connect_to_party(const game::netadr_s& target, const std::string& mapname, const std::string& gametype)
|
||||
@ -117,17 +121,10 @@ namespace party
|
||||
auto* private_clients = game::Dvar_FindVar("ui_privateClients");
|
||||
auto* hardcore = game::Dvar_FindVar("ui_hardcore");
|
||||
|
||||
//game::Com_FrontEndScene_Shutdown();
|
||||
//utils::hook::invoke<void>(0x9D8900_b, game::Party_GetActiveParty(), true);
|
||||
|
||||
//if (!game::environment::is_dedi() && !game::Com_FrontEndScene_IsActive())
|
||||
//{
|
||||
// game::Com_Shutdown("EXE_ENDOFGAME");
|
||||
//}
|
||||
|
||||
//utils::hook::invoke<void>(0x9D6F40_b, game::Lobby_GetPartyData(), mapname->current.string, gametype->current.string);
|
||||
|
||||
game::Com_FrontEndScene_ShutdownAndDisable();
|
||||
|
||||
utils::hook::invoke<void>(0xE4DDC0_b); // Sys_WaitWorkerCmds
|
||||
utils::hook::invoke<void>(0xBAFFD0_b, ""); // Com_ShutdownInternal
|
||||
game::SV_CmdsMP_StartMapForParty(
|
||||
mapname->current.string,
|
||||
gametype->current.string,
|
||||
|
@ -406,6 +406,11 @@ namespace game
|
||||
int useZlib;
|
||||
};
|
||||
|
||||
enum CriticalSection : std::int32_t
|
||||
{
|
||||
CRITSECT_DEMONWARE = 39,
|
||||
};
|
||||
|
||||
namespace entity
|
||||
{
|
||||
enum connstate_t : std::uint32_t
|
||||
@ -505,8 +510,16 @@ namespace game
|
||||
{
|
||||
char __pad0[11444];
|
||||
PartyPreloadMapStage preloadingMapStage;
|
||||
char __pad1[101];
|
||||
bool m_gameStartSkipCountdown;
|
||||
char __pad2[110];
|
||||
int lobbyFlags;
|
||||
bool gameStartRequested;
|
||||
};
|
||||
static_assert(offsetof(PartyData, preloadingMapStage) == 11444);
|
||||
static_assert(offsetof(PartyData, m_gameStartSkipCountdown) == 11549);
|
||||
static_assert(offsetof(PartyData, lobbyFlags) == 11660);
|
||||
static_assert(offsetof(PartyData, gameStartRequested) == 11664);
|
||||
}
|
||||
using namespace party;
|
||||
|
||||
@ -524,10 +537,13 @@ namespace game
|
||||
bool isSaveGame;
|
||||
bool isRestart;
|
||||
bool isFrontEnd;
|
||||
char __pad0[2];
|
||||
bool serverThreadStartup;
|
||||
}; //static_assert(sizeof(SvServerInitSettings) == 212);
|
||||
static_assert(offsetof(SvServerInitSettings, maxClientCount) == 196);
|
||||
static_assert(offsetof(SvServerInitSettings, isMapPreloaded) == 204);
|
||||
static_assert(offsetof(SvServerInitSettings, isFrontEnd) == 207);
|
||||
static_assert(offsetof(SvServerInitSettings, serverThreadStartup) == 210);
|
||||
}
|
||||
using namespace sv;
|
||||
|
||||
|
@ -97,6 +97,8 @@ namespace game
|
||||
|
||||
WEAK symbol<unsigned int(int controllerIndex)> Live_SyncOnlineDataFlags{ 0xDC5CE0 };
|
||||
|
||||
WEAK symbol<PartyData* ()> Lobby_GetPartyData{ 0x9C3E20 };
|
||||
|
||||
WEAK symbol<Material* (const char* material)> Material_RegisterHandle{ 0xE11CE0 };
|
||||
|
||||
WEAK symbol<void(netadr_s*, sockaddr*)> NetadrToSockadr{ 0xCE6B90 };
|
||||
@ -106,7 +108,7 @@ namespace game
|
||||
WEAK symbol<int(netadr_s a, netadr_s b)> NET_CompareAdr{ 0xBB49B0 };
|
||||
WEAK symbol<int(netadr_s a, netadr_s b)> NET_CompareBaseAdr{ 0xBB4A00 };
|
||||
|
||||
WEAK symbol<PartyData* ()> Lobby_GetPartyData{ 0x9C3E20 };
|
||||
WEAK symbol<PartyData* ()> Party_GetActiveParty{ 0x9CC010 };
|
||||
|
||||
WEAK symbol<GfxFont* (const char* font, int size)> R_RegisterFont{ 0xDFC670 };
|
||||
WEAK symbol<int(const char* text, int maxChars, GfxFont* font)> R_TextWidth{ 0xDFC770 };
|
||||
|
Loading…
Reference in New Issue
Block a user