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

Project1

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

[已经解决] 召唤P叔,关于你那个【所有人目标的设定】的脚本...

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-9-17
帖子
29
跳转到指定楼层
1
发表于 2012-9-29 14:18:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Zale 于 2012-9-29 23:50 编辑



好像有一点问题,应用后在测试中发现这样一个BUG:当多个敌人的队伍被消灭的只剩一只时,即使圣光的使用对象是自己,技能也会施放在敌人身上...

另外,这个脚本的功能好像限制在了单体的范围上,无论技能的原本效果范围如何改,都没法施放在多个目标上?请问有扩充的可能性吗?

点评

有扩充的可能性,但是需要如何扩充,你需要另开一帖把详细的要求写得清清楚楚。如果指定P叔回答可以不设置悬赏。  发表于 2012-9-29 15:47

评分

参与人数 1星屑 +100 收起 理由
咕噜 + 100 悬赏返还

查看全部评分

剑与电的浪漫由自己创造~

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-9-17
帖子
29
2
 楼主| 发表于 2012-9-29 14:23:40 | 只看该作者
附上P叔给的脚本代码
  1. #==============================================================================
  2. # ■ Scene_Title
  3. #------------------------------------------------------------------------------
  4. #  处理标题画面的类。
  5. #==============================================================================
  6. class Scene_Title
  7.   # 载入数据库时调用
  8.   # 将描述中带有 <范围为所有人> 的技能的范围设置为所有人
  9.   def check_special_skill_scope
  10.     for i in $data_skills
  11.       next if i == nil
  12.       if i.note.match("<范围为所有人>")
  13.         i.scope = "ALL_SCOPE"
  14.       end
  15.     end
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 载入数据库
  19.   #--------------------------------------------------------------------------
  20.   alias load_database_old load_database if
  21.     !method_defined? :load_database_old
  22.   def load_database
  23.     load_database_old
  24.     check_special_skill_scope
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 载入战斗测试用的数据库
  28.   #--------------------------------------------------------------------------
  29.   alias load_bt_database_old load_bt_database if
  30.     !method_defined? :load_bt_database_old
  31.   def load_bt_database
  32.     load_bt_database_old
  33.     check_special_skill_scope
  34.   end
  35. end

  36. #==============================================================================
  37. # ■ Window_TargetAll
  38. #------------------------------------------------------------------------------
  39. #  战斗画面中选择行动对象的所有角色(照猫画虎,仿照 Window_TargetEnemy 写就行了)
  40. #==============================================================================

  41. class Window_TargetAll < Window_Command
  42.   #--------------------------------------------------------------------------
  43.   # ● 初始化对象
  44.   #--------------------------------------------------------------------------
  45.   def initialize
  46.     commands = []
  47.     @targets = []
  48.     for target in $game_troop.members + $game_party.members
  49.       next unless target.exist?
  50.       commands.push(target.name)
  51.       @targets.push(target)
  52.     end
  53.     super(416, commands, 2, 4)
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 获取角色对象
  57.   #--------------------------------------------------------------------------
  58.   def target
  59.     return @targets[@index]
  60.   end
  61. end

  62. #==============================================================================
  63. # ■ Scene_Battle
  64. #------------------------------------------------------------------------------
  65. #  处理战斗画面的类。
  66. #==============================================================================

  67. class Scene_Battle
  68.   #--------------------------------------------------------------------------
  69.   # ● 确定特技
  70.   #--------------------------------------------------------------------------
  71.   def determine_skill
  72.     @active_battler.action.set_skill(@skill.id)
  73.     @skill_window.active = false
  74.     # 范围为所有人时开始选择所有人
  75.     if @skill.scope == "ALL_SCOPE"
  76.       start_target_all_selection
  77.     elsif @skill.need_selection?
  78.       if @skill.for_opponent?
  79.         start_target_enemy_selection
  80.       else
  81.         start_target_actor_selection
  82.       end
  83.     else
  84.       end_skill_selection
  85.       next_actor
  86.     end
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 开始选择对象的所有角色
  90.   #--------------------------------------------------------------------------
  91.   def start_target_all_selection
  92.     @target_all_window = Window_TargetAll.new
  93.     @target_all_window.y = @info_viewport.rect.y
  94.     @info_viewport.rect.x += @target_all_window.width
  95.     @info_viewport.ox += @target_all_window.width
  96.     @actor_command_window.active = false
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 选择对象所有角色结束
  100.   #--------------------------------------------------------------------------
  101.   def end_target_all_selection
  102.     @info_viewport.rect.x -= @target_all_window.width
  103.     @info_viewport.ox -= @target_all_window.width
  104.     @target_all_window.dispose
  105.     @target_all_window = nil
  106.     if @actor_command_window.index == 0
  107.       @actor_command_window.active = true
  108.     end
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 更新选择对象敌方角色
  112.   #--------------------------------------------------------------------------
  113.   def update_target_all_selection
  114.     @target_all_window.update
  115.     if Input.trigger?(Input::B)
  116.       Sound.play_cancel
  117.       end_target_all_selection
  118.     elsif Input.trigger?(Input::C)
  119.       Sound.play_decision
  120.       # 默认系统传递给 action 的是角色或敌人在队伍中的索引
  121.       # 这里传递的是窗口选项的索引
  122.       # 具体见下面对于 Game_BattleAction 的修改
  123.       @active_battler.action.target_index = @target_all_window.index
  124.       end_target_all_selection
  125.       end_skill_selection
  126.       end_item_selection
  127.       next_actor
  128.     end
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 更新画面
  132.   #--------------------------------------------------------------------------
  133.   def update
  134.     super
  135.     update_basic(true)
  136.     update_info_viewport                  # 更新显示信息的视区
  137.     if $game_message.visible
  138.       @info_viewport.visible = false
  139.       @message_window.visible = true
  140.     end
  141.     unless $game_message.visible          # 在显示消息以外的情况
  142.       return if judge_win_loss            # 判断胜败
  143.       update_scene_change
  144.       # 选择所有人的窗口存在时更新
  145.       if @target_all_window != nil
  146.         update_target_all_selection       # 选择所有对象
  147.       elsif @target_enemy_window != nil
  148.         update_target_enemy_selection     # 选择敌方对象
  149.       elsif @target_actor_window != nil
  150.         update_target_actor_selection     # 选择对象角色
  151.       elsif @skill_window != nil
  152.         update_skill_selection            # 选择特技
  153.       elsif @item_window != nil
  154.         update_item_selection             # 选择物品
  155.       elsif @party_command_window.active
  156.         update_party_command_selection    # 选择同伴指令
  157.       elsif @actor_command_window.active
  158.         update_actor_command_selection    # 选择角色指令
  159.       else
  160.         process_battle_event              # 战斗处理
  161.         process_action                    # 战斗行动
  162.         process_battle_event              # 处理战斗事件
  163.       end
  164.     end
  165.   end
  166. end

  167. #==============================================================================
  168. # ■ Game_BattleAction
  169. #------------------------------------------------------------------------------
  170. #  处理行动 (战斗中的行动) 的类。这个类在 Game_Battler 类
  171. # 的内部使用。
  172. #==============================================================================

  173. class Game_BattleAction
  174. #--------------------------------------------------------------------------
  175. # ● 生成特技以及物品目标
  176. #     obj : 特技以及物品
  177. #--------------------------------------------------------------------------

  178.   def make_obj_targets(obj)
  179.     targets = []
  180.     # 范围为所有人时
  181.     if obj.scope == "ALL_SCOPE"
  182.       if @target_index + 1 <= $game_troop.members.size
  183.         targets.push($game_troop.smooth_target(@target_index))
  184.       else
  185.         party_index = @target_index - $game_troop.members.size
  186.         targets.push($game_party.smooth_target(party_index))
  187.       end  
  188.     elsif obj.for_opponent?
  189.       if obj.for_random?
  190.         if obj.for_one?         # 敌随机单体
  191.           number_of_targets = 1
  192.         elsif obj.for_two?      # 敌随机二体
  193.           number_of_targets = 2
  194.         else                    # 敌随机三体
  195.           number_of_targets = 3
  196.         end
  197.         number_of_targets.times do
  198.           targets.push(opponents_unit.random_target)
  199.         end
  200.       elsif obj.dual?           # 敌单体连续
  201.         targets.push(opponents_unit.smooth_target(@target_index))
  202.         targets += targets
  203.       elsif obj.for_one?        # 敌单体
  204.         targets.push(opponents_unit.smooth_target(@target_index))
  205.       else                      # 敌全体
  206.         targets += opponents_unit.existing_members
  207.       end
  208.     elsif obj.for_user?         # 使用者
  209.       targets.push(battler)
  210.     elsif obj.for_dead_friend?
  211.       if obj.for_one?           # 我方单体(无法行动)
  212.         targets.push(friends_unit.smooth_dead_target(@target_index))
  213.       else                      # 我方全体(无法行动)
  214.         targets += friends_unit.dead_members
  215.       end
  216.     elsif obj.for_friend?
  217.       if obj.for_one?           # 我方单体
  218.         targets.push(friends_unit.smooth_target(@target_index))
  219.       else                      # 我方全体
  220.         targets += friends_unit.existing_members
  221.       end
  222.     end
  223.     return targets.compact
  224.   end
  225. end
