Fix team shit.

This commit is contained in:
momo5502 2016-01-03 02:37:06 +01:00
parent 730ffe61b8
commit 621375c2af
6 changed files with 71 additions and 25 deletions

View File

@ -35,13 +35,14 @@ namespace Components
Command::Execute("onlinegame 1");
Command::Execute("exec default_xboxlive.cfg");
Command::Execute("xblive_rankedmatch 1");
Command::Execute("xblive_privatematch 0");
//Command::Execute("xstartprivatematch");
Command::Execute("xblive_privatematch 1");
Command::Execute("xstartprivatematch");
//Command::Execute("xstartlobby");
Command::Execute("sv_network_fps 1000");
Command::Execute("com_maxfps 125");
// Process command line?
Utils::Hook::Call<void()>(0x60C3D0)();
//Utils::Hook::Call<void()>(0x60C3D0)();
}
void __declspec(naked) Dedicated::PostInitializationStub()
@ -58,7 +59,7 @@ namespace Components
void Dedicated::MapRotate()
{
if (Dvar::Var("party_host").Get<bool>())
if (Dvar::Var("party_enable").Get<bool>() && Dvar::Var("party_host").Get<bool>())
{
Logger::Print("Not performing map rotation as we are hosting a party!\n");
return;
@ -257,13 +258,6 @@ namespace Components
Dedicated::Heartbeat();
}
});
// Wrap xstartprivatematch
Command::Add("lobby_start", [] (Command::Params params)
{
Playlist::LoadPlaylist();
Command::Execute("xstartprivatematch", false);
});
}
}

View File

@ -2,6 +2,8 @@
namespace Components
{
std::vector<Dvar::Callback> Dvar::RegistrationCallbacks;
Dvar::Var::Var(std::string dvarName) : Var()
{
this->dvar = Game::Dvar_FindVar(dvarName.data());
@ -125,9 +127,18 @@ namespace Components
return Game::Dvar_RegisterInt(name, value, min, max, flag.val, description);
}
void Dvar::OnInit(Dvar::Callback callback)
{
Dvar::RegistrationCallbacks.push_back(callback);
}
Game::dvar_t* Dvar::RegisterName(const char* name, const char* default, Game::dvar_flag flag, const char* description)
{
// TODO: Register string dvars here
// Run callbacks
for (auto callback : Dvar::RegistrationCallbacks)
{
callback();
}
// Name watcher
Renderer::OnFrame([] ()
@ -171,4 +182,9 @@ namespace Components
// Hook dvar 'name' registration
Utils::Hook(0x40531C, Dvar::RegisterName, HOOK_CALL).Install()->Quick();
}
Dvar::~Dvar()
{
Dvar::RegistrationCallbacks.clear();
}
}

View File

@ -3,6 +3,8 @@ namespace Components
class Dvar : public Component
{
public:
typedef void(*Callback)();
struct Flag
{
Flag(Game::dvar_flag flag) : val(flag){};
@ -37,13 +39,18 @@ namespace Components
};
Dvar();
~Dvar();
const char* GetName() { return "Dvar"; };
static void OnInit(Callback callback);
// Only strings and bools use this type of declaration
template<typename T> static Var Register(const char* name, T value, Flag flag, const char* description);
template<typename T> static Var Register(const char* name, T value, T min, T max, Flag flag, const char* description);
private:
static std::vector<Callback> RegistrationCallbacks;
static Game::dvar_t* RegisterName(const char* name, const char* default, Game::dvar_flag flag, const char* description);
};
}

View File

