diff options
| author | jackpoz <giacomopoz@gmail.com> | 2014-10-17 22:59:53 +0200 |
|---|---|---|
| committer | jackpoz <giacomopoz@gmail.com> | 2014-10-17 22:59:53 +0200 |
| commit | a147770702179273ddd26983d649fa8a54ed6f85 (patch) | |
| tree | 317a16b42a5a4bb9bf5cf05cc8483078c639a403 /src | |
| parent | ee5eaab598e445e3926edf6e12b1b2b4477c2594 (diff) | |
Core/Player: Additional fixes related to https://github.com/TrinityCore/TrinityCore/commit/ee5eaab598e445e3926edf6e12b1b2b4477c2594
Fix whispers to players on loading screen and few other cases.
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Chat/Channels/Channel.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectAccessor.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectAccessor.h | 1 | ||||
| -rw-r--r-- | src/server/game/Handlers/CalendarHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/GroupHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/World/World.cpp | 4 |
8 files changed, 30 insertions, 11 deletions
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index cc2d3279daa..40605444ec0 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -296,7 +296,7 @@ void Channel::KickOrBan(Player const* player, std::string const& badname, bool b return; } - Player* bad = sObjectAccessor->FindPlayerByName(badname); + Player* bad = sObjectAccessor->FindConnectedPlayerByName(badname); ObjectGuid victim = bad ? bad->GetGUID() : ObjectGuid::Empty; if (!victim || !IsOn(victim)) { @@ -366,7 +366,7 @@ void Channel::UnBan(Player const* player, std::string const& badname) return; } - Player* bad = sObjectAccessor->FindPlayerByName(badname); + Player* bad = sObjectAccessor->FindConnectedPlayerByName(badname); ObjectGuid victim = bad ? bad->GetGUID() : ObjectGuid::Empty; if (!victim || !IsBanned(victim)) @@ -439,7 +439,7 @@ void Channel::SetMode(Player const* player, std::string const& p2n, bool mod, bo if (guid == _ownerGUID && std::string(p2n) == player->GetName() && mod) return; - Player* newp = sObjectAccessor->FindPlayerByName(p2n); + Player* newp = sObjectAccessor->FindConnectedPlayerByName(p2n); ObjectGuid victim = newp ? newp->GetGUID() : ObjectGuid::Empty; if (!victim || !IsOn(victim) || @@ -487,7 +487,7 @@ void Channel::SetOwner(Player const* player, std::string const& newname) return; } - Player* newp = sObjectAccessor->FindPlayerByName(newname); + Player* newp = sObjectAccessor->FindConnectedPlayerByName(newname); ObjectGuid victim = newp ? newp->GetGUID() : ObjectGuid::Empty; if (!victim || !IsOn(victim) || @@ -641,7 +641,7 @@ void Channel::Invite(Player const* player, std::string const& newname) return; } - Player* newp = sObjectAccessor->FindPlayerByName(newname); + Player* newp = sObjectAccessor->FindConnectedPlayerByName(newname); if (!newp || !newp->isGMVisible()) { WorldPacket data; diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index 105ffc0be94..1323e232e80 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -233,6 +233,24 @@ Player* ObjectAccessor::FindPlayerByName(std::string const& name) return NULL; } +Player* ObjectAccessor::FindConnectedPlayerByName(std::string const& name) +{ + boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Player>::GetLock()); + + std::string nameStr = name; + std::transform(nameStr.begin(), nameStr.end(), nameStr.begin(), ::tolower); + HashMapHolder<Player>::MapType const& m = GetPlayers(); + for (HashMapHolder<Player>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter) + { + std::string currentName = iter->second->GetName(); + std::transform(currentName.begin(), currentName.end(), currentName.begin(), ::tolower); + if (nameStr.compare(currentName) == 0) + return iter->second; + } + + return NULL; +} + void ObjectAccessor::SaveAllPlayers() { boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Player>::GetLock()); diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index b0e3eb58529..d8beb22690a 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -171,6 +171,7 @@ class ObjectAccessor // this returns Player even if he is not in world, for example teleporting static Player* FindConnectedPlayer(ObjectGuid); + static Player* FindConnectedPlayerByName(std::string const& name); // when using this, you must use the hashmapholder's lock static HashMapHolder<Player>::MapType const& GetPlayers() diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index 6d0caf9c072..5db9cbab9ce 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -432,7 +432,7 @@ void WorldSession::HandleCalendarEventInvite(WorldPacket& recvData) recvData >> eventId >> inviteId >> name >> isPreInvite >> isGuildEvent; - if (Player* player = sObjectAccessor->FindPlayerByName(name.c_str())) + if (Player* player = sObjectAccessor->FindConnectedPlayerByName(name.c_str())) { // Invitee is online inviteeGuid = player->GetGUID(); diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index c4539680b82..d5495f42480 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -268,7 +268,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) break; } - Player* receiver = sObjectAccessor->FindPlayerByName(to); + Player* receiver = sObjectAccessor->FindConnectedPlayerByName(to); if (!receiver || (lang != LANG_ADDON && !receiver->isAcceptWhispers() && receiver->GetSession()->HasPermission(rbac::RBAC_PERM_CAN_FILTER_WHISPERS) && !receiver->IsInWhisperWhiteList(sender->GetGUID()))) { SendPlayerNotFoundNotice(to); diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 632f28da48f..c366c725c18 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -606,7 +606,7 @@ void WorldSession::HandleGroupChangeSubGroupOpcode(WorldPacket& recvData) if (!group->HasFreeSlotSubGroup(groupNr)) return; - Player* movedPlayer = sObjectAccessor->FindPlayerByName(name); + Player* movedPlayer = sObjectAccessor->FindConnectedPlayerByName(name); ObjectGuid guid; if (movedPlayer) { diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index a9e69ff3f8d..f2aa334eb3a 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1280,7 +1280,7 @@ void WorldSession::HandleWhoisOpcode(WorldPacket& recvData) return; } - Player* player = sObjectAccessor->FindPlayerByName(charname); + Player* player = sObjectAccessor->FindConnectedPlayerByName(charname); if (!player) { diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index fae613797e9..33c5042fc8d 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2459,7 +2459,7 @@ bool World::RemoveBanAccount(BanMode mode, std::string const& nameOrIP) /// Ban an account or ban an IP address, duration will be parsed using TimeStringToSecs if it is positive, otherwise permban BanReturn World::BanCharacter(std::string const& name, std::string const& duration, std::string const& reason, std::string const& author) { - Player* pBanned = sObjectAccessor->FindPlayerByName(name); + Player* pBanned = sObjectAccessor->FindConnectedPlayerByName(name); uint32 guid = 0; uint32 duration_secs = TimeStringToSecs(duration); @@ -2500,7 +2500,7 @@ BanReturn World::BanCharacter(std::string const& name, std::string const& durati /// Remove a ban from a character bool World::RemoveBanCharacter(std::string const& name) { - Player* pBanned = sObjectAccessor->FindPlayerByName(name); + Player* pBanned = sObjectAccessor->FindConnectedPlayerByName(name); uint32 guid = 0; /// Pick a player to ban if not online |
