mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
Merge pull request #1179 from SaberUK/insp20+fix-buildprefixes
[2.0] Fix 005 not showing some modes with the same rank as others.
This commit is contained in:
commit
acf0493627
20
src/mode.cpp
20
src/mode.cpp
@ -837,11 +837,19 @@ std::string ModeParser::GiveModeList(ModeMasks m)
|
||||
return type1 + "," + type2 + "," + type3 + "," + type4;
|
||||
}
|
||||
|
||||
struct PrefixModeSorter
|
||||
{
|
||||
bool operator()(ModeHandler* lhs, ModeHandler* rhs)
|
||||
{
|
||||
return lhs->GetPrefixRank() < rhs->GetPrefixRank();
|
||||
}
|
||||
};
|
||||
|
||||
std::string ModeParser::BuildPrefixes(bool lettersAndModes)
|
||||
{
|
||||
std::string mletters;
|
||||
std::string mprefixes;
|
||||
std::map<int,std::pair<char,char> > prefixes;
|
||||
std::vector<ModeHandler*> prefixes;
|
||||
|
||||
for (unsigned char mode = 'A'; mode <= 'z'; mode++)
|
||||
{
|
||||
@ -849,15 +857,15 @@ std::string ModeParser::BuildPrefixes(bool lettersAndModes)
|
||||
|
||||
if ((modehandlers[pos]) && (modehandlers[pos]->GetPrefix()))
|
||||
{
|
||||
prefixes[modehandlers[pos]->GetPrefixRank()] = std::make_pair(
|
||||
modehandlers[pos]->GetPrefix(), modehandlers[pos]->GetModeChar());
|
||||
prefixes.push_back(modehandlers[pos]);
|
||||
}
|
||||
}
|
||||
|
||||
for(std::map<int,std::pair<char,char> >::reverse_iterator n = prefixes.rbegin(); n != prefixes.rend(); n++)
|
||||
std::sort(prefixes.begin(), prefixes.end(), PrefixModeSorter());
|
||||
for (std::vector<ModeHandler*>::const_reverse_iterator n = prefixes.rbegin(); n != prefixes.rend(); ++n)
|
||||
{
|
||||
mletters = mletters + n->second.first;
|
||||
mprefixes = mprefixes + n->second.second;
|
||||
mletters += (*n)->GetPrefix();
|
||||
mprefixes += (*n)->GetModeChar();
|
||||
}
|
||||
|
||||
return lettersAndModes ? "(" + mprefixes + ")" + mletters : mletters;
|
||||
|
Loading…
x
Reference in New Issue
Block a user