parent
c865fc8ca5
commit
b5c0a4aa3a
@ -578,7 +578,6 @@ void cWorld::Start(void)
|
|||||||
m_VillagersShouldHarvestCrops = IniFile.GetValueSetB("Monsters", "VillagersShouldHarvestCrops", true);
|
m_VillagersShouldHarvestCrops = IniFile.GetValueSetB("Monsters", "VillagersShouldHarvestCrops", true);
|
||||||
int GameMode = IniFile.GetValueSetI("General", "Gamemode", (int)m_GameMode);
|
int GameMode = IniFile.GetValueSetI("General", "Gamemode", (int)m_GameMode);
|
||||||
int Weather = IniFile.GetValueSetI("General", "Weather", (int)m_Weather);
|
int Weather = IniFile.GetValueSetI("General", "Weather", (int)m_Weather);
|
||||||
m_TimeOfDay = IniFile.GetValueSetI("General", "TimeInTicks", m_TimeOfDay);
|
|
||||||
|
|
||||||
if (GetDimension() == dimOverworld)
|
if (GetDimension() == dimOverworld)
|
||||||
{
|
{
|
||||||
@ -597,6 +596,7 @@ void cWorld::Start(void)
|
|||||||
|
|
||||||
InitialiseGeneratorDefaults(IniFile);
|
InitialiseGeneratorDefaults(IniFile);
|
||||||
InitialiseAndLoadMobSpawningValues(IniFile);
|
InitialiseAndLoadMobSpawningValues(IniFile);
|
||||||
|
SetTimeOfDay(IniFile.GetValueSetI("General", "TimeInTicks", m_TimeOfDay));
|
||||||
|
|
||||||
m_ChunkMap = new cChunkMap(this);
|
m_ChunkMap = new cChunkMap(this);
|
||||||
|
|
||||||
@ -3153,21 +3153,47 @@ int cWorld::CreateProjectile(double a_PosX, double a_PosY, double a_PosZ, cProje
|
|||||||
|
|
||||||
void cWorld::TabCompleteUserName(const AString & a_Text, AStringVector & a_Results)
|
void cWorld::TabCompleteUserName(const AString & a_Text, AStringVector & a_Results)
|
||||||
{
|
{
|
||||||
|
typedef std::pair<AString::size_type, AString> pair_t;
|
||||||
|
size_t LastSpace = a_Text.find_last_of(" "); // Find the position of the last space
|
||||||
|
AString LastWord = a_Text.substr(LastSpace + 1, a_Text.length()); // Find the last word
|
||||||
|
|
||||||
|
if (LastWord.empty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<pair_t> UsernamesByWeight;
|
||||||
|
|
||||||
cCSLock Lock(m_CSPlayers);
|
cCSLock Lock(m_CSPlayers);
|
||||||
for (cPlayerList::iterator itr = m_Players.begin(), end = m_Players.end(); itr != end; ++itr)
|
for (cPlayerList::iterator itr = m_Players.begin(), end = m_Players.end(); itr != end; ++itr)
|
||||||
{
|
{
|
||||||
size_t LastSpace = a_Text.find_last_of(" "); // Find the position of the last space
|
|
||||||
|
|
||||||
AString LastWord = a_Text.substr(LastSpace + 1, a_Text.length()); // Find the last word
|
|
||||||
AString PlayerName ((*itr)->GetName());
|
AString PlayerName ((*itr)->GetName());
|
||||||
size_t Found = PlayerName.find(LastWord); // Try to find last word in playername
|
AString::size_type Found = PlayerName.find(LastWord); // Try to find last word in playername
|
||||||
|
|
||||||
if (Found == AString::npos)
|
if (Found == AString::npos)
|
||||||
{
|
{
|
||||||
continue; // No match
|
continue; // No match
|
||||||
}
|
}
|
||||||
|
|
||||||
a_Results.push_back(PlayerName); // Match!
|
UsernamesByWeight.push_back(std::make_pair(Found, PlayerName)); // Match! Store it with the position of the match as a weight
|
||||||
|
}
|
||||||
|
Lock.Unlock();
|
||||||
|
|
||||||
|
std::sort(UsernamesByWeight.begin(), UsernamesByWeight.end()); // Sort lexicographically (by the first value, then second), so higher weights (usernames with match closer to start) come first (#1274)
|
||||||
|
|
||||||
|
/* TODO: Uncomment once migrated to C++11
|
||||||
|
std::transform(
|
||||||
|
UsernamesByWeight.begin(),
|
||||||
|
UsernamesByWeight.end(),
|
||||||
|
std::back_inserter(a_Results),
|
||||||
|
[](const pair_t & p) { return p.first; }
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
a_Results.reserve(UsernamesByWeight.size());
|
||||||
|
for (std::vector<pair_t>::const_iterator itr = UsernamesByWeight.begin(); itr != UsernamesByWeight.end(); ++itr)
|
||||||
|
{
|
||||||
|
a_Results.push_back(itr->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user