Project1

标题: 怎样限制战斗中每个队友只能选择攻击不同的敌人 [打印本页]

作者: 黑舞嗜    时间: 2011-10-15 11:05
标题: 怎样限制战斗中每个队友只能选择攻击不同的敌人
本帖最后由 黑舞嗜 于 2011-10-15 11:40 编辑

一般情况下所有队友都能选择攻击同一个敌人进行攻击或使用特技,如何做到让每个角色攻击不同的敌人呢(就是说一个敌人只能被一个角色选择)?

5VIP求脚本大神帮助
作者: 各种压力的猫君    时间: 2011-10-15 11:05
本帖最后由 各种压力的猫君 于 2011-10-15 14:32 编辑
  1. #==============================================================================
  2. # ■ Scene_Battle 各种压力的猫君_改_v1.3
  3. #------------------------------------------------------------------------------
  4. #   同一回合中同一敌人只能被一个主角定为目标。
  5. #------------------------------------------------------------------------------
  6. #   v1.3 将全局变量改为局部变量,
  7. #        新增当所有敌人均已被定位目标时,攻击指令无效化。
  8. #        特技指令依然有效,但对敌人的攻击无效。
  9. #        注:全体攻击特技不受此限制,但考虑到用了这个脚本
  10. #          应该不会设置此类特技,因此未作屏蔽。
  11. #   v1.2 修正敌人队伍人数小于主角队伍人数导致的,
  12. #        所有敌人均被选中时不能结束回合(感谢 赵灵儿)
  13. #   v1.1 修正转向前一个角色时丢掉的部分(感谢 禾西)
  14. #   v1.0 初版
  15. #------------------------------------------------------------------------------
  16. #   将本脚本插入到 Scene_Battle 4 脚本以下。
  17. #==============================================================================

  18. class Scene_Battle
  19.   #--------------------------------------------------------------------------
  20.   # ● 主处理(Scene_Battle 1)
  21.   #--------------------------------------------------------------------------
  22.   alias old_main main
  23.   def main
  24.     # 初始化记录已选择敌人的数组
  25.     @selected_enemy = []
  26.     @exist_enemy = []
  27.     # 原主处理
  28.     old_main
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 转向前一个角色的命令输入(Scene_Battle 3)
  32.   #--------------------------------------------------------------------------
  33.   alias old_phase3_prior_actor phase3_prior_actor
  34.   def phase3_prior_actor
  35.     # 删除记录已选择敌人中的最后一个
  36.     @selected_enemy.pop
  37.     # 原转向前一个角色的命令输入
  38.     old_phase3_prior_actor
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 刷新画面 (角色命令回合 : 基本命令)(Scene_Battle 3)
  42.   #--------------------------------------------------------------------------
  43.   def update_phase3_basic_command
  44.     # 清空现在存在的敌人数组
  45.     @exist_enemy.clear
  46.     # 将现在存在的敌人丢入数组
  47.     for enemy in $game_troop.enemies
  48.       if enemy.exist?
  49.         @exist_enemy.push(enemy)
  50.       end
  51.     end
  52.     # 刷新命令窗口
  53.     @actor_command_window.refresh
  54.     # 如果所有敌人均被选中
  55.     if @selected_enemy.size == @exist_enemy.size
  56.       # 将攻击无效化
  57.       @actor_command_window.disable_item(0)
  58.       # 设置不可攻击标志
  59.       @cant_attack = true
  60.     else
  61.       # 清除不可攻击标志
  62.       @cant_attack = false
  63.     end
  64.     # 按下 B 键的情况下
  65.     if Input.trigger?(Input::B)
  66.       # 演奏取消 SE
  67.       $game_system.se_play($data_system.cancel_se)
  68.       # 转向前一个角色的指令输入
  69.       phase3_prior_actor
  70.       return
  71.     end
  72.     # 按下 C 键的情况下
  73.     if Input.trigger?(Input::C)
  74.       # 角色指令窗口光标位置分之
  75.       case @actor_command_window.index
  76.       when 0  # 攻击
  77.         if @cant_attack == true
  78.           # 演奏不可用 SE
  79.           $game_system.se_play($data_system.buzzer_se)
  80.         else
  81.           # 演奏确定 SE
  82.           $game_system.se_play($data_system.decision_se)
  83.           # 设置行动
  84.           @active_battler.current_action.kind = 0
  85.           @active_battler.current_action.basic = 0
  86.           # 开始选择敌人
  87.           start_enemy_select
  88.         end
  89.       when 1  # 特技
  90.         # 演奏确定 SE
  91.         $game_system.se_play($data_system.decision_se)
  92.         # 设置行动
  93.         @active_battler.current_action.kind = 1
  94.         # 开始选择特技
  95.         start_skill_select
  96.       when 2  # 防御
  97.         # 演奏确定 SE
  98.         $game_system.se_play($data_system.decision_se)
  99.         # 设置行动
  100.         @active_battler.current_action.kind = 0
  101.         @active_battler.current_action.basic = 1
  102.         # 转向下一位角色的指令输入
  103.         phase3_next_actor
  104.       when 3  # 物品
  105.         # 演奏确定 SE
  106.         $game_system.se_play($data_system.decision_se)
  107.         # 设置行动
  108.         @active_battler.current_action.kind = 2
  109.         # 开始选择物品
  110.         start_item_select
  111.       end
  112.       return
  113.     end
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 刷新画面画面 (角色命令回合 : 选择敌人)(Scene_Battle 3)
  117.   #--------------------------------------------------------------------------
  118.   def update_phase3_enemy_select
  119.     # 刷新敌人箭头
  120.     @enemy_arrow.update
  121.     # 按下 B 键的情况下
  122.     if Input.trigger?(Input::B)
  123.       # 演奏取消 SE
  124.       $game_system.se_play($data_system.cancel_se)
  125.       # 选择敌人结束
  126.       end_enemy_select
  127.       return
  128.     end
  129.     # 按下 C 键的情况下
  130.     if Input.trigger?(Input::C)
  131.       # 判断敌人是否本回合已被选过
  132.       for i in @selected_enemy
  133.         @enemy_cant_select = true if [@enemy_arrow.index] == i
  134.       end
  135.       # 敌人已被选过的情况下
  136.       if @enemy_cant_select == true      
  137.         # 演奏不可用 SE
  138.         $game_system.se_play($data_system.buzzer_se)
  139.         # 清除不可选标记
  140.         @enemy_cant_select = false
  141.       else        
  142.         # 演奏确定 SE
  143.         $game_system.se_play($data_system.decision_se)
  144.         # 设置行动
  145.         @active_battler.current_action.target_index = @enemy_arrow.index
  146.         # 记录选择的敌人
  147.         @selected_enemy.push [@enemy_arrow.index]
  148.         # 选择敌人结束
  149.         end_enemy_select
  150.         # 显示特技窗口中的情况下
  151.         if @skill_window != nil
  152.           # 结束特技选择
  153.           end_skill_select
  154.         end
  155.         # 显示物品窗口的情况下
  156.         if @item_window != nil
  157.           # 结束物品选择
  158.           end_item_select
  159.         end
  160.         # 转到下一位角色的指令输入
  161.         phase3_next_actor
  162.       end
  163.     end
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 刷新画面 (主回合步骤 1 : 准备行动)(Scene_Battle 4)
  167.   #--------------------------------------------------------------------------
  168.   alias old_update_phase4_step1 update_phase4_step1
  169.   def update_phase4_step1
  170.     # 清空记录已选择敌人的数组
  171.     @selected_enemy.clear
  172.     # 原刷新画面
  173.     old_update_phase4_step1
  174.   end
  175. end
