Project1

标题: 怎么设置没有使用者,能同时攻击敌人方和主角方的技能? [打印本页]

作者: 神秘影子    时间: 2015-5-30 23:17
标题: 怎么设置没有使用者,能同时攻击敌人方和主角方的技能?
本帖最后由 神秘影子 于 2015-6-7 21:28 编辑

要求:
1.没有使用者,或没有主角、敌人中的使用效果
2.同时攻击敌我两方,均造成伤害,用伤害显示脚本能够显示

因为需要一个全场性的技能,但是并不知道怎么做,直接扣HP好像无法在伤害脚本中显示。
主要目的就是造成伤害且显示

谢谢
真是麻烦各位了,感谢!似乎不好做吗?选择事件不能显示伤害(横版战斗自带的伤害显示)选择技能会有使用信息。这个效果原意是使用某物过多破坏平衡引发全场诅咒。要不干脆设计成状态好了?
作者: taroxd    时间: 2015-5-31 11:34
执行一个公共事件不行吗 - - 技能效果全用事件写
作者: 企鹅达达    时间: 2015-5-31 23:53
http://himeworks.com/2014/03/skill-links/
嗯,这个脚本可以做到,先用本身的技能,之后接着用备注设置的技能,记忆中是没动画的,如果有动画那就用另一个
Yanfly Engine Ace - Follow-Up Skill 这个网址要用代理才能上,你可以试着谷歌一下?
反正两个脚本一个有动画一个没动画
作者: 午睡的风铃    时间: 2015-6-1 03:24
本帖最后由 午睡的风铃 于 2015-6-1 03:26 编辑
  1. #==============================================================================
  2. # +++ MOG - Scope EX (v1.3) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # http://www.atelier-rgss.com/
  6. #==============================================================================
  7. # Adiciona a característica de área de impacto da ação baseado na posição
  8. # e o tamanho do sprite do alvo.
  9. # Por exemplo, uma habilidade de explosão vai acertar apenas os inimigos que
  10. # estiverem em volta do alvo inicial.
  11. # O script adiciona também a função de incluir todos os alvos da tela, aliados
  12. # e inimigos juntos.
  13. #==============================================================================
  14. # Adicione a Tag abaixo na caixa de comentários de notas para definir a área de
  15. # impacto da habilidade.
  16. #
  17. # <Scope Range = X1 - X2 - Y1 - Y2>
  18. #
  19. #            Y1
  20. #            
  21. #       X1        X2
  22. #            
  23. #            Y2
  24. #
  25. # Ex ->      <Scope Range = (100 - 32 - 64 - 32>
  26. #
  27. #==============================================================================
  28. # Incluir todos os alvos da tela. (Inimigos e Aliados)
  29. #==============================================================================
  30. #
  31. # <All Targets>
  32. #
  33. #==============================================================================
  34. # Histórico
  35. #==============================================================================
  36. # v1.3 Melhoria no cálculo de área em alvos únicos.
  37. # v1.2 Melhoria no sistema de calculo baseado no tamanho do sprite.
  38. # v1.1 Possibilidade de definir a área específica para cada lado.
  39. #   
  40. #==============================================================================

  41. $imported = {} if $imported.nil?
  42. $imported[:mog_scope_ex] = true

  43. module MOG_SCOPE_EX
  44.   #============================================================================
  45.   # Definição do modo que vai ser calculado a área do alvo.
  46.   #
  47.   # 0 - Baseado apenas na posição X e Y. (ignorando o tamanho do sprite)
  48.   # 1 - Baseado na posição X e Y + o tamanho do sprite do alvo.
  49.   #     (Alvos grandes tem maior area de impacto)
  50.   #
  51.   #============================================================================
  52.   SCOPE_TYPE = 1
  53.   #============================================================================
  54.   # Definição da porcentágem total do tamanho sprite, para ser efetuado o
  55.   # calculo. (Apenas se o valor do SCOPE_TYPE estiver no 1)
  56.   # Por exemplo, definindo o valor de 100% o sistema vai considerar 100% do
  57.   # tamanho do sprite para fazer o calculo.
  58.   #============================================================================
  59.   # SPRITE_SIZE_RANGE = [WIDTH %, HEIGHT %]  
  60.   #============================================================================
  61.   SPRITE_SIZE_RANGE = [80,70]  
  62. end

  63. #==============================================================================
  64. # ■ Game Battler
  65. #==============================================================================
  66. class Game_Battler < Game_BattlerBase
  67.   attr_accessor :sprite_size
  68.   
  69.   #--------------------------------------------------------------------------
  70.   # * Initialize
  71.   #--------------------------------------------------------------------------
  72.   alias mog_scope_ex_initialize initialize
  73.   def initialize
  74.       @sprite_size = [0,0,true]
  75.       mog_scope_ex_initialize
  76.   end

  77. end

  78. #==============================================================================
  79. # ■ Sprite Battler
  80. #==============================================================================
  81. class Sprite_Battler < Sprite_Base

  82.   #--------------------------------------------------------------------------
  83.   # * Update Bitmap
  84.   #--------------------------------------------------------------------------
  85.   alias mog_scope_ex_update_bitmap update_bitmap
  86.   def update_bitmap
  87.       @battler.sprite_size = [bitmap.width,bitmap.height,true] if bitmap
  88.       mog_scope_ex_update_bitmap
  89.   end

  90. end

  91. #==============================================================================
  92. # ■ Scene Battle
  93. #==============================================================================
  94. class Scene_Battle < Scene_Base

  95.   #--------------------------------------------------------------------------
  96.   # * Show Normal Animation
  97.   #--------------------------------------------------------------------------
  98.   alias mog_scope_ex_show_normal_animation show_normal_animation
  99.   def show_normal_animation(targets, animation_id, mirror = false)
  100.       new_targets = []
  101.       targets.each do |t| new_targets.push(t) if t.sprite_size[2] end
  102.       targets = new_targets
  103.       mog_scope_ex_show_normal_animation(targets, animation_id, mirror)
  104.       targets.each do |t| t.sprite_size[2] = true end
  105.   end  
  106.   
  107. end

  108. #==============================================================================
  109. # ■ Game Action
  110. #==============================================================================
  111. class Game_Action
  112.   include MOG_SCOPE_EX
  113.   #--------------------------------------------------------------------------
  114.   # * Make Targets
  115.   #--------------------------------------------------------------------------
  116.   def make_targets
  117.       if !forcing && subject.confusion?
  118.          confusion_target
  119.       elsif item.for_opponent?
  120.          targets_for_opponents
  121.       elsif item.for_friend?
  122.          targets_for_friends
  123.       else
  124.         []
  125.       end
  126.   end  
  127.   
  128.   #--------------------------------------------------------------------------
  129.   # * Confusion Target
  130.   #--------------------------------------------------------------------------
  131.   def confusion_target
  132.       case subject.confusion_level
  133.       when 1 ; new_targets = make_new_targets([opponents_unit.random_target],0)
  134.       when 2
  135.           if rand(2) == 0
  136.             new_targets = make_new_targets([opponents_unit.random_target],0)
  137.           else
  138.             new_targets = make_new_targets([friends_unit.random_target],1)
  139.           end
  140.       else
  141.            new_targets = make_new_targets([friends_unit.random_target],1)  
  142.       end
  143.   end
  144.   
  145.   #--------------------------------------------------------------------------
  146.   # * Targets for Opponents
  147.   #--------------------------------------------------------------------------
  148.   def targets_for_opponents
  149.       if item.for_random?
  150.          org_target = Array.new(item.number_of_targets) { opponents_unit.random_target }
  151.          new_targets = make_new_targets(org_target,0)
  152.       elsif item.for_one?
  153.          num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  154.          if @target_index < 0
  155.             org_target = [opponents_unit.random_target] * num
  156.             new_targets = make_new_targets(org_target,0)
  157.          else
  158.             org_target = [opponents_unit.smooth_target(@target_index)] * num
  159.             new_targets = make_new_targets(org_target,0)
  160.          end
  161.        else
  162.           return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  163.           return opponents_unit.alive_members
  164.       end
  165.   end
  166.   
  167.   #--------------------------------------------------------------------------
  168.   # * All Targets
  169.   #--------------------------------------------------------------------------
  170.   def all_targets
  171.       return true if @item.object.note =~ /<All Targets>/
  172.       return false
  173.   end
  174.   
  175.   #--------------------------------------------------------------------------
  176.   # * Targets for Allies
  177.   #--------------------------------------------------------------------------
  178.   def targets_for_friends
  179.     if item.for_user?
  180.        new_targets = make_new_targets([subject],1)      
  181.     elsif item.for_dead_friend?
  182.         if item.for_one?
  183.            org_target = [friends_unit.smooth_dead_target(@target_index)]
  184.            new_targets = make_new_targets(org_target,2)   
  185.         else
  186.            org_target = friends_unit.dead_members
  187.            new_targets = make_new_targets(org_target,2)           
  188.         end
  189.     elsif item.for_friend?
  190.          if item.for_one?
  191.             org_target = [friends_unit.smooth_target(@target_index)]
  192.             new_targets = make_new_targets(org_target,1)   
  193.          else
  194.             return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  195.             return friends_unit.alive_members
  196.          end
  197.     end
  198.   end
  199.   
  200.   #--------------------------------------------------------------------------
  201.   # * Make New Targets
  202.   #--------------------------------------------------------------------------
  203.   def make_new_targets(target,type = 0)
  204.       targets = []
  205.       if all_targets
  206.         members = (opponents_unit.alive_members + friends_unit.alive_members) if type <= 1
  207.         members = friends_unit.dead_members if type == 2      
  208.       else
  209.         members = opponents_unit.alive_members if type == 0
  210.         members = friends_unit.alive_members if type == 1
  211.         members = friends_unit.dead_members if type == 2
  212.       end
  213.       for t in target
  214.           for m in members
  215.               targets.push(m) if t == m
  216.               next if t == m
  217.              (targets.push(m); m.sprite_size[2] = false) if scope_range?(t,m)            
  218.           end
  219.       end
  220.       return targets
  221.   end
  222.   
  223.   #--------------------------------------------------------------------------
  224.   # * Scope Range
  225.   #--------------------------------------------------------------------------
  226.   def scope_range?(user,target)
  227.       t_r2 = [user.screen_x, user.screen_y] rescue nil
  228.       t_r3 = [target.screen_x, target.screen_y] rescue nil
  229.       return false if t_r2 == nil or t_r3 == nil
  230.       s_r = [0,0,0,0] ; s_p = [0,0]
  231.       s_r = [$1.to_i,$2.to_i,$3.to_i,$4.to_i] if @item.object.note =~ /<Scope Range = (\d+) - (\d+) - (\d+) - (\d+)>/
  232.       if SCOPE_TYPE > 0
  233.          s_p = [target.sprite_size[0] / 2, target.sprite_size[1]]
  234.          s_p[0] = s_p[0] * SPRITE_SIZE_RANGE[0] / 100
  235.          s_p[1] = s_p[1] * SPRITE_SIZE_RANGE[1] / 100
  236.       end
  237.       return false if !t_r3[0].between?(t_r2[0] - (s_r[0] + s_p[0]), t_r2[0] + (s_r[1] + s_p[0]))
  238.       return false if !t_r3[1].between?(t_r2[1] - s_r[2], t_r2[1] + s_r[3] + s_p[1])
  239.       return true
  240.   end  
  241.   
  242. end
