设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1907|回复: 3
打印 上一主题 下一主题

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

[复制链接]

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
跳转到指定楼层
1
发表于 2014-8-27 18:29:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

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

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


相关脚本在这
RUBY 代码复制
  1. #==============================================================================
  2. # ■ RGSS3 戦闘中装備変更 Ver1.00 by 星潟
  3. #------------------------------------------------------------------------------
  4. # パーティコマンド、もしくはアクターコマンドに装備変更コマンドを追加します。
  5. # パーティコマンドの場合は全体、アクターコマンドの場合は個別です。
  6. #------------------------------------------------------------------------------
  7. # ★設定例(特徴を有する項目のメモ欄を使用します)
  8. #------------------------------------------------------------------------------
  9. # <戦闘中装備変更>
  10. #
  11. # このアクターのアクターコマンドに装備変更を追加します。
  12. # TYPEが0の場合は意味がありません。
  13. #------------------------------------------------------------------------------
  14. # <戦闘中装備変更禁止:4>
  15. #
  16. # このアクターの装備部位4を戦闘中のみ変更できなくします。
  17. # 装備部位の対応は以下の通りです。(デフォルトの場合です)
  18. # 0 => 武器 1 => 盾 2=> 兜 3=> 鎧 4=> 装飾品
  19. #==============================================================================
  20. module BATTLE_EQUIP_CHANGE
  21.  
  22.   #戦闘中の装備変更コマンドのコマンド名を指定します。
  23.  
  24.   WORD1 = "装备变更"
  25.  
  26.   #指定した装備の種類を戦闘中装備変更不可能にします。
  27.   #装備部位の対応は以下の通りです。(デフォルトの場合です)
  28.   #0 => 武器 1 => 盾 2=> 兜 3=> 鎧 4=> 装飾品
  29.   #それぞれ、数字を「,」で区切って指定して下さい。
  30.   #例.[2,3]
  31.  
  32.   SEAL = []
  33.  
  34.   #戦闘中の装備変更タイプを指定します。
  35.   #0の場合 パーティコマンドに無条件に追加されます。(アクターの切り替えはL・Rボタン)
  36.   #1の場合 アクターコマンドに無条件に追加されます。(アクターの切り替え不可)
  37.   #2の場合 戦闘中装備変更特徴があるアクターのみ
  38.   #        アクターコマンドに追加されます。(アクターの切り替え不可)
  39.  
  40.   TYPE = 2
  41.  
  42.   #戦闘中の装備変更を可能とする特徴を作成する為の指定用キーワードを指定します。
  43.   #TYPEが1か2の時しか意味はありません。
  44.  
  45.   WORD2 = "戦闘中装備変更"
  46.  
  47.   #部位別に戦闘中の装備変更を禁止する特徴を作成する為の
  48.   #指定用キーワードを指定します。
  49.   #装備変更画面以外の、イベントコマンド等での装備変更は有効です。
  50.  
  51.   WORD3 = "戦闘中装備変更禁止"
  52.  
  53. end
  54. class Game_Temp
  55.   attr_accessor :battle_equip
  56.   #--------------------------------------------------------------------------
  57.   # オブジェクト初期化
  58.   #--------------------------------------------------------------------------
  59.   alias initialize_battle_equip initialize
  60.   def initialize
  61.  
  62.     #本来の処理を実行。
  63.  
  64.     initialize_battle_equip
  65.  
  66.     #装備変更関連を初期化。
  67.  
  68.     @battle_equip = false
  69.  
  70.   end
  71. end
  72. class Game_Actor < Game_Battler
  73.   #--------------------------------------------------------------------------
  74.   # 装備変更コマンドの追加可否
  75.   #--------------------------------------------------------------------------
  76.   def equip_command_usable
  77.  
  78.     #特徴の中に装備変更コマンド追加特徴があればtrueを返す。
  79.  
  80.     feature_objects.each {|f| return true if f.equip_command_usable}
  81.  
  82.     #falseを返す。
  83.  
  84.     false
  85.  
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # 装備変更コマンドの追加可否
  89.   #--------------------------------------------------------------------------
  90.   def equip_command_seal
  91.  
  92.     #空の配列を作成。
  93.  
  94.     array = []
  95.  
  96.     #特徴で戦闘中の装備変更禁止箇所が指定されている場合
  97.     #その箇所の値を配列に加える。
  98.  
  99.     feature_objects.each {|f| array += f.equip_command_seal}
  100.  
  101.     #配列を返す。
  102.  
  103.     array
  104.  
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # 装備変更の可能判定
  108.   #     slot_id : 装備スロット ID
  109.   #--------------------------------------------------------------------------
  110.   alias equip_change_ok_battle_equip? equip_change_ok?
  111.   def equip_change_ok?(slot_id)
  112.  
  113.     #戦闘中の装備変更であり戦闘中の装備変更禁止箇所に含まれている場合はfalseを返す。
  114.  
  115.     return false if battle_equip_seal.include?(equip_slots[slot_id]) if $game_temp.battle_equip
  116.  
  117.     #本来の処理を実行する。
  118.  
  119.     equip_change_ok_battle_equip?(slot_id)
  120.  
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # 戦闘中の装備変更禁止箇所
  124.   #--------------------------------------------------------------------------
  125.   def battle_equip_seal
  126.  
  127.     #設定で指定した装備禁止箇所と
  128.     #アクター個別に設定された装備箇所を合わせ
  129.     #重複分を削除して返す。
  130.  
  131.     (BATTLE_EQUIP_CHANGE::SEAL + equip_command_seal).uniq
  132.  
  133.   end
  134. end
  135. class RPG::BaseItem
  136.   #--------------------------------------------------------------------------
  137.   # 装備変更コマンドの追加可否
  138.   #--------------------------------------------------------------------------
  139.   def equip_command_usable
  140.  
  141.     #キャッシュが存在する場合はキャッシュを返す。
  142.  
  143.     return @equip_command_usable if @equip_command_usable != nil
  144.  
  145.     #メモ欄からデータを取得。
  146.  
  147.     @equip_command_usable = self.note.include?("<" + BATTLE_EQUIP_CHANGE::WORD2 + ">")
  148.  
  149.     #データを返す。
  150.  
  151.     @equip_command_usable
  152.  
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # 装備変更コマンド封印判定
  156.   #--------------------------------------------------------------------------
  157.   def equip_command_seal
  158.  
  159.     #キャッシュが存在する場合はキャッシュを返す。
  160.  
  161.     return @equip_command_seal if @equip_command_seal != nil
  162.  
  163.     #空の配列を作成。
  164.  
  165.     @equip_command_seal = []
  166.  
  167.     #メモ欄からデータを取得。
  168.  
  169.     memo = self.note.scan(/<#{BATTLE_EQUIP_CHANGE::WORD3}[::](\S+)>/).flatten
  170.     if memo != nil && !memo.empty?
  171.       memo = memo[0].split(/\s*,\s*/)
  172.       memo.each {|i| @equip_command_seal.push(i.to_i)}
  173.     end
  174.  
  175.     #データを返す。
  176.  
  177.     @equip_command_seal
  178.  
  179.   end
  180. end
  181.  
  182. #タイプ別に処理を分ける。
  183.  
  184. case BATTLE_EQUIP_CHANGE::TYPE
  185.  
  186. #パーティコマンドに追加する場合
  187.  
  188. when 0
  189. class Scene_Battle < Scene_Base
  190.   #--------------------------------------------------------------------------
  191.   # 戦闘開始
  192.   #--------------------------------------------------------------------------
  193.   alias battle_start_equip battle_start
  194.   def battle_start
  195.  
  196.     #装備変更から戻ってきた場合は行動を作成し直し
  197.     #パーティコマンドの選択から開始する。
  198.     #そうでない場合は、通常の処理を行う。
  199.  
  200.     if $game_temp.battle_equip
  201.       $game_party.make_actions
  202.       start_party_command_selection
  203.     else
  204.       battle_start_equip
  205.     end
  206.  
  207.     #戦闘中装備変更フラグを初期化する。
  208.  
  209.     $game_temp.battle_equip = false
  210.  
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # パーティコマンドウィンドウの作成
  214.   #--------------------------------------------------------------------------
  215.   alias create_party_command_window_equip create_party_command_window
  216.   def create_party_command_window
  217.  
  218.     #本来の処理を実行。
  219.  
  220.     create_party_command_window_equip
  221.  
  222.     #装備変更コマンド用と命令を関連付ける。
  223.  
  224.     @party_command_window.set_handler(:equip_change,  method(:command_equip_change))
  225.  
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # コマンド[装備変更]
  229.   #--------------------------------------------------------------------------
  230.   def command_equip_change
  231.  
  232.     #戦闘中装備変更フラグを立てる。
  233.  
  234.     $game_temp.battle_equip = true
  235.  
  236.     #Scene_Equipを呼び出す。
  237.  
  238.     SceneManager.call(Scene_Equip)
  239.  
  240.   end
  241. end
  242. class Window_PartyCommand < Window_Command
  243.   #--------------------------------------------------------------------------
  244.   # コマンドリストの作成
  245.   #--------------------------------------------------------------------------
  246.   alias make_command_list_equip make_command_list
  247.   def make_command_list
  248.  
  249.     #本来の処理を実行。
  250.  
  251.     make_command_list_equip
  252.  
  253.     #装備変更コマンドを追加する。
  254.  
  255.     add_command(BATTLE_EQUIP_CHANGE::WORD1,  :equip_change)
  256.  
  257.   end
  258. end
  259.  
  260. #アクターコマンドに追加する場合
  261.  
  262. when 1..2
  263. class Game_BattlerBase
  264.   def equip_command_usable
  265.  
  266.     #戦闘中装備変更特徴の有無をチェックする。
  267.  
  268.     feature_objects.each {|f| return true if f.equip_command_usable}
  269.  
  270.     false
  271.  
  272.   end
  273. end
  274. class Scene_Equip < Scene_MenuBase
  275.   #--------------------------------------------------------------------------
  276.   # コマンドウィンドウの作成
  277.   #--------------------------------------------------------------------------
  278.   alias create_command_window_equip create_command_window
  279.   def create_command_window
  280.  
  281.     #本来の処理を実行。
  282.  
  283.     create_command_window_equip
  284.  
  285.     #戦闘中装備変更の場合、装備コマンドウィンドウから
  286.     #アクター切り替えの機能を削除する。
  287.  
  288.     @command_window.battle_command_seal if $game_temp.battle_equip
  289.  
  290.   end
  291. end
  292. class Scene_Battle < Scene_Base
  293.   #--------------------------------------------------------------------------
  294.   # 戦闘開始
  295.   #--------------------------------------------------------------------------
  296.   alias battle_start_equip battle_start
  297.   def battle_start
  298.  
  299.     #戦闘中装備変更から戻った場合ではない場合
  300.  
  301.     if !$game_temp.battle_equip
  302.  
  303.       #本来の処理を実行。
  304.  
  305.       battle_start_equip
  306.     else
  307.  
  308.       #そうでない場合は、ステータスをリフレッシュし
  309.       #ステータスウィンドウを開く。
  310.  
  311.       refresh_status
  312.       @status_window.unselect
  313.       @status_window.open
  314.  
  315.       #アクターが操作不能に陥っている場合は、行動内容を作成して
  316.       #次のアクターにコマンド選択を移す。
  317.  
  318.       if BattleManager.actor && !BattleManager.actor.inputable?
  319.         BattleManager.actor.make_auto_battle_actions
  320.         BattleManager.next_command
  321.       end
  322.  
  323.       #アクターコマンドの選択を開始する。
  324.  
  325.       BattleManager.actor ? start_actor_command_selection : next_command
  326.  
  327.     end
  328.  
  329.     #戦闘中装備変更フラグを初期化する。
  330.  
  331.     $game_temp.battle_equip = false
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # アクターコマンドウィンドウの作成
  335.   #--------------------------------------------------------------------------
  336.   alias create_actor_command_window_equip create_actor_command_window
  337.   def create_actor_command_window
  338.  
  339.     #本来の処理を実行。
  340.  
  341.     create_actor_command_window_equip
  342.  
  343.     #装備変更コマンド用と命令を関連付ける。
  344.  
  345.     @actor_command_window.set_handler(:equip_change, method(:command_equip_change))
  346.   end
  347.   #--------------------------------------------------------------------------
  348.   # コマンド[装備変更]
  349.   #--------------------------------------------------------------------------
  350.   def command_equip_change
  351.  
  352.     #戦闘中装備変更フラグを立てる。
  353.  
  354.     $game_temp.battle_equip = true
  355.  
  356.     #メニューアクターを行動選択中のアクターにする。
  357.  
  358.     $game_party.menu_actor = BattleManager.actor
  359.  
  360.     #装備画面を開く。
  361.  
  362.     SceneManager.call(Scene_Equip)
  363.   end
  364. end
  365. class Window_ActorCommand < Window_Command
  366.   #--------------------------------------------------------------------------
  367.   # コマンドリストの作成
  368.   #--------------------------------------------------------------------------
  369.   alias make_command_list_equip make_command_list
  370.   def make_command_list
  371.  
  372.     #本来の処理を実行。
  373.  
  374.     make_command_list_equip
  375.  
  376.     #アクターが存在しない場合は処理を飛ばす。
  377.  
  378.     return unless @actor
  379.  
  380.     #タイプ1の場合は無条件で追加する。
  381.     #タイプ2の場合は戦闘中装備変更特徴がある場合に追加する。
  382.  
  383.     add_command(BATTLE_EQUIP_CHANGE::WORD1,:equip_change) if BATTLE_EQUIP_CHANGE::TYPE == 1 or @actor.equip_command_usable
  384.  
  385.   end
  386. end
  387. class Window_EquipCommand < Window_HorzCommand
  388.   def battle_command_seal
  389.  
  390.     #アクター切り替えの機能を削除する。
  391.  
  392.     @handler.delete(:pageup)
  393.     @handler.delete(:pagedown)
  394.  
  395.   end
  396. end
  397. end


另外问下如何加内容折叠

Lv1.梦旅人

梦石
0
星屑
49
在线时间
46 小时
注册时间
2013-11-16
帖子
274
2
发表于 2014-8-27 19:18:27 | 只看该作者
战斗的话,只有消耗品可以,HP和MP的药水可以消耗,装备的话很难,除非你在战斗前更换,否则很麻烦。

点评

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
46 小时
注册时间
2013-11-16
帖子
274
3
发表于 2014-8-27 20:14:30 | 只看该作者
哦,好吧自行解决。
周杰伦
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
756
在线时间
532 小时
注册时间
2011-10-3
帖子
2237
4
发表于 2014-8-27 22:59:20 | 只看该作者
把更换装备的东西做成物品。或者强制添加冷却(伪眩晕)状态

点评

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-25 15:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表