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

Project1

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

[已经解决] 角色仓库(战斗换人)脚本 和 自动战斗脚本产生了冲突...

[复制链接]

Lv1.梦旅人

梦石
0
星屑
94
在线时间
157 小时
注册时间
2006-7-2
帖子
299
跳转到指定楼层
1
发表于 2015-9-10 13:42:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x

请教各位大虾,现在我用了以上两个脚本但是发生了冲突。
这两个脚本中都有增加战斗时候的选项框,结果导致无法兼容。

角色仓库脚本 增加了  “换人”的选项
自动战斗脚本  增加了  “自动” 和 “逃跑”选项

请教这两个脚本要怎么改才能够兼容呢。。。

角色仓库脚本

RUBY 代码复制
  1. #=============================================================================
  2. # 队伍系统 Ver 2.0
  3. #-----------------------------------------------------------------------------
  4. # 类似于 Aveyond 的队伍系统(根据阿月系列的游戏产生的灵感)
  5. # By :RyanBern
  6. #-----------------------------------------------------------------------------
  7. # 功能特色:
  8. #-----------------------------------------------------------------------------
  9. # 1.更改队伍中成员的最大数量,有四名出战队员,但是替补队员可以有很多个。
  10. # 2.对 Game_Party 的队员设置和 Scene_Battle 的部分方法有较大改动,可能造成脚本
  11. #   冲突。
  12. # 3.为队伍增加“领队”角色,作为“领队”的成员在地图上显示他的图形。
  13. # 4.在战斗命令中增添“换人”命令,可以将替补队员换上场。
  14. # 5.如果队伍的出战队员全部阵亡,则直接判定玩家全灭,不管有无替补队员。但是如果
  15. #   在地图上,则是所有队员阵亡才会被判定全灭。
  16. # 6.事件编译器中,对全体同伴的处理均包括对替补队员的处理。
  17. #-----------------------------------------------------------------------------
  18. # 使用方法:
  19. #-----------------------------------------------------------------------------
  20. # 1.粘贴到默认脚本后面,Main组前面即可。
  21. # 2.在菜单中,左侧窗口被激活时,按 A 键可以改变领队(leader)的设置,按 S 键
  22. #   可以改变出战的队员。 (要按空格来切换)
  23. # 3.为队员设置“无法出战”的状态,即该队员不能被设置为出战队员。具体方法是
  24. #   使用事件脚本,例如,让 1 号角色无法出战:
  25. #   $game_actors[1].battle_disabled = true
  26. #   让 1 号角色恢复可以出战的状态:
  27. #   $game_actors[1].battle_disabled = false
  28. #   ###
  29. # 4.可在下方设置替补队员在战斗胜利之后是否获得 EXP 奖励。
  30. #=============================================================================
  31.  
  32.  
  33. module RB
  34. end
  35.  
  36. module RB::Party
  37.   # “换人”命令的术语
  38.   Words_Swap = "换人"
  39.  
  40.   # 替补队员是否能在战斗胜利后获得 EXP 奖励,设置为 true 时可以获得奖励,设置
  41.   # 为 false 时则不能。
  42.   Get_Exp_Reserve = true
  43. end
  44.  
  45. class Game_Temp
  46.   attr_accessor :gain_exp_flag
  47. end
  48.  
  49. class Game_Party
  50.   attr_reader :leader
  51.   attr_reader :battle_actors
  52.   alias old_ini initialize
  53.   def initialize
  54.     @leader = nil
  55.     @battle_actors = []
  56.     old_ini
  57.   end
  58.   def leader=(leader)
  59.     @leader = leader
  60.     $game_player.refresh
  61.     $game_map.need_refresh = true
  62.   end
  63.   def set_leader(actor_id)
  64.     self.leader = $game_actors[actor_id]
  65.   end
  66.   def actors
  67.     all_flag = !$game_temp.in_battle || (RB::Party::Get_Exp_Reserve && $game_temp.gain_exp_flag)
  68.     return all_flag ? @actors : @battle_actors
  69.   end
  70.   def all_actors
  71.     return @actors
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 加入同伴
  75.   #     actor_id : 角色 ID
  76.   #--------------------------------------------------------------------------
  77.   def add_actor(actor_id)
  78.     # 获取角色
  79.     actor = $game_actors[actor_id]
  80.     # 同伴人数未满 4 人、本角色不在队伍中的情况下
  81.     unless @actors.include?(actor)
  82.       # 添加角色
  83.       @actors.push(actor)
  84.       @battle_actors.push(actor) if @battle_actors.size < 4
  85.       self.leader = actor if self.leader.nil?
  86.       # 还原主角
  87.       $game_player.refresh
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 角色离开
  92.   #     actor_id : 角色 ID
  93.   #--------------------------------------------------------------------------
  94.   def remove_actor(actor_id)
  95.     actor = $game_actors[actor_id]
  96.     # 删除角色
  97.     @actors.delete(actor)
  98.     @battle_actors.delete(actor)
  99.     self.leader = self.actors[0] if self.leader == actor
  100.     # 还原主角
  101.     $game_player.refresh
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 设置初期同伴
  105.   #--------------------------------------------------------------------------
  106.   def setup_starting_members
  107.     @actors = []
  108.     @battle_actors = []
  109.     for i in $data_system.party_members
  110.       @actors.push($game_actors[i])
  111.       @battle_actors.push($game_actors[i]) if @battle_actors.size < 4
  112.     end
  113.     self.leader = @actors[0]
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 设置战斗测试用同伴
  117.   #--------------------------------------------------------------------------
  118.   def setup_battle_test_members
  119.     @actors = []
  120.     @battle_actors = []
  121.     for battler in $data_system.test_battlers
  122.       actor = $game_actors[battler.actor_id]
  123.       actor.level = battler.level
  124.       gain_weapon(battler.weapon_id, 1)
  125.       gain_armor(battler.armor1_id, 1)
  126.       gain_armor(battler.armor2_id, 1)
  127.       gain_armor(battler.armor3_id, 1)
  128.       gain_armor(battler.armor4_id, 1)
  129.       actor.equip(0, battler.weapon_id)
  130.       actor.equip(1, battler.armor1_id)
  131.       actor.equip(2, battler.armor2_id)
  132.       actor.equip(3, battler.armor3_id)
  133.       actor.equip(4, battler.armor4_id)
  134.       actor.recover_all
  135.       @actors.push(actor)
  136.       @battle_actors.push(actor)
  137.     end
  138.     @items = {}
  139.     for i in 1...$data_items.size
  140.       if $data_items[i].name != ""
  141.         occasion = $data_items[i].occasion
  142.         if occasion == 0 or occasion == 1
  143.           @items[i] = 99
  144.         end
  145.       end
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 同伴成员的还原
  150.   #--------------------------------------------------------------------------
  151.   def refresh
  152.     # 游戏数据载入后角色对像直接从 $game_actors
  153.     # 分离。
  154.     # 回避由于载入造成的角色再设置的问题。
  155.     new_actors = []
  156.     new_battle_actors = []
  157.     @actors.each do |actor|
  158.       if $data_actors[actor.id] != nil
  159.         new_actors.push($game_actors[actor.id])
  160.       end
  161.     end
  162.     @battle_actors.each do |actor|
  163.       if $data_actors[actor.id] != nil
  164.         new_battle_actors.push($game_actors[actor.id])
  165.       end
  166.     end
  167.     @actors = new_actors
  168.     @battle_actors = new_battle_actors
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● 全灭判定
  172.   #--------------------------------------------------------------------------
  173.   def all_dead?
  174.     # 同伴人数为 0 的情况下
  175.     if self.actors.size == 0
  176.       return false
  177.     end
  178.     # 同伴中无人 HP 在 0 以上
  179.     for actor in self.actors
  180.       if actor.hp > 0
  181.         return false
  182.       end
  183.     end
  184.     # 全灭
  185.     return true
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 对像角色的随机确定
  189.   #     hp0 : 限制为 HP 0 的角色
  190.   #--------------------------------------------------------------------------
  191.   def random_target_actor(hp0 = false)
  192.     # 初始化轮流
  193.     roulette = []
  194.     # 循环
  195.     for actor in @battle_actors
  196.       # 符合条件的场合
  197.       if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
  198.         # 获取角色职业的位置 [位置]
  199.         position = $data_classes[actor.class_id].position
  200.         # 前卫的话 n = 4、中卫的话 n = 3、后卫的话 n = 2
  201.         n = 4 - position
  202.         # 添加角色的轮流 n 回
  203.         n.times do
  204.           roulette.push(actor)
  205.         end
  206.       end
  207.     end
  208.     # 轮流大小为 0 的情况
  209.     if roulette.size == 0
  210.       return nil
  211.     end
  212.     # 转轮盘赌,决定角色
  213.     return roulette[rand(roulette.size)]
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● 对像角色的顺序确定
  217.   #     actor_index : 角色索引
  218.   #--------------------------------------------------------------------------
  219.   def smooth_target_actor(actor_index)
  220.     # 取得对像
  221.     actor = @battle_actors[actor_index]
  222.     # 对像存在的情况下
  223.     if actor != nil and actor.exist?
  224.       return actor
  225.     end
  226.     # 循环
  227.     for actor in @actors
  228.       # 对像存在的情况下
  229.       if actor.exist?
  230.         return actor
  231.       end
  232.     end
  233.   end
  234.  
  235. end
  236.  
  237. class Game_Actor
  238.   attr_reader :battle_disabled
  239.   def leader?
  240.     return self == $game_party.leader
  241.   end
  242.   def active
  243.     return $game_party.battle_actors.include?(self)
  244.   end
  245.   def battle_disabled=(bool)
  246.     @battle_disabled = bool
  247.     $game_party.battle_actors.delete(self) if bool
  248.   end
  249. end
  250.  
  251. class Game_Player
  252.   #--------------------------------------------------------------------------
  253.   # ● 刷新
  254.   #--------------------------------------------------------------------------
  255.   def refresh
  256.     # 同伴人数为 0 的情况下
  257.     if $game_party.actors.size == 0 or $game_party.leader == nil
  258.       # 清除角色的文件名及对像
  259.       @character_name = ""
  260.       @character_hue = 0
  261.       # 分支结束
  262.       return
  263.     end
  264.     # 获取带头的角色
  265.     if $game_party.leader != nil
  266.       actor = $game_party.leader
  267.       # 设置角色的文件名及对像
  268.       @character_name = actor.character_name
  269.       @character_hue = actor.character_hue
  270.       # 初始化不透明度和合成方式子
  271.       @opacity = 255
  272.       @blend_type = 0
  273.     end
  274.   end
  275. end
  276.  
  277. class Game_BattleAction
  278.   attr_accessor :reserved_actor_id
  279.   unless method_defined? :rb_clear_20150422
  280.     alias rb_clear_20150422 clear
  281.     def clear
  282.       rb_clear_20150422
  283.       @reserved_actor_id = 0
  284.     end
  285.   end
  286. end
  287.  
  288. class Window_Base < Window
  289.   def draw_actor_battle_position(actor, x, y)
  290.     if actor.leader?
  291.       if actor.active
  292.         text = "领队|出战"
  293.       else
  294.         text = "领队"
  295.       end
  296.       color = knockout_color
  297.     else
  298.       color = disabled_color
  299.       if actor.battle_disabled
  300.         text = "无法出战"
  301.       elsif actor.active
  302.         text = "出战"
  303.         color = normal_color
  304.       else
  305.         text = "待机"
  306.       end
  307.     end
  308.     self.contents.font.color = color
  309.     self.contents.draw_text(x, y, 120, 32, text)
  310.   end
  311. end
  312.  
  313. #==============================================================================
  314. # ■ Window_Selectable
  315. #------------------------------------------------------------------------------
  316. #  拥有光标的移动以及滚动功能的窗口类。
  317. #==============================================================================
  318.  
  319. class Window_Selectable < Window_Base
  320.   #--------------------------------------------------------------------------
  321.   # ● 定义实例变量
  322.   #--------------------------------------------------------------------------
  323.   attr_accessor :row_height               # 行高
  324.   #--------------------------------------------------------------------------
  325.   # ● 初始画对像
  326.   #     x      : 窗口的 X 坐标
  327.   #     y      : 窗口的 Y 坐标
  328.   #     width  : 窗口的宽
  329.   #     height : 窗口的高
  330.   #     row_height : 行高 默认是32
  331.   #--------------------------------------------------------------------------
  332.   alias rb_initialize_20150421 initialize
  333.   def initialize(x, y, width, height, row_height = 32)
  334.     @row_height = row_height
  335.     rb_initialize_20150421(x, y, width, height)
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 获取开头行
  339.   #--------------------------------------------------------------------------
  340.   def top_row
  341.     # 将窗口内容的传送源 Y 坐标、1 行的高 @row_height 等分
  342.     return self.oy / @row_height
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ● 设置开头行
  346.   #     row : 显示开头的行
  347.   #--------------------------------------------------------------------------
  348.   def top_row=(row)
  349.     # row 未满 0 的场合更正为 0
  350.     if row < 0
  351.       row = 0
  352.     end
  353.     # row 超过 row_max - 1 的情况下更正为 row_max - 1
  354.     if row > row_max - 1
  355.       row = row_max - 1
  356.     end
  357.     # row 1 行高的 @row_height 倍、窗口内容的传送源 Y 坐标
  358.     self.oy = row * @row_height
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● 获取 1 页可以显示的行数
  362.   #--------------------------------------------------------------------------
  363.   def page_row_max
  364.     # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 @row_height
  365.     return (self.height - 32) / @row_height
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ● 更新光标举行
  369.   #--------------------------------------------------------------------------
  370.   def update_cursor_rect
  371.     # 光标位置不满 0 的情况下
  372.     if @index < 0
  373.       self.cursor_rect.empty
  374.       return
  375.     end
  376.     # 获取当前的行
  377.     row = @index / @column_max
  378.     # 当前行被显示开头行前面的情况下
  379.     if row < self.top_row
  380.       # 从当前行向开头行滚动
  381.       self.top_row = row
  382.     end
  383.     # 当前行被显示末尾行之后的情况下
  384.     if row > self.top_row + (self.page_row_max - 1)
  385.       # 从当前行向末尾滚动
  386.       self.top_row = row - (self.page_row_max - 1)
  387.     end
  388.     # 计算光标的宽
  389.     cursor_width = self.width / @column_max - 32
  390.     # 计算光标坐标
  391.     x = @index % @column_max * (cursor_width + 32)
  392.     y = @index / @column_max * @row_height - self.oy
  393.     # 更新国标矩形
  394.     self.cursor_rect.set(x, y, cursor_width, @row_height)
  395.   end
  396. end
  397.  
  398. class Window_MenuStatus
  399.   def initialize
  400.     super(0, 0, 480, 480, 112)
  401.     refresh
  402.     self.active = false
  403.     self.index = -1
  404.   end
  405.   def refresh
  406.     if self.contents != nil
  407.       self.contents.dispose
  408.       self.contents = nil
  409.     end
  410.     @item_max = $game_party.actors.size
  411.     self.contents = Bitmap.new(width - 32, @item_max == 0 ? 32 : @item_max * 112)
  412.     for i in 0...$game_party.actors.size
  413.       x = 64
  414.       y = i * 112
  415.       actor = $game_party.actors[i]
  416.       draw_actor_graphic(actor, x - 40, y + 80)
  417.       draw_actor_name(actor, x, y)
  418.       draw_actor_class(actor, x + 144, y)
  419.       draw_actor_level(actor, x, y + 32)
  420.       draw_actor_state(actor, x + 90, y + 32)
  421.       draw_actor_exp(actor, x, y + 64)
  422.       draw_actor_hp(actor, x + 236, y + 32)
  423.       draw_actor_sp(actor, x + 236, y + 64)
  424.       draw_actor_battle_position(actor, x + 236, y)
  425.     end
  426.   end
  427.   def update_cursor_rect
  428.     super
  429.   end
  430. end
  431.  
  432. class Window_Target
  433.   def initialize
  434.     super(0, 0, 336, 480, 112)
  435.     self.z += 10
  436.     @item_max = $game_party.actors.size
  437.     self.contents = Bitmap.new(width - 32, @item_max == 0 ? 32 : @item_max * 112)
  438.     refresh
  439.   end
  440.   def update_cursor_rect
  441.     super
  442.   end
  443. end
  444.  
  445. class Window_ReservedActors < Window_Selectable
  446.   def initialize
  447.     super(0, 64, 640, 256, 112)
  448.     self.opacity = 160
  449.     self.index = 0
  450.     self.active = true
  451.     @column_max = 2
  452.     refresh
  453.   end
  454.   def actor
  455.     return @data[self.index]
  456.   end
  457.   def refresh
  458.     if self.contents != nil
  459.       self.contents.dispose
  460.       self.contents = nil
  461.     end
  462.     @data = []
  463.     $game_party.all_actors.each do |actor|
  464.       @data << actor unless actor.active || actor.battle_disabled
  465.     end
  466.     @item_max = @data.size
  467.     if @item_max > 0
  468.       self.contents = Bitmap.new (width - 32, (@item_max + 1) / 2 * 128)
  469.       @data.each_with_index do |actor, index|
  470.         x = 4 + index % 2 * (288 + 32)
  471.         y = index / 2 * 112
  472.         draw_actor_graphic(actor, x + 16, y + 80)
  473.         draw_actor_hp(actor, x + 48, y + 20)
  474.         draw_actor_sp(actor, x + 48, y + 52)
  475.       end
  476.     end
  477.   end
  478.   def update_help
  479.     # 帮助窗口显示角色的状态
  480.     self.actor == nil ? @help_window.set_text("") : @help_window.set_actor(self.actor)
  481.   end
  482. end
  483.  
  484. class Scene_Menu
  485.   unless method_defined? :rb_update_command_20150421
  486.     alias rb_update_command_20150421 update_command
  487.     def update_command
  488.       if Input.trigger?(Input::X)
  489.         $game_system.se_play($data_system.decision_se)
  490.         @command_window.active = false
  491.         @status_window.active = true
  492.         @status_window.index = 0
  493.         @leader_adjust = true
  494.         return
  495.       end
  496.       if Input.trigger?(Input::Y)
  497.         $game_system.se_play($data_system.decision_se)
  498.         @command_window.active = false
  499.         @status_window.active = true
  500.         @status_window.index = 0
  501.         @battler_adjust = true
  502.         return
  503.       end
  504.       rb_update_command_20150421
  505.     end
  506.   end
  507.   unless method_defined? :rb_update_status_20150421
  508.     alias rb_update_status_20150421 update_status
  509.     def update_status
  510.       if @leader_adjust
  511.         update_leader
  512.         return
  513.       end
  514.       if @battler_adjust
  515.         update_battler
  516.         return
  517.       end
  518.       rb_update_status_20150421
  519.     end
  520.   end
  521.   def update_leader
  522.     if Input.trigger?(Input::B)
  523.       $game_system.se_play($data_system.cancel_se)
  524.       @leader_adjust = false
  525.       @status_window.active = false
  526.       @status_window.index = -1
  527.       @command_window.active = true
  528.       return
  529.     end
  530.     if Input.trigger?(Input::C)
  531.       if $game_party.actors.size == 0
  532.         $game_system.se_play($data_system.buzzer_se)
  533.       else
  534.         $game_system.se_play($data_system.decision_se)
  535.         $game_party.leader = $game_party.actors[@status_window.index]
  536.         @status_window.refresh
  537.       end
  538.     end
  539.   end
  540.   def update_battler
  541.     if Input.trigger?(Input::B)
  542.       $game_system.se_play($data_system.cancel_se)
  543.       @battler_adjust = false
  544.       @status_window.active = false
  545.       @status_window.index = -1
  546.       @command_window.active = true
  547.       return
  548.     end
  549.     if Input.trigger?(Input::C)
  550.       actor = $game_party.actors[@status_window.index]
  551.       if actor == nil || actor.battle_disabled ||
  552.         (actor.active && $game_party.battle_actors.size == 1) ||
  553.         (!actor.active && $game_party.battle_actors.size == 4)
  554.         $game_system.se_play($data_system.buzzer_se)
  555.       else
  556.         $game_system.se_play($data_system.decision_se)
  557.         actor.active ? $game_party.battle_actors.delete(actor) : $game_party.battle_actors.push(actor)
  558.         @status_window.refresh
  559.       end
  560.     end
  561.   end
  562. end
  563.  
  564. class Scene_Battle
  565.   def generate_modified_command_window
  566.     if @actor_command_window != nil
  567.       @actor_command_window.dispose
  568.       @actor_command_window = nil
  569.     end
  570.     s1 = $data_system.words.attack
  571.     s2 = $data_system.words.skill
  572.     s3 = $data_system.words.guard
  573.     s4 = $data_system.words.item
  574.     s5 = RB::Party::Words_Swap
  575.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
  576.     @actor_command_window.y = 128
  577.     @actor_command_window.back_opacity = 160
  578.     @actor_command_window.active = false
  579.     @actor_command_window.visible = false
  580.     @modified_generated = true
  581.   end
  582.   unless method_defined? :rb_phase3_setup_command_window_20150422
  583.     alias rb_phase3_setup_command_window_20150422 phase3_setup_command_window
  584.     def phase3_setup_command_window
  585.       generate_modified_command_window unless @modified_generated
  586.       rb_phase3_setup_command_window_20150422
  587.     end
  588.   end
  589.   def update_phase3_basic_command
  590.     # 按下 B 键的情况下
  591.     if Input.trigger?(Input::B)
  592.       # 演奏取消 SE
  593.       $game_system.se_play($data_system.cancel_se)
  594.       # 转向前一个角色的指令输入
  595.       phase3_prior_actor
  596.       return
  597.     end
  598.     # 按下 C 键的情况下
  599.     if Input.trigger?(Input::C)
  600.       # 角色指令窗口光标位置分之
  601.       case @actor_command_window.index
  602.       when 0  # 攻击
  603.         # 演奏确定 SE
  604.         $game_system.se_play($data_system.decision_se)
  605.         # 设置行动
  606.         @active_battler.current_action.kind = 0
  607.         @active_battler.current_action.basic = 0
  608.         # 开始选择敌人
  609.         start_enemy_select
  610.       when 1  # 特技
  611.         # 演奏确定 SE
  612.         $game_system.se_play($data_system.decision_se)
  613.         # 设置行动
  614.         @active_battler.current_action.kind = 1
  615.         # 开始选择特技
  616.         start_skill_select
  617.       when 2  # 防御
  618.         # 演奏确定 SE
  619.         $game_system.se_play($data_system.decision_se)
  620.         # 设置行动
  621.         @active_battler.current_action.kind = 0
  622.         @active_battler.current_action.basic = 1
  623.         # 转向下一位角色的指令输入
  624.         phase3_next_actor
  625.       when 3  # 物品
  626.         # 演奏确定 SE
  627.         $game_system.se_play($data_system.decision_se)
  628.         # 设置行动
  629.         @active_battler.current_action.kind = 2
  630.         # 开始选择物品
  631.         start_item_select
  632.       when 4  # 换人
  633.         $game_system.se_play($data_system.decision_se)
  634.         @active_battler.current_action.kind = 3
  635.         start_reserved_actor_select
  636.       end
  637.       return
  638.     end
  639.   end
  640.   unless method_defined? :rb_update_phase3_20150422
  641.     alias rb_update_phase3_20150422 update_phase3
  642.     def update_phase3
  643.       if @actor_window != nil
  644.         update_phase3_reserved_actor_select
  645.         return
  646.       end
  647.       rb_update_phase3_20150422
  648.     end
  649.   end
  650.   def start_reserved_actor_select
  651.     # 生成特技窗口
  652.     @actor_window = Window_ReservedActors.new
  653.     # 关联帮助窗口
  654.     @actor_window.help_window = @help_window
  655.     @help_window.visible = true
  656.     # 无效化角色指令窗口
  657.     @actor_command_window.active = false
  658.     @actor_command_window.visible = false
  659.   end
  660.   def end_reserved_actor_select
  661.     # 释放特技窗口
  662.     @actor_window.dispose
  663.     @actor_window = nil
  664.     # 隐藏帮助窗口
  665.     @help_window.visible = false
  666.     # 有效化角色指令窗口
  667.     @actor_command_window.active = true
  668.     @actor_command_window.visible = true
  669.   end
  670.   def update_phase3_reserved_actor_select
  671.     @actor_window.visible = true
  672.     # 刷新特技窗口
  673.     @actor_window.update
  674.     # 按下 B 键的情况下
  675.     if Input.trigger?(Input::B)
  676.       # 演奏取消 SE
  677.       $game_system.se_play($data_system.cancel_se)
  678.       # 结束特技选择
  679.       end_reserved_actor_select
  680.       return
  681.     end
  682.     # 按下 C 键的情况下
  683.     if Input.trigger?(Input::C)
  684.       # 获取特技选择窗口现在选择的特技的数据
  685.       @reserved_actor = @actor_window.actor
  686.       # 无法使用的情况下
  687.       if @reserved_actor == nil
  688.         # 演奏冻结 SE
  689.         $game_system.se_play($data_system.buzzer_se)
  690.         return
  691.       end
  692.       # 演奏确定 SE
  693.       $game_system.se_play($data_system.decision_se)
  694.       # 设置行动
  695.       @active_battler.current_action.reserved_actor_id = @reserved_actor.id
  696.       # 设置特技窗口为不可见状态
  697.       @actor_window.visible = false
  698.       end_reserved_actor_select
  699.       phase3_next_actor
  700.       return
  701.     end
  702.   end
  703.   def update_phase4_step2
  704.     # 如果不是强制行动
  705.     unless @active_battler.current_action.forcing
  706.       # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
  707.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  708.         # 设置行动为攻击
  709.         @active_battler.current_action.kind = 0
  710.         @active_battler.current_action.basic = 0
  711.       end
  712.       # 限制为 [不能行动] 的情况下
  713.       if @active_battler.restriction == 4
  714.         # 清除行动强制对像的战斗者
  715.         $game_temp.forcing_battler = nil
  716.         # 移至步骤 1
  717.         @phase4_step = 1
  718.         return
  719.       end
  720.     end
  721.     # 清除对像战斗者
  722.     @target_battlers = []
  723.     # 行动种类分支
  724.     case @active_battler.current_action.kind
  725.     when 0  # 基本
  726.       make_basic_action_result
  727.     when 1  # 特技
  728.       make_skill_action_result
  729.     when 2  # 物品
  730.       make_item_action_result
  731.     when 3  # 换人
  732.       make_swap_action_result
  733.     end
  734.     # 移至步骤 3
  735.     if @phase4_step == 2
  736.       @phase4_step = 3
  737.     end
  738.   end
  739.   def make_swap_action_result
  740.     # 获取角色
  741.     @reserved_actor = $game_actors[@active_battler.current_action.reserved_actor_id]
  742.     # 无法替换的情况下
  743.     if @reserved_actor == nil || @reserved_actor.active
  744.       # 移至步骤 1
  745.       @phase4_step = 1
  746.       return
  747.     end
  748.     # 在帮助窗口显示文字
  749.     text = "与#{@reserved_actor.name}交换"
  750.     @help_window.set_text(text, 1)
  751.     # 设置动画 ID
  752.     @animation1_id = 0
  753.     index = $game_party.actors.index(@active_battler)
  754.     $game_party.actors[index] = @reserved_actor
  755.   end
  756.   unless method_defined? :rb_start_phase5_20150422
  757.     alias rb_start_phase5_20150422 start_phase5
  758.     def start_phase5
  759.       $game_temp.gain_exp_flag = true
  760.       rb_start_phase5_20150422
  761.       $game_temp.gain_exp_flag = false
  762.     end
  763.   end
  764. end