@ -97,8 +97,21 @@ namespace Components
if (Party::LobbyMap.size() <= 1) Game::Steam_JoinLobby(id, 0);
}
DWORD Party::UIDvarIntStub(char* dvar)
{
if (!_stricmp(dvar, "onlinegame"))
{
return 0x649E660;
}
return Utils::Hook::Call<DWORD(char*)>(0x4D5390)(dvar);
}
Party::Party()
{
Dvar::Register<bool>("party_enable", false, Game::dvar_flag::DVAR_FLAG_NONE, "Enable party system");
Dvar::Register<bool>("xblive_privatematch", true, Game::dvar_flag::DVAR_FLAG_WRITEPROTECTED, "").Get<Game::dvar_t*>();
// various changes to SV_DirectConnect-y stuff to allow non-party joinees
Utils::Hook::Set<WORD>(0x460D96, 0x90E9);
Utils::Hook::Set<BYTE>(0x460F0A, 0xEB);
@ -140,6 +153,29 @@ namespace Components
// Allow xpartygo in public lobbies
Utils::Hook::Set<BYTE>(0x5A969E, 0xEB);
// Always open lobby menu when connecting
// It's not possible to entirely patch it via code
//Utils::Hook::Set<BYTE>(0x5B1698, 0xEB);
//Utils::Hook::Nop(0x5029F2, 6);
//Utils::Hook::SetString(0x70573C, "menu_xboxlive_lobby");
// Disallow selecting team in private match
//Utils::Hook::Nop(0x5B2BD8, 6);
// Force teams, even if not private match
Utils::Hook::Set<BYTE>(0x487BB2, 0xEB);
// Force xblive_privatematch 0 and rename it
Utils::Hook::Set<BYTE>(0x420A6A, 4);
Utils::Hook::Set<BYTE>(0x420A6C, 0);
Utils::Hook::Set<char*>(0x420A6E, "xblive_privatematch2");
// Enable XP Bar
Utils::Hook(0x62A2A7, Party::UIDvarIntStub, HOOK_CALL).Install()->Quick();
// Fix xstartlobby
//Utils::Hook::Set<BYTE>(0x5B71CD, 0xEB);
// Patch party_minplayers to 1 and protect it
//Utils::Hook(0x4D5D51, Party::RegisterMinPlayers, HOOK_CALL).Install()->Quick();
@ -225,7 +261,7 @@ namespace Components
// 1 - Party, use Steam_JoinLobby to connect
// 2 - Match, use CL_ConnectFromParty to connect
if (Dvar::Var("party_host").Get<bool>()) // Party hosting
if (Dvar::Var("party_enable").Get<bool>() && Dvar::Var("party_host").Get<bool>()) // Party hosting
{
info.Set("matchtype", "1");
}

View File

@ -36,5 +36,7 @@ namespace Components
static Game::dvar_t* RegisterMinPlayers(const char* name, int value, int min, int max, Game::dvar_flag flag, const char* description);
static void ConnectError(std::string message);
static DWORD UIDvarIntStub(char* dvar);
};
}

View File

@ -59,17 +59,8 @@ namespace Components
Playlist::Playlist()
{
// Apply new playlist
char* playlist = "mp_playlists_dlc2";
Utils::Hook::Set<char*>(0x494803, playlist);
Utils::Hook::Set<char*>(0x4C6EC1, playlist);
Utils::Hook::Set<char*>(0x4CF7F9, playlist);
Utils::Hook::Set<char*>(0x4D6E63, playlist);
Utils::Hook::Set<char*>(0x4D7358, playlist);
Utils::Hook::Set<char*>(0x4D73C8, playlist);
Utils::Hook::Set<char*>(0x4F4EA1, playlist);
Utils::Hook::Set<char*>(0x4D47FB, "mp_playlists_dlc2.ff");
Utils::Hook::Set<char*>(0x60B06E, "playlists.patch2");
// Default playlists
Utils::Hook::Set<char*>(0x60B06E, "playlists_default.info");
// disable playlist download function
Utils::Hook::Set<BYTE>(0x4D4790, 0xC3);
@ -92,7 +83,7 @@ namespace Components
// Store playlist buffer on load
Utils::Hook(0x42961C, Playlist::StorePlaylistStub, HOOK_CALL).Install()->Quick();
if (Dedicated::IsDedicated())
//if (Dedicated::IsDedicated())
{
// Custom playlist loading
Utils::Hook(0x420B5A, Playlist::LoadPlaylist, HOOK_JUMP).Install()->Quick();