复制代码
剑与电的浪漫由自己创造~
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4699
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

3
发表于 2012-9-29 15:06:24 | 只看该作者
本帖最后由 protosssonny 于 2012-9-29 15:25 编辑

原帖子的附件以及脚本均已更新,请查收:
http://rpg.blue/forum.php?mod=redirect&goto=findpost&ptid=250044&pid=2015704&fromuid=28457
因为是修复BUG,请LZ撤消悬赏,请斑竹帮助LZ加回分数
@delv25

点评

要求详细已补充,还望P叔成全~  发表于 2012-9-29 16:37

评分

参与人数 1星屑 +60 收起 理由
咕噜 + 60 认可答案

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-9-17
帖子
29
4
 楼主| 发表于 2012-9-29 16:35:41 | 只看该作者
protosssonny 发表于 2012-9-29 15:06
原帖子的附件以及脚本均已更新,请查收:
http://rpg.blue/forum.php?mod=redirect&goto=findpost&pti ...

好像修复后没啥问题了!再次感谢!~

关于脚本功能的扩充是指:能将技能的对象改成多个目标,追加一个注释,使新建的群体圣光术也可以像这个单体圣光一样作用在我方全体 or 敌方全体身上,P叔您一定写得出来的吧
剑与电的浪漫由自己创造~
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4699
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

