+int canseeuser(nick *np, nick *cloaked)
+{
+ return (np == cloaked ||
+ !IsCloaked(cloaked) ||
+ np->cloak_extra == cloaked);
+}
+
+void addcloaktarget(nick *cloaked, nick *target)
+{
+ removecloaktarget(target);
+
+ target->cloak_extra = cloaked;
+ cloaked->cloak_count++;
+}
+
+void removecloaktarget(nick *target)
+{
+ if (target->cloak_extra) {
+ target->cloak_extra->cloak_count--;
+ target->cloak_extra = NULL;
+ }
+}
+
+void clearcloaktargets(nick *cloaked)
+{
+ nick *tnp;
+ int j;
+
+ if (cloaked->cloak_count == 0)
+ return;
+
+ for(j=0;j<NICKHASHSIZE;j++)
+ for(tnp=nicktable[j];tnp;tnp=tnp->next)
+ if (tnp->cloak_extra == cloaked)
+ tnp->cloak_extra = NULL;
+
+ cloaked->cloak_count = 0;
+}
+