自动战斗脚本

RUBY 代码复制
  1. #==============================================================================
  2. # ★【  自动战斗  】★
  3. #==============================================================================
  4. #  by -> 芯☆淡如水
  5. #==============================================================================
  6. # ● 使用方法:复制该脚本,插入到 main 前。
  7. #==============================================================================
  8. # ● 说明:
  9. #         自动战斗,顾名思义,就是角色选择“自动战斗”后,无需玩家给角色下达
  10. #      指令,角色仍可自己行动。
  11. #        
  12. #         该自动战斗有 2 个模式:普通自动战斗 和 AI自动战斗。2 种模式的切换
  13. #       使用下面设置项的开关。
  14. #
  15. #         角色在 普通自动战斗 时,只是普通攻击敌人。选择的敌人目标偏向血较少
  16. #      者。
  17. #
  18. #         角色在 AI自动战斗 时,判断角色行动类型的流程为:复活同伴 --》 恢复
  19. #      同伴(HP和SP)--》攻击。
  20. #         如果队伍中有同伴死亡,有很大几率复活同伴(具体多大几率就不透露),
  21. #      死亡的同伴个数越多,几率越大。复活同伴的前提条件是有复活类药品或特技。
  22. #         跳过复活同伴是恢复同伴,恢复同伴的几率以整体的剩余HP/SP的百分比来
  23. #      算,百分比越小,几率越高。单体恢复同伴HP/SP的恢复对象,偏向HP/SP较少
  24. #      者。恢复同伴的前提条件是有恢复类药品或特技。
  25. #         最后是攻击,攻击判断之前有一定的几率对同伴使用 增益特技。攻击分为
  26. #      普通攻击和使用特技,几率以角色的不同而不同,如果是战士类型的角色,普通
  27. #      攻击的几率高于使用特技的几率;法师类型的角色则相反。使用特技时有一定的
  28. #      几率使用不良状态特技。所有使用特技都是以角色已习得的特技为基础。普通攻
  29. #      击和使用单体攻击特技的对象目标,也是偏向血较少者。
  30. #
  31. #
  32. #   ■ 恢复:     自动战斗者在恢复同伴时,首先确定恢复对象,根据对象需要恢复的
  33. #               HP/SP 的多少,来确定使用的物品或特技。需要恢复的对象越多,使用
  34. #               “己方全体”的物品或特技的几率越大,单个的恢复对象是不会使用
  35. #               “己方全体”的物品或特技。
  36. #              
  37. #                比如确定了某个恢复对象,该对象需要回复 HP 100 ,所能使用的物品
  38. #               或特技有 3 种:回复 HP 60 ;回复 HP 110 ;回复 HP 220 。那么自动
  39. #               战斗者会选择 “回复 HP 110” 的这个物品或特技来恢复该对象。
  40. #
  41. #
  42. #   ■ 特技攻击:  如果自动战斗者能够使用“敌全体”特技,并且敌人的数量是 2 个
  43. #               或以上时,自动战斗者有几率使用“敌全体”特技,敌人数量越多,几
  44. #               率越大。
  45. #
  46. #                  如果是单个攻击对象,首先确定对象,根据该对象剩余的 HP 来选择
  47. #               特技。在这之前会先判断普通攻击能否打倒该对象,如果能打倒该对象,
  48. #               就使用普通攻击,而不使用特技了。
  49. #
  50. #               比如:例1:攻击对象剩余HP:160 ,自动战斗者可使用的特技有:对该
  51. #                          对象伤害 HP 180 和 伤害 HP 260 两个特技,但自动战斗者
  52. #                          对该对象的普通攻击伤害为:HP 200 ,那么自动战斗者会
  53. #                          选择普通攻击而不使用特技。
  54. #
  55. #                     例2:攻击对象剩余HP:2000 ,自动战斗者可使用的特技有:对该
  56. #                          对象伤害 HP 200 ; 伤害 HP 600 ;伤害 HP 1000 三种,
  57. #                          那么自动战斗者会选择 伤害 HP 1000 的这个特技来攻击该
  58. #                          对象。
  59. #==============================================================================
  60. # ● 设置:
  61. #------------------------------------------------------------------------------
  62. # 打开或关闭 自动战斗功能 的开关 ID。
  63. AUTO_SWEITCHE = 593
  64. #------------------------------------------------------------------------------
  65. # 是否 AI自动战斗 的开关 ID。该开关打开为 AI自动;关闭为 普通自动。
  66. AI_AUTO_SWEITCHE = 594
  67. #------------------------------------------------------------------------------
  68. # 角色自动战斗时,自动提示的等待时间(帧)。
  69. WAIT_TIME = 50
  70. #------------------------------------------------------------------------------
  71. # 增益状态 特技 ID 。
  72. UP_PLUS_SKILLS = [53, 54]
  73. #------------------------------------------------------------------------------
  74. # 不良状态 特技 ID 。
  75. DOWN_PLUS_SKILLS = [41, 46]
  76. #=============================================================================
  77. ##############################################################################
  78. #=============================================================================
  79. class Game_Actor < Game_Battler
  80.   #--------------------------------------------------------------------------
  81.   attr_accessor :auto_battle
  82.   attr_accessor :auto_battle_targets
  83.   #--------------------------------------------------------------------------
  84.   alias add_setup_xdrs setup
  85.   def setup(actor_id)
  86.     @auto_battle = false
  87.     @auto_battle_targets = []
  88.     add_setup_xdrs(actor_id)
  89.   end
  90. end
  91. #==============================================================================
  92. class Scene_Battle
  93.   #--------------------------------------------------------------------------
  94.   def main
  95.     # 初始化战斗用的各种暂时数据
  96.     $game_temp.in_battle = true
  97.     $game_temp.battle_turn = 0
  98.     $game_temp.battle_event_flags.clear
  99.     $game_temp.battle_abort = false
  100.     $game_temp.battle_main_phase = false
  101.     $game_temp.battleback_name = $game_map.battleback_name
  102.     $game_temp.forcing_battler = nil
  103.     # 初始化战斗用事件解释器
  104.     $game_system.battle_interpreter.setup(nil, 0)
  105.     # 准备队伍
  106.     @troop_id = $game_temp.battle_troop_id
  107.     $game_troop.setup(@troop_id)
  108.     # 生成角色命令窗口
  109.     s1 = $data_system.words.attack
  110.     s2 = $data_system.words.skill
  111.     s3 = $data_system.words.guard
  112.     s4 = $data_system.words.item
  113.     s5 = "自动"
  114.     s6 = "逃跑"
  115.     if $game_switches[AUTO_SWEITCHE]
  116.       @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  117.       @actor_command_window.y = 96
  118.     else
  119.       @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s6])
  120.       @actor_command_window.y = 128
  121.     end
  122.     @actor_command_window.back_opacity = 160
  123.     @actor_command_window.active = false
  124.     @actor_command_window.visible = false
  125.     # 生成其它窗口
  126.     #
  127.     @auto_top = Window_Base.new(0, 256, 160, 64)
  128.     @auto_top.contents = Bitmap.new(@auto_top.width - 32, @auto_top.height - 32)
  129.     @auto_top.contents.draw_text(0, 0, 138, 32,"确定键:取消自动")
  130.     @auto_top.back_opacity = 160
  131.     @auto_top.visible = false
  132.     #
  133.     @party_command_window = Window_PartyCommand.new
  134.     @help_window = Window_Help.new
  135.     @help_window.back_opacity = 160
  136.     @help_window.visible = false
  137.     @status_window = Window_BattleStatus.new
  138.     @message_window = Window_Message.new
  139.     # 生成活动块
  140.     @spriteset = Spriteset_Battle.new
  141.     # 初始化等待计数
  142.     @wait_count = 0
  143.     @auto_wait_count = 0
  144.     # 执行过渡
  145.     if $data_system.battle_transition == ""
  146.       Graphics.transition(20)
  147.     else
  148.       Graphics.transition(40, "Graphics/Transitions/" +
  149.         $data_system.battle_transition)
  150.     end
  151.     # 开始自由战斗回合
  152.     start_phase1
  153.     # 主循环
  154.     loop do
  155.       # 刷新游戏画面
  156.       Graphics.update
  157.       # 刷新输入信息
  158.       Input.update
  159.       # 刷新画面
  160.       update
  161.       # 如果画面切换的话就中断循环
  162.       if $scene != self
  163.         break
  164.       end
  165.     end
  166.     # 刷新地图
  167.     $game_map.refresh
  168.     # 准备过渡
  169.     Graphics.freeze
  170.     # 释放窗口
  171.     @auto_top.dispose
  172.     @actor_command_window.dispose
  173.     @party_command_window.dispose
  174.     @help_window.dispose
  175.     @status_window.dispose
  176.     @message_window.dispose
  177.     if @skill_window != nil
  178.       @skill_window.dispose
  179.     end
  180.     if @item_window != nil
  181.       @item_window.dispose
  182.     end
  183.     if @result_window != nil
  184.       @result_window.dispose
  185.     end
  186.     # 释放活动块
  187.     @spriteset.dispose
  188.     # 标题画面切换中的情况
  189.     if $scene.is_a?(Scene_Title)
  190.       # 淡入淡出画面
  191.       Graphics.transition
  192.       Graphics.freeze
  193.     end
  194.     # 战斗测试或者游戏结束以外的画面切换中的情况
  195.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  196.       $scene = nil
  197.     end
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   def start_phase2
  201.     # 转移到回合 2
  202.     @phase = 2
  203.     # 设置角色为非选择状态
  204.     @actor_index = -1
  205.     @active_battler = nil
  206.     unless $game_party.inputable?
  207.       # 开始主回合
  208.       start_phase4
  209.       return
  210.     end
  211.     start_phase3
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   def phase3_prior_actor
  215.     # 循环
  216.     begin
  217.       # 角色的明灭效果 OFF
  218.       if @active_battler != nil
  219.         @active_battler.blink = false
  220.       end
  221.       # 最初的角色的情况下
  222.       if @actor_index == 0
  223.         $game_system.se_play($data_system.buzzer_se)
  224.         return
  225.       end
  226.       # 返回角色索引
  227.       @actor_index -= 1
  228.       @active_battler = $game_party.actors[@actor_index]
  229.       @active_battler.blink = true
  230.     # 如果角色是在无法接受指令的状态就再试
  231.     end until @active_battler.inputable?
  232.     # 设置角色的命令窗口
  233.     phase3_setup_command_window
  234.   end
  235. #--------------------------------------------------------------------------
  236.   def update_phase3_basic_command
  237.     # 按下 B 键的情况下
  238.     if Input.trigger?(Input::B)
  239.       # 演奏取消 SE
  240.       $game_system.se_play($data_system.cancel_se)
  241.       # 转向前一个角色的指令输入
  242.       phase3_prior_actor
  243.       return
  244.     end
  245.     # 按下 C 键的情况下
  246.     if Input.trigger?(Input::C)
  247.       # 角色指令窗口光标位置分之
  248.       case @actor_command_window.index
  249.       when 0  # 攻击
  250.         # 演奏确定 SE
  251.         $game_system.se_play($data_system.decision_se)
  252.         # 设置行动
  253.         @active_battler.current_action.kind = 0
  254.         @active_battler.current_action.basic = 0
  255.         # 开始选择敌人
  256.         start_enemy_select
  257.       when 1  # 特技
  258.         # 演奏确定 SE
  259.         $game_system.se_play($data_system.decision_se)
  260.         # 设置行动
  261.         @active_battler.current_action.kind = 1
  262.         # 开始选择特技
  263.         start_skill_select
  264.       when 2  # 防御
  265.         # 演奏确定 SE
  266.         $game_system.se_play($data_system.decision_se)
  267.         # 设置行动
  268.         @active_battler.current_action.kind = 0
  269.         @active_battler.current_action.basic = 1
  270.         # 转向下一位角色的指令输入
  271.         phase3_next_actor
  272.       when 3  # 物品
  273.         # 演奏确定 SE
  274.         $game_system.se_play($data_system.decision_se)
  275.         # 设置行动
  276.         @active_battler.current_action.kind = 2
  277.         # 开始选择物品
  278.         start_item_select
  279.       when 4  # 自动
  280.         if $game_switches[AUTO_SWEITCHE]
  281.           # 演奏确定 SE
  282.           $game_system.se_play($data_system.decision_se)
  283.           @actor_command_window.active = false
  284.           @actor_command_window.visible = false
  285.           @active_battler.auto_battle = true
  286.           phase3_next_actor
  287.         else
  288.            # 演奏确定 SE
  289.           $game_system.se_play($data_system.decision_se)
  290.           # 逃走处理
  291.           update_phase2_escape
  292.         end        
  293.       when 5  # 逃跑
  294.         # 不能逃跑的情况下
  295.         if $game_temp.battle_can_escape == false
  296.           # 演奏冻结 SE
  297.           $game_system.se_play($data_system.buzzer_se)
  298.           return
  299.         end
  300.         # 演奏确定 SE
  301.         $game_system.se_play($data_system.decision_se)
  302.         # 逃走处理
  303.         update_phase2_escape
  304.       end
  305.       return
  306.     end
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   alias add_phase3_setup_command_window_xdrs phase3_setup_command_window
  310.   def phase3_setup_command_window
  311.     if @active_battler.auto_battle
  312.       @auto_wait_count = WAIT_TIME
  313.       @actor_command_window.active = false
  314.       @actor_command_window.visible = false
  315.       @auto_top.visible = true
  316.       @auto_top.x = @actor_index * 160
  317.       return
  318.     end
  319.     add_phase3_setup_command_window_xdrs
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   alias add_update_phase3_xdrs update_phase3
  323.   def update_phase3
  324.     if @auto_wait_count > 0
  325.       update_wait_at
  326.       return
  327.     end
  328.     add_update_phase3_xdrs
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   def update_wait_at
  332.     @auto_wait_count -= 1
  333.     if @auto_wait_count == 0
  334.       $game_system.se_play($data_system.decision_se)
  335.       @auto_top.visible = false
  336.       phase3_next_actor
  337.       return
  338.     end
  339.     if Input.trigger?(Input::B)
  340.       $game_system.se_play($data_system.cancel_se)
  341.       @auto_wait_count = 0
  342.       phase3_prior_actor
  343.       return
  344.     end
  345.     if Input.trigger?(Input::C)
  346.       $game_system.se_play($data_system.decision_se)
  347.       @auto_wait_count = 0
  348.       @active_battler.auto_battle = false
  349.       @auto_top.visible = false
  350.       @actor_index -= 1
  351.       phase3_next_actor
  352.     end
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   def update_phase4_step2
  356.     # 如果不是强制行动
  357.     unless @active_battler.current_action.forcing
  358.       # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
  359.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  360.         # 设置行动为攻击
  361.         @active_battler.current_action.kind = 0
  362.         @active_battler.current_action.basic = 0
  363.       end
  364.       # 限制为 [不能行动] 的情况下
  365.       if @active_battler.restriction == 4
  366.         # 清除行动强制对像的战斗者
  367.         $game_temp.forcing_battler = nil
  368.         # 移至步骤 1
  369.         @phase4_step = 1
  370.         return
  371.       end
  372.     end
  373.     # 清除对像战斗者
  374.     @target_battlers = []
  375.     if @active_battler.is_a?(Game_Actor)
  376.       if @active_battler.auto_battle and not @active_battler.dead?
  377.         set_auto_battle
  378.         case @active_battler.current_action.kind
  379.         when 0  
  380.           make_basic_auto
  381.         when 1  
  382.           make_skill_auto
  383.         when 2  
  384.           make_item_auto
  385.         end
  386.         if @phase4_step == 2
  387.           @phase4_step = 3
  388.         end
  389.         return
  390.       end
  391.     end
  392.     # 行动种类分支
  393.     case @active_battler.current_action.kind
  394.     when 0  # 基本
  395.       make_basic_action_result
  396.     when 1  # 特技
  397.       make_skill_action_result
  398.     when 2  # 物品
  399.       make_item_action_result
  400.     end
  401.     # 移至步骤 3
  402.     if @phase4_step == 2
  403.       @phase4_step = 3
  404.     end
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   def make_basic_auto
  408.     case @active_battler.current_action.basic
  409.     when 0
  410.       @animation1_id = @active_battler.animation1_id
  411.       @animation2_id = @active_battler.animation2_id
  412.       if @active_battler.restriction == 3
  413.         target = $game_party.random_target_actor
  414.         @active_battler.auto_battle_targets = []
  415.         @active_battler.auto_battle_targets.push(target)
  416.       elsif @active_battler.restriction == 2
  417.         target = $game_troop.random_target_enemy
  418.         @active_battler.auto_battle_targets = []
  419.         @active_battler.auto_battle_targets.push(target)
  420.       end
  421.       @target_battlers = @active_battler.auto_battle_targets
  422.       for target in @target_battlers
  423.         target.attack_effect(@active_battler)
  424.       end
  425.       return
  426.     when 1
  427.       @help_window.set_text($data_system.words.guard, 1)
  428.       return
  429.     end
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   def make_skill_auto
  433.     @skill = $data_skills[@active_battler.current_action.skill_id]
  434.     unless @active_battler.current_action.forcing
  435.       unless @active_battler.skill_can_use?(@skill.id)
  436.         $game_temp.forcing_battler = nil
  437.         @phase4_step = 1
  438.         return
  439.       end
  440.     end
  441.     @active_battler.sp -= @skill.sp_cost
  442.     @status_window.refresh
  443.     @help_window.set_text(@skill.name, 1)
  444.     @animation1_id = @skill.animation1_id
  445.     @animation2_id = @skill.animation2_id
  446.     @common_event_id = @skill.common_event_id
  447.     @target_battlers = @active_battler.auto_battle_targets
  448.     for target in @target_battlers
  449.       target.skill_effect(@active_battler, @skill)
  450.     end
  451.   end
  452.   #--------------------------------------------------------------------------
  453.   def make_item_auto
  454.     @item = $data_items[@active_battler.current_action.item_id]
  455.     unless $game_party.item_can_use?(@item.id)
  456.       @phase4_step = 1
  457.       return
  458.     end
  459.     if @item.consumable
  460.       $game_party.lose_item(@item.id, 1)
  461.     end
  462.     @help_window.set_text(@item.name, 1)
  463.     @animation1_id = @item.animation1_id
  464.     @animation2_id = @item.animation2_id
  465.     @common_event_id = @item.common_event_id
  466.     @target_battlers = @active_battler.auto_battle_targets
  467.     for target in @target_battlers
  468.       target.item_effect(@item)
  469.     end
  470.   end
  471.   #--------------------------------------------------------------------------
  472.   alias add_update_phase4_step6_xdrs update_phase4_step6
  473.   def update_phase4_step6
  474.     @active_battler.auto_battle_targets = [] if @active_battler.is_a?(Game_Actor)
  475.     add_update_phase4_step6_xdrs
  476.   end
  477.   #==============================================================================
  478.   #==============================================================================
  479.   def set_auto_battle
  480.     if $game_switches[AI_AUTO_SWEITCHE]
  481.       ai_auto_battle
  482.     else
  483.       base_atk
  484.     end
  485.   end
  486.   #----------------------------------------------------------------------------
  487.   def ai_auto_battle
  488.     set_probability
  489.     if rand (100) < @f_probability
  490.       f_actor
  491.       return
  492.     end
  493.     judge_r_actor
  494.   end
  495.   #----------------------------------------------------------------------------
  496.   def set_probability
  497.     @f_probability = 0
  498.     h = mh = s = ms = 0.0
  499.     if dead_actors != []
  500.       @f_probability = 70
  501.       @f_probability += (dead_actors.size - 1) * 20
  502.     end
  503.     for actor in all_actors
  504.       h += actor.hp
  505.       mh += actor.maxhp
  506.       s += actor.sp
  507.       ms += actor.maxsp
  508.     end
  509.     @rh_probability = 100 - (h / mh * 100).ceil
  510.     @rh_probability += pressing_actor_hp.size * 30
  511.     @rs_probability = 100 - (s / ms * 100).ceil
  512.     @rs_probability += pressing_actor_sp.size * 30
  513.   end
  514.   #----------------------------------------------------------------------------
  515.   def f_actor
  516.     @f_skills = @f_items = []
  517.     for id in @active_battler.skills
  518.       skill = $data_skills[id]
  519.       if @active_battler.skill_can_use?(id) and [5, 6].include?(skill.scope)
  520.         @f_skills.push(skill)
  521.       end
  522.     end
  523.     for id in 1...$data_items.size
  524.       item = $data_items[id]
  525.       if $game_party.item_number(id) > 0 and [5, 6].include?(item.scope)
  526.         @f_items.push(item)
  527.       end
  528.     end
  529.     if @f_skills != [] or @f_items != []
  530.       if rand (2) == 0
  531.         if @f_skills != []
  532.           f_actor_skill
  533.           return
  534.         end
  535.         f_actor_item
  536.         return
  537.       else
  538.         if @f_items != []
  539.           f_actor_item
  540.           return
  541.         end
  542.         f_actor_skill
  543.         return
  544.       end
  545.     end
  546.     judge_r_actor
  547.   end
  548.   #----------------------------------------------------------------------------
  549.   def f_actor_skill
  550.     @active_battler.current_action.kind = 1
  551.     skill = @f_skills[rand (@f_skills.size)]
  552.     @active_battler.current_action.skill_id = skill.id
  553.     set_autobattler_targets
  554.   end
  555.   #----------------------------------------------------------------------------
  556.   def f_actor_item
  557.     @active_battler.current_action.kind = 2
  558.     item = @f_items[rand (@f_items.size)]
  559.     @active_battler.current_action.item_id = item.id
  560.     set_autobattler_targets
  561.   end
  562.   #----------------------------------------------------------------------------
  563.   def judge_r_actor
  564.     if @rh_probability >= 30 and rand (120) < @rh_probability
  565.       r_actor_hp
  566.       return
  567.     end
  568.     if @rs_probability >= 50 and rand (150) < @rs_probability
  569.       r_actor_sp
  570.       return
  571.     end
  572.     judge_battle
  573.   end
  574.   #----------------------------------------------------------------------------
  575.   def r_actor_hp
  576.     if recover_hp_items != [] or recover_hp_skills != []   
  577.       if rand (2) == 0
  578.         if recover_hp_items != []
  579.           r_hp_item
  580.           return
  581.         end
  582.         r_hp_skill
  583.         return
  584.       else
  585.         if recover_hp_skills != []
  586.           r_hp_skill
  587.           return
  588.         end
  589.         r_hp_item
  590.         return
  591.       end
  592.     end
  593.     if @rs_probability >= 50 and rand (150) < @rs_probability
  594.       r_actor_sp
  595.       return
  596.     end
  597.     judge_battle
  598.   end
  599.   #----------------------------------------------------------------------------
  600.   def r_actor_sp
  601.     if recover_sp_items != []   
  602.       r_sp_item
  603.       return
  604.     end
  605.     judge_battle
  606.   end
  607.   #----------------------------------------------------------------------------
  608.   def r_hp_item
  609.     @active_battler.current_action.kind = 2
  610.     date = []
  611.     items = []
  612.     for actor in all_actors
  613.       if actor.hp * 100 < actor.maxhp * 90
  614.         date.push(actor)
  615.       end
  616.     end
  617.     for item in recover_hp_items
  618.       items.push(item) if item.scope == 4
  619.     end
  620.     if ! items.empty? and date.size >= 2
  621.       n = 10
  622.       n += (date.size - 1) * 20
  623.       if rand (100) < n
  624.         item = items[rand (items.size)]
  625.         @active_battler.current_action.item_id = item.id
  626.         @active_battler.auto_battle_targets = all_actors
  627.         return
  628.       end
  629.     end
  630.     now_items = recover_hp_items - items
  631.     if now_items.empty?
  632.       judge_battle
  633.       return
  634.     end
  635.     @active_battler.auto_battle_targets.push(targets_actor_hp)
  636.     target = @active_battler.auto_battle_targets[0]
  637.     set_use_item(now_items, target, 0)
  638.   end
  639.   #----------------------------------------------------------------------------
  640.   def r_sp_item
  641.     @active_battler.current_action.kind = 2
  642.     date = []
  643.     items = []
  644.     for actor in all_actors
  645.       if actor.sp * 100 < actor.maxsp * 60
  646.         date.push(actor)
  647.       end
  648.     end
  649.     for item in recover_sp_items
  650.       items.push(item) if item.scope == 4
  651.     end
  652.     if ! items.empty? and date.size >= 2
  653.       n = 10
  654.       n += (date.size - 1) * 20
  655.       if rand (100) < n
  656.         item = items[rand (items.size)]
  657.         @active_battler.current_action.item_id = item.id
  658.         @active_battler.auto_battle_targets = all_actors
  659.         return
  660.       end
  661.     end
  662.     now_items = recover_sp_items - items
  663.     if now_items.empty?
  664.       judge_battle
  665.       return
  666.     end
  667.     @active_battler.auto_battle_targets.push(targets_actor_sp)
  668.     target = @active_battler.auto_battle_targets[0]
  669.     set_use_item(now_items, target, 1)
  670.   end
  671.   #----------------------------------------------------------------------------
  672.   def r_hp_skill
  673.     date = []
  674.     skills = []
  675.     for actor in all_actors
  676.       if actor.hp * 100 < actor.maxhp * 90
  677.         date.push(actor)
  678.       end
  679.     end
  680.     for skill in recover_hp_skills
  681.       skills.push(skill) if skill.scope == 4
  682.     end
  683.     if ! skills.empty? and date.size >= 2
  684.       n = 20
  685.       n += (date.size - 1) * 20
  686.       if rand (100) < n
  687.         @active_battler.current_action.kind = 1
  688.         skill = skills[rand(skills.size)]
  689.         @active_battler.current_action.skill_id = skill.id
  690.         @active_battler.auto_battle_targets = all_actors
  691.         return
  692.       end
  693.     end
  694.     now_skills = recover_hp_skills - skills
  695.     if now_skills.empty?
  696.       judge_battle
  697.       return
  698.     end
  699.     @active_battler.current_action.kind = 1
  700.     @active_battler.auto_battle_targets.push(targets_actor_hp)
  701.     target = @active_battler.auto_battle_targets[0]
  702.     set_use_skill(now_skills, target)
  703.   end
  704.   #---------------------------------------------------------------------------
  705.   def judge_battle
  706.     if up_plus_skills != []
  707.       if rand (100) < 20
  708.         use_up_skill
  709.         return
  710.       end
  711.     end
  712.     battle
  713.   end
  714.   #---------------------------------------------------------------------------
  715.   def battle
  716.     n = 100 - @active_battler.hp * 100 / @active_battler.maxhp
  717.     if n > 80
  718.       if rand (150) < n
  719.         @active_battler.current_action.kind = 0
  720.         @active_battler.current_action.basic = 1
  721.         return
  722.       end
  723.     end
  724.     if @active_battler.int > @active_battler.str
  725.       n = 80
  726.     elsif @active_battler.int == @active_battler.str
  727.       n = 60
  728.     else
  729.       n = 40
  730.     end
  731.     if rand (100) < n
  732.       use_skill
  733.     else
  734.       base_atk
  735.     end
  736.   end
  737.   #---------------------------------------------------------------------------
  738.   def use_skill
  739.     if down_plus_skills != []
  740.       if rand (100) < 20
  741.         use_down_skill
  742.         return
  743.       end
  744.     end
  745.     if att_skills != []
  746.       use_att_skill
  747.       return
  748.     end
  749.     base_atk
  750.   end
  751.   #---------------------------------------------------------------------------
  752.   def use_up_skill
  753.     @active_battler.current_action.kind = 1
  754.     skill = up_plus_skills[rand (up_plus_skills.size)]
  755.     @active_battler.current_action.skill_id = skill.id
  756.     set_autobattler_targets
  757.   end
  758.   #--------------------------------------------------------------------------
  759.   def use_down_skill
  760.     @active_battler.current_action.kind = 1
  761.     skill = down_plus_skills[rand (down_plus_skills.size)]
  762.     @active_battler.current_action.skill_id = skill.id
  763.     set_autobattler_targets
  764.   end
  765.   #--------------------------------------------------------------------------
  766.   def use_att_skill
  767.     @active_battler.current_action.kind = 1
  768.     date = []
  769.     for skill in att_skills
  770.       date.push(skill) if skill.scope == 2
  771.     end
  772.     if all_enemys.size >= 2
  773.       n = 10
  774.       n += (all_enemys.size - 1) * 10
  775.       n = [n, 80].min
  776.       if rand (100) < n and ! date.empty?
  777.         skill = date[rand (date.size)]
  778.         @active_battler.current_action.skill_id = skill.id
  779.         @active_battler.auto_battle_targets = all_enemys
  780.         return
  781.       end
  782.     end
  783.     now_skills = att_skills - date
  784.     if now_skills.empty?
  785.       base_atk
  786.       return
  787.     end
  788.     @active_battler.auto_battle_targets.push(targets_enemy_hp)
  789.     target = @active_battler.auto_battle_targets[0]
  790.     if use_base_atk?(target)
  791.       base_atk
  792.       return
  793.     end
  794.     set_use_skill(now_skills, target)
  795.   end
  796.   #----------------------------------------------------------------------------
  797.   def base_atk
  798.     @active_battler.current_action.kind = 0
  799.     @active_battler.current_action.basic = 0
  800.     if @active_battler.auto_battle_targets.empty?
  801.       @active_battler.auto_battle_targets.push(targets_enemy_hp)
  802.     end
  803.   end
  804.   ############################################################################
  805.   #----------------------------------------------------------------------------
  806.   def rand_actors
  807.     date = []
  808.     while date.size != $game_party.actors.size
  809.       actor = $game_party.actors[rand ($game_party.actors.size)]
  810.       date.push(actor) if not date.include?(actor)
  811.     end
  812.     return date
  813.   end
  814.   #----------------------------------------------------------------------------
  815.   def dead_actors
  816.     date = []
  817.     for actor in rand_actors
  818.       date.push(actor) if actor.dead?
  819.     end
  820.     return date
  821.   end
  822.   #----------------------------------------------------------------------------
  823.   def all_actors
  824.     date = []
  825.     for actor in rand_actors
  826.       date.push(actor) if actor.exist?
  827.     end
  828.     return date
  829.   end
  830.   #----------------------------------------------------------------------------
  831.   def targets_actor_hp
  832.     if pressing_actor_hp != []      
  833.       target = pressing_actor_hp[rand (pressing_actor_hp.size)]
  834.       return target
  835.     end
  836.     date = []
  837.     for actor in all_actors
  838.       if actor.hp * 100 < actor.maxhp * 90
  839.         date.push(actor)
  840.       end
  841.     end
  842.     target = nil
  843.     if date != []
  844.       for actor in date
  845.         hn = 100 - actor.hp * 100 / actor.maxhp
  846.         if rand (100) < hn
  847.           target = actor
  848.           break
  849.         end
  850.       end
  851.       target = date[rand (date.size)] if target == nil
  852.     end
  853.     target = all_actors[rand (all_actors.size)] if target == nil
  854.     return target
  855.   end
  856.   #----------------------------------------------------------------------------
  857.   def targets_actor_sp
  858.     if pressing_actor_sp != []      
  859.       target = pressing_actor_sp[rand (pressing_actor_sp.size)]
  860.       return target
  861.     end
  862.     date = []
  863.     for actor in all_actors
  864.       if actor.sp * 100 < actor.maxsp * 80
  865.         date.push(actor)
  866.       end
  867.     end
  868.     target = nil
  869.     if date != []
  870.       for actor in date
  871.         sn = 100 - actor.sp * 100 / actor.maxsp
  872.         if rand (100) < sn
  873.           target = actor
  874.           break
  875.         end
  876.       end
  877.       target = date[rand (date.size)] if target == nil
  878.     end
  879.     target = all_actors[rand (all_actors.size)] if target == nil
  880.     return target
  881.   end
  882.   #----------------------------------------------------------------------------
  883.   def pressing_actor_hp
  884.     date = []
  885.     for actor in all_actors
  886.       if actor.hp * 100 <= actor.maxhp * 30
  887.         date.push(actor)
  888.       end
  889.     end
  890.     return date
  891.   end
  892.   #----------------------------------------------------------------------------
  893.   def pressing_actor_sp
  894.     date = []
  895.     for actor in all_actors
  896.       if actor.sp * 100 <= actor.maxsp * 10
  897.         date.push(actor)
  898.       end
  899.     end
  900.     return date
  901.   end
  902.   #----------------------------------------------------------------------------
  903.   def recover_hp_items
  904.     date = []
  905.     for i in 1...$data_items.size
  906.       item = $data_items[i]
  907.       if $game_party.item_number(i) > 0 and [0, 1].include?(item.occasion)
  908.         if not [5, 6].include?(item.scope)
  909.           date.push(item) if item.recover_hp_rate > 0 or item.recover_hp > 0
  910.         end
  911.       end
  912.     end
  913.     return date
  914.   end
  915.   #----------------------------------------------------------------------------
  916.   def recover_sp_items
  917.     date = []
  918.     for i in 1...$data_items.size
  919.       item = $data_items[i]
  920.       if $game_party.item_number(i) > 0 and [0, 1].include?(item.occasion)
  921.         date.push(item) if item.recover_sp_rate > 0 or item.recover_sp > 0
  922.       end
  923.     end
  924.     return date
  925.   end
  926.   #----------------------------------------------------------------------------
  927.   def all_enemys
  928.     date = []
  929.     for enemy in $game_troop.enemies
  930.       date.push(enemy) if enemy.exist?
  931.     end
  932.     return date
  933.   end
  934.   #----------------------------------------------------------------------------
  935.   def targets_enemy_hp
  936.     date = []
  937.     for enemy in all_enemys
  938.       if enemy.hp < enemy.maxhp
  939.         date.push(enemy)
  940.       end
  941.     end
  942.     target = nil
  943.     if date != []
  944.       for enemy in date
  945.         hn = 100 - enemy.hp * 100 / enemy.maxhp
  946.         if rand (100) < hn
  947.           target = enemy
  948.           break
  949.         end
  950.       end
  951.     end
  952.     target = all_enemys[rand (all_enemys.size)] if target == nil
  953.     return target
  954.   end
  955.   #----------------------------------------------------------------------------
  956.   def recover_hp_skills
  957.     date = []
  958.     for id in @active_battler.skills
  959.       skill = $data_skills[id]
  960.       if @active_battler.skill_can_use?(id) and skill.power < 0
  961.         date.push(skill)
  962.       end
  963.     end
  964.     return date
  965.   end
  966.   #----------------------------------------------------------------------------
  967.   def att_skills
  968.     date = []
  969.     for id in @active_battler.skills
  970.       skill = $data_skills[id]
  971.       if @active_battler.skill_can_use?(id) and skill.power > 0
  972.         date.push(skill)
  973.       end
  974.     end
  975.     return date
  976.   end
  977.   #----------------------------------------------------------------------------
  978.   def up_plus_skills
  979.     date = []
  980.     for id in @active_battler.skills
  981.       skill = $data_skills[id]
  982.       if @active_battler.skill_can_use?(id) and UP_PLUS_SKILLS.include?(id)
  983.         date.push(skill)
  984.       end
  985.     end
  986.     return date
  987.   end
  988.   #----------------------------------------------------------------------------
  989.   def down_plus_skills
  990.     date = []
  991.     for id in @active_battler.skills
  992.       skill = $data_skills[id]
  993.       if @active_battler.skill_can_use?(id) and DOWN_PLUS_SKILLS.include?(id)
  994.         date.push(skill)
  995.       end
  996.     end
  997.     return date
  998.   end
  999.   #---------------------------------------------------------------------------
  1000.   def set_use_item(items, target, toyp)
  1001.     @item = nil
  1002.     case toyp
  1003.     when 0
  1004.       date = []
  1005.       for item in items
  1006.         recover = item.recover_hp + item.recover_hp_rate * target.maxhp
  1007.         n = (recover - (target.maxhp - target.hp)).abs
  1008.         date.push(n)
  1009.       end
  1010.       date.sort!
  1011.       for item in items
  1012.         recover = item.recover_hp + item.recover_hp_rate * target.maxhp
  1013.         n = (recover - (target.maxhp - target.hp)).abs
  1014.         if n == date[0]
  1015.           @item = item
  1016.           break
  1017.         end
  1018.       end
  1019.     when 1
  1020.       date = []
  1021.       for item in items
  1022.         recover = item.recover_sp + item.recover_sp_rate * target.maxsp
  1023.         n = (recover - (target.maxsp - target.sp)).abs
  1024.         date.push(n)
  1025.       end
  1026.       date.sort!
  1027.       for item in items
  1028.         recover = item.recover_sp + item.recover_sp_rate * target.maxsp
  1029.         n = (recover - (target.maxsp - target.sp)).abs
  1030.         if n == date[0]
  1031.           @item = item
  1032.           break
  1033.         end
  1034.       end
  1035.     end
  1036.     @item = items[rand(items.size)] if @item == nil
  1037.     @active_battler.current_action.item_id = @item.id
  1038.   end
  1039.   #---------------------------------------------------------------------------
  1040.   def set_use_skill(skills, target)
  1041.     r_skills = []
  1042.     a_skills = []
  1043.     skill = nil
  1044.     for i in skills
  1045.       damage = count_skill_damage(i, target)
  1046.       if damage < 0
  1047.         n = (target.maxhp - target.hp + damage).abs
  1048.         r_skills.push(n)
  1049.       else
  1050.         n = (target.hp - damage).abs
  1051.         a_skills.push(n)
  1052.       end
  1053.     end
  1054.     r_skills.sort!
  1055.     a_skills.sort!
  1056.     for i in skills
  1057.       damage = count_skill_damage(i, target)
  1058.       if damage < 0
  1059.         n = (target.maxhp - target.hp + damage).abs
  1060.         skill = i if n == r_skills[0]
  1061.       else
  1062.         n = (target.hp - damage).abs
  1063.         skill = i if n == a_skills[0]
  1064.       end
  1065.     end
  1066.     skill = skills[rand (skills.sizs)] if skill == nil
  1067.     @active_battler.current_action.skill_id = skill.id
  1068.   end
  1069.   #----------------------------------------------------------------------------
  1070.   def count_skill_damage(skill, target)
  1071.     power = skill.power + @active_battler.atk * skill.atk_f / 100
  1072.     if power > 0
  1073.       power -= target.pdef * skill.pdef_f / 200
  1074.       power -= target.mdef * skill.mdef_f / 200
  1075.       power = [power, 0].max
  1076.     end
  1077.     rate = 20
  1078.     rate += (target.str * skill.str_f / 100)
  1079.     rate += (target.dex * skill.dex_f / 100)
  1080.     rate += (target.agi * skill.agi_f / 100)
  1081.     rate += (target.int * skill.int_f / 100)
  1082.     damage = power * rate / 20
  1083.     if skill.element_set == []
  1084.       rn = 100
  1085.     else
  1086.       rn = -100
  1087.       for i in skill.element_set
  1088.         rn = [rn, target.element_rate(i)].max
  1089.       end
  1090.     end
  1091.     damage = damage * rn / 100
  1092.     return damage
  1093.   end
  1094.   #----------------------------------------------------------------------------
  1095.   def use_base_atk?(target)
  1096.     atk = [@active_battler.atk - target.pdef / 2, 0].max
  1097.     damage = atk * (20 + @active_battler.str) / 20
  1098.     if @active_battler.element_set == []
  1099.       rn = 100
  1100.     else
  1101.       rn = -100
  1102.       for i in skill.element_set
  1103.         rn = [rn, target.element_rate(i)].max
  1104.       end
  1105.     end
  1106.     damage = damage * rn / 100
  1107.     n = target.hp - damage
  1108.     return true if n <= 0
  1109.     return false
  1110.   end
  1111.   #--------------------------------------------------------------------------
  1112.   def set_autobattler_targets
  1113.     case @active_battler.current_action.kind
  1114.     when 0
  1115.       @active_battler.auto_battle_targets.push(targets_enemy_hp)
  1116.     when 1
  1117.       skill = $data_skills[@active_battler.current_action.skill_id]
  1118.       if [5, 6].include?(skill.scope) and dead_actors != []
  1119.         if skill.scope == 5
  1120.           target = dead_actors[rand (dead_actors.size)]
  1121.           @active_battler.auto_battle_targets.push(target)
  1122.         else
  1123.           @active_battler.auto_battle_targets = dead_actors
  1124.         end
  1125.         return
  1126.       end
  1127.       if UP_PLUS_SKILLS.include?(skill.id)
  1128.         if skill.scope == 3
  1129.           target = all_actors[rand (all_actors.size)]
  1130.           @active_battler.auto_battle_targets.push(target)
  1131.         elsif skill.scope == 4
  1132.           @active_battler.auto_battle_targets = all_actors
  1133.         elsif skill.scope == 7
  1134.           @active_battler.auto_battle_targets.push(@active_battler)
  1135.         end
  1136.         return
  1137.       end
  1138.       if DOWN_PLUS_SKILLS.include?(skill.id)
  1139.         if skill.scope == 1
  1140.           target = all_enemys[rand (all_enemys.size)]
  1141.           @active_battler.auto_battle_targets.push(target)
  1142.         elsif skill.scope == 2
  1143.           @active_battler.auto_battle_targets = all_enemys
  1144.         end
  1145.         return
  1146.       end
  1147.       if skill.power > 0
  1148.         if skill.scope == 1
  1149.           @active_battler.auto_battle_targets.push(targets_enemy_hp)
  1150.         elsif skill.scope == 2
  1151.           @active_battler.auto_battle_targets = all_enemys
  1152.         end
  1153.       elsif skill.power < 0
  1154.         if skill.scope == 3
  1155.           @active_battler.auto_battle_targets.push(targets_actor_hp)
  1156.         elsif skill.scope == 4
  1157.           @active_battler.auto_battle_targets = all_actors
  1158.         end
  1159.       end
  1160.     when 2
  1161.       item = $data_items[@active_battler.current_action.item_id]
  1162.       case item.scope
  1163.       when 1
  1164.         @active_battler.auto_battle_targets.push(targets_enemy_hp)
  1165.       when 2
  1166.         @active_battler.auto_battle_targets = all_enemys
  1167.       when 3
  1168.         if (item.recover_sp_rate > 0 or item.recover_sp > 0) and
  1169.           (item.recover_hp_rate > 0 or item.recover_hp > 0)
  1170.           if rand (100) < 50
  1171.             @active_battler.auto_battle_targets.push(targets_actor_sp)
  1172.           else
  1173.             @active_battler.auto_battle_targets.push(targets_actor_hp)
  1174.           end
  1175.           return
  1176.         end
  1177.         if item.recover_hp_rate > 0 or item.recover_hp > 0
  1178.           @active_battler.auto_battle_targets.push(targets_actor_hp)
  1179.           return
  1180.         end
  1181.         if item.recover_sp_rate > 0 or item.recover_sp > 0
  1182.           @active_battler.auto_battle_targets.push(targets_actor_sp)
  1183.           return
  1184.         end
  1185.       when 4
  1186.         @active_battler.auto_battle_targets = all_actors
  1187.       when 5
  1188.         target = dead_actors[rand (dead_actors.size)]
  1189.         @active_battler.auto_battle_targets.push(target)
  1190.       when 6
  1191.         @active_battler.auto_battle_targets = dead_actors
  1192.       when 7
  1193.         @active_battler.auto_battle_targets.push(@active_battler)
  1194.       end
  1195.     end
  1196.   end
  1197. end
  1198. #==============================================================================
  1199. ###############################################################################
  1200. #==============================================================================

