ページ 11

【解決済】メニュー時マップ移行せずに即コモンイベント

Posted: 2017年5月06日(土) 20:03
by 日向ヒムカイ
はじめまして。
初リクエストです。そして初投稿です。

Aceですが、デフォだとメニュー画面でコモン付のアイテム・スキルを使うと
マップに移行してコモンイベントが発動する仕様を、
マップ移行せずにメニューのままで即コモンイベントが実行されるようになる
スクリプトをリクエストします。

一応そういう感じのスクリプトが公開されてないかサイト巡りをして
へぷたなすくろーるさんの『マップ移行しないコモンイベント』というスクリプトを
発見して試してみたのですが、これだと使用後にメニューでコモンが実行された後、
マップに戻るとそこでデフォのコモン実行もされて二重処理になってしまうという
致命的な不都合があったので使用できませんでした。

なので新規としてそういうスクリプトのリクエスト、
もしくは上記のへぷたなすくろーるさんのスクリプトの修正を
お願い致したく、この場を借りて投稿しました。
お手数かけますが、よろしくお願いします。

Re: メニュー時マップ移行せずに即コモンイベント

Posted: 2017年5月06日(土) 20:57
by faida
昔の遺産が残ってたので。ほぼ動作保証しませんが。

コード: 全て選択

=begin
◆作者:faida @faida3983

=end

$fai_rgss3 = {} if !$fai_rgss3
$fai_rgss3[:scene_event] = 1.0

#==============================================================================
# □ Spriteset_Common
#==============================================================================

class Spriteset_Common
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    create_viewports
    create_weather
    create_pictures
    create_timer
    update
  end
  #--------------------------------------------------------------------------
  # ○ ビューポートの作成
  #--------------------------------------------------------------------------
  def create_viewports
    @viewport1 = Viewport.new
    @viewport2 = Viewport.new
    @viewport3 = Viewport.new
    @viewport1.z = 201
    @viewport2.z = 250
    @viewport3.z = 400
  end
  #--------------------------------------------------------------------------
  # ○ 天候の作成
  #--------------------------------------------------------------------------
  def create_weather
    @weather = Spriteset_Weather.new(@viewport2)
  end
  #--------------------------------------------------------------------------
  # ○ ピクチャスプライトの作成
  #--------------------------------------------------------------------------
  def create_pictures
    @picture_sprites = []
  end
  #--------------------------------------------------------------------------
  # ○ タイマースプライトの作成
  #--------------------------------------------------------------------------
  def create_timer
    @timer_sprite = Sprite_Timer.new(@viewport2)
  end
  #--------------------------------------------------------------------------
  # ○ 解放
  #--------------------------------------------------------------------------
  def dispose
    dispose_weather
    dispose_pictures
    dispose_timer
    dispose_viewports
  end
  #--------------------------------------------------------------------------
  # ○ 天候の解放
  #--------------------------------------------------------------------------
  def dispose_weather
    @weather.dispose
  end
  #--------------------------------------------------------------------------
  # ○ ピクチャスプライトの解放
  #--------------------------------------------------------------------------
  def dispose_pictures
    @picture_sprites.compact.each {|sprite| sprite.dispose }
  end
  #--------------------------------------------------------------------------
  # ○ タイマースプライトの解放
  #--------------------------------------------------------------------------
  def dispose_timer
    @timer_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # ○ ビューポートの解放
  #--------------------------------------------------------------------------
  def dispose_viewports
    @viewport1.dispose
    @viewport2.dispose
    @viewport3.dispose
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  def update
    return if !$game_map
    $game_map.screen.update
    update_weather
    update_pictures
    update_timer
    update_viewports
  end
  #--------------------------------------------------------------------------
  # ○ キャラクタースプライトの更新
  #--------------------------------------------------------------------------
  def update_characters
    refresh_characters if @map_id != $game_map.map_id
    @character_sprites.each {|sprite| sprite.update }
  end
  #--------------------------------------------------------------------------
  # ○ 飛行船の影スプライトの更新
  #--------------------------------------------------------------------------
  def update_shadow
    airship = $game_map.airship
    @shadow_sprite.x = airship.screen_x
    @shadow_sprite.y = airship.screen_y + airship.altitude
    @shadow_sprite.opacity = airship.altitude * 8
    @shadow_sprite.update
  end
  #--------------------------------------------------------------------------
  # ○ 天候の更新
  #--------------------------------------------------------------------------
  def update_weather
    @weather.type = $game_map.screen.weather_type
    @weather.power = $game_map.screen.weather_power
    @weather.ox = $game_map.display_x * 32
    @weather.oy = $game_map.display_y * 32
    @weather.update
  end
  #--------------------------------------------------------------------------
  # ○ ピクチャスプライトの更新
  #--------------------------------------------------------------------------
  def update_pictures
    $game_map.screen.pictures.each do |pic|
      @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
      @picture_sprites[pic.number].update
    end
  end
  #--------------------------------------------------------------------------
  # ○ タイマースプライトの更新
  #--------------------------------------------------------------------------
  def update_timer
    @timer_sprite.update
  end
  #--------------------------------------------------------------------------
  # ○ ビューポートの更新
  #--------------------------------------------------------------------------
  def update_viewports
    @viewport1.tone.set($game_map.screen.tone)
    @viewport1.ox = $game_map.screen.shake
    @viewport2.color.set($game_map.screen.flash_color)
    @viewport3.color.set(0, 0, 0, 255 - $game_map.screen.brightness)
    @viewport1.update
    @viewport2.update
    @viewport3.update
  end
