查看: 1838|回复: 3

[已经解决] 【ACE】技能不消耗回合脚本求助!

[复制链接]
梦石
0
星屑
2085
在线时间
185 小时
注册时间
2022-6-24
回帖
148
发表于 2022-7-14 04:53:04 | 显示全部楼层 |阅读模式

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

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

×
[pre lang="ruby"]# coding: utf-8
#===============================================================================
# ■ [hzm]ターン消費無しスキルさん+ for RGSS3
# ※ このスクリプトには「[hzm]メモ欄拡張共通部分さん+ for RGSS3」が必要です
#    「[hzm]メモ欄拡張共通部分 for RGSS3」では動作しません
#-------------------------------------------------------------------------------
# 2014/06/22 Ru/むっくRu
#-------------------------------------------------------------------------------
# 【機能1:无回合消耗技能/物品】
#  将技能设置为在选定的时刻激活而不消耗一回合.
#  请在“数据库”的“技能”的“备忘”栏中进行如下描述。
#
#  [hzm]ターン消費無し:n (这两个好像都一样)
#  または
#  [hzm]即発動:n
#  
#  n可以是任何数字(例:[hzm]ターン消費無し:1)
#  一个回合能使用多少次这个技能取决于这个数字.
#  (:省略掉n的时候、:等于写了1)
#
#  也可以设定在物品里
#  在数据库里的物品备忘录里面.
#-------------------------------------------------------------------------------
# 【機能2:行動順序をスキルごとに反映】
#  速度修正足够高,即使对面速度比你快,你也可以先发动那个速度修正高的技能
#  比如说防御能够先防御,但是攻击之类的要等对面打完再攻击
#  就是这样的情况了
#
#  如果
#  このスクリプトでは,ターンの順番をキャラクターごとではなく,
#  そのキャラクターの行動ごとに順番を設定することによって,
#  各行動ごとの速度補正を適用できるようにします.
#
#  例)
#  エリック
#    素早さ: 30 行動:通常攻撃(速度補正:0),防御(速度補正:2000)
#  スライム
#    素早さ:100 行動:通常攻撃(速度補正:0)
#
#  ・デフォルトのシステムの場合
#  スライム通常攻撃→エリック通常攻撃→エリック防御
#
#  ・このスクリプト導入後
#  エリック防御→スライム通常攻撃→エリック通常攻撃
#-------------------------------------------------------------------------------
# 【更新履歴】
# 2014/06/22 通常攻撃にも適用できるように
# 2014/06/07 次回行動アクター取得処理が正常に動いていないのを修正v2
# 2013/07/18 行動終了時に解除される行動制約ステートが解除されないのを修正
# 2013/03/17 エネミーの行動ターン数指定がおかしくなるのを修正。おまけ機能追加。
# 2013/02/16 ターン開始時に行動不能が解除された際にエラー落ちするのを修正
# 2013/01/11 コモンイベント呼び出しでアクターを離脱させるとエラー落ちしていたのを修正
# 2012/10/14 行動回数再計算ON時,エネミーが「逃げる」とエラー落ちしていたのを修正
# 2012/10/09 マップ上でアイテムを使用した際にエラー落ちしていたのを修正
# 2012/10/06 戦闘中にパーティ入れ替えを行った場合にエラー落ちしていたのを修正
#            ステータスウィンドウの更新が正常に行われていなかったのを修正
# 2012/10/05 大幅修正を行いました.
#            新メモスクリプト([hzm]メモ欄拡張共通部分さん+ for RGSS3)用に変更
#            行動回数の再計算機能(アクター/エネミー)を追加
#            1ターン内で使用できる回数の設定を追加
#            「各行動ごとに行動順を設定さん for RGSS3」の機能を内包
# 2012/10/03 行動回数の再計算(暫定)を追加
# 2012/06/01 エネミー用設定を追加
# 2012/04/21 複数回行動するアクターが正常に動作しない不具合を修正
# 2012/04/01 味方の行動不能状態を回復した際に強制終了する不具合を修正
# 2012/03/28 アイテムにも対応
# 2012/01/28 コモンイベント内で「戦闘行動の強制」を使用した際に強制終了するのを修正
# 2012/01/28 コモンイベントの呼び出しが正常に動作しないのを少し修正
# 2012/01/03 ぶっぱ
#-------------------------------------------------------------------------------