自动战斗 角色仓库.rar

203.62 KB, 下载次数: 93

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

甘泉幻想物语 试玩版4.0
https://rpg.blue/forum.php?mod=viewthread&tid=369490&page=1&extra=#pid2534710

Lv1.梦旅人

梦石
0
星屑
94
在线时间
157 小时
注册时间
2006-7-2
帖子
299
4
 楼主| 发表于 2015-9-11 07:35:30 | 只看该作者
本帖最后由 gkl0510 于 2015-9-11 11:54 编辑
英顺的马甲 发表于 2015-9-10 16:38
XP的战斗类脚本的整合最讨厌了,把这个脚本插入在那两个脚本下面就行了


不好意思,错怪大神了,只用这三个脚本没有冲突。可能和其他的战斗脚本冲突了,不好意思。我再思考一下。
甘泉幻想物语 试玩版4.0
https://rpg.blue/forum.php?mod=viewthread&tid=369490&page=1&extra=#pid2534710
回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
3
发表于 2015-9-10 16:38:29 | 只看该作者
  1. $orig_wnd_cmd = Window_Command.clone unless $orig_wnd_cmd
  2. class Window_Command < $orig_wnd_cmd
  3.   def initialize(width, cmds)
  4.     if $scene.is_a?(Scene_Battle)
  5.       cmds.push("自动") if $game_switches[AUTO_SWEITCHE]
  6.       cmds.push("逃跑")
  7.     end
  8.     super(width, cmds)
  9.   end
  10.   def y=(v)
  11.     v = 480 - 160 - self.height if $scene.is_a?(Scene_Battle)
  12.     super(v)
  13.   end
  14. end
  15. $orig_scene_btl = Scene_Battle.clone unless $orig_scene_btl
  16. class Scene_Battle < $orig_scene_btl
  17.   def update_phase3_basic_command
  18.     if Input.trigger?(Input::B)
  19.       $game_system.se_play($data_system.cancel_se)
  20.       phase3_prior_actor
  21.       return
  22.     end
  23.     if Input.trigger?(Input::C)
  24.       case @actor_command_window.index
  25.       when 5
  26.         if $game_switches[AUTO_SWEITCHE]
  27.           $game_system.se_play($data_system.decision_se)
  28.           @actor_command_window.active = false
  29.           @actor_command_window.visible = false
  30.           @active_battler.auto_battle = true
  31.           phase3_next_actor
  32.         else
  33.           $game_system.se_play($data_system.decision_se)
  34.           update_phase2_escape
  35.         end
  36.       when 6
  37.         if $game_temp.battle_can_escape == false
  38.           $game_system.se_play($data_system.buzzer_se)
  39.           return
  40.         end
  41.         $game_system.se_play($data_system.decision_se)
  42.         update_phase2_escape
  43.       else
  44.         super
  45.       end
  46.       return
  47.     end
  48.   end
  49.   def update_phase4_step2
  50.     unless @active_battler.current_action.forcing
  51.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  52.         @active_battler.current_action.kind = 0
  53.         @active_battler.current_action.basic = 0
  54.       end
  55.       if @active_battler.restriction == 4
  56.         $game_temp.forcing_battler = nil
  57.         @phase4_step = 1
  58.         return
  59.       end
  60.     end
  61.     @target_battlers = []
  62.     if @active_battler.is_a?(Game_Actor)
  63.       if @active_battler.auto_battle and not @active_battler.dead?
  64.         set_auto_battle
  65.         case @active_battler.current_action.kind
  66.         when 0  
  67.           make_basic_auto
  68.         when 1  
  69.           make_skill_auto
  70.         when 2  
  71.           make_item_auto
  72.         end
  73.         if @phase4_step == 2
  74.           @phase4_step = 3
  75.         end
  76.         return
  77.       end
  78.     end
  79.     case @active_battler.current_action.kind
  80.     when 0
  81.       make_basic_action_result
  82.     when 1
  83.       make_skill_action_result
  84.     when 2
  85.       make_item_action_result
  86.     when 3
  87.       make_swap_action_result
  88.     end
  89.     if @phase4_step == 2
  90.       @phase4_step = 3
  91.     end
  92.   end
  93. end
