查看: 2681|回复: 1

[已经过期] 行动前事件脚本出错如何处理?

[复制链接]
梦石
0
星屑
292
在线时间
61 小时
注册时间
2014-2-9
回帖
7
发表于 2020-5-2 00:42:44 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 t0004980 于 2020-5-2 23:22 编辑

我使用了行动前先进行事件的脚本
点击展开/收起# ■ RGSS3 行動開始前コモンイベント Ver1.01 by 星潟
#------------------------------------------------------------------------------
# 通常、アイテム・スキルのコモンイベントは使用後に起動しますが
# このスクリプトを用いた設定では、行動開始前に発動します。
#
# 通常のコモンイベントと異なり
# 戦闘時でなければ効果がないので注意が必要です。
#------------------------------------------------------------------------------
# ★使用例(アイテム・スキルのメモ欄に記入)
#------------------------------------------------------------------------------
# <行動開始前コモン:5>
#
# このアイテム・スキルの使用前に、コモンイベント5を発生させる。
#==============================================================================
# Ver1.01 行動開始前コモンイベントにより強制行動を行った場合に
#         行動を読み取れずにエラーになる不具合を修正しました。
#         (強制行動を行った場合は、本来の行動がキャンセルされるようになります)
#         (行動者・対象者ID変数格納と併用される場合
#           こちらがスクリプトエディタで上になるようにして下さい)
#==============================================================================
module B_A_COMMON

  #行動開始前コモンイベント配列設定用ワードを指定。

  WORD = "行動開始前コモン"

end
class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # バトルイベントのセットアップ
  #--------------------------------------------------------------------------
  def setup_b_a_common_event(common_event_id)

    #指定したコモンイベントIDのリストをセットする。

    @interpreter.setup($data_common_events[common_event_id].list)

  end
end
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # スキル/アイテムの使用
  #--------------------------------------------------------------------------
  alias use_item_b_a_common use_item
  def use_item

    #行動前コモンイベント配列データを取得。

    array = @subject.current_action.item.b_a_common_events

    #各コモンイベントを処理。

    array.each {|i| $game_troop.setup_b_a_common_event(i);process_event} unless array.empty?

    #本来の処理を実行。

    use_item_b_a_common if @subject && @subject.current_action && @subject.current_action.item

  end
end

