2022-07-03 00:26:25 +02:00
|
|
|
#include "player.hpp"
|
2023-03-01 21:27:15 +00:00
|
|
|
|
|
|
|
#include "gta_util.hpp"
|
2022-07-30 18:23:40 +02:00
|
|
|
#include "network/CNetGamePlayer.hpp"
|
2022-07-03 00:26:25 +02:00
|
|
|
#include "services/friends/friends_service.hpp"
|
2023-03-01 21:27:15 +00:00
|
|
|
|
2022-11-13 16:34:44 +00:00
|
|
|
#include <network/Network.hpp>
|
2023-02-04 16:35:18 +00:00
|
|
|
#include <network/RemoteGamerInfoMsg.hpp>
|
2022-07-03 00:26:25 +02:00
|
|
|
|
|
|
|
namespace big
|
|
|
|
{
|
2023-03-01 21:27:15 +00:00
|
|
|
player::player(CNetGamePlayer* net_game_player) :
|
|
|
|
m_net_game_player(net_game_player)
|
2022-07-03 00:26:25 +02:00
|
|
|
{
|
|
|
|
m_is_friend = friends_service::is_friend(net_game_player);
|
|
|
|
}
|
|
|
|
|
2022-09-12 18:44:47 +00:00
|
|
|
CVehicle* player::get_current_vehicle() const
|
2022-07-03 00:26:25 +02:00
|
|
|
{
|
|
|
|
if (const auto ped = this->get_ped(); ped != nullptr)
|
|
|
|
if (const auto vehicle = ped->m_vehicle; vehicle != nullptr)
|
|
|
|
return vehicle;
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char* player::get_name() const
|
|
|
|
{
|
2024-05-08 04:33:21 -04:00
|
|
|
return get_net_game_player() == nullptr ? "" : m_net_game_player->get_name();
|
2022-07-03 00:26:25 +02:00
|
|
|
}
|
|
|
|
|
2022-09-12 18:44:47 +00:00
|
|
|
rage::rlGamerInfo* player::get_net_data() const
|
2022-07-03 00:26:25 +02:00
|
|
|
{
|
2024-05-08 04:33:21 -04:00
|
|
|
return get_net_game_player() == nullptr ? nullptr : m_net_game_player->get_net_data();
|
2022-07-03 00:26:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
CNetGamePlayer* player::get_net_game_player() const
|
|
|
|
{
|
2024-05-08 04:33:21 -04:00
|
|
|
return (m_net_game_player == nullptr || m_net_game_player->m_player_info == nullptr) ? nullptr : m_net_game_player;
|
2022-07-03 00:26:25 +02:00
|
|
|
}
|
|
|
|
|
2024-05-09 23:28:11 +02:00
|
|
|
int64_t player::get_rockstar_id() const
|
|
|
|
{
|
|
|
|
if (auto net_data = get_net_data())
|
|
|
|
return net_data->m_gamer_handle.m_rockstar_id;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2022-07-03 00:26:25 +02:00
|
|
|
CPed* player::get_ped() const
|
|
|
|
{
|
|
|
|
if (const auto player_info = this->get_player_info(); player_info != nullptr)
|
|
|
|
if (const auto ped = player_info->m_ped; ped != nullptr)
|
|
|
|
return ped;
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
CPlayerInfo* player::get_player_info() const
|
|
|
|
{
|
2024-05-08 04:33:21 -04:00
|
|
|
if (auto net_player = get_net_game_player())
|
|
|
|
return net_player->m_player_info;
|
2022-07-03 00:26:25 +02:00
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
2022-09-12 18:44:47 +00:00
|
|
|
rage::snPlayer* player::get_session_player()
|
|
|
|
{
|
2023-07-20 22:46:32 +02:00
|
|
|
for (uint32_t i = 0; i < gta_util::get_network()->m_game_session_ptr->m_player_count; i++)
|
2022-09-12 18:44:47 +00:00
|
|
|
{
|
|
|
|
if (gta_util::get_network()->m_game_session_ptr->m_players[i]->m_player_data.m_host_token == get_net_data()->m_host_token)
|
|
|
|
{
|
|
|
|
return gta_util::get_network()->m_game_session_ptr->m_players[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gta_util::get_network()->m_game_session_ptr->m_local_player.m_player_data.m_host_token == get_net_data()->m_host_token)
|
|
|
|
return >a_util::get_network()->m_game_session_ptr->m_local_player;
|
|
|
|
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
rage::snPeer* player::get_session_peer()
|
|
|
|
{
|
2023-07-20 22:46:32 +02:00
|
|
|
for (uint32_t i = 0; i < gta_util::get_network()->m_game_session_ptr->m_peer_count; i++)
|
2022-09-12 18:44:47 +00:00
|
|
|
{
|
2024-05-09 23:28:11 +02:00
|
|
|
if (gta_util::get_network()->m_game_session_ptr->m_peers[i]->m_peer_data.m_gamer_handle.m_rockstar_id == get_rockstar_id())
|
2022-09-12 18:44:47 +00:00
|
|
|
{
|
|
|
|
return gta_util::get_network()->m_game_session_ptr->m_peers[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
2023-07-23 16:47:25 +00:00
|
|
|
rage::netConnectionPeer* player::get_connection_peer()
|
|
|
|
{
|
|
|
|
if (auto session_player = get_session_player())
|
|
|
|
if (auto peer = g_pointers->m_gta.m_get_connection_peer(gta_util::get_network()->m_game_session_ptr->m_net_connection_mgr,
|
|
|
|
(int)get_session_player()->m_player_data.m_peer_id_2))
|
|
|
|
return peer;
|
|
|
|
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::optional<netAddress> player::get_ip_address()
|
2023-02-04 16:35:18 +00:00
|
|
|
{
|
|
|
|
if (this == g_player_service->get_self().get() && get_net_data())
|
|
|
|
return get_net_data()->m_external_ip;
|
|
|
|
|
2023-07-23 16:47:25 +00:00
|
|
|
if (auto peer = get_connection_peer())
|
|
|
|
{
|
|
|
|
if (peer->m_peer_address.m_connection_type != 1)
|
|
|
|
return std::nullopt;
|
|
|
|
|
|
|
|
return peer->m_peer_address.m_external_ip;
|
|
|
|
}
|
2023-02-04 16:35:18 +00:00
|
|
|
|
2023-07-23 16:47:25 +00:00
|
|
|
return std::nullopt;
|
2023-02-04 16:35:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
uint16_t player::get_port()
|
|
|
|
{
|
|
|
|
if (this == g_player_service->get_self().get() && get_net_data())
|
|
|
|
return get_net_data()->m_external_port;
|
|
|
|
|
2023-07-23 16:47:25 +00:00
|
|
|
if (auto peer = get_connection_peer())
|
|
|
|
{
|
|
|
|
if (peer->m_peer_address.m_connection_type != 1)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
return peer->m_peer_address.m_external_port;
|
|
|
|
}
|
2023-02-04 16:35:18 +00:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2022-07-03 00:26:25 +02:00
|
|
|
uint8_t player::id() const
|
|
|
|
{
|
2024-04-27 10:10:35 -04:00
|
|
|
if (*g_pointers->m_gta.m_is_session_started)
|
2024-05-08 04:33:21 -04:00
|
|
|
return get_net_game_player() == nullptr ? -1 : m_net_game_player->m_player_id;
|
2024-04-27 10:10:35 -04:00
|
|
|
else
|
|
|
|
return self::id;
|
2022-07-03 00:26:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
bool player::is_host() const
|
|
|
|
{
|
2024-05-08 04:33:21 -04:00
|
|
|
return get_net_game_player() == nullptr ? false : m_net_game_player->is_host();
|
2022-07-03 00:26:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
bool player::is_friend() const
|
|
|
|
{
|
|
|
|
return m_is_friend;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool player::is_valid() const
|
|
|
|
{
|
2024-05-08 04:33:21 -04:00
|
|
|
return get_net_game_player() == nullptr ? false : m_net_game_player->is_valid();
|
2022-07-03 00:26:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
bool player::equals(const CNetGamePlayer* net_game_player) const
|
|
|
|
{
|
2024-05-08 04:33:21 -04:00
|
|
|
return net_game_player == get_net_game_player();
|
2022-07-03 00:26:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
std::string player::to_lowercase_identifier() const
|
|
|
|
{
|
|
|
|
std::string lower = this->get_name();
|
|
|
|
std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower);
|
|
|
|
|
|
|
|
return lower;
|
|
|
|
}
|
|
|
|
}
|