void Guild::update_online_members() { // FIXME : All of guilds.cpp iterator's need rewritten. Turley found a much better method // used in the party system. // NOTE: stlport seems to not return save itr on erase, but with a list container the iterator should stay valid for( SerialSet::iterator itr = _member_serials.begin(); itr != _member_serials.end(); /* */) { unsigned long mserial = (*itr); SerialSet::iterator last_itr = itr; ++itr; Character* chr = system_find_mobile( mserial ); if (chr != NULL) { if (chr->client) { send_move( chr->client, chr ); send_remove_character_to_nearby_cansee( chr ); send_create_mobile_to_nearby_cansee( chr ); } } else { _member_serials.erase( last_itr ); } } }
// find_character: find a logged-in character given a serial number. Mobile::Character *find_character( u32 serial ) { Mobile::Character* chr = system_find_mobile( serial ); if ( chr != NULL && chr->logged_in ) return chr; else return NULL; }
void Guild::registerWithMembers() { for( SerialSet::iterator itr = _member_serials.begin(); itr != _member_serials.end(); /* */) { unsigned long mserial = (*itr); SerialSet::iterator last_itr = itr; ++itr; Character* chr = system_find_mobile( mserial ); if (chr != NULL) { chr->guild( this ); } else { _member_serials.erase( last_itr ); } } }
BObjectRef EGuildRefObjImp::get_member_id( const int id ) //id test { if (obj_->_disbanded) return BObjectRef( new BError( "Guild has disbanded" ) ); ObjArray* arr; switch(id) { case MBR_MEMBERS: arr = new ObjArray; for( SerialSet::iterator itr = obj_->_member_serials.begin(); itr != obj_->_member_serials.end(); /* do this earlier */) { unsigned long mserial = (*itr); SerialSet::iterator last_itr = itr; ++itr; Character* chr = system_find_mobile( mserial ); if (chr != NULL) { arr->addElement( new EOfflineCharacterRefObjImp( chr ) ); } else { obj_->_member_serials.erase( last_itr ); } } return BObjectRef( arr ); case MBR_ALLYGUILDS: arr = new ObjArray; for( SerialSet::iterator itr = obj_->_allyguild_serials.begin(); itr != obj_->_allyguild_serials.end(); /* do this earlier */) { unsigned long gserial = (*itr); SerialSet::iterator last_itr = itr; ++itr; Guild* guild = FindGuild( gserial ); if (guild != NULL) { arr->addElement( new EGuildRefObjImp( ref_ptr<Guild>(guild) ) ); } else { obj_->_allyguild_serials.erase( last_itr ); } } return BObjectRef( arr ); case MBR_ENEMYGUILDS: arr = new ObjArray; for( SerialSet::iterator itr = obj_->_enemyguild_serials.begin(); itr != obj_->_enemyguild_serials.end(); /* do this earlier */) { unsigned long gserial = (*itr); SerialSet::iterator last_itr = itr; ++itr; Guild* guild = FindGuild( gserial ); if (guild != NULL) { arr->addElement( new EGuildRefObjImp( ref_ptr<Guild>(guild) ) ); } else { obj_->_enemyguild_serials.erase( last_itr ); } } return BObjectRef( arr ); case MBR_GUILDID: return BObjectRef( new BLong( obj_->_guildid ) ); default: return BObjectRef( UninitObject::create() ); } }