复制代码
技能备注里写
<Scope Range = X1 - X2 - Y1 - Y2>
上面的X和Y是范围
 Y1
X1 X2
 Y2
比如<Scope Range = 30 - 30 - 320 - 0>
目标两侧30像素  上方320像素范围内目标

<All Targets>
敌我全目标,这个貌似需要把技能范围设为敌全体。

上面的两个都写的话,貌似是范围内的目标不分敌我,我没试过。
作者: 紫苍焰    时间: 2015-6-1 07:33
……
话说,用强制行动的效果不行吗?
第一个技能敌方全体伤害,同时用公共事件强制执行第二个技能我方全体伤害,这俩填一样的公式……
这么做很难吗?
作者: 神秘影子    时间: 2015-6-6 15:42
紫苍焰 发表于 2015-6-1 07:33
……
话说,用强制行动的效果不行吗?
第一个技能敌方全体伤害,同时用公共事件强制执行第二个技能我方全体 ...

要对我方使用技能的话,必须选择一个敌方使用者吧?
这样的话,如果我选1号敌人作为使用者,而1号被杀死了,还能正常进行吗?
作者: taroxd    时间: 2015-6-6 16:45
我还是建议用事件,不要用技能了吧。
  1. SceneManager.scene.instance_eval {
  2.   @log_window.add_text("这段脚本可以添加战斗信息,不过我没有测试。")
  3. }
