mirror of
https://github.com/Mr-X-GTA/YimMenu.git
synced 2025-07-15 23:07:59 +08:00
Lessen breakup kicks and more (#625)
This commit is contained in:
@ -15,8 +15,9 @@ namespace big
|
||||
|
||||
static void tunables_disable_phone();
|
||||
|
||||
static void player_never_wanted(const player_ptr &player);
|
||||
static void player_good_options();
|
||||
static void player_spectate();
|
||||
static void player_remote_control_vehicle();
|
||||
|
||||
static void protections_replay_interface();
|
||||
|
||||
|
67
src/backend/looped/player/good_options.cpp
Normal file
67
src/backend/looped/player/good_options.cpp
Normal file
@ -0,0 +1,67 @@
|
||||
#include "gta/PickupRewards.h"
|
||||
#include "backend/looped/looped.hpp"
|
||||
#include "services/players/player_service.hpp"
|
||||
#include "util/globals.hpp"
|
||||
#include "util/misc.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
// rate limit script events to prevent crashes
|
||||
static int offRadarPlayer = 0;
|
||||
static int neverWantedPlayer = 0;
|
||||
void looped::player_good_options()
|
||||
{
|
||||
if (!NETWORK::NETWORK_IS_SESSION_STARTED())
|
||||
return;
|
||||
|
||||
offRadarPlayer++;
|
||||
if (offRadarPlayer > 32)
|
||||
offRadarPlayer = 0;
|
||||
|
||||
neverWantedPlayer++;
|
||||
if (neverWantedPlayer > 32)
|
||||
neverWantedPlayer = 0;
|
||||
|
||||
g_player_service->iterate([](const player_entry& entry)
|
||||
{
|
||||
if ((g->session.off_radar_all || entry.second->off_radar) && offRadarPlayer == entry.second->id())
|
||||
globals::give_remote_otr(entry.second->id());
|
||||
});
|
||||
|
||||
g_player_service->iterate([](const player_entry& entry)
|
||||
{
|
||||
if ((g->session.never_wanted_all || entry.second->never_wanted) && PLAYER::GET_PLAYER_WANTED_LEVEL(entry.second->id()) > 0 && neverWantedPlayer == entry.second->id())
|
||||
globals::clear_wanted_player(entry.second->id());
|
||||
});
|
||||
|
||||
if (g->session.semi_godmode_all)
|
||||
{
|
||||
g_pointers->m_give_pickup_rewards(-1, REWARD_HEALTH);
|
||||
g_pointers->m_give_pickup_rewards(-1, REWARD_ARMOUR);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_player_service->iterate([](const player_entry& entry)
|
||||
{
|
||||
if (entry.second->semi_godmode)
|
||||
{
|
||||
if (CPed* ped = entry.second->get_ped())
|
||||
{
|
||||
if (ped->m_maxhealth == 0 || ped->m_health == 0 || misc::has_bit_set((int*)&ped->m_damage_bits, 8))
|
||||
return;
|
||||
|
||||
if (ped->m_health < ped->m_maxhealth)
|
||||
{
|
||||
g_pointers->m_give_pickup_rewards(1 << entry.second->id(), REWARD_HEALTH);
|
||||
}
|
||||
|
||||
if (ped->m_armor < 50.0f)
|
||||
{
|
||||
g_pointers->m_give_pickup_rewards(1 << entry.second->id(), REWARD_ARMOUR);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
#include "backend/looped/looped.hpp"
|
||||
#include "services/players/player_service.hpp"
|
||||
#include "util/globals.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void looped::player_never_wanted(const player_ptr &player)
|
||||
{
|
||||
if (player->never_wanted)
|
||||
{
|
||||
globals::clear_wanted_player(player->id());
|
||||
}
|
||||
}
|
||||
}
|
50
src/backend/looped/player/remote_control_vehicle.cpp
Normal file
50
src/backend/looped/player/remote_control_vehicle.cpp
Normal file
@ -0,0 +1,50 @@
|
||||
#include "backend/looped/looped.hpp"
|
||||
#include "pointers.hpp"
|
||||
#include "natives.hpp"
|
||||
#include "util/entity.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void looped::player_remote_control_vehicle()
|
||||
{
|
||||
if (g->m_remote_controller_vehicle == -1)
|
||||
return;
|
||||
|
||||
if (!ENTITY::DOES_ENTITY_EXIST(g->m_remote_controlled_vehicle))
|
||||
{
|
||||
g->m_remote_controlled_vehicle = -1;
|
||||
g->m_remote_controlled_vehicle = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ENTITY::DOES_ENTITY_EXIST(g->m_remote_controller_vehicle))
|
||||
{
|
||||
g->m_remote_controlled_vehicle = -1;
|
||||
g->m_remote_controlled_vehicle = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (VEHICLE::IS_VEHICLE_SEAT_FREE(g->m_remote_controller_vehicle, -1, TRUE))
|
||||
{
|
||||
auto controlled = g->m_remote_controlled_vehicle;
|
||||
auto controller = g->m_remote_controller_vehicle;
|
||||
g_fiber_pool->queue_job([controlled, controller]
|
||||
{
|
||||
if (entity::take_control_of(controlled))
|
||||
{
|
||||
ENTITY::SET_ENTITY_COLLISION(g->m_remote_controlled_vehicle, TRUE, TRUE);
|
||||
ENTITY::DETACH_ENTITY(controlled, TRUE, TRUE);
|
||||
VEHICLE::SET_VEHICLE_DOORS_LOCKED(controlled, 0);
|
||||
VEHICLE::SET_VEHICLE_DOORS_LOCKED_FOR_ALL_PLAYERS(controlled, FALSE);
|
||||
ENTITY::SET_ENTITY_INVINCIBLE(controlled, FALSE);
|
||||
entity::delete_entity(controller);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
g->m_remote_controller_vehicle = -1;
|
||||
g->m_remote_controlled_vehicle = -1;
|
||||
}
|
||||
}
|
||||
};
|
@ -13,7 +13,7 @@ namespace big
|
||||
std::uint64_t host_token;
|
||||
g_pointers->m_generate_uuid(&host_token);
|
||||
|
||||
host_token = g->session.force_session_host ? 1 : host_token;
|
||||
host_token = g->session.force_session_host ? (rand() % 10000) : host_token;
|
||||
|
||||
*g_pointers->m_host_token = host_token;
|
||||
|
||||
|
Reference in New Issue
Block a user