diff options
-rw-r--r-- | include/mode.h | 4 | ||||
-rw-r--r-- | src/mode.cpp | 12 |
2 files changed, 11 insertions, 5 deletions
diff --git a/include/mode.h b/include/mode.h index dcd8cc004..5d4ce0c8c 100644 --- a/include/mode.h +++ b/include/mode.h @@ -424,6 +424,10 @@ class CoreExport ModeParser : public classbase */ std::string LastParse; + unsigned int sent[256]; + + unsigned int seq; + public: /** The constructor initializes all the RFC basic modes by using ModeParserAddMode(). diff --git a/src/mode.cpp b/src/mode.cpp index 91a64f89b..8712e63b5 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -371,11 +371,10 @@ void ModeParser::Process(const char* const* parameters, int pcnt, User *user, bo { const char* mode = parameters[1]; int nonlistmodes_found = 0; - bool sent[256]; - mask = MASK_CHANNEL; + seq++; - memset(&sent, 0, 256); + mask = MASK_CHANNEL; while (mode && *mode) { @@ -390,9 +389,9 @@ void ModeParser::Process(const char* const* parameters, int pcnt, User *user, bo /* Ensure the user doesnt request the same mode twice, * so they cant flood themselves off out of idiocy. */ - if (!sent[mletter]) + if (sent[mletter] != seq) { - sent[mletter] = true; + sent[mletter] = seq; } else { @@ -1199,4 +1198,7 @@ ModeParser::ModeParser(InspIRCd* Instance) : ServerInstance(Instance) /* Initialise the RFC mode letters */ for (int index = 0; modes[index]; index++) this->AddMode(modes[index]); + + seq = 0; + memset(&sent, 0, 256); } |