#===============================================================================
# ● 設定項目
#===============================================================================
module HZM_VXA
  module QuickSkill
    # ● ターン消費無し行動後に行動回数を再計算する(上級設定)
    #   [効果]
    #   ・エネミーも(疑似的に)ターン消費無しスキルを使用可能に
    #   ・行動回数を変化させるステートを即時反映
    #   [副作用]
    #   ・50%の確率で行動回数増加などの設定が使用不可に
    #     true  : する
    #     false : しない
    CHECK_ACTION_TIMES = false

    # ● オマケ機能:敵の行動パターンのターン数の仕様をVX化
    #    1ターン目(最初のターン)に指定の行動をさせたい場合、
    #    VX Aceでは行動パターンを0ターン目に設定する必要があります。
    #    この設定方法をVX同様の仕様に変更し、
    #    1ターン目の場合は1ターン目に設定できるようにします。
    #    (上級設定に関係なく使用できます)
    #    true  : VX仕様にする
    #    false : 変更しない
    ENEMY_TURN_NORMALIZE = false
  end
end

#===============================================================================
# ↑   ここまで設定   ↑
# ↓ 以下、スクリプト部 ↓
#===============================================================================

raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」を導入してください" unless defined?(HZM_VXA::Note2)
raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」のバージョンが一致しません" unless HZM_VXA::Note2.check_version?('3.0.0')

module HZM_VXA
  module QuickSkill
    # メモ欄から読み込む要素名の候補を設定
    QUICK_KEYS = ['ターン消費無し', '即発動',  'QuickSkill']
    #---------------------------------------------------------------------------
    # ● QuickSkill中か?
    #---------------------------------------------------------------------------
    def self.quickSkill?
      @quickSkill
    end
    #---------------------------------------------------------------------------
    # ● 即時行動開始
    #---------------------------------------------------------------------------
    def self.start
      @quickSkill = true
    end
    #---------------------------------------------------------------------------
    # ● 即時行動終了
    #---------------------------------------------------------------------------
    def self.finish
      @quickSkill = false
      # 全てのbattlerのアクションを戻す
      $game_party.hzm_vxa_quickSkill_force_action_reverse
      $game_troop.hzm_vxa_quickSkill_force_action_reverse
    end
    #---------------------------------------------------------------------------
    # ● スキル使用回数のリセット
    #---------------------------------------------------------------------------
    def self.reset_use_count
      $game_party.hzm_vxa_quickSkill_reset_use_count
      $game_troop.hzm_vxa_quickSkill_reset_use_count
    end
    # ターン消費無しアイテム管理対象
    ITEM_COUNT_PARTY = true
  end
end

module BattleManager
  #-----------------------------------------------------------------------------
  # ● 行動順序の作成(再定義)
  #-----------------------------------------------------------------------------
  def self.make_action_orders
    @action_battlers = []
    all_actions = []
    all_members = []
    all_members += $game_party.members unless @surprise
    all_members += $game_troop.members unless @preemptive
    all_members.each do |member|
      next unless member.movable?
      member.make_speed
      member.actions.each {|action| all_actions.push action }
    end
    all_actions.sort!{|a,b| b.speed - a.speed }
    all_actions.each {|action| @action_battlers.push action.subject}
  end
  #-----------------------------------------------------------------------------
  # ● 行動が未選択のアクターを先頭から探す(独自)
  #-----------------------------------------------------------------------------
  def self.hzm_vxa_quickSkill_can_action_actor_before(daemon)
    return false unless $game_party.members.index(daemon)
    for @actor_index in 0..$game_party.members.index(daemon)
      actor = $game_party.members[@actor_index]
      return true if actor.next_command
    end
    false
  end
end

class Game_Unit
  attr_accessor :hzm_vxa_quickSkill_can_use_item
  #-----------------------------------------------------------------------------
  # ● 戦闘開始処理(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_battle_start on_battle_start
  def on_battle_start
    hzm_vxa_quickSkill_on_battle_start
    hzm_vxa_quickSkill_reset_use_count
  end
  #-----------------------------------------------------------------------------
  # ● 戦闘行動の復元(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_force_action_reverse
    members.each {|member| member.hzm_vxa_quickSkill_force_action_reverse }
  end
  #-----------------------------------------------------------------------------
  # ● スキル使用回数のリセット(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_reset_use_count
    members.each {|member| member.hzm_vxa_quickSkill_reset_use_count }
    if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
      @hzm_vxa_quickSkill_can_use_item ||= []
      @hzm_vxa_quickSkill_can_use_item.clear
    end
  end
end

