-extern InspIRCd* ServerInstance;
-extern ServerConfig* Config;
-extern std::vector<Module*> modules;
-extern std::vector<ircd_module*> factory;
-extern int MODCOUNT;
-extern time_t TIME;
+ModeChannelHalfOp::ModeChannelHalfOp(InspIRCd* Instance) : ModeHandler(Instance, 'h', 1, 1, true, MODETYPE_CHANNEL, false, '%')
+{
+}
+
+unsigned int ModeChannelHalfOp::GetPrefixRank()
+{
+ return HALFOP_VALUE;
+}
+
+ModePair ModeChannelHalfOp::ModeSet(userrec* source, userrec* dest, chanrec* channel, const std::string ¶meter)
+{
+ userrec* x = ServerInstance->FindNick(parameter);
+ if (x)
+ {
+ if (channel->GetStatusFlags(x) & UCMODE_HOP)
+ {
+ return std::make_pair(true, x->nick);
+ }
+ else
+ {
+ return std::make_pair(false, parameter);
+ }
+ }
+ return std::make_pair(false, parameter);
+}
+
+void ModeChannelHalfOp::RemoveMode(chanrec* channel)
+{
+ CUList* list = channel->GetHalfoppedUsers();
+ CUList copy;
+ char moderemove[MAXBUF];
+ userrec* n = new userrec(ServerInstance);
+ n->SetFd(FD_MAGIC_NUMBER);