feat(Core/World): Implement DoForAllPlayers() helper for all online p… (#18060)

* feat(Core/World): Implement DoForAllPlayers() helper for all online players

* Update src/server/game/World/World.cpp

Co-authored-by: Winfidonarleyan <dowlandtop@yandex.com>

* Update src/server/game/World/World.cpp

Co-authored-by: Winfidonarleyan <dowlandtop@yandex.com>

* rename

* Update WorldMock.h

* Update WorldMock.h

---------

Co-authored-by: Winfidonarleyan <dowlandtop@yandex.com>
This commit is contained in:
Andrew
2024-01-01 09:57:57 -03:00
committed by GitHub
parent adccad8499
commit e3fd42f3d4
5 changed files with 24 additions and 4 deletions

View File

@@ -608,6 +608,7 @@ public:
[[nodiscard]] virtual std::string const& GetRealmName() const = 0; [[nodiscard]] virtual std::string const& GetRealmName() const = 0;
virtual void SetRealmName(std::string name) = 0; virtual void SetRealmName(std::string name) = 0;
virtual void RemoveOldCorpses() = 0; virtual void RemoveOldCorpses() = 0;
virtual void DoForAllOnlinePlayers(std::function<void(Player*)> exec) = 0;
}; };
#endif //AZEROTHCORE_IWORLD_H #endif //AZEROTHCORE_IWORLD_H

View File

@@ -3253,6 +3253,23 @@ void World::RemoveOldCorpses()
_timers[WUPDATE_CORPSES].SetCurrent(_timers[WUPDATE_CORPSES].GetInterval()); _timers[WUPDATE_CORPSES].SetCurrent(_timers[WUPDATE_CORPSES].GetInterval());
} }
void World::DoForAllOnlinePlayers(std::function<void(Player*)> exec)
{
std::shared_lock lock(*HashMapHolder<Player>::GetLock());
for (auto const& it : ObjectAccessor::GetPlayers())
{
if (Player* player = it.second)
{
if (!player->IsInWorld())
{
continue;
}
exec(player);
}
}
}
bool World::IsPvPRealm() const bool World::IsPvPRealm() const
{ {
return getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP || getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_FFA_PVP; return getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP || getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_FFA_PVP;

View File

@@ -349,6 +349,8 @@ public:
void RemoveOldCorpses() override; void RemoveOldCorpses() override;
void DoForAllOnlinePlayers(std::function<void(Player*)> exec) override;
protected: protected:
void _UpdateGameTime(); void _UpdateGameTime();
// callback for UpdateRealmCharacters // callback for UpdateRealmCharacters

View File

@@ -290,10 +290,9 @@ public:
stmt->SetData(0, uint16(atLogin)); stmt->SetData(0, uint16(atLogin));
CharacterDatabase.Execute(stmt); CharacterDatabase.Execute(stmt);
std::shared_lock<std::shared_mutex> lock(*HashMapHolder<Player>::GetLock()); sWorld->DoForAllOnlinePlayers([&] (Player* player){
HashMapHolder<Player>::MapType const& plist = ObjectAccessor::GetPlayers(); player->SetAtLoginFlag(atLogin);
for (auto itr = plist.begin(); itr != plist.end(); ++itr) });
itr->second->SetAtLoginFlag(atLogin);
return true; return true;
} }

View File

@@ -120,6 +120,7 @@ public:
MOCK_METHOD(std::string const&, GetRealmName, (), (const)); MOCK_METHOD(std::string const&, GetRealmName, (), (const));
MOCK_METHOD(void, SetRealmName, (std::string name), ()); MOCK_METHOD(void, SetRealmName, (std::string name), ());
MOCK_METHOD(void, RemoveOldCorpses, ()); MOCK_METHOD(void, RemoveOldCorpses, ());
MOCK_METHOD(void, DoForAllOnlinePlayers, (std::function<void(Player*)> exec));
}; };
#pragma GCC diagnostic pop #pragma GCC diagnostic pop