diff options
-rw-r--r-- | src/actormanager.cpp | 38 | ||||
-rw-r--r-- | src/actormanager.h | 2 | ||||
-rw-r--r-- | src/gui/windows/whoisonline.cpp | 4 |
3 files changed, 36 insertions, 8 deletions
diff --git a/src/actormanager.cpp b/src/actormanager.cpp index cc46ac34b..bfcc92e81 100644 --- a/src/actormanager.cpp +++ b/src/actormanager.cpp @@ -1965,22 +1965,30 @@ void ActorManager::updateNameId(const std::string &name, if (!mEnableIdCollecting) return; const int id = static_cast<int>(beingId); - if (id < 2000000 || id >= 110000000) + if (id && + id < 2000000 || + id >= 110000000) + { return; + } if (mIdName.find(beingId) == mIdName.end() || mIdName[beingId].find(name) == mIdName[beingId].end()) { mIdName[beingId].insert(name); - std::string dir = settings.usersIdDir; const std::string idStr = toString(id); - dir.append(idStr); - dir.append("/"); - dir.append(stringToHexPath(name)); const std::string dateStr = getDateTimeString(); - Files::saveTextFile(dir, - "info.txt", - (name + "\n").append(dateStr)); + std::string dir; + if (beingId != BeingId_zero) + { + dir = settings.usersIdDir; + dir.append(idStr); + dir.append("/"); + dir.append(stringToHexPath(name)); + Files::saveTextFile(dir, + "info.txt", + (name + "\n").append(dateStr)); + } dir = settings.usersDir; dir.append(stringToHexPath(name)); @@ -1990,6 +1998,20 @@ void ActorManager::updateNameId(const std::string &name, } } +void ActorManager::updateSeenPlayers(const std::set<std::string> + &onlinePlayers) +{ + if (!mEnableIdCollecting) + return; + + FOR_EACH (std::set<std::string>::const_iterator, it, onlinePlayers) + { + const std::string name = *it; + if (!findBeingByName(name, ActorType::Player)) + updateNameId(name, BeingId_zero); + } +} + #ifdef EATHENA_SUPPORT void ActorManager::removeRoom(const int chatId) { diff --git a/src/actormanager.h b/src/actormanager.h index 6e9020d20..2738181f7 100644 --- a/src/actormanager.h +++ b/src/actormanager.h @@ -359,6 +359,8 @@ class ActorManager final: public ConfigListener void updateNameId(const std::string &name, const BeingId beingId); + void updateSeenPlayers(const std::set<std::string> &onlinePlayers); + size_t size() const { return mActors.size(); } diff --git a/src/gui/windows/whoisonline.cpp b/src/gui/windows/whoisonline.cpp index 81225ba33..d51af6b05 100644 --- a/src/gui/windows/whoisonline.cpp +++ b/src/gui/windows/whoisonline.cpp @@ -346,6 +346,8 @@ void WhoIsOnline::loadList(const std::vector<OnlinePlayer*> &list) chatWindow->updateOnline(mOnlineNicks); if (socialWindow) socialWindow->updateActiveList(); + if (actorManager) + actorManager->updateSeenPlayers(mOnlineNicks); } updateSize(); mFriends.clear(); @@ -681,6 +683,8 @@ void WhoIsOnline::slowLogic() chatWindow->updateOnline(mOnlineNicks); if (socialWindow) socialWindow->updateActiveList(); + if (actorManager) + actorManager->updateSeenPlayers(mOnlineNicks); } } break; |