aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Chat/Channels/Channel.cpp10
-rw-r--r--src/server/game/Globals/ObjectAccessor.cpp18
-rw-r--r--src/server/game/Globals/ObjectAccessor.h1
-rw-r--r--src/server/game/Handlers/CalendarHandler.cpp2
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp2
-rw-r--r--src/server/game/Handlers/GroupHandler.cpp2
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp2
-rw-r--r--src/server/game/World/World.cpp4
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