diff options
Diffstat (limited to 'source/cWorld.cpp')
-rw-r--r-- | source/cWorld.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/source/cWorld.cpp b/source/cWorld.cpp index a981a24c0..f12f9f1a8 100644 --- a/source/cWorld.cpp +++ b/source/cWorld.cpp @@ -1614,6 +1614,42 @@ bool cWorld::DoWithPlayer(const AString & a_PlayerName, cPlayerListCallback & a_ +bool cWorld::FindAndDoWithPlayer(const AString & a_PlayerName, cPlayerListCallback & a_Callback) +{ + cPlayer* BestMatch = 0; + unsigned int BestRating = 0; + unsigned int NumMatches = 0; + unsigned int NameLength = a_PlayerName.length(); + + cCSLock Lock(m_CSPlayers); + for (cPlayerList::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) + { + unsigned int Rating = RateCompareString (a_PlayerName, (*itr)->GetName()); + if (Rating > 0 && Rating >= BestRating) + { + BestMatch = *itr; + if( Rating > BestRating ) NumMatches = 0; + BestRating = Rating; + ++NumMatches; + } + if (Rating == NameLength) // Perfect match + { + break; + } + } // for itr - m_Players[] + + if (NumMatches == 1) + { + LOG("Compared %s and %s with rating %i", a_PlayerName.c_str(), BestMatch->GetName().c_str(), BestRating ); + return a_Callback.Item (BestMatch); + } + return false; +} + + + + + // TODO: This interface is dangerous! cPlayer * cWorld::FindClosestPlayer(const Vector3f & a_Pos, float a_SightLimit) { |