fix: Issues with missions and request control (#1785)
Closes #899 Closes #1787 Closes #1788
This commit is contained in:
parent
e7562bcdff
commit
6c509e33dc
@ -6,6 +6,7 @@
|
|||||||
#include "util/math.hpp"
|
#include "util/math.hpp"
|
||||||
#include "util/notify.hpp"
|
#include "util/notify.hpp"
|
||||||
#include "util/toxic.hpp"
|
#include "util/toxic.hpp"
|
||||||
|
#include "util/mobile.hpp"
|
||||||
|
|
||||||
#include <base/CObject.hpp>
|
#include <base/CObject.hpp>
|
||||||
#include <network/CNetGamePlayer.hpp>
|
#include <network/CNetGamePlayer.hpp>
|
||||||
@ -498,14 +499,21 @@ namespace big
|
|||||||
}
|
}
|
||||||
case eNetworkEvents::REQUEST_CONTROL_EVENT:
|
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
|
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);
|
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);
|
g.reactions.request_control_event.process(plyr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
buffer->Seek(0);
|
buffer->Seek(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -54,15 +54,16 @@ namespace big::teleport
|
|||||||
}
|
}
|
||||||
else
|
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_VISIBLE(hnd, false, false);
|
||||||
ENTITY::SET_ENTITY_COLLISION(hnd, false, false);
|
ENTITY::SET_ENTITY_COLLISION(hnd, false, false);
|
||||||
ENTITY::FREEZE_ENTITY_POSITION(hnd, true);
|
ENTITY::FREEZE_ENTITY_POSITION(hnd, true);
|
||||||
|
|
||||||
auto obj_id = player->get_ped()->m_net_object->m_object_id;
|
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}};
|
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)
|
if (is_local_player)
|
||||||
{
|
{
|
||||||
@ -90,8 +91,8 @@ namespace big::teleport
|
|||||||
|
|
||||||
entity::delete_entity(hnd);
|
entity::delete_entity(hnd);
|
||||||
|
|
||||||
std::erase_if(g.m_remote_player_teleports, [obj_id](auto& obj) {
|
std::erase_if(g.m_remote_player_teleports, [veh_id](auto& obj) {
|
||||||
return obj.first == obj_id;
|
return obj.first == veh_id;
|
||||||
});
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -62,6 +62,7 @@ namespace big::vehicle
|
|||||||
inline void set_mp_bitset(Vehicle veh)
|
inline void set_mp_bitset(Vehicle veh)
|
||||||
{
|
{
|
||||||
DECORATOR::DECOR_SET_INT(veh, "MPBitset", 0);
|
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);
|
auto networkId = NETWORK::VEH_TO_NET(veh);
|
||||||
if (NETWORK::NETWORK_GET_ENTITY_IS_NETWORKED(veh))
|
if (NETWORK::NETWORK_GET_ENTITY_IS_NETWORKED(veh))
|
||||||
NETWORK::SET_NETWORK_ID_EXISTS_ON_ALL_MACHINES(networkId, true);
|
NETWORK::SET_NETWORK_ID_EXISTS_ON_ALL_MACHINES(networkId, true);
|
||||||
|
@ -16,6 +16,9 @@ namespace big
|
|||||||
bool has_scrollbar = false;
|
bool has_scrollbar = false;
|
||||||
static void player_button(const player_ptr& plyr)
|
static void player_button(const player_ptr& plyr)
|
||||||
{
|
{
|
||||||
|
if (plyr == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
bool selected_player = plyr == g_player_service->get_selected();
|
bool selected_player = plyr == g_player_service->get_selected();
|
||||||
|
|
||||||
// generate icons string
|
// generate icons string
|
||||||
|
Reference in New Issue
Block a user