- // Fix by brain - allow the change if they arent on channel - rely on boolean short-circuit
- // to not check the other items in the statement if they arent on the channel
- int mode = channel->GetStatus(source);
- switch (access_type)
- {
- case AC_DEOP:
- ServerInstance->Log(DEBUG,"Override access check AC_DEOP");
- if (CanOverride(source,"MODEDEOP"))
- {
- if (NoisyOverride)
- if ((!channel->HasUser(source)) || (mode < STATUS_OP))
- OverDeops++;
- return ACR_ALLOW;
- }
- else
- {
- return ACR_DEFAULT;
- }
- break;
- case AC_OP:
- ServerInstance->Log(DEBUG,"Override access check AC_OP");
- if (CanOverride(source,"MODEOP"))
- {
- if (NoisyOverride)
- if ((!channel->HasUser(source)) || (mode < STATUS_OP))
- OverOps++;
- return ACR_ALLOW;
- }
- else
- {
- return ACR_DEFAULT;
- }
- break;
- case AC_VOICE:
- ServerInstance->Log(DEBUG,"Override access check AC_VOICE");
- if (CanOverride(source,"MODEVOICE"))
- {
- if (NoisyOverride)
- if ((!channel->HasUser(source)) || (mode < STATUS_HOP))
- OverVoices++;
- return ACR_ALLOW;
- }
- else
- {
- return ACR_DEFAULT;
- }
- break;
- case AC_DEVOICE:
- ServerInstance->Log(DEBUG,"Override access check AC_DEVOICE");
- if (CanOverride(source,"MODEDEVOICE"))
- {
- if (NoisyOverride)
- if ((!channel->HasUser(source)) || (mode < STATUS_HOP))
- OverDevoices++;
- return ACR_ALLOW;
- }
- else
- {
- return ACR_DEFAULT;
- }
- break;
- case AC_HALFOP:
- ServerInstance->Log(DEBUG,"Override access check AC_HALFOP");
- if (CanOverride(source,"MODEHALFOP"))
- {
- if (NoisyOverride)
- if ((!channel->HasUser(source)) || (mode < STATUS_OP))
- OverHalfops++;
- return ACR_ALLOW;
- }
- else
- {
- return ACR_DEFAULT;
- }
- break;
- case AC_DEHALFOP:
- ServerInstance->Log(DEBUG,"Override access check AC_DEHALFOP");
- if (CanOverride(source,"MODEDEHALFOP"))
- {
- if (NoisyOverride)
- if ((!channel->HasUser(source)) || (mode < STATUS_OP))
- OverDehalfops++;
- return ACR_ALLOW;
- }
- else
- {
- return ACR_DEFAULT;
- }
- break;
- }
-
- if (CanOverride(source,"OTHERMODE"))
- {
- if (NoisyOverride)
- if ((!channel->HasUser(source)) || (mode < STATUS_OP))
- {
- ServerInstance->Log(DEBUG,"Overridden mode");
- OverriddenMode = true;
- OverOps = OverDeops = OverVoices = OverDevoices = OverHalfops = OverDehalfops = 0;
- }
- return ACR_ALLOW;
- }
- else
- {
- return ACR_DEFAULT;
- }