mirror of
https://github.com/Mr-X-GTA/YimMenu.git
synced 2024-12-22 20:17:24 +08:00
Auto kick host and more (#33)
This commit is contained in:
parent
56b12ffc42
commit
b7f5729a78
@ -534,7 +534,7 @@ enum class KickReason : uint8_t
|
|||||||
NAT_TYPE,
|
NAT_TYPE,
|
||||||
SCADMIN,
|
SCADMIN,
|
||||||
SCADMIN_BLACKLIST,
|
SCADMIN_BLACKLIST,
|
||||||
UNK,
|
ROS_BAN,
|
||||||
BATTLEYE_KICK,
|
BATTLEYE_KICK,
|
||||||
BATTLEYE_BAN,
|
BATTLEYE_BAN,
|
||||||
NUM_REASONS
|
NUM_REASONS
|
||||||
|
@ -745,6 +745,11 @@ namespace big
|
|||||||
bool client = buffer.Read<bool>(1);
|
bool client = buffer.Read<bool>(1);
|
||||||
buffer.SeekForward(4); // normalize before we read
|
buffer.SeekForward(4); // normalize before we read
|
||||||
|
|
||||||
|
if (size > 1028 || player && player->is_host() == client)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
buffer.ReadArray(&data, size * 8);
|
buffer.ReadArray(&data, size * 8);
|
||||||
|
|
||||||
if (client && player)
|
if (client && player)
|
||||||
@ -753,15 +758,12 @@ namespace big
|
|||||||
}
|
}
|
||||||
else if (player)
|
else if (player)
|
||||||
{
|
{
|
||||||
g_battleye_service.send_message_to_server(player->get_net_game_player()->get_host_token(), &data, size);
|
g_battleye_service.on_receive_message_from_server(player->get_net_game_player()->get_host_token(), &data, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player && !player->bad_host && player->is_host())
|
if (player && !player->bad_host && player->is_host())
|
||||||
{
|
{
|
||||||
player->bad_host = true;
|
player->bad_host = true;
|
||||||
g_fiber_pool->queue_job([player] {
|
|
||||||
entity::force_remove_network_entity(g_local_player, player, false);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -672,9 +672,15 @@ namespace big
|
|||||||
{
|
{
|
||||||
auto p1 = buffer->Read<int>(32);
|
auto p1 = buffer->Read<int>(32);
|
||||||
auto p2 = buffer->Read<int>(32);
|
auto p2 = buffer->Read<int>(32);
|
||||||
|
|
||||||
LOGF(stream::net_events, VERBOSE, "Received REPORT_MYSELF_EVENT from {} with parameters ({}, {})", plyr->get_name(), p1, p2);
|
LOGF(stream::net_events, VERBOSE, "Received REPORT_MYSELF_EVENT from {} with parameters ({}, {})", plyr->get_name(), p1, p2);
|
||||||
|
|
||||||
|
if (p1 != 6) // false positives when telemetry endpoint is unreachable
|
||||||
|
{
|
||||||
session::add_infraction(plyr, Infraction::TRIGGERED_ANTICHEAT);
|
session::add_infraction(plyr, Infraction::TRIGGERED_ANTICHEAT);
|
||||||
g.reactions.game_anti_cheat_modder_detection.process(plyr);
|
g.reactions.game_anti_cheat_modder_detection.process(plyr);
|
||||||
|
}
|
||||||
|
|
||||||
buffer->Seek(0);
|
buffer->Seek(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,6 @@ namespace big
|
|||||||
{
|
{
|
||||||
node->m_free_cam_pos_x += 50.0f;
|
node->m_free_cam_pos_x += 50.0f;
|
||||||
node->m_free_cam_pos_y -= 50.0f;
|
node->m_free_cam_pos_y -= 50.0f;
|
||||||
node->m_camera_x -= 50.0f;
|
|
||||||
node_updated = true;
|
node_updated = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -281,4 +281,54 @@ namespace big
|
|||||||
|
|
||||||
m_battleye_api.m_receive_message(token, const_cast<const void*>(message), size);
|
m_battleye_api.m_receive_message(token, const_cast<const void*>(message), size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void battleye_service::on_receive_message_from_server(std::uint64_t token, void* message, int size)
|
||||||
|
{
|
||||||
|
if (size == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto msg = reinterpret_cast<unsigned char*>(message);
|
||||||
|
auto op = msg[0];
|
||||||
|
|
||||||
|
switch (op)
|
||||||
|
{
|
||||||
|
case INIT:
|
||||||
|
{
|
||||||
|
std::uint8_t payload[] = {0x0, 0x5};
|
||||||
|
send_message_to_server(token, payload, sizeof(payload));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case START:
|
||||||
|
{
|
||||||
|
LOG(INFO) << "BattlEye: Our GUID: " << (char*)&msg[3];
|
||||||
|
send_message_to_server(token, message, 2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HEARTBEAT:
|
||||||
|
{
|
||||||
|
send_message_to_server(token, message, size);
|
||||||
|
|
||||||
|
if (g.session.kick_host_when_forcing_host && msg[1] == 5)
|
||||||
|
{
|
||||||
|
if (auto player = g_player_service->get_by_host_token(token); player && !player->is_modder)
|
||||||
|
{
|
||||||
|
player_command::get("battleupdate"_J)->call(player, {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case REQUEST:
|
||||||
|
{
|
||||||
|
if (size == 1028)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
send_message_to_server(token, message, 2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -39,6 +39,15 @@ namespace big
|
|||||||
|
|
||||||
using init_t = bool (*)(int api_level, CUserData* data, CApi* api);
|
using init_t = bool (*)(int api_level, CUserData* data, CApi* api);
|
||||||
|
|
||||||
|
enum packet_id : std::uint8_t
|
||||||
|
{
|
||||||
|
INIT = 0x00,
|
||||||
|
START = 0x02,
|
||||||
|
REQUEST = 0x04,
|
||||||
|
RESPONSE = 0x05,
|
||||||
|
HEARTBEAT = 0x09,
|
||||||
|
};
|
||||||
|
|
||||||
std::mutex m_mutex{};
|
std::mutex m_mutex{};
|
||||||
|
|
||||||
bool is_running();
|
bool is_running();
|
||||||
@ -51,6 +60,7 @@ namespace big
|
|||||||
void add_player(std::uint64_t token, std::uint64_t rockstar_id, const char* name);
|
void add_player(std::uint64_t token, std::uint64_t rockstar_id, const char* name);
|
||||||
void remove_player(std::uint64_t token);
|
void remove_player(std::uint64_t token);
|
||||||
void receive_message(std::uint64_t token, void* message, int size);
|
void receive_message(std::uint64_t token, void* message, int size);
|
||||||
|
void on_receive_message_from_server(std::uint64_t token, void* message, int size);
|
||||||
void send_message_to_client(std::uint64_t token, void* message, int size);
|
void send_message_to_client(std::uint64_t token, void* message, int size);
|
||||||
void send_message_to_server(std::uint64_t token, void* message, int size);
|
void send_message_to_server(std::uint64_t token, void* message, int size);
|
||||||
void kick_player(std::uint64_t token, const char* reason);
|
void kick_player(std::uint64_t token, const char* reason);
|
||||||
|
@ -174,20 +174,9 @@ namespace big
|
|||||||
|
|
||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
|
|
||||||
if (g.session.spoof_host_token_type != 0)
|
ImGui::Checkbox("Auto Kick Host", &g.session.kick_host_when_forcing_host);
|
||||||
{
|
|
||||||
ImGui::BeginDisabled();
|
|
||||||
ImGui::Checkbox("KICK_HOST_ON_JOIN"_T.data(), &g.session.kick_host_when_forcing_host);
|
|
||||||
ImGui::EndDisabled();
|
|
||||||
|
|
||||||
if (g.session.kick_host_when_forcing_host)
|
|
||||||
{
|
|
||||||
ImGui::SameLine();
|
|
||||||
ImGui::Checkbox("EXCLUDE_MODDERS_FROM_KICK_HOST"_T.data(), &g.session.exclude_modders_from_kick_host);
|
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered())
|
||||||
ImGui::SetTooltip("EXCLUDE_MODDERS_FROM_KICK_HOST_DESC"_T.data());
|
ImGui::SetTooltip("Kicks the host every few minutes until you become host to avoid being kicked");
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::Checkbox("FORCE_SCRIPT_HOST"_T.data(), &g.session.force_script_host);
|
ImGui::Checkbox("FORCE_SCRIPT_HOST"_T.data(), &g.session.force_script_host);
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered())
|
||||||
|
Loading…
Reference in New Issue
Block a user