bool ChatChannel::RemoveClient(Client *c) { if(!c) return false; _log(UCS__TRACE, "RemoveClient %s from channel %s", c->GetName().c_str(), GetName().c_str()); bool HideMe = c->GetHideMe(); int AccountStatus = c->GetAccountStatus(); int PlayersInChannel = 0; LinkedListIterator<Client*> iterator(ClientsInChannel); iterator.Reset(); while(iterator.MoreElements()) { Client *CurrentClient = iterator.GetData(); if(CurrentClient == c) { iterator.RemoveCurrent(false); } else if(CurrentClient) { PlayersInChannel++; if(CurrentClient->IsAnnounceOn()) if(!HideMe || (CurrentClient->GetAccountStatus() > AccountStatus)) CurrentClient->AnnounceLeave(this, c); iterator.Advance(); } } if((PlayersInChannel == 0) && !Permanent) { if((Password.length() == 0) || (RuleI(Channels, DeleteTimer) == 0)) return false; _log(UCS__TRACE, "Starting delete timer for empty password protected channel %s", Name.c_str()); DeleteTimer.Start(RuleI(Channels, DeleteTimer) * 60000); } return true; }