class Game_Battler < Game_BattlerBase
  #-----------------------------------------------------------------------------
  # ● 行動速度の決定(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_make_speed make_speed
  def make_speed
    # 空行動は削除する
    @actions.reject! {|a| a == nil}
    # 元の処理
    hzm_vxa_quickSkill_make_speed
    # アクションを速度順にソート
    @actions.sort! {|a,b| b.speed - a.speed }
  end
  #-----------------------------------------------------------------------------
  # ● スキルの使用可能条件チェック(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_skill_conditions_met? skill_conditions_met?
  def skill_conditions_met?(skill)
    # 元の処理
    return false unless hzm_vxa_quickSkill_skill_conditions_met?(skill)
    # 戦闘中でなければOK
    return true unless $game_party.in_battle
    # 指定回数チェック
    if data = skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
      cnt = data.first.to_i
      cnt = 1  unless cnt > 0
      hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
      return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_skill.count(skill.id) >= cnt
    end
    true
  end
  #-----------------------------------------------------------------------------
  # ● アイテムの使用可能条件チェック(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_item_conditions_met? item_conditions_met?
  def item_conditions_met?(item)
    # 元の処理
    return false unless hzm_vxa_quickSkill_item_conditions_met?(item)
    # 戦闘中でなければOK
    return true unless $game_party.in_battle
    # 指定回数チェック
    if data = item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
      cnt = data.first.to_i
      cnt = 1  unless cnt > 0
      if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
        return false if cnt > 0 and $game_party.hzm_vxa_quickSkill_can_use_item.count(item.id) >= cnt
      else
        return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_item.count(item.id) >= cnt
      end
    end
    true
  end
  #-----------------------------------------------------------------------------
  # ● スキル使用回数リセット(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_reset_use_count
      @hzm_vxa_quickSkill_can_use_skill ||= []
      @hzm_vxa_quickSkill_can_use_skill.clear
      unless HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
        @hzm_vxa_quickSkill_can_use_item ||= []
        @hzm_vxa_quickSkill_can_use_item.clear
      end
  end
  #-----------------------------------------------------------------------------
  # ● 戦闘行動の強制(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_force_action force_action
  def force_action(skill_id, target_index)
    @hzm_vxa_quickSkill_actions = HZM_VXA::QuickSkill.quickSkill? ? @actions.clone : nil
    hzm_vxa_quickSkill_force_action(skill_id, target_index)
  end
  #-----------------------------------------------------------------------------
  # ● 戦闘行動の復元(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_force_action_reverse
    return unless @hzm_vxa_quickSkill_actions
    @actions = @hzm_vxa_quickSkill_actions
    @hzm_vxa_quickSkill_actions = nil
  end
  #-----------------------------------------------------------------------------
  # ● スキル/アイテムの使用(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_use_item use_item
  def use_item(item)
    # 戦闘中かどうか?
    if $game_party.in_battle
      # カウント可能か確認
      hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
      # スキル/アイテム使用回数カウント
      @hzm_vxa_quickSkill_can_use_skill.push(item.id) if item.is_a?(RPG::Skill)
      if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
        $game_party.hzm_vxa_quickSkill_can_use_item.push(item.id)  if item.is_a?(RPG::Item)
      else
        @hzm_vxa_quickSkill_can_use_item.push(item.id)  if item.is_a?(RPG::Item)
      end
    end
    # 元の処理
    hzm_vxa_quickSkill_use_item(item)
  end
end

class Game_Actor < Game_Battler
  #-----------------------------------------------------------------------------
  # ● アクションを先頭に入れ替え(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_swapAction
    tmp = @actions[0]
    @actions[0] = @actions[@action_input_index]
    @actions[@action_input_index] = tmp
  end
end

class Game_Action
  #-----------------------------------------------------------------------------
  # ● 行動速度の計算(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkillEnemy_speed speed
  def speed
    # ターン消費無し行動の行動速度を最速化
    item.speed = 999999 if item and item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
    # 元の処理
    hzm_vxa_quickSkillEnemy_speed
  end
end