class RPG::UsableItem < RPG::BaseItem
  #--------------------------------------------------------------------------
  # 行動前コモンイベント
  #--------------------------------------------------------------------------
  def b_a_common_events

    #既にデータがある場合、そのデータを返す

    return @b_a_common_events if @b_a_common_events != nil

    #ターン開始時コモンイベントデータの配列を生成

    @b_a_common_events = []

    #メモ欄からキーワードを元にデータを生成

    memo = self.note.scan(/<#{B_A_COMMON::WORD}[::](\S+)>/).flatten

    #配列が空でない場合は処理を実行

    if memo != nil && !memo.empty?

      #配列を文字列として取得

      data = memo[0].split(/\s*,\s*/)

      #配列内の数字をターン開始時コモンイベントデータの配列に
      #文字列から数値化して移し替える

      data.each {|i| @b_a_common_events.push(i.to_i)}

    end

    #ターン開始時コモンイベントデータの配列を返す

    @b_a_common_events

  end
end

结果运行游戏时出现这种问题
我有使用合体技的脚本
点击展开/收起#==============================================================================
#    ☆VXAce RGSS3 「連続アニメーション」☆
#      EnDlEss DREamER
#     URL:http://mitsu-evo.6.ql.bz/
#     製作者 mitsu-evo
#     Last:2012/1/20
#   スキルで設定個数分のアニメーションを表示する
#     ▼ バトルレイアウト変更よりも下に。
#==============================================================================
=begin



   使用方法
   
   スキルのメモ欄に「<連続アニメ:10,20,30>」と記入すると
   指定スキル使用時に通常設定のアニメーション後に
   アニメーションIDの10番・20番・30番を表示する。
   通常攻撃と同じアニメは「-1」を入れて下さい。
   
   スキルのメモ欄に「<使用者アニメ:10,20,30>」と記入すると
   指定スキル使用前にスキル使用バトラーにアニメーションを表示します。
   連続アニメと同じくいくらでも連続して表示します。
   ただし、通常攻撃と同じアニメ指定は出来ません。
   
=end
$ed_rgss3 = {} if $ed_rgss3 == nil
$ed_rgss3["ed_continuity_anime"] = true

COUNTINUITY_ANIME_MEMO = "連続アニメ"       # 連続アニメ用スキルのメモ欄指定文字
SKILL_USER_ANIME_MEMO  = "使用者アニメ"     # スキル使用者アニメ用スキルのメモ欄指定文字
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # ● スキルアニメのメモ欄取得
  #--------------------------------------------------------------------------
  def skill_anime_memo(skill)
    skill_note = []
    skill_note2 = []
    a = skill.note.scan(/<#{COUNTINUITY_ANIME_MEMO}[::](-?\d+(?:[ ]*,[ ]*-?\d+)*)>/)
    a.flatten!
    # 連続アニメ
    unless a == [] and a.empty?
      $1.scan(/-?\d+/).each { |num|
      skill_note.push(num.to_i)}
      @skill_continuity_anime = skill_note
    else
      @skill_continuity_anime = []
    end
    b = skill.note.scan(/<#{SKILL_USER_ANIME_MEMO}[::](-?\d+(?:[ ]*,[ ]*-?\d+)*)>/)
    b.flatten!
    # スキル使用者アニメ
    unless b == [] and b.empty?
      $1.scan(/-?\d+/).each { |num|
      skill_note2.push(num.to_i)}
      @skill_user_anime = skill_note2
    else
      @skill_user_anime = []
    end
  end
  #--------------------------------------------------------------------------
  # ● 戦闘行動の実行 : スキル
  #--------------------------------------------------------------------------
  alias ed_continuity_anime_execute_action execute_action
  def execute_action
    item = @subject.current_action.item
    skill_anime_memo(item)
    ed_continuity_anime_execute_action
  end
  #--------------------------------------------------------------------------
  # ● スキル使用者アニメーションの表示
  #     targets      : 対象者の配列
  #     animation_id : アニメーション ID (-1: 通常攻撃と同じ)
  #--------------------------------------------------------------------------
  def befor_skill_display_animation
    unless @skill_user_anime == nil or @skill_user_anime == []
      # スキル使用者アニメの場合
      for anime in @skill_user_anime
        if anime > 0
          # targets はバトラーを格納する配列なので、一人の場合は二重にする。
          battler = []
          battler << @subject
          # mirror は アクターなら反転無し。敵なら反転有り。
          if $ed_rgss3["ed_battle_scene"]
            if @subject.is_a?(Game_Enemy)
              # 敵のバックアタック:右側に居る場合 ? 反転なし : 反転有り
              mirror = @subject.back_attack? ? false : true
            else
              # 味方のバックアタック:左側に居る場合 ? 反転あり : 反転なし
              mirror = @subject.back_attack? ? true : false
            end
          else
            # 敵の場合は反転アニメ。
            mirror = @subject.is_a?(Game_Enemy) ? true : false
          end
          show_normal_animation(battler, anime, mirror)
          wait_for_animation
        end
      end
      @skill_user_anime = []
    end
  end
  #--------------------------------------------------------------------------
  # ● アニメーションの表示
  #     targets      : 対象者の配列
  #     animation_id : アニメーション ID (-1: 通常攻撃と同じ)
  #--------------------------------------------------------------------------
  alias ed_continuity_anime_show_animation show_animation
  def show_animation(targets, animation_id)
    # バトルレイアウト変更:extensionが導入されていないならここで処理。
    befor_skill_display_animation unless $ed_rgss3["ed_battle_extension"]
    unless @skill_continuity_anime == nil or @skill_continuity_anime == []
      # 連続アニメの場合
      ed_continuity_anime_show_animation(targets, animation_id)
      for anime in @skill_continuity_anime
        if anime < 0
          show_attack_animation(targets)
        else
          ed_continuity_anime_show_animation(targets, anime)
        end
      end
      @skill_continuity_anime = []
    else
      # 通常アニメの場合
      ed_continuity_anime_show_animation(targets, animation_id)
    end
  end

end


请问如何解决?
点击展开/收起  #--------------------------------------------------------------------------
  # ● 戦闘行動の処理
  #--------------------------------------------------------------------------
  def process_action
    return if scene_changing?
    if !@subject || !@subject.current_action
      @subject = BattleManager.next_subject
    end
    return turn_end unless @subject
    if @subject.current_action
      @subject.current_action.prepare
      if @subject.current_action.valid?
        @status_window.open
        execute_action
      end
      @subject.remove_current_action这里出问题
    end
    process_action_end unless @subject.current_action
  end

擷取.PNG
梦石
0
星屑
292
在线时间
61 小时
注册时间
2014-2-9
回帖
7
 楼主| 发表于 2020-5-3 07:52:04 | 显示全部楼层
如果在合体技前就会出错,但是在合体技后就不会有问题。
当显示完对话,还没发出技能时就会有。
只限合体技,普通技能不会有问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部