diff --git a/Plugins/Core/teleport.lua b/Plugins/Core/teleport.lua index 4dd13c64d..90eb3529a 100644 --- a/Plugins/Core/teleport.lua +++ b/Plugins/Core/teleport.lua @@ -3,16 +3,21 @@ function HandleTPCommand( Split, Player ) Player:SendMessage( cChatColor.Green .. "Usage: /tp [PlayerName]" ) return true end - local World = Player:GetWorld() - local OtherPlayer = World:GetPlayer( Split[2] ) - if( OtherPlayer == nil ) then + + World = Player:GetWorld() + + local TeleportDestination = function(OtherPlayer) + if( OtherPlayer == Player ) then + Player:SendMessage( cChatColor.Green .. "Already there :)" ) + else + Player:TeleportToEntity( OtherPlayer ) + Player:SendMessage( cChatColor.Green .. "You teleported to "..OtherPlayer:GetName().."!" ) + OtherPlayer:SendMessage( cChatColor.Green .. Player:GetName().." teleported to you!" ) + end + end + + if (not(World:DoWithPlayer(Split[2], TeleportDestination))) then Player:SendMessage( cChatColor.Green .. "Can't find player " .. Split[2] ) - elseif( OtherPlayer == Player ) then - Player:SendMessage( cChatColor.Green .. "Already there :)" ) - else - Player:TeleportToEntity( OtherPlayer ) - Player:SendMessage( cChatColor.Green .. "You teleported to "..OtherPlayer:GetName().."!" ) - OtherPlayer:SendMessage( cChatColor.Green .. Player:GetName().." teleported to you!" ) - end + end return true end \ No newline at end of file diff --git a/source/Globals.h b/source/Globals.h index 65db1b436..9b057d262 100644 --- a/source/Globals.h +++ b/source/Globals.h @@ -200,3 +200,15 @@ public: +//Common functions +//Taken from http://stackoverflow.com/questions/11635/case-insensitive-string-comparison-in-c +inline bool iequals(const std::string& a, const std::string& b) +{ + unsigned int sz = a.size(); + if (b.size() != sz) + return false; + for (unsigned int i = 0; i < sz; ++i) + if (tolower(a[i]) != tolower(b[i])) + return false; + return true; +} diff --git a/source/cWorld.cpp b/source/cWorld.cpp index c2a943493..f904d8ceb 100644 --- a/source/cWorld.cpp +++ b/source/cWorld.cpp @@ -1534,7 +1534,7 @@ bool cWorld::DoWithPlayer(const AString & a_PlayerName, cPlayerListCallback & a_ cCSLock Lock(m_CSPlayers); for (cPlayerList::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) { - if ((*itr)->GetName() == a_PlayerName) + if (iequals((*itr)->GetName(), a_PlayerName)) { a_Callback.Item(*itr); return true;