summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorAdam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864>2009-11-19 01:53:03 +0000
committerAdam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864>2009-11-19 01:53:03 +0000
commite514a3793d251409428caf53cbb75f0be90a6f38 (patch)
tree349c4cfc9fc45735999fd81d39a515560ab0e083 /src/core
parent68381e69d94735010df986b22c8e758981b50995 (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.c28
-rw-r--r--src/core/os_defcon.c8
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, &param);
- 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");
}
}