class Scene_Battle < Scene_Base
  #-----------------------------------------------------------------------------
  # ● 情報表示ビューポートの更新(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_update_info_viewport update_info_viewport
  def update_info_viewport
    # 元の処理
    hzm_vxa_quickSkill_update_info_viewport
    # ターン消費無し行動中は非表示に
    move_info_viewport(64)   if @hzm_vxa_quickSkill_active
  end
  #-----------------------------------------------------------------------------
  # ● 次のコマンド入力へ(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_next_command next_command
  def next_command
    # ターン消費無し行動が選択されているか確認・実行
    if @hzm_vxa_quickSkill_skill and
       @hzm_vxa_quickSkill_skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
      # ターン消費無し行動の実行
      hzm_vxa_quickSkill_run
      # 行動を再選択
      if BattleManager.hzm_vxa_quickSkill_can_action_actor_before(@subject) or
          @subject.inputable?
        @subject.prior_command
        return start_actor_command_selection
      end
    end
    # 元の処理
    hzm_vxa_quickSkill_next_command
  end
  #-----------------------------------------------------------------------------
  # ● コマンド[攻撃](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_command_attack command_attack
  def command_attack
    @hzm_vxa_quickSkill_skill = $data_skills[BattleManager.actor.attack_skill_id]
    hzm_vxa_quickSkill_command_attack
  end
  #-----------------------------------------------------------------------------
  # ● スキル[決定](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_skill_ok on_skill_ok
  def on_skill_ok
    @hzm_vxa_quickSkill_skill = @skill_window.item
    hzm_vxa_quickSkill_on_skill_ok
  end
  #-----------------------------------------------------------------------------
  # ● スキル[キャンセル](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_skill_cancel on_skill_cancel
  def on_skill_cancel
    @hzm_vxa_quickSkill_skill = nil
    hzm_vxa_quickSkill_on_skill_cancel
  end
  #-----------------------------------------------------------------------------
  # ● アイテム[決定](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_item_ok on_item_ok
  def on_item_ok
    @hzm_vxa_quickSkill_skill = @item_window.item
    hzm_vxa_quickSkill_on_item_ok
  end
  #-----------------------------------------------------------------------------
  # ● アイテム[キャンセル](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_item_cancel on_item_cancel
  def on_item_cancel
    @hzm_vxa_quickSkill_skill = nil
    hzm_vxa_quickSkill_on_item_cancel
  end
  #-----------------------------------------------------------------------------
  # ● アクターコマンド選択の開始(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_start_actor_command_selection start_actor_command_selection
  def start_actor_command_selection
    hzm_vxa_quickSkill_start_actor_command_selection
    BattleManager.actor.make_actions unless BattleManager.actor.input
  end
  #--------------------------------------------------------------------------
  # ● 強制された戦闘行動の処理(エイリアス)
  #--------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_process_forced_action process_forced_action
  def process_forced_action
    @hzm_vxa_quickSkill_force_action = BattleManager.action_forced?

    # 元の処理
    hzm_vxa_quickSkill_process_forced_action

    @hzm_vxa_quickSkill_force_action = nil
  end
  #-----------------------------------------------------------------------------
  # ● 戦闘行動の処理(再定義)
  #-----------------------------------------------------------------------------
  def process_action
    return if scene_changing?

    # 強制行動の場合は次回アクターを計算しない
    unless @hzm_vxa_quickSkill_force_action
      if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
        HZM_VXA::QuickSkill.re_action_times if @hzm_vxa_quickSkill_re_action_times_flag
        @hzm_vxa_quickSkill_re_action_times_flag = false
      end

      BattleManager.make_action_orders
      @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

  #-----------------------------------------------------------------------------
  # ● ターン消費無し行動の実行(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_run
    return unless @hzm_vxa_quickSkill_skill
    @hzm_vxa_quickSkill_skill = nil
    # 行動の開始
    HZM_VXA::QuickSkill::start
    @actor_command_window.close if @actor_command_window
    @hzm_vxa_quickSkill_active = true
    # 行動アクター,行動内容の設定
    @subject = BattleManager.actor
    @subject.hzm_vxa_quickSkill_swapAction # 選んだ行動を先頭に引きずり出す
    # 行動
    execute_action
    # イベント処理
    process_event
    # おわり
    @subject.hzm_vxa_quickSkill_swapAction # 元の位置に戻す
    HZM_VXA::QuickSkill::finish
    # ウィンドウを戻す
    refresh_status
    @hzm_vxa_quickSkill_active = false
    @actor_command_window.open if @actor_command_window
    @status_window.open if @status_window
    # 行動回数の再計算
    HZM_VXA::QuickSkill.re_action_times if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  end
end

