Example #1
0
Bscript::BObjectImp* UOExecutorModule::mf_PromptInput()
{
  Mobile::Character* chr;
  Items::Item* item;
  const Bscript::String* prompt;
  if ( !getCharacterParam( exec, 0, chr ) || !getItemParam( exec, 1, item ) ||
       !exec.getStringParam( 2, prompt ) )
  {
    return new Bscript::BError( "Invalid parameter" );
  }

  if ( chr->client == nullptr )
  {
    return new Bscript::BError( "No client attached" );
  }

  if ( chr->has_active_prompt() != false )
  {
    return new Bscript::BError( "Another script has an active prompt" );
  }

  if ( !uoexec.suspend() )
  {
    DEBUGLOG << "Script Error in '" << scriptname() << "' PC=" << exec.PC << ": \n"
             << "\tCall to function UO::RequestInput():\n"
             << "\tThe execution of this script can't be blocked!\n";
    return new Bscript::BError( "Script can't be blocked" );
  }

  Core::send_sysmessage( chr->client, prompt->data() );

  chr->client->gd->prompt_uoemod = this;
  prompt_chr = chr;

  Core::send_prompt( chr->client, ctBEu32( item->serial ) );

  return new Bscript::BLong( 0 );
}
Example #2
0
BObjectImp* EGuildRefObjImp::call_method_id( const int id, Executor& ex, bool forcebuiltin )
{
    if (obj_->_disbanded)
        return new BError( "Guild has disbanded" );

    Guild* enemyguild;
    Guild* allyguild;
    BError* err;
    Character* chr;
    switch(id)
    {
    case MTH_ISMEMBER:
        if (!ex.hasParams(1))
            return new BError( "Not enough parameters" );
        if (!getCharacterParam( ex, 0, chr ))
            return new BError( "Invalid parameter type" );

        return new BLong(obj_->_member_serials.count( chr->serial ));

    case MTH_ISALLYGUILD:
		if (!ex.hasParams(1))
			return new BError( "Not enough parameters" );
        if (getGuildParam( ex, 0, allyguild, err ))
        {
            return new BLong( obj_->_allyguild_serials.count(allyguild->guildid()) );
        }
        else
        {
            return err;
        }

    case MTH_ISENEMYGUILD:
		if (!ex.hasParams(1))
			return new BError( "Not enough parameters" );
        if (getGuildParam( ex, 0, enemyguild, err ))
        {
            return new BLong( obj_->_enemyguild_serials.count(enemyguild->guildid()) );
        }
        else
        {
            return err;
        }
    
    case MTH_ADDMEMBER:
        if (!ex.hasParams( 1 ))
            return new BError( "Not enough parameters" );
        if (!getCharacterParam( ex, 0, chr ))
            return new BError( "Invalid parameter type" );
        if (chr->guildid())
            return new BError( "Character already belongs to a guild" );

        chr->guild( obj_.get() );
        obj_->_member_serials.insert( chr->serial );

		// MuadDib Added to update online members when status changes.
		obj_->update_online_members();

        return new BLong(1);

    case MTH_ADDALLYGUILD:
		if (!ex.hasParams(1))
			return new BError( "Not enough parameters" );
        if (getGuildParam( ex, 0, allyguild, err ))
        {
            if (obj_->_enemyguild_serials.count(allyguild->guildid()))
                return new BError( "That is an enemy guild" );
            if (allyguild->guildid() == obj_->guildid())
                return new BError( "Passed self as new ally guild" );
            
            obj_->_allyguild_serials.insert( allyguild->guildid() );
            allyguild->_allyguild_serials.insert( obj_->_guildid );

			// MuadDib Added to update online members when status changes.
			obj_->update_online_members();
			allyguild->update_online_members();

            return new BLong(1);
        }
        else
        {
            return err;
        }

    case MTH_ADDENEMYGUILD:
		if (!ex.hasParams(1))
			return new BError( "Not enough parameters" );
        if (getGuildParam( ex, 0, enemyguild, err ))
        {
            if (obj_->_allyguild_serials.count(enemyguild->guildid()))
                return new BError( "That is an ally guild" );
            if (enemyguild->guildid() == obj_->guildid())
                return new BError( "Passed self as new enemy guild" );

            obj_->_enemyguild_serials.insert( enemyguild->guildid() );
            enemyguild->_enemyguild_serials.insert( obj_->_guildid );

			// MuadDib Added to update online members when status changes.
			obj_->update_online_members();
			enemyguild->update_online_members();

            return new BLong(1);
        }
        else
        {
            return err;
        }
    
    case MTH_REMOVEMEMBER:
        if (!ex.hasParams( 1 ))
            return new BError( "Not enough parameters" );
        if (!getCharacterParam( ex, 0, chr ))
            return new BError( "Invalid parameter type" );
        if (chr->guildid() != obj_->_guildid)
            return new BError( "Character does not belong to this guild" );

        chr->guild( NULL );
        obj_->_member_serials.erase( chr->serial );

		// MuadDib Added to update online members when status changes.
		obj_->update_online_members_remove( chr );

        return new BLong(1);

    case MTH_REMOVEALLYGUILD:
		if (!ex.hasParams(1))
			return new BError( "Not enough parameters" );
        if (getGuildParam( ex, 0, allyguild, err ))
        {
            if (!obj_->_allyguild_serials.count(allyguild->guildid()))
                return new BError( "That is not an ally guild" );

            obj_->_allyguild_serials.erase( allyguild->guildid() );
            allyguild->_allyguild_serials.erase( obj_->_guildid );

			// MuadDib Added to update online members when status changes.
			obj_->update_online_members();
			allyguild->update_online_members();

            return new BLong(1);
        }
        else
        {
            return err;
        }

    case MTH_REMOVEENEMYGUILD:
		if (!ex.hasParams(1))
			return new BError( "Not enough parameters" );
        if (getGuildParam( ex, 0, enemyguild, err ))
        {
            if (!obj_->_enemyguild_serials.count(enemyguild->guildid()))
                return new BError( "That is not an enemy guild" );

            obj_->_enemyguild_serials.erase( enemyguild->guildid() );
            enemyguild->_enemyguild_serials.erase( obj_->_guildid );

			// MuadDib Added to update online members when status changes.
			obj_->update_online_members();
			enemyguild->update_online_members();

            return new BLong(1);
        }
        else
        {
            return err;
        }
    default:
        bool changed = false;
        return CallPropertyListMethod_id( obj_->_proplist, id, ex, changed );
    }
}