diff options
| author | Adam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-11-19 01:53:03 +0000 |
|---|---|---|
| committer | Adam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-11-19 01:53:03 +0000 |
| commit | e514a3793d251409428caf53cbb75f0be90a6f38 (patch) | |
| tree | 349c4cfc9fc45735999fd81d39a515560ab0e083 /src/core | |
| parent | 68381e69d94735010df986b22c8e758981b50995 (diff) | |
Changed the mode param handling code to be more into the general mode handling code, this cleans up and fixes some small problems with mlocking params. This also helps clarify that the ChannelInfo mode functions are for mlock only. Also, this adds the OnMLock and OnUnMLock events which can be used to control if something can be (un)mlocked
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2660 5417fbe8-f217-4b02-8779-1006273d7864
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"); } } |