复制代码
XP的战斗类脚本的整合最讨厌了,把这个脚本插入在那两个脚本下面就行了

点评

谢谢提示,我这里试验成功了。1.自动。 2.换人 3.防冲突 才可以。 1.换人, 2.自动 3.防冲突 不行。 非常感谢  发表于 2015-9-12 08:40
请确保脚本顺序如下排列:1.换人脚本 2.自动战斗 3.我的脚本  发表于 2015-9-11 19:14
不好意思,错怪大神了,只用这三个脚本没有冲突。可能和其他的战斗脚本冲突了,不好意思。我再思考一下。  发表于 2015-9-11 11:53
大神你好,非常脚本的提供,我试验了一下。确实战斗选项框都出现了,但是无论是选“自动”还是选“换人”都变成了自动战斗,换人的功能消失.....  发表于 2015-9-11 07:18
第一次见到这种写法,我领会一下  发表于 2015-9-10 17:03

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
RyanBern + 100 + 1 认可答案

查看全部评分

本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

2
发表于 2015-9-10 15:44:41 | 只看该作者
@RB版主 @芯大
↑这种时候就可以直接找作者本人
机器比对的结果是:
  1. phase3_setup_command_window
  2. update_phase3_basic_command
  3. update_phase3
  4. update_phase4_step2
复制代码
上面四个方法产生了重定义(冲突) 期待楼下解决兼容

点评

谢谢回复,等待解救~~~  发表于 2015-9-11 07:17

  -fk: -azogi:
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-20 00:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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