# 行動回数の再計算用 & エネミー行動ターン数正常化 共通処理
if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES or HZM_VXA::QuickSkill::ENEMY_TURN_NORMALIZE
  class << BattleManager
    #---------------------------------------------------------------------------
    # ● ターン終了(エイリアス)
    #---------------------------------------------------------------------------
    alias hzm_vxa_quickSkill_turn_end turn_end
    def turn_end
      hzm_vxa_quickSkill_turn_end
      $game_troop.hzm_vxa_quickSkill_increase_turn2
    end
  end

  class Game_Troop < Game_Unit
    attr_reader :hzm_vxa_quickSkill_turn_count
    #---------------------------------------------------------------------------
    # ● クリア(エイリアス)
    #---------------------------------------------------------------------------
    alias hzm_vxa_quickSkill_clear clear
    def clear
      hzm_vxa_quickSkill_clear
      @hzm_vxa_quickSkill_turn_count = HZM_VXA::QuickSkill::ENEMY_TURN_NORMALIZE ? 1 : 0
    end
    #---------------------------------------------------------------------------
    # ● クリア(独自)
    #---------------------------------------------------------------------------
    def hzm_vxa_quickSkill_increase_turn2
      @hzm_vxa_quickSkill_turn_count += 1
    end
  end

  class Game_Enemy < Game_Battler
    #--------------------------------------------------------------------------
    # ● 行動条件合致判定[ターン数](再定義)
    #--------------------------------------------------------------------------
    def conditions_met_turns?(param1, param2)
      n = $game_troop.hzm_vxa_quickSkill_turn_count
      if param2 == 0
        n == param1
      else
        n > 0 && n >= param1 && n % param2 == param1 % param2
      end
    end
  end
end

# 行動回数の再計算用
if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  module HZM_VXA
    module QuickSkill
      #-------------------------------------------------------------------------
      # ● 行動回数の再計算
      #-------------------------------------------------------------------------
      if CHECK_ACTION_TIMES
        def self.re_action_times
          $game_party.hzm_vxa_quickSkill_re_action_times
          $game_troop.hzm_vxa_quickSkill_re_action_times
        end
      end
    end
  end

  class Game_Unit
    #---------------------------------------------------------------------------
    # ● 行動回数の再計算(独自)
    #---------------------------------------------------------------------------
    def hzm_vxa_quickSkill_re_action_times
      members.each {|member| member.hzm_vxa_quickSkill_re_action_times }
    end
  end

  class Game_Actor < Game_Battler
    #---------------------------------------------------------------------------
    # ● 行動回数の再計算
    #---------------------------------------------------------------------------
    if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
      def hzm_vxa_quickSkill_re_action_times
        action_cnt = make_action_times
        @actions.push Game_Action.new(self) while @actions.size < action_cnt
        @actions.pop while @actions.size > action_cnt
      end
    end
  end
  
  class Game_Enemy < Game_Battler
    #---------------------------------------------------------------------------
    # ● 行動回数の再計算(独自)
    #---------------------------------------------------------------------------
    def hzm_vxa_quickSkill_re_action_times
      action_cnt = make_action_times
      make_actions if @actions.size < action_cnt
      @actions.pop while @actions.size > action_cnt
    end
  end
  
  class Scene_Battle < Scene_Base
    #---------------------------------------------------------------------------
    # ● スキル/アイテムの使用(エイリアス)
    #---------------------------------------------------------------------------
    alias hzm_vxa_quickSkill_use_item use_item
    def use_item
      # 元の処理
      hzm_vxa_quickSkill_use_item
      # 行動回数の再計算フラグ(エネミーの場合)
      item = (@subject.enemy? and @subject.current_action) ?
        @subject.current_action.item : nil
      @hzm_vxa_quickSkill_re_action_times_flag =
        (item and item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS))
    end
  end
end[/pre]
就是这个脚本,他有没有办法关闭第二个作用,就是修正值效果,还是按原来的方式计算,或者让相同修正值的技能按选定的指令行动顺序来
在尝试做游戏了,但还是个菜狗(结果现在编程,音乐和剧情设计没开始学,画画也暂时没时间学了(;д;))

