查看: 2272|回复: 3

[已经过期] 如何让战斗中更换装备消耗一个回合?

[复制链接]

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2014-8-27 18:29:09 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 三途亚梦 于 2014-8-27 18:32 编辑

我使用了日站 Artificial Providence 中的在战斗中更换装备的系统,

我想问一下如何设置更换一件装备需要消耗一个回合(或多个回合)。


相关脚本在这
[pre lang="ruby" line="1"]#==============================================================================
# ■ RGSS3 戦闘中装備変更 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# パーティコマンド、もしくはアクターコマンドに装備変更コマンドを追加します。
# パーティコマンドの場合は全体、アクターコマンドの場合は個別です。
#------------------------------------------------------------------------------
# ★設定例(特徴を有する項目のメモ欄を使用します)
#------------------------------------------------------------------------------
# <戦闘中装備変更>
#
# このアクターのアクターコマンドに装備変更を追加します。
# TYPEが0の場合は意味がありません。
#------------------------------------------------------------------------------
# <戦闘中装備変更禁止:4>
#
# このアクターの装備部位4を戦闘中のみ変更できなくします。
# 装備部位の対応は以下の通りです。(デフォルトの場合です)
# 0 => 武器 1 => 盾 2=> 兜 3=> 鎧 4=> 装飾品
#==============================================================================
module BATTLE_EQUIP_CHANGE
  
  #戦闘中の装備変更コマンドのコマンド名を指定します。
  
  WORD1 = "装备变更"
  
  #指定した装備の種類を戦闘中装備変更不可能にします。
  #装備部位の対応は以下の通りです。(デフォルトの場合です)
  #0 => 武器 1 => 盾 2=> 兜 3=> 鎧 4=> 装飾品
  #それぞれ、数字を「,」で区切って指定して下さい。
  #例.[2,3]
  
  SEAL = []
  
  #戦闘中の装備変更タイプを指定します。
  #0の場合 パーティコマンドに無条件に追加されます。(アクターの切り替えはL・Rボタン)
  #1の場合 アクターコマンドに無条件に追加されます。(アクターの切り替え不可)
  #2の場合 戦闘中装備変更特徴があるアクターのみ
  #        アクターコマンドに追加されます。(アクターの切り替え不可)
  
  TYPE = 2
  
  #戦闘中の装備変更を可能とする特徴を作成する為の指定用キーワードを指定します。
  #TYPEが1か2の時しか意味はありません。
  
  WORD2 = "戦闘中装備変更"
  
  #部位別に戦闘中の装備変更を禁止する特徴を作成する為の
  #指定用キーワードを指定します。
  #装備変更画面以外の、イベントコマンド等での装備変更は有効です。
  
  WORD3 = "戦闘中装備変更禁止"
  
end
class Game_Temp
  attr_accessor :battle_equip
  #--------------------------------------------------------------------------
  # オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_battle_equip initialize
  def initialize
   
    #本来の処理を実行。
   
    initialize_battle_equip
   
    #装備変更関連を初期化。
   
    @battle_equip = false
   
  end
end
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # 装備変更コマンドの追加可否
  #--------------------------------------------------------------------------
  def equip_command_usable
   
    #特徴の中に装備変更コマンド追加特徴があればtrueを返す。
   
    feature_objects.each {|f| return true if f.equip_command_usable}
   
    #falseを返す。
   
    false
   
  end
  #--------------------------------------------------------------------------
  # 装備変更コマンドの追加可否
  #--------------------------------------------------------------------------
  def equip_command_seal
   
    #空の配列を作成。
   
    array = []
   
    #特徴で戦闘中の装備変更禁止箇所が指定されている場合
    #その箇所の値を配列に加える。
   
    feature_objects.each {|f| array += f.equip_command_seal}
   
    #配列を返す。
   
    array
   
  end
  #--------------------------------------------------------------------------
  # 装備変更の可能判定
  #     slot_id : 装備スロット ID
  #--------------------------------------------------------------------------
  alias equip_change_ok_battle_equip? equip_change_ok?
  def equip_change_ok?(slot_id)
   
    #戦闘中の装備変更であり戦闘中の装備変更禁止箇所に含まれている場合はfalseを返す。
   
    return false if battle_equip_seal.include?(equip_slots[slot_id]) if $game_temp.battle_equip
   
    #本来の処理を実行する。
   
    equip_change_ok_battle_equip?(slot_id)
   
  end
  #--------------------------------------------------------------------------
  # 戦闘中の装備変更禁止箇所
  #--------------------------------------------------------------------------
  def battle_equip_seal
   
    #設定で指定した装備禁止箇所と
    #アクター個別に設定された装備箇所を合わせ
    #重複分を削除して返す。
   
    (BATTLE_EQUIP_CHANGE::SEAL + equip_command_seal).uniq
   
  end
