- if (user->GetExt("NAMESX"))
- {
- char list[MAXBUF];
- size_t dlen, curlen;
- dlen = curlen = snprintf(list,MAXBUF,"353 %s = %s :", user->nick, Ptr->name);
- int numusers = 0;
- char* ptr = list + dlen;
- CUList *ulist= Ptr->GetUsers();
- bool has_user = Ptr->HasUser(user);
- for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++)
- {
- if ((!has_user) && (i->second->modes[UM_INVISIBLE]))
- continue;
-
- if (i->second->Visibility && !i->second->Visibility->VisibleTo(user))
- continue;
-
- size_t ptrlen = snprintf(ptr, MAXBUF, "%s%s ", Ptr->GetAllPrefixChars(i->second), i->second->nick);
- curlen += ptrlen;
- ptr += ptrlen;
- numusers++;
- if (curlen > (480-NICKMAX))
- {
- /* list overflowed into multiple numerics */
- user->WriteServ(std::string(list));
- /* reset our lengths */
- dlen = curlen = snprintf(list,MAXBUF,"353 %s = %s :", user->nick, Ptr->name);
- ptr = list + dlen;
- ptrlen = 0;
- numusers = 0;
- }
- }
- /* if whats left in the list isnt empty, send it */
- if (numusers)
- {
- user->WriteServ(std::string(list));
- }
- user->WriteServ("366 %s %s :End of /NAMES list.", user->nick, Ptr->name);
- return 1;
- }
- return 0;
- }
-};