fix: Issues with missions and request control (#1785)

Closes #899
Closes #1787
Closes #1788
This commit is contained in:
gir489 2023-07-23 09:01:46 -04:00 committed by GitHub
parent e7562bcdff
commit 6c509e33dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 9 deletions

View File

@ -6,6 +6,7 @@
#include "util/math.hpp"
#include "util/notify.hpp"
#include "util/toxic.hpp"
#include "util/mobile.hpp"
#include <base/CObject.hpp>
#include <network/CNetGamePlayer.hpp>
@ -498,13 +499,20 @@ namespace big
}
case eNetworkEvents::REQUEST_CONTROL_EVENT:
{
int net_id = buffer->Read<int>(13);
auto net_id = buffer->Read<int>(13);
if (g_local_player && g_local_player->m_vehicle && g_local_player->m_vehicle->m_net_object
&& g_local_player->m_vehicle->m_net_object->m_object_id == net_id && g_local_player->m_vehicle->m_driver == g_local_player && !NETWORK::NETWORK_IS_ACTIVITY_SESSION())
&& g_local_player->m_vehicle->m_net_object->m_object_id == net_id) //The request is for a vehicle we are currently in.
{
g_pointers->m_gta.m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset);
g.reactions.request_control_event.process(plyr);
return;
Vehicle personal_vehicle = mobile::mechanic::get_personal_vehicle();
Vehicle veh = g_pointers->m_gta.m_ptr_to_handle(g_local_player->m_vehicle);
if (!NETWORK::NETWORK_IS_ACTIVITY_SESSION() //If we're in Freemode.
|| personal_vehicle == veh //Or we're in our personal vehicle.
|| DECORATOR::DECOR_GET_INT(veh, "RandomId") == g_local_player->m_net_object->m_object_id) // Or it's a vehicle we spawned.
{
g_pointers->m_gta.m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset); // Tell them to get bent.
g.reactions.request_control_event.process(plyr);
return;
}
}
buffer->Seek(0);
break;

View File

@ -54,15 +54,16 @@ namespace big::teleport
}
else
{
auto hnd = vehicle::spawn(RAGE_JOAAT("ninef"), *player->get_ped()->get_position(), 0.0f, true);
auto hnd = vehicle::spawn(VEHICLE_RCBANDITO, *player->get_ped()->get_position(), 0.0f, true);
ENTITY::SET_ENTITY_VISIBLE(hnd, false, false);
ENTITY::SET_ENTITY_COLLISION(hnd, false, false);
ENTITY::FREEZE_ENTITY_POSITION(hnd, true);
auto obj_id = player->get_ped()->m_net_object->m_object_id;
auto veh_id = g_pointers->m_gta.m_handle_to_ptr(hnd)->m_net_object->m_object_id;
remote_player_teleport remote_tp = {obj_id, {coords.x, coords.y, coords.z}};
g.m_remote_player_teleports.emplace(g_pointers->m_gta.m_handle_to_ptr(hnd)->m_net_object->m_object_id, remote_tp);
g.m_remote_player_teleports.emplace(veh_id, remote_tp);
if (is_local_player)
{
@ -90,8 +91,8 @@ namespace big::teleport
entity::delete_entity(hnd);
std::erase_if(g.m_remote_player_teleports, [obj_id](auto& obj) {
return obj.first == obj_id;
std::erase_if(g.m_remote_player_teleports, [veh_id](auto& obj) {
return obj.first == veh_id;
});
return true;

View File

@ -62,6 +62,7 @@ namespace big::vehicle
inline void set_mp_bitset(Vehicle veh)
{
DECORATOR::DECOR_SET_INT(veh, "MPBitset", 0);
DECORATOR::DECOR_SET_INT(veh, "RandomId", g_local_player->m_net_object->m_object_id);
auto networkId = NETWORK::VEH_TO_NET(veh);
if (NETWORK::NETWORK_GET_ENTITY_IS_NETWORKED(veh))
NETWORK::SET_NETWORK_ID_EXISTS_ON_ALL_MACHINES(networkId, true);

View File

@ -16,6 +16,9 @@ namespace big
bool has_scrollbar = false;
static void player_button(const player_ptr& plyr)
{
if (plyr == nullptr)
return;
bool selected_player = plyr == g_player_service->get_selected();
// generate icons string