end
class RPG::BaseItem
  #--------------------------------------------------------------------------
  # 装備変更コマンドの追加可否
  #--------------------------------------------------------------------------
  def equip_command_usable
   
    #キャッシュが存在する場合はキャッシュを返す。
   
    return @equip_command_usable if @equip_command_usable != nil
   
    #メモ欄からデータを取得。
   
    @equip_command_usable = self.note.include?("<" + BATTLE_EQUIP_CHANGE::WORD2 + ">")
   
    #データを返す。
   
    @equip_command_usable
   
  end
  #--------------------------------------------------------------------------
  # 装備変更コマンド封印判定
  #--------------------------------------------------------------------------
  def equip_command_seal
   
    #キャッシュが存在する場合はキャッシュを返す。
   
    return @equip_command_seal if @equip_command_seal != nil
   
    #空の配列を作成。
   
    @equip_command_seal = []
   
    #メモ欄からデータを取得。
   
    memo = self.note.scan(/<#{BATTLE_EQUIP_CHANGE::WORD3}[::](\S+)>/).flatten
    if memo != nil && !memo.empty?
      memo = memo[0].split(/\s*,\s*/)
      memo.each {|i| @equip_command_seal.push(i.to_i)}
    end
   
    #データを返す。
   
    @equip_command_seal
   
  end
end

#タイプ別に処理を分ける。

case BATTLE_EQUIP_CHANGE::TYPE

#パーティコマンドに追加する場合

when 0
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # 戦闘開始
  #--------------------------------------------------------------------------
  alias battle_start_equip battle_start
  def battle_start
   
    #装備変更から戻ってきた場合は行動を作成し直し
    #パーティコマンドの選択から開始する。
    #そうでない場合は、通常の処理を行う。
   
    if $game_temp.battle_equip
      $game_party.make_actions
      start_party_command_selection
    else
      battle_start_equip
    end
   
    #戦闘中装備変更フラグを初期化する。
   
    $game_temp.battle_equip = false
   
  end
  #--------------------------------------------------------------------------
  # パーティコマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias create_party_command_window_equip create_party_command_window
  def create_party_command_window
   
    #本来の処理を実行。
   
    create_party_command_window_equip
   
    #装備変更コマンド用と命令を関連付ける。
   
    @party_command_window.set_handler(:equip_change,  method(:command_equip_change))
   
  end
  #--------------------------------------------------------------------------
  # コマンド[装備変更]
  #--------------------------------------------------------------------------
  def command_equip_change
   
    #戦闘中装備変更フラグを立てる。
   
    $game_temp.battle_equip = true
   
    #Scene_Equipを呼び出す。
   
    SceneManager.call(Scene_Equip)
   
  end
end
class Window_PartyCommand < Window_Command
  #--------------------------------------------------------------------------
  # コマンドリストの作成
  #--------------------------------------------------------------------------
  alias make_command_list_equip make_command_list
  def make_command_list
   
    #本来の処理を実行。
   
    make_command_list_equip
   
    #装備変更コマンドを追加する。
   
    add_command(BATTLE_EQUIP_CHANGE::WORD1,  :equip_change)
   
  end
end

#アクターコマンドに追加する場合

when 1..2
class Game_BattlerBase
  def equip_command_usable
   
    #戦闘中装備変更特徴の有無をチェックする。
   
    feature_objects.each {|f| return true if f.equip_command_usable}
   
    false
   
  end
end
class Scene_Equip < Scene_MenuBase
  #--------------------------------------------------------------------------
  # コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias create_command_window_equip create_command_window
  def create_command_window
   
    #本来の処理を実行。
   
    create_command_window_equip
   
    #戦闘中装備変更の場合、装備コマンドウィンドウから
    #アクター切り替えの機能を削除する。
   
    @command_window.battle_command_seal if $game_temp.battle_equip
   
  end
end
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # 戦闘開始
  #--------------------------------------------------------------------------
  alias battle_start_equip battle_start
  def battle_start
   
    #戦闘中装備変更から戻った場合ではない場合
   
    if !$game_temp.battle_equip
      
      #本来の処理を実行。
      
      battle_start_equip
    else
      
      #そうでない場合は、ステータスをリフレッシュし
      #ステータスウィンドウを開く。
      
      refresh_status
      @status_window.unselect
      @status_window.open
      
      #アクターが操作不能に陥っている場合は、行動内容を作成して
      #次のアクターにコマンド選択を移す。
      
      if BattleManager.actor && !BattleManager.actor.inputable?
        BattleManager.actor.make_auto_battle_actions
        BattleManager.next_command
      end
      
      #アクターコマンドの選択を開始する。
      
      BattleManager.actor ? start_actor_command_selection : next_command
      
    end
   
    #戦闘中装備変更フラグを初期化する。
   
    $game_temp.battle_equip = false
  end
  #--------------------------------------------------------------------------
  # アクターコマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias create_actor_command_window_equip create_actor_command_window
  def create_actor_command_window
   
    #本来の処理を実行。
   
    create_actor_command_window_equip
   
    #装備変更コマンド用と命令を関連付ける。
   
    @actor_command_window.set_handler(:equip_change, method(:command_equip_change))
  end
  #--------------------------------------------------------------------------
  # コマンド[装備変更]
  #--------------------------------------------------------------------------
  def command_equip_change
   
    #戦闘中装備変更フラグを立てる。
   
    $game_temp.battle_equip = true
   
    #メニューアクターを行動選択中のアクターにする。
   
    $game_party.menu_actor = BattleManager.actor
   
    #装備画面を開く。
   
    SceneManager.call(Scene_Equip)
  end
end
class Window_ActorCommand < Window_Command
  #--------------------------------------------------------------------------
  # コマンドリストの作成
  #--------------------------------------------------------------------------
  alias make_command_list_equip make_command_list
  def make_command_list
   
    #本来の処理を実行。
   
    make_command_list_equip
   
    #アクターが存在しない場合は処理を飛ばす。
   
    return unless @actor
   
    #タイプ1の場合は無条件で追加する。
    #タイプ2の場合は戦闘中装備変更特徴がある場合に追加する。
   
    add_command(BATTLE_EQUIP_CHANGE::WORD1,:equip_change) if BATTLE_EQUIP_CHANGE::TYPE == 1 or @actor.equip_command_usable
   
  end
end
class Window_EquipCommand < Window_HorzCommand
  def battle_command_seal
   
    #アクター切り替えの機能を削除する。
   
    @handler.delete(:pageup)
    @handler.delete(:pagedown)
   
  end
end
end[/pre]

另外问下如何加内容折叠
梦石
0
星屑
49
在线时间
46 小时
注册时间
2013-11-16
回帖
259
发表于 2014-8-27 19:18:27 | 显示全部楼层
战斗的话,只有消耗品可以,HP和MP的药水可以消耗,装备的话很难,除非你在战斗前更换,否则很麻烦。

点评

这个脚本已经可以在战斗中更换装备了,只不过目前跟战斗外一样可以任意更换装备。  发表于 2014-8-27 19:46
周杰伦
回复

使用道具 举报

梦石
0
星屑
49
在线时间
46 小时
注册时间
2013-11-16
回帖
259
发表于 2014-8-27 20:14:30 | 显示全部楼层
哦,好吧自行解决。
周杰伦
回复

使用道具 举报

梦石
0
星屑
1191
在线时间
532 小时
注册时间
2011-10-3
回帖
2072
发表于 2014-8-27 22:59:20 | 显示全部楼层
把更换装备的东西做成物品。或者强制添加冷却(伪眩晕)状态

点评

攻击、防御这些都是要用掉本回合行动才能使用的指令啊,  发表于 2014-8-28 15:33
现在跟攻击、防御、技能一样是一个指令,效果是呼出装备更换的界面,要做成物品大概不太容易。强制添加一个状态似乎是一个可行的思路。  发表于 2014-8-27 23:37
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部