diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/cs_set.c | 28 | ||||
| -rw-r--r-- | src/core/os_defcon.c | 8 |
2 files changed, 13 insertions, 23 deletions
diff --git a/src/core/cs_set.c b/src/core/cs_set.c index b70a528f3..54c397c52 100644 --- a/src/core/cs_set.c +++ b/src/core/cs_set.c @@ -208,6 +208,8 @@ class CommandCSSet : public Command } else if (add) { + ci->RemoveMLock(cm->Name); + if (cm->Type == MODE_PARAM) { cmp = static_cast<ChannelModeParam *>(cm); @@ -218,27 +220,16 @@ class CommandCSSet : public Command if (!cmp->IsValid(param.c_str())) continue; - ci->SetParam(cmp->Name, param); + ci->SetMLock(cmp->Name, true, param); + } + else + { + ci->SetMLock(cm->Name, true); } - - ci->SetMLock(cm->Name, true); - ci->RemoveMLock(cm->Name, false); } else { ci->SetMLock(cm->Name, false); - - if (ci->HasMLock(cm->Name, true)) - { - ci->RemoveMLock(cm->Name, true); - - if (cm->Type == MODE_PARAM) - { - cmp = static_cast<ChannelModeParam *>(cm); - - ci->UnsetParam(cmp->Name); - } - } } } else @@ -249,8 +240,7 @@ class CommandCSSet : public Command /* We can't mlock +L if +l is not mlocked as well. */ if (ci->HasMLock(CMODE_REDIRECT, true) && !ci->HasMLock(CMODE_LIMIT, true)) { - ci->RemoveMLock(CMODE_REDIRECT, true); - ci->UnsetParam(CMODE_REDIRECT); + ci->RemoveMLock(CMODE_REDIRECT); notice_lang(s_ChanServ, u, CHAN_SET_MLOCK_L_REQUIRED); } } @@ -260,7 +250,7 @@ class CommandCSSet : public Command if (ModeManager::FindChannelModeByName(CMODE_NOKNOCK) && ircd->knock_needs_i) { if (ci->HasMLock(CMODE_NOKNOCK, true) && !ci->HasMLock(CMODE_INVITE, true)) { - ci->RemoveMLock(CMODE_NOKNOCK, true); + ci->RemoveMLock(CMODE_NOKNOCK); notice_lang(s_ChanServ, u, CHAN_SET_MLOCK_K_REQUIRED); } } diff --git a/src/core/os_defcon.c b/src/core/os_defcon.c index fdcecc525..044eb54ac 100644 --- a/src/core/os_defcon.c +++ b/src/core/os_defcon.c @@ -200,14 +200,15 @@ class OSDEFCON : public Module std::string param; GetDefConParam(Name, ¶m); - c->SetMode(Name); - std::string buf = "+" + std::string(&cm->ModeChar); if (!param.empty()) { buf += " " + param; - c->SetParam(Name, param); + c->SetMode(Name, param); } + else + c->SetMode(Name); + ircdproto->SendMode(findbot(s_OperServ), c->name, buf.c_str()); } } @@ -496,7 +497,6 @@ void defconParseModeString(const char *str) { DefConModesOn.UnsetFlag(CMODE_REDIRECT); - //DefConModesCI.UnsetParam(CMODE_REDIRECT); alog("DefConChanModes must lock mode +l as well to lock mode +L"); } } |
