feat(player_db): add player online status (#983)
This commit is contained in:
@ -5,6 +5,13 @@
|
||||
|
||||
namespace big
|
||||
{
|
||||
enum class PlayerOnlineStatus
|
||||
{
|
||||
UNKNOWN,
|
||||
OFFLINE,
|
||||
ONLINE
|
||||
};
|
||||
|
||||
struct persistent_player
|
||||
{
|
||||
std::string name;
|
||||
@ -14,6 +21,7 @@ namespace big
|
||||
bool is_modder = false;
|
||||
std::unordered_set<int> infractions;
|
||||
std::optional<CommandAccessLevel> command_access_level = std::nullopt;
|
||||
PlayerOnlineStatus online_state = PlayerOnlineStatus::UNKNOWN;
|
||||
};
|
||||
|
||||
static void to_json(nlohmann::json& j, const persistent_player& player)
|
||||
|
@ -1,5 +1,7 @@
|
||||
#include "player_database_service.hpp"
|
||||
#include "file_manager.hpp"
|
||||
#include "util/session.hpp"
|
||||
#include "pointers.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
@ -95,4 +97,39 @@ namespace big
|
||||
{
|
||||
return m_selected;
|
||||
}
|
||||
|
||||
void player_database_service::invalidate_player_states()
|
||||
{
|
||||
for (auto& item : m_players)
|
||||
item.second.online_state = PlayerOnlineStatus::UNKNOWN;
|
||||
}
|
||||
|
||||
void player_database_service::update_player_states()
|
||||
{
|
||||
invalidate_player_states();
|
||||
|
||||
//fetch current stat for each player.. this will need some time.
|
||||
for (auto& item : m_players)
|
||||
{
|
||||
auto& player = item.second;
|
||||
rage::rlGamerHandle player_handle(player.rockstar_id);
|
||||
rage::rlSessionByGamerTaskResult result;
|
||||
bool success = false;
|
||||
rage::rlTaskStatus state{};
|
||||
|
||||
if (g_pointers->m_start_get_session_by_gamer_handle(0, &player_handle, 1, &result, 1, &success, &state))
|
||||
{
|
||||
while (state.status == 1)
|
||||
script::get_current()->yield();
|
||||
|
||||
if (state.status == 3 && success)
|
||||
{
|
||||
player.online_state = PlayerOnlineStatus::ONLINE;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
player.online_state = PlayerOnlineStatus::OFFLINE;
|
||||
}
|
||||
}
|
||||
}
|
@ -25,6 +25,9 @@ namespace big
|
||||
|
||||
void set_selected(persistent_player* selected);
|
||||
persistent_player* get_selected();
|
||||
|
||||
void update_player_states();
|
||||
void invalidate_player_states();
|
||||
};
|
||||
|
||||
inline player_database_service* g_player_database_service;
|
||||
|
Reference in New Issue
Block a user