5
发表于 2012-9-29 22:23:27 | 只看该作者
Zale 发表于 2012-9-29 16:35
好像修复后没啥问题了!再次感谢!~

关于脚本功能的扩充是指:能将技能的对象改成多个目标,追加一个注 ...

按你的新要求帮你做好了
拉尔夫的第2个技能是对全体的圣光。
新范例: Project1.rar (240.14 KB, 下载次数: 55)
  1. #==============================================================================
  2. # ■ Scene_Title
  3. #------------------------------------------------------------------------------
  4. #  处理标题画面的类。
  5. #==============================================================================
  6. class Scene_Title
  7.   # 载入数据库时调用
  8.   # 将描述中带有 <范围为所有人> 的技能的范围设置为所有人
  9.   def check_special_skill_scope
  10.     for i in $data_skills
  11.       next if i == nil
  12.       if i.note.match("<范围为所有人>")
  13.         i.scope = "ALL_SCOPE"
  14.       elsif i.note.match("<范围为全体>")
  15.         i.scope = "EVERYONE"
  16.       end
  17.     end
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 载入数据库
  21.   #--------------------------------------------------------------------------
  22.   alias load_database_old load_database if
  23.     !method_defined? :load_database_old
  24.   def load_database
  25.     load_database_old
  26.     check_special_skill_scope
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 载入战斗测试用的数据库
  30.   #--------------------------------------------------------------------------
  31.   alias load_bt_database_old load_bt_database if
  32.     !method_defined? :load_bt_database_old
  33.   def load_bt_database
  34.     load_bt_database_old
  35.     check_special_skill_scope
  36.   end
  37. end

  38. #==============================================================================
  39. # ■ Window_TargetAll
  40. #------------------------------------------------------------------------------
  41. #  战斗画面中选择行动对象的所有角色(照猫画虎,仿照 Window_TargetEnemy 写就行了)
  42. #==============================================================================

  43. class Window_TargetAll < Window_Command
  44.   #--------------------------------------------------------------------------
  45.   # ● 初始化对象
  46.   #--------------------------------------------------------------------------
  47.   def initialize
  48.     commands = []
  49.     @targets = []
  50.     for target in $game_troop.members + $game_party.members
  51.       next unless target.exist?
  52.       commands.push(target.name)
  53.       @targets.push(target)
  54.     end
  55.     super(416, commands, 2, 4)
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 获取角色对象
  59.   #--------------------------------------------------------------------------
  60.   def target
  61.     return @targets[@index]
  62.   end
  63. end

  64. #==============================================================================
  65. # ■ Scene_Battle
  66. #------------------------------------------------------------------------------
  67. #  处理战斗画面的类。
  68. #==============================================================================

  69. class Scene_Battle
  70.   #--------------------------------------------------------------------------
  71.   # ● 确定特技
  72.   #--------------------------------------------------------------------------
  73.   def determine_skill
  74.     @active_battler.action.set_skill(@skill.id)
  75.     @skill_window.active = false
  76.     # 范围为所有人时开始选择所有人
  77.     if @skill.scope == "ALL_SCOPE"
  78.       start_target_all_selection
  79.     elsif @skill.need_selection?
  80.       if @skill.for_opponent?
  81.         start_target_enemy_selection
  82.       else
  83.         start_target_actor_selection
  84.       end
  85.     else
  86.       end_skill_selection
  87.       next_actor
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 开始选择对象的所有角色
  92.   #--------------------------------------------------------------------------
  93.   def start_target_all_selection
  94.     @target_all_window = Window_TargetAll.new
  95.     @target_all_window.y = @info_viewport.rect.y
  96.     @info_viewport.rect.x += @target_all_window.width
  97.     @info_viewport.ox += @target_all_window.width
  98.     @actor_command_window.active = false
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 选择对象所有角色结束
  102.   #--------------------------------------------------------------------------
  103.   def end_target_all_selection
  104.     @info_viewport.rect.x -= @target_all_window.width
  105.     @info_viewport.ox -= @target_all_window.width
  106.     @target_all_window.dispose
  107.     @target_all_window = nil
  108.     if @actor_command_window.index == 0
  109.       @actor_command_window.active = true
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 更新选择对象敌方角色
  114.   #--------------------------------------------------------------------------
  115.   def update_target_all_selection
  116.     @target_all_window.update
  117.     if Input.trigger?(Input::B)
  118.       Sound.play_cancel
  119.       end_target_all_selection
  120.     elsif Input.trigger?(Input::C)
  121.       Sound.play_decision
  122.       # 默认系统传递给 action 的是角色或敌人在队伍中的索引
  123.       # 这里传递的是窗口选项的索引
  124.       # 具体见下面对于 Game_BattleAction 的修改
  125.       @active_battler.action.target_index = @target_all_window.index
  126.       end_target_all_selection
  127.       end_skill_selection
  128.       end_item_selection
  129.       next_actor
  130.     end
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 更新画面
  134.   #--------------------------------------------------------------------------
  135.   def update
  136.     super
  137.     update_basic(true)
  138.     update_info_viewport                  # 更新显示信息的视区
  139.     if $game_message.visible
  140.       @info_viewport.visible = false
  141.       @message_window.visible = true
  142.     end
  143.     unless $game_message.visible          # 在显示消息以外的情况
  144.       return if judge_win_loss            # 判断胜败
  145.       update_scene_change
  146.       # 选择所有人的窗口存在时更新
  147.       if @target_all_window != nil
  148.         update_target_all_selection       # 选择所有对象
  149.       elsif @target_enemy_window != nil
  150.         update_target_enemy_selection     # 选择敌方对象
  151.       elsif @target_actor_window != nil
  152.         update_target_actor_selection     # 选择对象角色
  153.       elsif @skill_window != nil
  154.         update_skill_selection            # 选择特技
  155.       elsif @item_window != nil
  156.         update_item_selection             # 选择物品
  157.       elsif @party_command_window.active
  158.         update_party_command_selection    # 选择同伴指令
  159.       elsif @actor_command_window.active
  160.         update_actor_command_selection    # 选择角色指令
  161.       else
  162.         process_battle_event              # 战斗处理
  163.         process_action                    # 战斗行动
  164.         process_battle_event              # 处理战斗事件
  165.       end
  166.     end
  167.   end
  168. end

  169. #==============================================================================
  170. # ■ Game_BattleAction
  171. #------------------------------------------------------------------------------
  172. #  处理行动 (战斗中的行动) 的类。这个类在 Game_Battler 类
  173. # 的内部使用。
  174. #==============================================================================

  175. class Game_BattleAction
  176. #--------------------------------------------------------------------------
  177. # ● 生成特技以及物品目标
  178. #     obj : 特技以及物品
  179. #--------------------------------------------------------------------------

  180.   def make_obj_targets(obj)
  181.     targets = []
  182.     # 范围为所有人时
  183.     if obj.scope == "ALL_SCOPE"
  184.       if @target_index < $game_troop.existing_members.size
  185.         targets.push($game_troop.existing_members[@target_index])
  186.       else
  187.         party_index = @target_index - $game_troop.existing_members.size
  188.         targets.push($game_party.existing_members[party_index])
  189.       end
  190.     elsif obj.scope == "EVERYONE"
  191.       targets = opponents_unit.existing_members + friends_unit.existing_members
  192.     elsif obj.for_opponent?
  193.       if obj.for_random?
  194.         if obj.for_one?         # 敌随机单体
  195.           number_of_targets = 1
  196.         elsif obj.for_two?      # 敌随机二体
  197.           number_of_targets = 2
  198.         else                    # 敌随机三体
  199.           number_of_targets = 3
  200.         end
  201.         number_of_targets.times do
  202.           targets.push(opponents_unit.random_target)
  203.         end
  204.       elsif obj.dual?           # 敌单体连续
  205.         targets.push(opponents_unit.smooth_target(@target_index))
  206.         targets += targets
  207.       elsif obj.for_one?        # 敌单体
  208.         targets.push(opponents_unit.smooth_target(@target_index))
  209.       else                      # 敌全体
  210.         targets += opponents_unit.existing_members
  211.       end
  212.     elsif obj.for_user?         # 使用者
  213.       targets.push(battler)
  214.     elsif obj.for_dead_friend?
  215.       if obj.for_one?           # 我方单体(无法行动)
  216.         targets.push(friends_unit.smooth_dead_target(@target_index))
  217.       else                      # 我方全体(无法行动)
  218.         targets += friends_unit.dead_members
  219.       end
  220.     elsif obj.for_friend?
  221.       if obj.for_one?           # 我方单体
  222.         targets.push(friends_unit.smooth_target(@target_index))
  223.       else                      # 我方全体
  224.         targets += friends_unit.existing_members
  225.       end
  226.     end
  227.     return targets.compact
  228.   end
  229. end
