Fix a bunch of issues due to the newest update
This commit is contained in:
parent
b81cab2f69
commit
54285adf59
@ -1,4 +0,0 @@
|
|||||||
namespace hacks::tf2::autoparty
|
|
||||||
{
|
|
||||||
void joinMatch();
|
|
||||||
}
|
|
@ -82,8 +82,6 @@ static settings::Boolean ipc_mode{ "autoparty.ipc-mode", "false" };
|
|||||||
static settings::Int ipc_count{ "autoparty.ipc-count", "0" };
|
static settings::Int ipc_count{ "autoparty.ipc-count", "0" };
|
||||||
// How often to run the autoparty routine, in seconds
|
// How often to run the autoparty routine, in seconds
|
||||||
static settings::Int timeout{ "autoparty.run-frequency", "60" };
|
static settings::Int timeout{ "autoparty.run-frequency", "60" };
|
||||||
// Should we have bots bypass kicks?
|
|
||||||
static settings::Boolean kickbypass{ "autoparty.kick-bypass", "false" };
|
|
||||||
// Only run the autoparty routine once every N seconds
|
// Only run the autoparty routine once every N seconds
|
||||||
static Timer routine_timer{};
|
static Timer routine_timer{};
|
||||||
// Populated by the routine when empty and by configuration changes
|
// Populated by the routine when empty and by configuration changes
|
||||||
@ -100,7 +98,6 @@ static std::vector<uint32> party_hosts = {};
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static settings::Boolean no_autojoin("misc.remove_invite_timer", "false");
|
|
||||||
|
|
||||||
// ha ha macros go brr
|
// ha ha macros go brr
|
||||||
#define log(...) \
|
#define log(...) \
|
||||||
@ -240,10 +237,6 @@ void party_routine()
|
|||||||
re::CTFPartyClient *client = re::CTFPartyClient::GTFPartyClient();
|
re::CTFPartyClient *client = re::CTFPartyClient::GTFPartyClient();
|
||||||
if (client)
|
if (client)
|
||||||
{
|
{
|
||||||
// Toggle anti-kick as needed
|
|
||||||
if (kickbypass)
|
|
||||||
no_autojoin = !is_host();
|
|
||||||
|
|
||||||
int members = client->GetNumMembers();
|
int members = client->GetNumMembers();
|
||||||
// Are we in a party?
|
// Are we in a party?
|
||||||
if (members == 1)
|
if (members == 1)
|
||||||
@ -364,109 +357,12 @@ void party_routine()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define IP_STARTSTR "PB_IP"
|
|
||||||
|
|
||||||
// Received party message
|
|
||||||
void partyChatMessage(IGameEvent *event)
|
|
||||||
{
|
|
||||||
if (!event->GetString("text"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Only parse actual chat messages
|
|
||||||
if (event->GetInt("type") != 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
re::CTFPartyClient *client = re::CTFPartyClient::GTFPartyClient();
|
|
||||||
|
|
||||||
if (!client)
|
|
||||||
return;
|
|
||||||
// And are we actually the leader?
|
|
||||||
// Get a list of party members, then check each one to determine the leader
|
|
||||||
uint32 leader_id = 0;
|
|
||||||
CSteamID id;
|
|
||||||
client->GetCurrentPartyLeader(id);
|
|
||||||
leader_id = id.GetAccountID();
|
|
||||||
|
|
||||||
// Party leader doesn't care, they just join
|
|
||||||
if (leader_id == g_ISteamUser->GetSteamID().GetAccountID() || client->GetNumMembers() == 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
std::string chat_message = event->GetString("text");
|
|
||||||
// Found Message about server IP
|
|
||||||
if (chat_message.find(IP_STARTSTR) == 0)
|
|
||||||
{
|
|
||||||
auto ip_string = "connect " + chat_message.substr(sizeof(IP_STARTSTR) - 1);
|
|
||||||
g_IEngine->ClientCmd_Unrestricted(ip_string.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class PartyEventListener : public IGameEventListener2
|
|
||||||
{
|
|
||||||
virtual void FireGameEvent(IGameEvent *event)
|
|
||||||
{
|
|
||||||
if (enabled && kickbypass)
|
|
||||||
partyChatMessage(event);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static PartyEventListener party_listener;
|
|
||||||
|
|
||||||
void joinMatch()
|
|
||||||
{
|
|
||||||
if (!enabled || !kickbypass)
|
|
||||||
return;
|
|
||||||
|
|
||||||
re::CTFPartyClient *client = re::CTFPartyClient::GTFPartyClient();
|
|
||||||
|
|
||||||
if (!client)
|
|
||||||
return;
|
|
||||||
|
|
||||||
CSteamID id;
|
|
||||||
client->GetCurrentPartyLeader(id);
|
|
||||||
if (id.GetAccountID() != g_ISteamUser->GetSteamID().GetAccountID())
|
|
||||||
return;
|
|
||||||
|
|
||||||
INetChannel *ch = (INetChannel *) g_IEngine->GetNetChannelInfo();
|
|
||||||
std::string party_string = IP_STARTSTR;
|
|
||||||
party_string.append(ch->GetAddress());
|
|
||||||
|
|
||||||
client->SendPartyChat(party_string.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
static InitRoutine init(
|
static InitRoutine init(
|
||||||
[]()
|
[]()
|
||||||
{
|
{
|
||||||
static BytePatch removeInviteTime(gSignatures.GetClientSignature, "55 89 e5 57 56 53 83 ec ? 8b ? ? 89 1c ? e8 ? ? ? ? f7 ? ? ? ? ? fd", 0x00, { 0xC3 });
|
|
||||||
if (*no_autojoin)
|
|
||||||
removeInviteTime.Patch();
|
|
||||||
no_autojoin.installChangeCallback(
|
|
||||||
[](settings::VariableBase<bool> &, bool new_val)
|
|
||||||
{
|
|
||||||
if (new_val)
|
|
||||||
removeInviteTime.Patch();
|
|
||||||
else
|
|
||||||
removeInviteTime.Shutdown();
|
|
||||||
});
|
|
||||||
|
|
||||||
host_list.installChangeCallback([](settings::VariableBase<std::string> &var, std::string after) { repopulate(after); });
|
host_list.installChangeCallback([](settings::VariableBase<std::string> &var, std::string after) { repopulate(after); });
|
||||||
ipc_mode.installChangeCallback([](settings::VariableBase<bool> &var, bool after) { party_hosts.clear(); });
|
ipc_mode.installChangeCallback([](settings::VariableBase<bool> &var, bool after) { party_hosts.clear(); });
|
||||||
kickbypass.installChangeCallback(
|
|
||||||
[](settings::VariableBase<bool> &var, bool after)
|
|
||||||
{
|
|
||||||
if (*var && !after)
|
|
||||||
no_autojoin = false;
|
|
||||||
});
|
|
||||||
EC::Register(EC::Paint, party_routine, "paint_autoparty", EC::average);
|
EC::Register(EC::Paint, party_routine, "paint_autoparty", EC::average);
|
||||||
|
|
||||||
g_IEventManager2->AddListener(&party_listener, "party_chat", false);
|
|
||||||
|
|
||||||
EC::Register(
|
|
||||||
EC::Shutdown,
|
|
||||||
[]()
|
|
||||||
{
|
|
||||||
removeInviteTime.Shutdown();
|
|
||||||
g_IEventManager2->RemoveListener(&party_listener);
|
|
||||||
},
|
|
||||||
"shutdown_autoparty");
|
|
||||||
});
|
});
|
||||||
} // namespace hacks::tf2::autoparty
|
} // namespace hacks::tf2::autoparty
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
#include <hacks/hacklist.hpp>
|
#include <hacks/hacklist.hpp>
|
||||||
#include <settings/Bool.hpp>
|
#include <settings/Bool.hpp>
|
||||||
#include "AutoParty.hpp"
|
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
#include "hitrate.hpp"
|
#include "hitrate.hpp"
|
||||||
#include "hack.hpp"
|
#include "hack.hpp"
|
||||||
@ -42,7 +41,6 @@ DEFINE_HOOKED_METHOD(Paint, void, IEngineVGui *this_, PaintMode_t mode)
|
|||||||
#if ENABLE_IPC
|
#if ENABLE_IPC
|
||||||
ipc::UpdateServerAddress();
|
ipc::UpdateServerAddress();
|
||||||
#endif
|
#endif
|
||||||
hacks::tf2::autoparty::joinMatch();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode & PaintMode_t::PAINT_UIPANELS)
|
if (mode & PaintMode_t::PAINT_UIPANELS)
|
||||||
|
@ -290,7 +290,7 @@ static InitRoutineEarly nullify_textmode([]() {
|
|||||||
auto setup_graphic_addr = e8call_direct(gSignatures.GetEngineSignature("E8 ? ? ? ? 8B 93 ? ? ? ? 85 D2 0F 84")) + 0x18;
|
auto setup_graphic_addr = e8call_direct(gSignatures.GetEngineSignature("E8 ? ? ? ? 8B 93 ? ? ? ? 85 D2 0F 84")) + 0x18;
|
||||||
static BytePatch patch5(setup_graphic_addr, { 0x81, 0xC4, 0x6C, 0x20, 0x00, 0x00, 0x5B, 0x5E, 0x5F, 0x5D, 0xC3 });
|
static BytePatch patch5(setup_graphic_addr, { 0x81, 0xC4, 0x6C, 0x20, 0x00, 0x00, 0x5B, 0x5E, 0x5F, 0x5D, 0xC3 });
|
||||||
// CMaterialSystem::SwapBuffers
|
// CMaterialSystem::SwapBuffers
|
||||||
static BytePatch patch6(sharedobj::materialsystem().Pointer(0x3ECB0), { 0x31, 0xC0, 0x40, 0xC3 });
|
static BytePatch patch6(sharedobj::materialsystem().Pointer(0x3ed90), { 0x31, 0xC0, 0x40, 0xC3 });
|
||||||
// V_RenderView
|
// V_RenderView
|
||||||
static BytePatch patch7(gSignatures.GetEngineSignature, "55 89 E5 56 53 83 C4 80 C7 45 ? 00 00 00 00 A1 ? ? ? ? C7 45 ? 00 00 00 00 85 C0", 0x1d3, { 0x90, 0x90, 0x90, 0x90, 0x90 });
|
static BytePatch patch7(gSignatures.GetEngineSignature, "55 89 E5 56 53 83 C4 80 C7 45 ? 00 00 00 00 A1 ? ? ? ? C7 45 ? 00 00 00 00 85 C0", 0x1d3, { 0x90, 0x90, 0x90, 0x90, 0x90 });
|
||||||
|
|
||||||
|
@ -79,6 +79,8 @@ void dispatchUserMessage(bf_read &buffer, int type)
|
|||||||
// TODO: Add always vote no/vote no on friends. Cvar is "vote option2"
|
// TODO: Add always vote no/vote no on friends. Cvar is "vote option2"
|
||||||
was_local_player = false;
|
was_local_player = false;
|
||||||
int team = buffer.ReadByte();
|
int team = buffer.ReadByte();
|
||||||
|
// Some 4 bytes that are unknown currently.
|
||||||
|
int unk = buffer.ReadLong();
|
||||||
int caller = buffer.ReadByte();
|
int caller = buffer.ReadByte();
|
||||||
char reason[64];
|
char reason[64];
|
||||||
char name[64];
|
char name[64];
|
||||||
|
Reference in New Issue
Block a user