Project1

标题: 怎样将技能的效果范围设置成敌我双方? [打印本页]

作者: Zale    时间: 2012-9-28 20:06
标题: 怎样将技能的效果范围设置成敌我双方?
本帖最后由 Zale 于 2012-9-29 13:58 编辑

在创造最基本的补血技能设置的时候发现,效果范围只能限定在我方或是敌方,没有办法将范围拓展成双方吗?
作者: 彭格列第XI代    时间: 2012-9-28 20:50
你要打敌人或者帮敌人补血- -?
作者: Zale    时间: 2012-9-28 20:56
彭格列第XI代 发表于 2012-9-28 20:50
你要打敌人或者帮敌人补血- -?

嗯啊,因为如果把指定敌人的属性有效度改成F的话,回复系技能不就可以对其造成伤害了吗?这样一来就实现了神圣系的补血技能也可以对不死系的怪物造成伤害这一设定>_<~
作者: 彭格列第XI代    时间: 2012-9-28 21:09


嘛- -ME是新手只会笨方法~伤害啥的改成用变量计算下就好了加个动画效果啥的就可以了= =
算了还是叫P叔吧
@protosssonny
作者: Zale    时间: 2012-9-28 21:16
本帖最后由 Zale 于 2012-9-28 21:17 编辑
彭格列第XI代 发表于 2012-9-28 21:09
嘛- -ME是新手只会笨方法~伤害啥的改成用变量计算下就好了加个动画效果啥的就可以了= =
算了还是叫P叔吧{ ...


那个...我的初衷是在不影响技能原本给队友补血的效果下,同时也能释放在敌人身上,给那些对此属性有效度为F的敌人造成伤害,XI代巨巨这样的设定好像没啥意义?
作者: 等级君    时间: 2012-9-28 22:09
建议利用公共事件。

使用技能时触发公共事件,公共事件里面设定再使用个技能(触发效果,技能名字要和原来的相同)

这样很简单耶  ~~
作者: Zale    时间: 2012-9-29 09:19
再次明确下我的疑问,如何将一回合内的技能对象拓展为敌方或者我方,而不是同时释放在双方上,而且能由自己自由地决定释放在哪一方上
作者: 怪蜀黍    时间: 2012-9-29 12:49
本帖最后由 protosssonny 于 2012-9-29 15:02 编辑

收到召唤,P叔来了
使用方法:在需要以所有人为范围目标的技能的注释栏中输入<范围为所有人>,尖括号不能省略
拉尔夫的圣光对非不死系有恢复效果,对不死系有伤害效果。
所有主角和史莱姆均为非不死系,骷髅为不死系。
范例附件: Project1.rar (240.11 KB, 下载次数: 58)
脚本:
  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 < $game_troop.existing_members.size
  183.         targets.push($game_troop.existing_members[@target_index])
  184.       else
  185.         party_index = @target_index - $game_troop.existing_members.size
  186.         targets.push($game_party.existing_members[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
复制代码

作者: Zale    时间: 2012-9-29 13:58
谢谢P叔,问题解决了




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