复制代码
哥德巴赫猜想要是如此简单就好了……
作者: 赵灵儿    时间: 2011-10-15 11:25
本帖最后由 赵灵儿 于 2011-10-15 11:28 编辑

可以说,你这5V是浪费了。此问题的难度相当于在数学上的哥德巴赫猜想。
给100V或许有某个超版会花上两三个月的时间解答。
5V得不到答案的。
放弃吧!送你一点经验来抚平你受伤的心灵。
如果真的要答案,就买一个置顶卡置顶24小时,然后把所有剩下VIP悬赏上吧

作者: 盈盈    时间: 2011-10-15 12:00
感觉好像难度没有LS说的这么夸张,虽然改动会蛮多的样子。
作者: 忧郁    时间: 2011-10-15 13:43
我回帖为了看哥德巴赫猜想
作者: 黑舞嗜    时间: 2011-10-15 13:56
本帖最后由 黑舞嗜 于 2011-10-15 14:14 编辑
各种压力的猫君 发表于 2011-10-15 13:40
哥德巴赫猜想要是如此简单就好了……



黑舞嗜于2011-10-15 14:14补充以下内容:
新问题:怎样固定角色和怪物的攻击顺序

版主君把这个问题告诉我就好了,那个不要了....不好意思
作者: 禾西    时间: 2011-10-15 14:21
本帖最后由 禾西 于 2011-10-15 14:30 编辑

我祇是來說明一下這個東西不難= =
CP 制會卽時release,所以這個東西沒有意義……

  1. class Scene_Battle
  2.   alias update_phase3_enemy_select_sdjsh update_phase3_enemy_select
  3.   def update_phase3_enemy_select
  4.    
  5.     if Input.trigger?(Input::C)
  6.       $game_party.actors.each do |battler|
  7.         if battler == @active_battler
  8.           break
  9.         end
  10.         
  11.         if battler.current_action.target_index == @enemy_arrow.index
  12.           return
  13.         end
  14.       end
  15.     end
  16.    
  17.     update_phase3_enemy_select_sdjsh
  18.   end
  19. end
复制代码
固定角色和怪物的攻擊順序。回合制本來就是固定的不是嗎= =b
CP制的話,重定義出手速度就行了。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1