diff options
| author | Adam <Adam@anope.org> | 2013-01-07 21:30:07 -0500 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2013-01-07 21:30:07 -0500 |
| commit | 5f3dfc296041540960f372b010eea623bdd7d335 (patch) | |
| tree | 663dda922732e479778d68e0f822169be9f90b7e | |
| parent | dc9e81a6fc58a9ea347ea28d780ccb98d994511d (diff) | |
Track +g on inspircd, fix saving/loading mode locks for generic modes
| -rw-r--r-- | modules/protocol/inspircd20.cpp | 2 | ||||
| -rw-r--r-- | src/regchannel.cpp | 26 |
2 files changed, 22 insertions, 6 deletions
diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp index 7aff780be..fd631a334 100644 --- a/modules/protocol/inspircd20.cpp +++ b/modules/protocol/inspircd20.cpp @@ -222,6 +222,8 @@ struct IRCDMessageCapab : Message::Capab cm = new ChannelMode(CMODE_FILTER, modechar[0]); else if (modename.equals_cs("delayjoin")) cm = new ChannelMode(CMODE_DELAYEDJOIN, modechar[0]); + else if (modename.equals_cs("filter")) + cm = new ChannelModeList(CMODE_FILTER, modechar[0]); else if (modename.equals_cs("flood")) cm = new ChannelModeFlood(modechar[0], true); else if (modename.equals_cs("founder")) diff --git a/src/regchannel.cpp b/src/regchannel.cpp index cc76bc5ba..ac7fb70fa 100644 --- a/src/regchannel.cpp +++ b/src/regchannel.cpp @@ -167,7 +167,10 @@ void ModeLock::Serialize(Serialize::Data &data) const const Anope::string* ChannelModeNameStrings = Flags<ChannelModeName>::GetFlagStrings(); data["ci"] << this->ci->name; data["set"] << this->set; - data["name"] << ChannelModeNameStrings[this->name]; + if (this->name < CMODE_END) + data["name"] << ChannelModeNameStrings[this->name]; + else + data["name"] << this->name - CMODE_END; data["param"] << this->param; data["setter"] << this->setter; data.SetType("created", Serialize::Data::DT_INT); data["created"] << this->created; @@ -186,13 +189,24 @@ Serializable* ModeLock::Unserialize(Serializable *obj, Serialize::Data &data) ChannelModeName name = CMODE_END; - const Anope::string* ChannelModeNameStrings = Flags<ChannelModeName>::GetFlagStrings(); - for (unsigned i = 0; !ChannelModeNameStrings[i].empty(); ++i) - if (ChannelModeNameStrings[i] == sname) + if (sname.is_pos_number_only()) + { + try { - name = static_cast<ChannelModeName>(i); - break; + name = static_cast<ChannelModeName>(CMODE_END + convertTo<unsigned>(sname)); } + catch (const ConvertException &) { } + } + else + { + const Anope::string* ChannelModeNameStrings = Flags<ChannelModeName>::GetFlagStrings(); + for (unsigned i = 0; !ChannelModeNameStrings[i].empty(); ++i) + if (ChannelModeNameStrings[i] == sname) + { + name = static_cast<ChannelModeName>(i); + break; + } + } if (name == CMODE_END) return NULL; |
