Fix connect protocol and temporary workaround for localhost parties

This commit is contained in:
momo5502 2016-08-15 12:57:49 +02:00
parent 72e98f8bbb
commit d67aa26a5d
8 changed files with 49 additions and 5 deletions

View File

@ -219,7 +219,7 @@ namespace Components
void Auth::StoreKey()
{
if (!Dedicated::IsEnabled() && !ZoneBuilder::IsEnabled())
if (!Dedicated::IsEnabled() && !ZoneBuilder::IsEnabled() && Auth::GuidKey.IsValid())
{
Proto::Auth::Certificate cert;
cert.set_token(Auth::GuidToken.ToString());
@ -363,7 +363,9 @@ namespace Components
Localization::Set("MPUI_SECURITY_INCREASE_MESSAGE", "");
// Load the key
Auth::LoadKey(true);
Steam::SteamUser()->GetSteamID();
QuickPatch::OnFrame(Auth::Frame);

View File

@ -16,7 +16,7 @@ namespace Components
ConnectProtocol::EvaluateProtocol();
}
return (ConnectProtocol::ConnectContainer.ConnectString.size() > 0);
return (!ConnectProtocol::ConnectContainer.ConnectString.empty());
}
bool ConnectProtocol::InstallProtocol()

View File

@ -22,4 +22,4 @@ namespace Components
static void EvaluateProtocol();
static bool InstallProtocol();
};
}
}

View File

@ -248,7 +248,7 @@ namespace Components
if (IPCPipe::ServerPipe) delete IPCPipe::ServerPipe;
if (IPCPipe::ClientPipe) delete IPCPipe::ClientPipe;
IPCPipe::ServerPipe = 0;
IPCPipe::ClientPipe = 0;
IPCPipe::ServerPipe = nullptr;
IPCPipe::ClientPipe = nullptr;
}
}

View File

@ -109,6 +109,11 @@ namespace Components
}
bool Network::Address::IsLoopback()
{
if (this->GetIP().full == 0x100007f) // 127.0.0.1
{
return true;
}
return Game::NET_IsLocalAddress(this->address);
}
bool Network::Address::IsValid()

View File

@ -90,6 +90,23 @@ namespace Components
SteamID id = Party::GenerateLobbyId();
// Temporary workaround
// TODO: Patch the 127.0.0.1 -> loopback mapping in the party code
if (Party::Container.Target.IsLoopback())
{
if (*Game::numIP)
{
Party::Container.Target.SetIP(*Game::localIP);
Party::Container.Target.SetType(Game::netadrtype_t::NA_IP);
Logger::Print("Trying to connect to party with loopback address, using a local ip instead: %s\n", Party::Container.Target.GetCString());
}
else
{
Logger::Print("Trying to connect to party with loopback address, but no local ip was found.\n");
}
}
Party::LobbyMap[id.Bits] = Party::Container.Target;
Game::Steam_JoinLobby(id, 0);
@ -220,6 +237,9 @@ namespace Components
Utils::Hook::Xor<DWORD>(0x4D376D, Game::dvar_flag::DVAR_FLAG_LATCHED);
Utils::Hook::Xor<DWORD>(0x5E3789, Game::dvar_flag::DVAR_FLAG_LATCHED);
// Patch Live_PlayerHasLoopbackAddr
//Utils::Hook::Set<DWORD>(0x418F30, 0x90C3C033);
Command::Add("connect", [] (Command::Params params)
{
if (params.Length() < 2)

View File

@ -327,6 +327,9 @@ namespace Components
Utils::Hook::Set<DWORD>(0x45B98F, 0x5188FB); // profile_setBlacklevel
Utils::Hook::Set<DWORD>(0x45B9A5, 0x5188FB); // profile_toggleCanSkipOffensiveMissions
// Patch SV_IsClientUsingOnlineStatsOffline
Utils::Hook::Set<DWORD>(0x46B710, 0x90C3C033);
// Fix mouse pitch adjustments
UIScript::Add("updateui_mousePitch", [] ()
{

View File

@ -4,10 +4,24 @@ namespace Main
{
static Utils::Hook EntryPointHook;
void SetEnvironment()
{
wchar_t exeName[512];
GetModuleFileName(GetModuleHandle(NULL), exeName, sizeof(exeName) / 2);
wchar_t* exeBaseName = wcsrchr(exeName, L'\\');
exeBaseName[0] = L'\0';
exeBaseName++;
SetCurrentDirectory(exeName);
}
void Initialize()
{
Main::EntryPointHook.Uninstall();
SetEnvironment();
Utils::Cryptography::Initialize();
Components::Loader::Initialize();