[Ace]MVのプラグインについて

raiha
記事: 6
登録日時: 2016年4月13日(水) 00:56

[Ace]MVのプラグインについて

投稿記事by raiha » 2016年4月16日(土) 23:26

viewtopic.php?f=23&t=1056と同じことをAceでやりたいです
MVを持っておらずプラグインがどういう物なのか知らないのですが、スクリプトに変換とかは無理ですか?

faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: [Ace]MVのプラグインについて

投稿記事by faida » 2016年4月17日(日) 13:09

こんにちは。
同等の機能を持つスクリプトを以前作ったことがあるので用意しました。

コード: 全て選択

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの使用
  #--------------------------------------------------------------------------
  def use_item
    item = @subject.current_action.item
    @log_window.display_use_item(@subject, item)
    @subject.use_item(item)
    refresh_status
    targets = @subject.current_action.make_targets.compact
    show_animation(targets.uniq, item.animation_id) # ☆
    targets.each {|target| item.repeats.times { invoke_item(target, item) } }
  end
end
なお、他のスクリプトの競合の可能性があります。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
raiha
記事: 6
登録日時: 2016年4月13日(水) 00:56

Re: [Ace]MVのプラグインについて

投稿記事by raiha » 2016年4月18日(月) 17:23

これは同一の敵に複数回当たる時にアニメーション表示を1度にするスクリプトなのでしょうか……?
言葉足らずで申し訳ありませんがやりたいのは効果範囲:敵○体ランダムの攻撃でのアニメーション表示を当たった敵に関わらず最初の1回だけにする、もしくは連続回数:2回以上の攻撃で2回目からはランダムで別の敵に当たるのどちらかです。
MVの流用は難しいようですし、素材のリクエストに行くべきでしょうか。
faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: [Ace]MVのプラグインについて

投稿記事by faida » 2016年4月18日(月) 20:43

リンク先の要望と違う気がしますが、とりあえず用意してみました。

・全体アニメーションを一回のみ表示する
単体アニメーションは当たった敵全部(当たった回数)に表示されるほうがいいような気がするので対応していません。
もしそちらがお好みでしたらお申し付けください。

コード: 全て選択

#==============================================================================
# □ Sprite_Effectable
#==============================================================================

class Sprite_Effectable < Sprite_Base
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport = nil); super; @target = []; end
  #--------------------------------------------------------------------------
  # ○ 位置が「画面」か?
  #--------------------------------------------------------------------------
  def anime_to_screen?; @animation && @animation.position == 3; end
  #--------------------------------------------------------------------------
  # ○ バトラースプライトへのフラッシュ
  #--------------------------------------------------------------------------
  def flash_animation
    return if !@animation
    frame_index = @animation.frame_max - (@ani_duration + 3) / 4
    @animation.timings.select{|t|t.frame == frame_index}.each{|timing|
      @target.each{|s|s.flash_animation_process_timing(timing)}
    }
  end
  #--------------------------------------------------------------------------
  # ○ SE とフラッシュのタイミング処理
  #--------------------------------------------------------------------------
  def animation_process_timing(timing)
    super; flash_animation
  end
  #--------------------------------------------------------------------------
  # ○ 効果判定
  #--------------------------------------------------------------------------
  def set_target(target); @target=target if !@target.any?{|a|a.animation?}; end
end

#==============================================================================
# ■ Spriteset_Battle
#==============================================================================

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ★ オブジェクト初期化
  #--------------------------------------------------------------------------
  alias obs_initialize initialize
  def initialize
    obs_initialize
    @common_sprite = Sprite_Effectable.new(@viewport1)
    @common_sprite.x = Graphics.width / 2
    @common_sprite.y = Graphics.height / 2
    @common_sprite.ox = 1; @common_sprite.oy = 1
  end
  #--------------------------------------------------------------------------
  # ★ 解放
  #--------------------------------------------------------------------------
  alias obs_dispose dispose
  def dispose; obs_dispose; @common_sprite.dispose; end
  #--------------------------------------------------------------------------
  # ★ フレーム更新
  #--------------------------------------------------------------------------
  alias obs_update update
  def update; obs_update; @common_sprite.update if @common_sprite; end
  #--------------------------------------------------------------------------
  # ○ 共有アニメーション指定
  #--------------------------------------------------------------------------
  def set_common_animation(target, animation, mirror)
    target = battler_sprites.select{|s|target.include?(s.battler)}
    @common_sprite.set_target(target)
    @common_sprite.start_animation(animation, mirror)
  end
  #--------------------------------------------------------------------------
  # ★ アニメーション表示中判定
  #--------------------------------------------------------------------------
  alias obs_animation? animation?
  def animation?
    obs_animation? || @common_sprite.animation?
  end
