diff --git a/BigBaseV2/src/services/player_service.cpp b/BigBaseV2/src/services/player_service.cpp index 85e0cdeb..180aaf18 100644 --- a/BigBaseV2/src/services/player_service.cpp +++ b/BigBaseV2/src/services/player_service.cpp @@ -138,9 +138,14 @@ namespace big return m_selected_player; } - player_ptr player_service::get_self() const + player_ptr player_service::get_self() { - return std::make_shared(*m_self); + if (!m_self_ptr || !m_self_ptr->equals(*m_self)) + { + m_self_ptr = std::make_shared(*m_self); + } + + return m_self_ptr; } void player_service::player_join(CNetGamePlayer* net_game_player) @@ -168,4 +173,4 @@ namespace big { m_selected_player = plyr; } -} \ No newline at end of file +} diff --git a/BigBaseV2/src/services/player_service.hpp b/BigBaseV2/src/services/player_service.hpp index 36faa636..a8a0b192 100644 --- a/BigBaseV2/src/services/player_service.hpp +++ b/BigBaseV2/src/services/player_service.hpp @@ -14,7 +14,7 @@ namespace big public: explicit player(CNetGamePlayer* net_game_player); ~player() = default; - + player(const player&) = default; player(player&&) noexcept = default; player& operator=(const player&) = default; @@ -50,6 +50,8 @@ namespace big { CNetGamePlayer** m_self; + player_ptr m_self_ptr; + players m_players; player_ptr m_dummy = std::make_shared(nullptr); @@ -58,7 +60,7 @@ namespace big player_service(); ~player_service(); - + player_service(const player_service&) = delete; player_service(player_service&&) noexcept = delete; player_service& operator=(const player_service&) = delete; @@ -66,7 +68,7 @@ namespace big void do_cleanup(); - [[nodiscard]] player_ptr get_self() const; + [[nodiscard]] player_ptr get_self(); [[nodiscard]] player_ptr get_by_name(std::string name); [[nodiscard]] player_ptr get_by_msg_id(uint32_t msg_id) const; @@ -84,4 +86,4 @@ namespace big }; inline player_service* g_player_service{}; -} \ No newline at end of file +}