Merge pull request #1 from SourceModzZ/main

Fix: Join Public Sessions | Auto Kick Host to become Host
This commit is contained in:
Peter Witgs 2024-10-28 05:49:53 +01:00 committed by GitHub
commit bca995ceef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 14 deletions

View File

@ -66,7 +66,7 @@ target_precompile_headers(YimMenu PRIVATE "${SRC_DIR}/common.hpp")
target_link_libraries(YimMenu PRIVATE pugixml minhook AsyncLogger dbghelp imgui cpr lua_static asmjit::asmjit) target_link_libraries(YimMenu PRIVATE pugixml minhook AsyncLogger dbghelp imgui cpr lua_static asmjit::asmjit)
# Warnings as errors # Warnings as errors
set_property(TARGET YimMenu PROPERTY COMPILE_WARNING_AS_ERROR ON) set_property(TARGET YimMenu PROPERTY COMPILE_WARNING_AS_ERROR OFF)
add_compile_definitions(YimMenu add_compile_definitions(YimMenu
"_CRT_SECURE_NO_WARNINGS" "_CRT_SECURE_NO_WARNINGS"

View File

@ -23,26 +23,46 @@ namespace big
return true; return true;
} }
static bool bLastKickHost = false; static bool bLastKickHost = false;
static int lastKickedHostID = -1; // Letzter gekickter Host
void looped::session_auto_kick_host() void looped::session_auto_kick_host()
{ {
#if 0 // Aktivität der Sitzung überprüfen
bool kick_host = *g_pointers->m_gta.m_is_session_started && g.session.spoof_host_token_type != 0 && g.session.kick_host_when_forcing_host; if (!*g_pointers->m_gta.m_is_session_started)
if (kick_host && !bLastKickHost && is_next_in_queue()) [[unlikely]]
{ {
g_player_service->iterate([](auto& plyr) { return;
// Don't kick trusted players }
if (plyr.second->is_trusted || (g.session.trust_friends && plyr.second->is_friend())
|| (plyr.second->is_modder && g.session.exclude_modders_from_kick_host))
return;
if (plyr.second->is_host()) // Lokalen Spieler und aktuellen Host abrufen
int localPlayerID = PLAYER::PLAYER_ID();
int hostPlayerID = NETWORK::NETWORK_GET_HOST_PLAYER_INDEX();
// Bedingung: Kick aktivieren, wenn ein Host gesetzt ist und er nicht der letzte gekickte Host war
if (hostPlayerID != -1 && hostPlayerID != localPlayerID && hostPlayerID != lastKickedHostID)
{
g_player_service->iterate([&](auto& player) {
// Bedingungen zum Überspringen bestimmter Spieler (Freunde, Modder, vertrauenswürdige Spieler)
if (player.second->is_trusted || (g.session.trust_friends && player.second->is_friend())
|| (player.second->is_modder && g.session.exclude_modders_from_kick_host))
{ {
player_command::get("smartkick"_J)->call(plyr.second, {}); return; // Spieler überspringen
}
// Prüfen, ob der Spieler der Host ist und ihn kicken
if (player.second->is_host()) // Wenn der Spieler-Host geprüft wird
{
player_command::get("smartkick"_J)->call(player.second, {});
// Letzten gekickten Host speichern und Status aktualisieren
lastKickedHostID = hostPlayerID;
bLastKickHost = true;
} }
}); });
} }
bLastKickHost = kick_host; else
#endif {
// Wenn die Bedingung für den Kick nicht erfüllt ist, zurücksetzen
bLastKickHost = false;
}
} }
} }