(个人精神状况不是很好,有时会说出一些奇怪且根本没法理解意思的话,直接无视就好,如果说出的话不小心冒犯到你,我会在精神状况良好时和你道歉的(`・ω・´)(不过一般在感觉到不适时会直接下线,请勿过于担心))
梦石
0
星屑
2085
在线时间
185 小时
注册时间
2022-6-24
回帖
148
 楼主| 发表于 2022-7-14 05:03:51 | 显示全部楼层
  1. # coding: utf-8
  2. #===============================================================================
  3. # ■ [hzm]メモ欄拡張共通部分さん+ for RGSS3
  4. #-------------------------------------------------------------------------------
  5. # 2014/09/27 Ru/むっくRu
  6. #-------------------------------------------------------------------------------
  7. #  データベースのメモ欄の情報を読み取るための共通処理.
  8. #  メモ欄の各行に特定もフレーズがついたものだけを取得します.
  9. #
  10. #  鳥小屋.txtのメモ欄を使うスクリプト群を使う場合に必須になります.
  11. #  (※スクリプト名の頭に[hzm]が付いているスクリプト)
  12. #-------------------------------------------------------------------------------
  13. # 【注意】
  14. #  「[hzm]メモ欄拡張共通部分 for RGSS3」の機能を内包しています.
  15. #  このスクリプトを導入する場合は,
  16. #  [hzm]メモ欄拡張共通部分 for RGSS3は導入しないでください.
  17. #-------------------------------------------------------------------------------
  18. # 【旧バージョン([hzm]メモ欄拡張共通部分 for RGSS3)からの仕様変更点】
  19. #  ・メモ欄のヘッダ文字([hzm])の他にも複数指定することを可能に
  20. #    指定のメソッドを呼び出すことで,
  21. #    [hzm]以外のヘッダ文字をつけたものを認識させることを可能に.
  22. #    (僕が)派生スクリプトを作りやすくするのが目的.
  23. #
  24. #  ・同一項目の複数記述に正式対応
  25. #    [hzm]属性耐性:炎,50
  26. #    [hzm]属性耐性:水,100
  27. #    みたいに同じ項目を複数書いても使えるようになります.
  28. #    ※注意:別にこのスクリプトに属性耐性の機能があるわけではないです
  29. #
  30. #-------------------------------------------------------------------------------
  31. # 【更新履歴】
  32. # 2014/09/27 キャッシュが存在しない場合に再生成するように変更
  33. # 2012/06/04 バージョンチェック用メソッド名修正
  34. # 2012/06/04 [hzm]メモ欄拡張共通部分 for RGSS3から派生
  35. #-------------------------------------------------------------------------------

  36. #===============================================================================
  37. # ↓ 以下、スクリプト部 ↓
  38. #===============================================================================

  39. # 旧スクリプト導入時にエラー処理を行う
  40. raise "「[hzm]メモ欄拡張共通部分 for RGSS3」が導入されています.\n「[hzm]メモ欄拡張共通部分 for RGSS3」は既に不要なので,\n削除してください." if defined?(HZM_VXA::Note)

  41. module HZM_VXA
  42.   module Note2
  43.     # ● デフォルトのマークフレーズ
  44.     #    (※変更しないでください)
  45.     DEFAULT_MARK = '[hzm]'
  46.     # ● 「[hzm]メモ欄拡張共通部分 for RGSS3」との互換性を保持するか?
  47.     USE_OLD_STYLE = true
  48.   end
  49. end

  50. module HZM_VXA
  51.   module Note2
  52.     #---------------------------------------------------------------------------
  53.     # ● メモスクリプトのバージョン
  54.     #    .区切りの3つの数字で表現
  55.     #    1桁目:メジャーバージョン(仕様変更=互換性破たん時に変更)
  56.     #    2桁目:マイナーバージョン(機能追加時に変更)
  57.     #    3桁目:パッチバージョン(不具合修正時に変更)
  58.     #---------------------------------------------------------------------------
  59.     VERSION = '3.0.0'
  60.     #---------------------------------------------------------------------------
  61.     # ● バージョン比較処理
  62.     #---------------------------------------------------------------------------
  63.     def self.check_version?(version_str)
  64.       version     = version2array(VERSION)
  65.       req_version = version2array(version_str)
  66.       # メジャーバージョンが要求と一致するか?
  67.       return false unless version[0] == req_version[0]
  68.       # マイナーバージョンが要求より低くないか?
  69.       return false unless version[1] >= req_version[1]
  70.       true
  71.     end
  72.     #---------------------------------------------------------------------------
  73.     # ● バージョン文字列の分解
  74.     #---------------------------------------------------------------------------
  75.     def self.version2array(version_str)
  76.       version_str.split('.').map{|n| n.to_i}
  77.     end
  78.     #---------------------------------------------------------------------------
  79.     # ● ヘッダマーク配列
  80.     #---------------------------------------------------------------------------
  81.     @header_mark = []
  82.     #---------------------------------------------------------------------------
  83.     # ● ヘッダマークの取得
  84.     #---------------------------------------------------------------------------
  85.     def self.header_mark
  86.       @header_mark
  87.     end
  88.     #---------------------------------------------------------------------------
  89.     # ● ヘッダマークの追加
  90.     #---------------------------------------------------------------------------
  91.     def self.add_header_mark(mark_str)
  92.       @header_mark.push(mark_str) unless @header_mark.include?(mark_str)
  93.     end
  94.     #---------------------------------------------------------------------------
  95.     # ● メモ欄の内容を解析
  96.     #---------------------------------------------------------------------------
  97.     def self.setup
  98.       add_header_mark(DEFAULT_MARK)
  99.       list = [
  100.         $data_actors,
  101.         $data_classes,
  102.         $data_skills,
  103.         $data_items,
  104.         $data_weapons,
  105.         $data_armors,
  106.         $data_enemies,
  107.         $data_states,
  108.         $data_tilesets,
  109.       ]
  110.       list.each do |data|
  111.         data.each do |d|
  112.           d.hzm_vxa_note2_init if d
  113.         end
  114.       end
  115.     end
  116.     #---------------------------------------------------------------------------
  117.     # ■ メモ欄を持つクラスに追加するメソッド類
  118.     #---------------------------------------------------------------------------
  119.     module Utils
  120.       #-------------------------------------------------------------------------
  121.       # ● メモ欄のチェック
  122.       #-------------------------------------------------------------------------
  123.       def hzm_vxa_note2_init
  124.         hzm_vxa_note2_clear
  125.         self.note.split(/\r?\n/).each do |line|
  126.           HZM_VXA::Note2.header_mark.each do |mark|
  127.             next unless line.index(mark) == 0
  128.             l = line.sub!(mark, '')
  129.             if l =~ /^([^\:]+)\:(.+)$/
  130.               hzm_vxa_note2_add(mark, $1, $2)
  131.             else
  132.               hzm_vxa_note2_add(mark, l, '')
  133.             end
  134.           end
  135.         end
  136.       end
  137.       #-------------------------------------------------------------------------
  138.       # ● メモ欄情報の追加
  139.       #-------------------------------------------------------------------------
  140.       def hzm_vxa_note2_add(mark, key, str)
  141.         # 文字列として保存
  142.         @hzm_vxa_note2_str[mark][key] ||= []
  143.         @hzm_vxa_note2_str[mark][key].push(str.to_s)
  144.         # カンマ区切りのデータとして保存
  145.         @hzm_vxa_note2_data[mark][key] ||= []
  146.         data = str.split(/\s*\,\s*/).map do |d|
  147.           if d =~ /^\-?\d+$/
  148.             d.to_i
  149.           elsif d =~ /^\-?\d+\.\d+$/
  150.             d.to_f
  151.           else
  152.             d.to_s
  153.           end
  154.         end
  155.         @hzm_vxa_note2_data[mark][key].push(data)
  156.       end
  157.       #-------------------------------------------------------------------------
  158.       # ● メモ欄情報の削除
  159.       #-------------------------------------------------------------------------
  160.       def hzm_vxa_note2_clear
  161.         @hzm_vxa_note2_str = {}
  162.         @hzm_vxa_note2_data = {}
  163.         HZM_VXA::Note2.header_mark.each do |mark|
  164.           @hzm_vxa_note2_str[mark] = {}
  165.           @hzm_vxa_note2_data[mark] = {}
  166.         end
  167.       end
  168.       #-------------------------------------------------------------------------
  169.       # ● メモ内容取得
  170.       #-------------------------------------------------------------------------
  171.       def hzm_vxa_note2_match(mark, keys)
  172.         hzm_vxa_note2_matches(mark, keys).last
  173.       end
  174.       def hzm_vxa_note2_match_str(mark, keys)
  175.         hzm_vxa_note2_matches_str(mark, keys).last
  176.       end
  177.       def hzm_vxa_note2_matches(mark, keys)
  178.         mark ||= HZM_VXA::Note2::DEFAULT_MARK
  179.         ret = []
  180.         keys.each do |key|
  181.           ret += self.hzm_vxa_note2_data[mark][key] if self.hzm_vxa_note2_data[mark].include?(key)
  182.         end
  183.         ret
  184.       rescue => e
  185.         puts "#{$!} - #{$@}"
  186.       end
  187.       def hzm_vxa_note2_matches_str(mark, keys)
  188.         mark ||= HZM_VXA::Note2::DEFAULT_MARK
  189.         ret = []
  190.         keys.each do |key|
  191.           ret += self.hzm_vxa_note2_str[mark][key] if self.hzm_vxa_note2_str[mark].include?(key)
  192.         end
  193.         ret
  194.       end
  195.       def hzm_vxa_note2_data
  196.         hzm_vxa_note2_init unless @hzm_vxa_note2_data
  197.         @hzm_vxa_note2_data
  198.       end
  199.       def hzm_vxa_note2_str
  200.         hzm_vxa_note2_init unless @hzm_vxa_note2_str
  201.         @hzm_vxa_note2_str
  202.       end
  203.     end
  204.   end
  205. end

  206. # メモ欄を持つクラスに機能追加
  207. class RPG::BaseItem
  208.   include HZM_VXA::Note2::Utils
  209. end
  210. class RPG::Tileset
  211.   include HZM_VXA::Note2::Utils
  212. end

  213. # メモ解析
  214. if true
  215.   class << DataManager
  216.     alias hzm_vxa_note2_init init
  217.     def init
  218.       hzm_vxa_note2_init
  219.       HZM_VXA::Note2.setup
  220.     end
  221.   end
  222. end

  223. # 旧スクリプトとの互換性保持
  224. if HZM_VXA::Note2::USE_OLD_STYLE
  225.   module HZM_VXA
  226.     module Note
  227.       #-------------------------------------------------------------------------
  228.       # ● メモスクリプトのバージョン
  229.       #-------------------------------------------------------------------------
  230.       VERSION = 2.20
  231.       #-------------------------------------------------------------------------
  232.       # ● バージョンチェック機構
  233.       #-------------------------------------------------------------------------
  234.       def self.check_version(n)
  235.         (n >= 2 and n < 3)
  236.       end
  237.     end
  238.   end
  239.   module HZM_VXA
  240.     module Note2
  241.       module Utils
  242.         #-----------------------------------------------------------------------
  243.         # ● メモ内容取得
  244.         #-----------------------------------------------------------------------
  245.         def hzm_vxa_note_match(keys)
  246.           hzm_vxa_note2_match(HZM_VXA::Note2::DEFAULT_MARK, keys)
  247.         end
  248.         def hzm_vxa_note(key)
  249.           hzm_vxa_note2_match(HZM_VXA::Note2::DEFAULT_MARK, [key])
  250.         end
  251.         #-----------------------------------------------------------------------
  252.         # ● メモ内容(単一文字列)取得
  253.         #-----------------------------------------------------------------------
  254.         def hzm_vxa_note_str_match(keys)
  255.           hzm_vxa_note2_match_str(HZM_VXA::Note2::DEFAULT_MARK, keys)
  256.         end
  257.         def hzm_vxa_note_str(key)
  258.           hzm_vxa_note2_match_str(HZM_VXA::Note2::DEFAULT_MARK, [key])
  259.         end
  260.       end
  261.     end
  262.   end
  263. end
复制代码

这个是他的前置,不知道能不能帮到各位老哥
在尝试做游戏了,但还是个菜狗(结果现在编程,音乐和剧情设计没开始学,画画也暂时没时间学了(;д;))

(个人精神状况不是很好,有时会说出一些奇怪且根本没法理解意思的话,直接无视就好,如果说出的话不小心冒犯到你,我会在精神状况良好时和你道歉的(`・ω・´)(不过一般在感觉到不适时会直接下线,请勿过于担心))
回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2022-7-14 08:34:27 | 显示全部楼层
你把脚本里的这个注释掉

  1. # アクションを速度順にソート
  2.     @actions.sort! {|a,b| b.speed - a.speed }
复制代码

改成

  1. return @actions
复制代码

评分

参与人数 2星屑 +100 赞 +2 收起 理由
alexncf125 + 100 + 1 认可答案
ACRI + 1 认可答案

查看全部评分

回复 1 0

使用道具 举报

梦石
0
星屑
2085
在线时间
185 小时
注册时间
2022-6-24
回帖
148
 楼主| 发表于 2022-7-24 19:34:21 | 显示全部楼层
百里_飞柳 发表于 2022-7-14 08:34
你把脚本里的这个注释掉

改成

谢谢老哥=
在尝试做游戏了,但还是个菜狗(结果现在编程,音乐和剧情设计没开始学,画画也暂时没时间学了(;д;))

(个人精神状况不是很好,有时会说出一些奇怪且根本没法理解意思的话,直接无视就好,如果说出的话不小心冒犯到你,我会在精神状况良好时和你道歉的(`・ω・´)(不过一般在感觉到不适时会直接下线,请勿过于担心))
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部