复制代码

点评

汗~好像是P叔大大的这个全屏圣光是对敌我双方的诶,我想要的是可以选择施放在己方全体 或者 敌方全体,可以改成那样的吗~?  发表于 2012-9-29 22:35
《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-9-17
帖子
29
6
 楼主| 发表于 2012-9-29 22:54:21 | 只看该作者
本帖最后由 Zale 于 2012-9-29 22:55 编辑

全屏圣光是作用在敌我双方的,而我想要的是可以像圣光那样,有选择性地能弹出施放在我方全体还是敌方全体 那样的选项指令,辛苦P叔了,麻烦再修改一下吧{:2_249:}
剑与电的浪漫由自己创造~
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4699
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

7
发表于 2012-9-29 23:36:01 | 只看该作者
本帖最后由 protosssonny 于 2012-9-29 23:45 编辑
Zale 发表于 2012-9-29 16:35
好像修复后没啥问题了!再次感谢!~

全屏圣光是作用在敌我双方的,而我想要的是可以像圣光那样,有选 ...



楼主动动嘴,P叔无限累。
已经是第3次帮助LZ定制脚本了。@Luciffer @delv25求奖励啊。
终于改好了: Project1.rar (240.5 KB, 下载次数: 43)
  1. #==============================================================================
  2. # ■ Scene_Title
  3. #------------------------------------------------------------------------------
  4. #  处理标题画面的类。
  5. #==============================================================================
  6. class Scene_Title
  7.   # 载入数据库时调用
  8.   # 将描述中带有 <范围为所有人> 的技能的范围设置为所有人
  9.   def check_special_skill_scope
  10.     for i in $data_skills
  11.       next if i == nil
  12.       if i.note.match("<范围为所有人>")
  13.         i.scope = "ALL_SCOPE"
  14.       elsif i.note.match("<范围为全体>")
  15.         i.scope = "EVERYONE"
  16.       elsif i.note.match("<范围为部分>")
  17.         i.scope = "PART"  
  18.       end
  19.     end
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 载入数据库
  23.   #--------------------------------------------------------------------------
  24.   alias load_database_old load_database if
  25.     !method_defined? :load_database_old
  26.   def load_database
  27.     load_database_old
  28.     check_special_skill_scope
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 载入战斗测试用的数据库
  32.   #--------------------------------------------------------------------------
  33.   alias load_bt_database_old load_bt_database if
  34.     !method_defined? :load_bt_database_old
  35.   def load_bt_database
  36.     load_bt_database_old
  37.     check_special_skill_scope
  38.   end
  39. end

  40. #==============================================================================
  41. # ■ Window_TargetAll
  42. #------------------------------------------------------------------------------
  43. #  战斗画面中选择行动对象的所有角色(照猫画虎,仿照 Window_TargetEnemy 写就行了)
  44. #==============================================================================

  45. class Window_TargetAll < Window_Command
  46.   #--------------------------------------------------------------------------
  47.   # ● 初始化对象
  48.   #--------------------------------------------------------------------------
  49.   def initialize
  50.     commands = []
  51.     @targets = []
  52.     for target in $game_troop.members + $game_party.members
  53.       next unless target.exist?
  54.       commands.push(target.name)
  55.       @targets.push(target)
  56.     end
  57.     super(416, commands, 2, 4)
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 获取角色对象
  61.   #--------------------------------------------------------------------------
  62.   def target
  63.     return @targets[@index]
  64.   end
  65. end

  66. #==============================================================================
  67. # ■ Window_TargetEnemy
  68. #------------------------------------------------------------------------------
  69. #  在战斗画面,选择要攻击的敌人的窗口。
  70. #==============================================================================

  71. class Window_Part < Window_Command
  72.   #--------------------------------------------------------------------------
  73.   # ● 初始化对像
  74.   #--------------------------------------------------------------------------
  75.   def initialize
  76.     commands = ["所有队友","所有敌人"]
  77.     super(416, commands, 2, 4)
  78.   end
  79. end

  80. #==============================================================================
  81. # ■ Scene_Battle
  82. #------------------------------------------------------------------------------
  83. #  处理战斗画面的类。
  84. #==============================================================================

  85. class Scene_Battle
  86.   #--------------------------------------------------------------------------
  87.   # ● 确定特技
  88.   #--------------------------------------------------------------------------
  89.   def determine_skill
  90.     @active_battler.action.set_skill(@skill.id)
  91.     @skill_window.active = false
  92.     # 范围为所有人时开始选择所有人
  93.     if @skill.scope == "ALL_SCOPE"
  94.       start_target_all_selection
  95.     elsif @skill.scope == "PART"
  96.       start_target_part_selection  
  97.     elsif @skill.need_selection?
  98.       if @skill.for_opponent?
  99.         start_target_enemy_selection
  100.       else
  101.         start_target_actor_selection
  102.       end
  103.     else
  104.       end_skill_selection
  105.       next_actor
  106.     end
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 开始选择对象的所有角色
  110.   #--------------------------------------------------------------------------
  111.   def start_target_all_selection
  112.     @target_all_window = Window_TargetAll.new
  113.     @target_all_window.y = @info_viewport.rect.y
  114.     @info_viewport.rect.x += @target_all_window.width
  115.     @info_viewport.ox += @target_all_window.width
  116.     @actor_command_window.active = false
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ● 选择对象所有角色结束
  120.   #--------------------------------------------------------------------------
  121.   def end_target_all_selection
  122.     @info_viewport.rect.x -= @target_all_window.width
  123.     @info_viewport.ox -= @target_all_window.width
  124.     @target_all_window.dispose
  125.     @target_all_window = nil
  126.     if @actor_command_window.index == 0
  127.       @actor_command_window.active = true
  128.     end
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 更新选择对象敌方角色
  132.   #--------------------------------------------------------------------------
  133.   def update_target_all_selection
  134.     @target_all_window.update
  135.     if Input.trigger?(Input::B)
  136.       Sound.play_cancel
  137.       end_target_all_selection
  138.     elsif Input.trigger?(Input::C)
  139.       Sound.play_decision
  140.       # 默认系统传递给 action 的是角色或敌人在队伍中的索引
  141.       # 这里传递的是窗口选项的索引
  142.       # 具体见下面对于 Game_BattleAction 的修改
  143.       @active_battler.action.target_index = @target_all_window.index
  144.       end_target_all_selection
  145.       end_skill_selection
  146.       end_item_selection
  147.       next_actor
  148.     end
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ● 开始部分目标选择
  152.   #--------------------------------------------------------------------------
  153.   def start_target_part_selection
  154.     @target_part_window = Window_Part.new
  155.     @target_part_window.index = 0
  156.     @target_part_window.active = true
  157.     @target_part_window.y = @info_viewport.rect.y
  158.     @info_viewport.rect.x += @target_part_window.width
  159.     @info_viewport.ox += @target_part_window.width
  160.     @actor_command_window.active = false
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 结束部分目标选择
  164.   #--------------------------------------------------------------------------
  165.   def end_target_part_selection
  166.     @info_viewport.rect.x -= @target_part_window.width
  167.     @info_viewport.ox -= @target_part_window.width
  168.     @target_part_window.dispose
  169.     @target_part_window = nil
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 更新部分目标选择
  173.   #--------------------------------------------------------------------------
  174.   def update_target_part_selection
  175.     @target_part_window.update
  176.     if Input.trigger?(Input::B)
  177.       Sound.play_cancel
  178.       end_target_part_selection
  179.     elsif Input.trigger?(Input::C)
  180.       Sound.play_decision
  181.       @active_battler.action.target_index = @target_part_window.index
  182.       end_target_part_selection
  183.       end_skill_selection
  184.       end_item_selection
  185.       next_actor
  186.     end
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 更新画面
  190.   #--------------------------------------------------------------------------
  191.   def update
  192.     super
  193.     update_basic(true)
  194.     update_info_viewport                  # 更新显示信息的视区
  195.     if $game_message.visible
  196.       @info_viewport.visible = false
  197.       @message_window.visible = true
  198.     end
  199.     unless $game_message.visible          # 在显示消息以外的情况
  200.       return if judge_win_loss            # 判断胜败
  201.       update_scene_change
  202.       # 选择所有人的窗口存在时更新
  203.       if @target_all_window != nil
  204.         update_target_all_selection       # 选择所有对象
  205.       elsif @target_part_window != nil
  206.         update_target_part_selection      # 选择部分对象  
  207.       elsif @target_enemy_window != nil
  208.         update_target_enemy_selection     # 选择敌方对象
  209.       elsif @target_actor_window != nil
  210.         update_target_actor_selection     # 选择对象角色
  211.       elsif @skill_window != nil
  212.         update_skill_selection            # 选择特技
  213.       elsif @item_window != nil
  214.         update_item_selection             # 选择物品
  215.       elsif @party_command_window.active
  216.         update_party_command_selection    # 选择同伴指令
  217.       elsif @actor_command_window.active
  218.         update_actor_command_selection    # 选择角色指令
  219.       else
  220.         process_battle_event              # 战斗处理
  221.         process_action                    # 战斗行动
  222.         process_battle_event              # 处理战斗事件
  223.       end
  224.     end
  225.   end
  226. end

  227. #==============================================================================
  228. # ■ Game_BattleAction
  229. #------------------------------------------------------------------------------
  230. #  处理行动 (战斗中的行动) 的类。这个类在 Game_Battler 类
  231. # 的内部使用。
  232. #==============================================================================

  233. class Game_BattleAction
  234. #--------------------------------------------------------------------------
  235. # ● 生成特技以及物品目标
  236. #     obj : 特技以及物品
  237. #--------------------------------------------------------------------------

  238.   def make_obj_targets(obj)
  239.     targets = []
  240.     # 范围为所有人时
  241.     if obj.scope == "ALL_SCOPE"
  242.       if @target_index < $game_troop.existing_members.size
  243.         targets.push($game_troop.existing_members[@target_index])
  244.       else
  245.         party_index = @target_index - $game_troop.existing_members.size
  246.         targets.push($game_party.existing_members[party_index])
  247.       end
  248.     elsif obj.scope == "EVERYONE"
  249.       targets = opponents_unit.existing_members + friends_unit.existing_members
  250.     elsif obj.scope == "PART"
  251.       if @target_index == 0
  252.         targets = friends_unit.existing_members
  253.       elsif @target_index == 1
  254.         targets = opponents_unit.existing_members
  255.       end
  256.     elsif obj.for_opponent?
  257.       if obj.for_random?
  258.         if obj.for_one?         # 敌随机单体
  259.           number_of_targets = 1
  260.         elsif obj.for_two?      # 敌随机二体
  261.           number_of_targets = 2
  262.         else                    # 敌随机三体
  263.           number_of_targets = 3
  264.         end
  265.         number_of_targets.times do
  266.           targets.push(opponents_unit.random_target)
  267.         end
  268.       elsif obj.dual?           # 敌单体连续
  269.         targets.push(opponents_unit.smooth_target(@target_index))
  270.         targets += targets
  271.       elsif obj.for_one?        # 敌单体
  272.         targets.push(opponents_unit.smooth_target(@target_index))
  273.       else                      # 敌全体
  274.         targets += opponents_unit.existing_members
  275.       end
  276.     elsif obj.for_user?         # 使用者
  277.       targets.push(battler)
  278.     elsif obj.for_dead_friend?
  279.       if obj.for_one?           # 我方单体(无法行动)
  280.         targets.push(friends_unit.smooth_dead_target(@target_index))
  281.       else                      # 我方全体(无法行动)
  282.         targets += friends_unit.dead_members
  283.       end
  284.     elsif obj.for_friend?
  285.       if obj.for_one?           # 我方单体
  286.         targets.push(friends_unit.smooth_target(@target_index))
  287.       else                      # 我方全体
  288.         targets += friends_unit.existing_members
  289.       end
  290.     end
  291.     return targets.compact
  292.   end
  293. end
复制代码

点评

P叔辛苦,脚本绝赞,感激不尽  发表于 2012-9-29 23:50

评分

参与人数 1梦石 +2 收起 理由
咕噜 + 2 认可答案 附赠66RPG提供的好人卡一张^_^.

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-9-17
帖子
29
8
 楼主| 发表于 2012-9-29 23:45:22 | 只看该作者
protosssonny 发表于 2012-9-29 23:36
楼主动动嘴,P叔无限累。
已经是第3次帮助LZ定制脚本了。@Luciffer @delv25求奖励啊。
终于改好了: ...

感激涕零, 如此迅速地给予回应并耐心地修改脚本,作为一个伸手党被P叔的古道热肠深深地感动了 > <~

好人有好报,祝福P叔今后RP无限好,今后还请多多指教,在此鞠躬致敬,以上。

点评

嗷呜~~~  发表于 2012-9-29 23:47
剑与电的浪漫由自己创造~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 18:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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