Lessen breakup kicks and more (#625)

This commit is contained in:
maybegreat48
2022-11-21 15:42:12 +00:00
committed by GitHub
parent 6f3e3cc6b3
commit bbd13dd06d
46 changed files with 1109 additions and 146 deletions

View File

@ -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();

View 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);
}
}
}
});
}
}
}

View File

@ -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());
}
}
}

View 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;
}
}
};

View File

@ -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;