end

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 通常アニメーションの表示
  #--------------------------------------------------------------------------
  def show_normal_animation(targets, animation_id, mirror = false)
    animation = $data_animations[animation_id]
    if animation
      if animation.to_screen? # ☆
        @spriteset.set_common_animation(targets, animation, mirror)
        abs_wait_short
      else
        targets.each do |target|
          target.animation_id = animation_id
          target.animation_mirror = mirror
          abs_wait_short # ☆
        end
      end
    end
  end
end
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
raiha
記事: 6
登録日時: 2016年4月13日(水) 00:56

Re: [Ace]MVのプラグインについて

投稿記事by raiha » 2016年4月19日(火) 10:15

確かによく見てきたら自分の要望とは違っていました。
思い込みでよく読めていなかったようです、申し訳ありません。

そしてやりたいことをちゃんと整理したのですが、
「強力な単体攻撃で余波が起こりランダムで周囲の敵にも半分程度のダメージを与える」という物です。
2体目以降のダメージ半減は既にできているのですが、余波に派手な演出が出るのは問題かなと思い、
2体目以降はアニメーション無し設定時の点滅+SEだけのシンプルなヒットエフェクトがやりたくなりました。
一部のスキルにだけ設定したいのでメモ欄に文言を書き込むことで発動だと嬉しいです。
もし可能ならよろしくおねがいします。
faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: [Ace]MVのプラグインについて

投稿記事by faida » 2016年6月10日(金) 16:01

大変長らくご無沙汰しておりましたが、なんとかβ版ができたのでとりあえず張ります。

コード: 全て選択

class RPG::UsableItem
  def sf_anime
    return @sf_anime if !@sf_anime.nil?
    @sf_anime = (note =~ /<SEフラッシュのみ>/ ? true : false)
  end
end

#==============================================================================
# ■ Sprite_Battler
#==============================================================================

class Sprite_Battler < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 新しいアニメーションの設定
  #--------------------------------------------------------------------------
  def setup_new_animation
    if @battler.animation_id > 0
      if SceneManager.scene.sf_anime_targets.include?(@battler)
        animation = SceneManager.scene.sf_anime
      else
        animation = $data_animations[@battler.animation_id]
      end
      mirror = @battler.animation_mirror
      start_animation(animation, mirror)
      @battler.animation_id = 0
    end
  end
end

class Scene_Battle
  attr_accessor :sf_anime
  attr_accessor :sf_anime_targets
  #--------------------------------------------------------------------------
  # ● SE+フラッシュアニメーションの作成
  #--------------------------------------------------------------------------
  def clear_sf_anime
    @sf_anime = nil; @sf_anime_targets = []
  end
  def make_sf_anime(animation)
    @sf_anime = animation.clone
    @sf_anime.frames = [RPG::Animation::Frame.new] * animation.frame_max
  end
  def make_sf_anime_targets(targets)
    @sf_anime_targets = targets.uniq[1, targets.size-1]
  end
  #--------------------------------------------------------------------------
  # ● 通常アニメーションの表示
  #--------------------------------------------------------------------------
  def show_normal_animation(targets, animation_id, mirror = false)
    item = @subject.current_action.item # ☆
    animation = $data_animations[animation_id]
    if animation
      clear_sf_anime
      if targets.uniq.size > 1 &&
        ((item && item.sf_anime) || animation.to_screen?) # ☆
        make_sf_anime(animation); make_sf_anime_targets(targets)
      end
      targets.each_with_index do |target, i| # ☆
        target.animation_id = animation_id
        target.animation_mirror = mirror
        abs_wait_short unless animation.to_screen?
      end
      abs_wait_short if animation.to_screen?
    end
  end
end
メモ欄には<SEフラッシュのみ>と記入してください。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。

“VX / Ace:質問” へ戻る