Пример #1
0
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 );
        }
    }
}
Пример #2
0
	// 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;
	}
Пример #3
0
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 );
        }
    }
}
Пример #4
0
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() );
    }
}