复制代码

作者: 紫苍焰    时间: 2015-6-7 11:25
本帖最后由 紫苍焰 于 2015-6-7 11:34 编辑
神秘影子 发表于 2015-6-6 15:42
要对我方使用技能的话,必须选择一个敌方使用者吧?
这样的话,如果我选1号敌人作为使用者,而1号被杀死 ...

……
设置技能1。效果范围是敌方全体,伤害。
设置技能2。效果范围是我方全体,伤害。
技能1填写所有能填写的,技能2除了公式和技能1一样之外啥都不用填。
技能1里添加公共事件,强制执行技能2,目标填上一个目标也没关系。
试试看效果。
另外,技能2推荐选上必定命中。
以上。
作者: jianyulei    时间: 2015-6-7 13:34
技能使用者的问题是个难题,我游戏有个支援攻击的系统,援助者不参加战斗,但会在固定回合发动固定技能,可是因为技能发动者问题一直很难办,最后技能发动给了主角,并脑补男主一挂支援者立刻吓的魂飞破胆逃之夭夭……
作者: 紫苍焰    时间: 2015-6-8 08:59
本帖最后由 紫苍焰 于 2015-6-8 09:02 编辑
jianyulei 发表于 2015-6-7 13:34
技能使用者的问题是个难题,我游戏有个支援攻击的系统,援助者不参加战斗,但会在固定回合发动固定技能,可 ...