end

#==============================================================================
# ■ Scene_Base
#==============================================================================

class Scene_Base
  #--------------------------------------------------------------------------
  # ★ 開始処理
  #--------------------------------------------------------------------------
  alias start_ce start
  def start
    start_ce
    $game_message.visible = false
    create_common_windows
    @sc_interpreter = Game_Interpreter.new
    @sc_spriteset = Spriteset_Common.new
  end
  #--------------------------------------------------------------------------
  # ★ フレーム更新
  #--------------------------------------------------------------------------
  alias update_ce update
  def update
    return if @sc_interpreter.setup_reserved_common_event
    @sc_interpreter.update
    @sc_spriteset.update
    update_ce
  end
  #--------------------------------------------------------------------------
  # ○ 全ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_common_windows
    create_message_window
    create_scroll_text_window
  end
  #--------------------------------------------------------------------------
  # ○ メッセージウィンドウの作成
  #--------------------------------------------------------------------------
  def create_message_window
    @message_window = Window_Message.new
    @message_window.z = 200
  end
  #--------------------------------------------------------------------------
  # ○ スクロール文章ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_scroll_text_window
    @scroll_text_window = Window_ScrollText.new
    @scroll_text_window.z = 200
  end
end

#==============================================================================
# ■ Scene_ItemBase
#==============================================================================

class Scene_ItemBase < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● コモンイベント予約判定
  #    イベントの呼び出しが予約されているならマップ画面へ遷移する。
  #--------------------------------------------------------------------------
  def check_common_event
#~     SceneManager.goto(Scene_Map) if $game_temp.common_event_reserved?
  end
end


Re: メニュー時マップ移行せずに即コモンイベント

Posted: 2017年5月06日(土) 21:31
by 日向ヒムカイ
ありがとうございます。
導入してみたところ、うまく機能できました。
まさかこんな早く解決してもらえるとは・・・ただひたすら感謝です。

Re: メニュー時マップ移行せずに即コモンイベント

Posted: 2017年5月14日(日) 08:55
by 日向ヒムカイ
↑で提供頂いたスクリプトなのですが、
何やらフェードイン・アウトの動作に誤作動が起きているみたいで、
演出がほとんどなく即黒画面に切り替わってしまうのと、
デフォでは黒画面でもメッセージは表示されていたのが、
このスクリプトを入れると全く表示されなくなってしまうっぽいです。
直したいところなのですが、自分ではどうすればいいのか
さっぱり分からず・・・お手数かけますが、アドバイス頂けると嬉しいです。。

Re: 【解決済】メニュー時マップ移行せずに即コモンイベント

Posted: 2017年5月14日(日) 19:16
by 奏ねこま
へぷたなすくろーるさんの「マップ移行しないコモンイベント」を改変する方法を。

「common_event = $game_temp.reserved_common_event」という記述の下に、
「$game_temp.clear_common_event」
を追加してください。

Re: 【解決済】メニュー時マップ移行せずに即コモンイベント

Posted: 2017年5月14日(日) 20:43
by 日向ヒムカイ
早速試させて頂きましたところ、
きちんと不都合も解消されてて、使えるようになりました。
修正頂けて本当にありがとうございます。