……
强制战斗指令可以以队伍中的任何一个角色为对象……
也就是说你可以给敌群添加X回合执行一次的事件……

作者: 3106345123    时间: 2015-6-14 17:30
某合集找到的
RUBY 代码复制
  1. #==============================================================================
  2. # ★ RGSS3_スコープ拡張 Ver1.01
  3. #==============================================================================
  4. =begin
  5.  
  6. 作者:tomoaky
  7. webサイト:ひきも記 ([url]http://hikimoki.sakura.ne.jp/[/url])
  8.  
  9. 通常攻撃の効果範囲にランダム化、全体化などを追加します、
  10. アクター、職業、武器、防具のメモ欄に以下のタグを書き込んでください。
  11.   <通常攻撃全体化>
  12.   通常攻撃の効果範囲が敵全体になります
  13.  
  14.   <通常攻撃ランダム化>
  15.   通常攻撃の効果範囲が敵 1 体ランダムになります
  16.   ただし、攻撃追加回数が設定されている場合は、ランダムなターゲットへ
  17.   追加攻撃が発生します。
  18.  
  19. スキル(アイテム)の効果範囲を『敵味方全体』にする、
  20. スキル、アイテムのメモ欄に以下のタグを書き込んでください。
  21.  <敵味方全体>
  22.  
  23. スキル(アイテム)の効果範囲から使用者を除外する、
  24. スキル、アイテムのメモ欄に以下のタグを書き込んでください。
  25.   <使用者除外>
  26.  
  27. 2012.01.11  Ver1.01
  28.  混乱時にエラー落ちする不具合を修正
  29.  
  30. 2011.12.19 Ver1.0
  31.   公開
  32.  
  33. =end
  34.  
  35. #==============================================================================
  36. # □ 設定項目
  37. #==============================================================================
  38. module TMSCOPEEX
  39.   # 全体化に攻撃追加回数の設定を適用するかどうか、false にすれば
  40.   # 全体化攻撃はすべての敵に1回だけダメージを与えるようになります。
  41.   # 『攻撃追加回数8の武器』と『通常攻撃全体化の装飾品』などを
  42.   # 組み合わせられるとまずい場合は false にしてください。
  43.   APPLY_ALL_REPEATS = true
  44.  
  45.   # 混乱時にも全体化を適用するかどうか、false なら混乱時は単体攻撃になります
  46.   APPLY_ALL_CONFUSION = true
  47. end
  48.  
  49. #==============================================================================
  50. # ■ RPG::UsableItem
  51. #==============================================================================
  52. class RPG::UsableItem
  53.   #--------------------------------------------------------------------------
  54.   # ● 対象の選択操作が必要か否かを判定する
  55.   #--------------------------------------------------------------------------
  56.   alias tmscopeex_usable_item_need_selection? need_selection?
  57.   def need_selection?
  58.     tmscopeex_usable_item_need_selection? && !for_field?
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ○ 敵味方全体スキルかどうかを返す
  62.   #--------------------------------------------------------------------------
  63.   def for_field?
  64.     /<敵味方全体>/ =~ @note
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ○ 使用者除外スキルかどうかを返す
  68.   #--------------------------------------------------------------------------
  69.   def for_not_user?
  70.     /<使用者除外>/ =~ @note
  71.   end
  72. end
  73.  
  74. #==============================================================================
  75. # ■ Game_Action
  76. #==============================================================================
  77. class Game_Action
  78.   #--------------------------------------------------------------------------
  79.   # ● 混乱時のターゲット
  80.   #--------------------------------------------------------------------------
  81.   alias tmscopeex_game_action_confusion_target confusion_target
  82.   def confusion_target
  83.     if subject.actor? && attack? &&
  84.         TMSCOPEEX::APPLY_ALL_CONFUSION && subject.attack_for_all?
  85.       case subject.confusion_level
  86.       when 1
  87.         opponents_unit.alive_members
  88.       when 2
  89.         if rand(2) == 0
  90.           opponents_unit.alive_members
  91.         else
  92.           friends_unit.alive_members
  93.         end
  94.       else
  95.         friends_unit.alive_members
  96.       end
  97.     else
  98.       tmscopeex_game_action_confusion_target
  99.     end
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 敵に対するターゲット
  103.   #--------------------------------------------------------------------------
  104.   alias tmscopeex_game_action_targets_for_opponents targets_for_opponents
  105.   def targets_for_opponents
  106.     if item.for_field?                    # 敵味方全体
  107.       opponents_unit.alive_members + friends_unit.alive_members -
  108.         (item.for_not_user? ? [subject] : [])
  109.     elsif subject.actor? && attack?
  110.       if subject.attack_for_all?          # 全体化
  111.         num = 1
  112.         num += subject.atk_times_add.to_i if TMSCOPEEX::APPLY_ALL_REPEATS
  113.         opponents_unit.alive_members * num
  114.       elsif subject.attack_for_random?    # ランダム化
  115.         Array.new(1 + subject.atk_times_add.to_i) { opponents_unit.random_target }
  116.       else
  117.         num = 1 + subject.atk_times_add.to_i
  118.         if @target_index < 0
  119.           [opponents_unit.random_target] * num
  120.         else
  121.           [opponents_unit.smooth_target(@target_index)] * num
  122.         end
  123.       end
  124.     else
  125.       tmscopeex_game_action_targets_for_opponents
  126.     end
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 味方に対するターゲット
  130.   #--------------------------------------------------------------------------
  131.   alias tmscopeex_game_action_targets_for_friends targets_for_friends
  132.   def targets_for_friends
  133.     tmscopeex_game_action_targets_for_friends -
  134.       (item.for_not_user? ? [subject] : [])
  135.   end
  136. end
  137.  
  138. #==============================================================================
  139. # ■ Game_Actor
  140. #==============================================================================
  141. class Game_Actor
  142.   #--------------------------------------------------------------------------
  143.   # ○ 通常攻撃が全体化されているかを返す
  144.   #--------------------------------------------------------------------------
  145.   def attack_for_all?
  146.     text = self.actor.note + self.class.note
  147.     equips.compact.each {|item| text += item.note }
  148.     states.each {|state| text += state.note }
  149.     /<通常攻撃\s*全体化>/ =~ text
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ○ 通常攻撃がランダム化されているかを返す
  153.   #--------------------------------------------------------------------------
  154.   def attack_for_random?
  155.     text = self.actor.note + self.class.note
  156.     equips.compact.each {|item| text += item.note }
  157.     states.each {|state| text += state.note }
  158.     /<通常攻撃\s*ランダム化>/ =~ text
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ○ 通常攻撃のターゲット選択が必要かどうかを返す
  162.   #--------------------------------------------------------------------------
  163.   def need_attack_selection?
  164.     (!attack_for_all? && !attack_for_random?)
  165.   end
  166. end
  167.  
  168. #==============================================================================
  169. # ■ Scene_Battle
  170. #==============================================================================
  171. class Scene_Battle
  172.   #--------------------------------------------------------------------------
  173.   # ● コマンド[攻撃] 【再定義】
  174.   #--------------------------------------------------------------------------
  175.   def command_attack
  176.     BattleManager.actor.input.set_attack
  177.     if BattleManager.actor.need_attack_selection?
  178.       select_enemy_selection
  179.     else
  180.       next_command
  181.     end
  182.   end
  183. end

用法就不用我说了吧




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