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

Project1

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

[已经解决] 关于敌人仇恨脚本和MOG的技能范围脚本的冲突

[复制链接]

Lv1.梦旅人

梦石
0
星屑
173
在线时间
192 小时
注册时间
2011-3-13
帖子
48
跳转到指定楼层
1
发表于 2015-4-9 01:34:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这两个脚本因为都引用了Game Action的targets_for_opponents所以放在一起会有一个无效
脚本盲表示不知道该从哪里改
把脚本放上来求修改
  1. #==============================================================================
  2. # +++ MOG - Scope EX (v1.5) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # https://atelierrgss.wordpress.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.5 Correção de ativar o sistema sem fazer comentário na caixa de notas.
  37. # v1.4 Compatibilidade com MOG Sprite Actor.
  38. # v1.3 Melhoria no cálculo de área em alvos únicos.
  39. # v1.2 Melhoria no sistema de calculo baseado no tamanho do sprite.
  40. # v1.1 Possibilidade de definir a área específica para cada lado.
  41. #   
  42. #==============================================================================

  43. $imported = {} if $imported.nil?
  44. $imported[:mog_scope_ex] = true

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

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

  79. end

  80. #==============================================================================
  81. # ■ Sprite Battler
  82. #==============================================================================
  83. class Sprite_Battler < Sprite_Base

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

  92. end

  93. #==============================================================================
  94. # ■ Scene Battle
  95. #==============================================================================
  96. class Scene_Battle < Scene_Base

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

  110. #==============================================================================
  111. # ■ Game Action
  112. #==============================================================================
  113. class Game_Action
  114.   include MOG_SCOPE_EX
  115.   #--------------------------------------------------------------------------
  116.   # * Make Targets
  117.   #--------------------------------------------------------------------------
  118.   def make_targets
  119.       if $imported[:mog_battler_motion] != nil and $imported[:mog_sprite_actor] != nil
  120.          return @subject.pre_target if @subject != nil and @subject.pre_target != nil
  121.       end
  122.       if !forcing && subject.confusion?
  123.          confusion_target
  124.       elsif item.for_opponent?
  125.          targets_for_opponents
  126.       elsif item.for_friend?
  127.          targets_for_friends
  128.       else
  129.         []
  130.       end
  131.   end  
  132.   
  133.   #--------------------------------------------------------------------------
  134.   # * Confusion Target
  135.   #--------------------------------------------------------------------------
  136.   def confusion_target
  137.       case subject.confusion_level
  138.       when 1 ; new_targets = make_new_targets([opponents_unit.random_target],0)
  139.       when 2
  140.           if rand(2) == 0
  141.             new_targets = make_new_targets([opponents_unit.random_target],0)
  142.           else
  143.             new_targets = make_new_targets([friends_unit.random_target],1)
  144.           end
  145.       else
  146.            new_targets = make_new_targets([friends_unit.random_target],1)  
  147.       end
  148.   end
  149.   
  150.   #--------------------------------------------------------------------------
  151.   # * Targets for Opponents
  152.   #--------------------------------------------------------------------------
  153.   def targets_for_opponents
  154.       if item.for_random?
  155.          org_target = Array.new(item.number_of_targets) { opponents_unit.random_target }
  156.          new_targets = make_new_targets(org_target,0)
  157.       elsif item.for_one?
  158.          num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  159.          if @target_index < 0
  160.             org_target = [opponents_unit.random_target] * num
  161.             new_targets = make_new_targets(org_target,0)
  162.          else
  163.             org_target = [opponents_unit.smooth_target(@target_index)] * num
  164.             new_targets = make_new_targets(org_target,0)
  165.          end
  166.        else
  167.           return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  168.           return opponents_unit.alive_members
  169.       end
  170.   end
  171.   
  172.   #--------------------------------------------------------------------------
  173.   # * All Targets
  174.   #--------------------------------------------------------------------------
  175.   def all_targets
  176.       return true if @item.object.note =~ /<All Targets>/
  177.       return false
  178.   end
  179.   
  180.   #--------------------------------------------------------------------------
  181.   # * Targets for Allies
  182.   #--------------------------------------------------------------------------
  183.   def targets_for_friends
  184.     if item.for_user?
  185.        new_targets = make_new_targets([subject],1)      
  186.     elsif item.for_dead_friend?
  187.         if item.for_one?
  188.            org_target = [friends_unit.smooth_dead_target(@target_index)]
  189.            new_targets = make_new_targets(org_target,2)   
  190.         else
  191.            org_target = friends_unit.dead_members
  192.            new_targets = make_new_targets(org_target,2)           
  193.         end
  194.     elsif item.for_friend?
  195.          if item.for_one?
  196.             org_target = [friends_unit.smooth_target(@target_index)]
  197.             new_targets = make_new_targets(org_target,1)   
  198.          else
  199.             return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  200.             return friends_unit.alive_members
  201.          end
  202.     end
  203.   end
  204.   
  205.   #--------------------------------------------------------------------------
  206.   # * Make New Targets
  207.   #--------------------------------------------------------------------------
  208.   def make_new_targets(target,type = 0)
  209.       targets = []
  210.       if all_targets
  211.         members = (opponents_unit.alive_members + friends_unit.alive_members) if type <= 1
  212.         members = friends_unit.dead_members if type == 2      
  213.       else
  214.         members = opponents_unit.alive_members if type == 0
  215.         members = friends_unit.alive_members if type == 1
  216.         members = friends_unit.dead_members if type == 2
  217.       end
  218.       for t in target
  219.           for m in members
  220.               targets.push(m) if t == m
  221.               next if t == m
  222.              (targets.push(m); m.sprite_size[2] = false) if scope_range?(t,m)            
  223.           end
  224.       end
  225.       return targets
  226.   end
  227.   
  228.   #--------------------------------------------------------------------------
  229.   # * Scope Range
  230.   #--------------------------------------------------------------------------
  231.   def scope_range?(user,target)
  232.       t_r2 = [user.screen_x, user.screen_y] rescue nil
  233.       t_r3 = [target.screen_x, target.screen_y] rescue nil
  234.       return false if t_r2 == nil or t_r3 == nil
  235.       s_r = [0,0,0,0] ; s_p = [0,0]
  236.       s_r = [$1.to_i,$2.to_i,$3.to_i,$4.to_i] if @item.object.note =~ /<Scope Range = (\d+) - (\d+) - (\d+) - (\d+)>/
  237.       return false if s_r == [0,0,0,0]
  238.       if SCOPE_TYPE > 0
  239.          s_p = [target.sprite_size[0] / 2, target.sprite_size[1]]
  240.          s_p[0] = s_p[0] * SPRITE_SIZE_RANGE[0] / 100
  241.          s_p[1] = s_p[1] * SPRITE_SIZE_RANGE[1] / 100
  242.       end
  243.       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]))
  244.       return false if !t_r3[1].between?(t_r2[1] - s_r[2], t_r2[1] + s_r[3] + s_p[1])
  245.       return true
  246.   end  
  247.   
  248. end
复制代码
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 敵對心腳本@ネ実ツクールスレ
  3. #------------------------------------------------------------------------------
  4. #   VX ACE敵対心設定。
  5. #    (可通過HP變動設定累積仇恨。)
  6. #------------------------------------------------------------------------------
  7. #  ■ 規格
  8. #    ・給予損害,將HP恢復等增加敵對。
  9. #      ※100傷害 or HP100回復時敵対心100増加。
  10. #    ・受到傷害時,會降低敵對心。
  11. #    ・[敵對]×的[狙撃率]值最大的角色將是敵人的目標。
  12. #    ・若[敵對]×的[狙撃率]值最大的結果是多個時,靠前的角色會成為目標。
  13. #   ・如果影響範圍是隨機的,會忽略敵意,狙撃率。
  14. #    ・若隊員全員的敵対心都是0時、會和原本乱数決定目標。
  15. #   ・戦闘不能時敵対心歸0。
  16. #------------------------------------------------------------------------------
  17. #  ■ 使用方法 -一-
  18. #   ◆制作産生敵對値但無傷害的技能。
  19. #   ・在技能的備註中設定敵對値。
  20. #      例)増加敵對値100。
  21. #          <敵対心 100>
  22. #   ◆制作減少敵對値害的技能。
  23. #    ・在技能的備註中現設定敵對値。
  24. #      ※敵対心減少以数値百分比計算。
  25. #      例)減少敵対心50%。
  26. #          <敵対心 -50>
  27. #   ◆可在傷害中計算式中使用敵対心。
  28. #     ・計算式用“a.hat”書式、來參照現在的敵対心。
  29. #       例)ロイエ的傷害計算式
  30. #           a.hat * a.tp * 0.001
  31. #------------------------------------------------------------------------------
  32. #  ■ 使用方法 -二-
  33. #   ◆制作將自方隊員的敵對値轉移到自己身上。
  34. #   ①在資料庫中制作一個状態。
  35. #     a.任意制作一個状態名。
  36. #        例)敵意減、敵対心下降等
  37. #      b.状態解除条件設定最短解除。
  38. #        例)自動解除時間:回合完結時
  39. #            継続回合数:0 ~ 0
  40. #      c.把信息設定自方隊員得到這状態。
  41. #        例)から敵対心を盗んだ。
  42. #   ②在資料庫制作以下的轉移敵対心的技能。
  43. #      a.効果範囲:設定成自方隊員単体。
  44. #      b.使用可能時:設定成戦鬥時。
  45. #      c.使用効果設定成付加①所作成状態。
  46. #     d.附註成盗取敵対心。数値為盗取敵対心的比例(%)。
  47. #         例)盗取敵対心50%。
  48. #             <盗む敵対心 50>
  49. #------------------------------------------------------------------------------
  50. #  ■ 使用方法 -三-
  51. #   ◆目の前のパーティメンバーに敵対心をなすり付けるスキルを作る。
  52. #     ※並び順にて使用者の直前の生存メンバーが対象になります。
  53. #   ①データベースでステートを以下のように作成します。
  54. #     a.名前に“だまし討ち”が含まれるステートを作成します。
  55. #      b.ステートの解除条件を以下のように設定します。
  56. #        例)自動解除のタイミング:行動終了時
  57. #            継続ターン数:1 ~ 1
  58. #      c.この状態jaが解除されたときのメッセージを設定します。
  59. #        例)は、だまし討ちの効果がきれた。
  60. #   ②データベースでだまし討ちステートを付加するスキルを作成します。
  61. #      a.効果範囲:使用者 に設定します。
  62. #      b.使用可能時:バトルのみ に設定します。
  63. #      c.使用効果に①で作ったステート付加を設定します。
  64. #------------------------------------------------------------------------------
  65. #  ■ 使用方法 -四-
  66. #   ◆設定被傷害時敵対心下降的特徴。
  67. #   ・装備、状態等的附註進行以下的設定。
  68. #      例)敵対心減少量10%下降。
  69. #          <敵対心減少量-10>
  70. #       ※各装備、技能効果可累積。
  71. #   ◆設定技能/道具使用時敵対心上升量減小的特徴。
  72. #   ・装備、状態等的附註進行以下的設定。
  73. #      例)敵対心上昇量50%低下(半減)。
  74. #          <敵対心上昇量-50>
  75. #       ※各装備、技能効果可累積。
  76. #==============================================================================
  77.  
  78. class Game_BattlerBase
  79.   #--------------------------------------------------------------------------
  80.   # ● 敵対心の上限の設定
  81.   #--------------------------------------------------------------------------
  82.   # 累積ヘイトの上限
  83.   MAX_HATE = 99999999
  84.  
  85.   #--------------------------------------------------------------------------
  86.   # ● 公開インスタンス変数
  87.   #--------------------------------------------------------------------------
  88.   attr_accessor :hat                      # ヘイト
  89.   #--------------------------------------------------------------------------
  90.   # ● オブジェクト初期化 ※エイリアス
  91.   #--------------------------------------------------------------------------
  92.   alias enmity_initialize initialize
  93.   def initialize
  94.     enmity_initialize
  95.     @hat = 0
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● だまし討ちのステート ID を取得
  99.   #--------------------------------------------------------------------------
  100.   def damashi_state_id
  101.     $data_states.find {|state| return state.id if state.name.include?("だまし討ち") if state != nil}
  102.   end
  103. end
  104.  
  105. class RPG::BaseItem
  106.   #--------------------------------------------------------------------------
  107.   # ● 敵対心減少量を取得
  108.   #--------------------------------------------------------------------------
  109.   def hate_down_depth
  110.     /<敵対心減少量-(\d+)>/ =~ note ? $1.to_i * 0.01 : 0
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 敵対心上昇量を取得
  114.   #--------------------------------------------------------------------------
  115.   def hate_up_depth
  116.     /<敵対心上昇量-(\d+)>/ =~ note ? $1.to_i * 0.01 : 0
  117.   end
  118. end
  119.  
  120. class RPG::UsableItem
  121.   #--------------------------------------------------------------------------
  122.   # ● メモから敵対心を取得
  123.   #--------------------------------------------------------------------------
  124.   def add_hate
  125.     /<敵対心\s*(\S+)>/ =~ note ? $1.to_i : 0
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● メモから盗む敵対心を取得
  129.   #--------------------------------------------------------------------------
  130.   def steal_hate
  131.     /<盗む敵対心\s*(\d+)>/ =~ note ? $1.to_i : 0
  132.   end
  133. end
  134.  
  135. class Game_Battler < Game_BattlerBase
  136.   #--------------------------------------------------------------------------
  137.   # ● ヘイトのクリア
  138.   #--------------------------------------------------------------------------
  139.   def clear_hate
  140.     self.hat = 0
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 戦闘不能になる ※エイリアス
  144.   #--------------------------------------------------------------------------
  145.   alias enmity_die die
  146.   def die
  147.     enmity_die
  148.     clear_hate
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ● ヘイトの処理
  152.   #--------------------------------------------------------------------------
  153.   def execute_enmity(user, item)
  154.     item.add_hate < 0 ? user.hat *= (item.add_hate * -0.01) : user.hat += item.add_hate
  155.     if user.state?(damashi_state_id)
  156.       ta_target = $game_party.alive_members.index(user) -1
  157.       ta_target = 0 if ta_target < 1
  158.       $game_party.alive_members[ta_target].hat += @result.hp_damage.abs
  159.     else
  160.       user.hat += @result.hp_damage.abs * (1 - user.hate_up_plus)
  161.     end
  162.     self.hat -= @result.hp_damage * (1 - self.hate_down_plus) if @result.hp_damage > 0
  163.     if item.steal_hate > 0
  164.       steal_hates = self.hat * (item.steal_hate * 0.01)
  165.       user.hat += steal_hates
  166.       self.hat -= steal_hates
  167.     end
  168.     user.hat = MAX_HATE if user.hat > MAX_HATE
  169.     self.hat = 0 if self.hat < 0
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● スキル/アイテムの使用者側への効果 ※エイリアス
  173.   #--------------------------------------------------------------------------
  174.   alias enmity_item_user_effect item_user_effect
  175.   def item_user_effect(user, item)
  176.     enmity_item_user_effect(user, item)
  177.     execute_enmity(user, item)
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● 戦闘開始処理 ※エイリアス
  181.   #--------------------------------------------------------------------------
  182.   alias enmity_on_battle_start on_battle_start
  183.   def on_battle_start
  184.     enmity_on_battle_start
  185.     clear_hate
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 敵対心減少量の合計
  189.   #--------------------------------------------------------------------------
  190.   def hate_down_plus
  191.     feature_objects.inject(0.0){|r,i| r + i.hate_down_depth}
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 敵対心上昇量の合計
  195.   #--------------------------------------------------------------------------
  196.   def hate_up_plus
  197.     feature_objects.inject(0.0){|r,i| r + i.hate_up_depth}
  198.   end
  199. end
  200.  
  201. class Game_Unit
  202.   #--------------------------------------------------------------------------
  203.   # ● タゲを取得
  204.   #--------------------------------------------------------------------------
  205.   def top_hat
  206.     if hat_sum > 0
  207.       alive_members.sort {|a,b| b.hat * b.tgr - a.hat * a.tgr}[0]
  208.     else
  209.       random_target
  210.     end
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● ヘイトの合計を計算
  214.   #--------------------------------------------------------------------------
  215.   def hat_sum
  216.     alive_members.inject(0) {|r, member| r + member.hat }
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● ターゲットのランダムな決定(敵対心無視)
  220.   #--------------------------------------------------------------------------
  221.   def random_target_true
  222.     return alive_members[rand(alive_members.size)]
  223.   end
  224. end
  225.  
  226. class Game_Action
  227.   #--------------------------------------------------------------------------
  228.   # ● 敵に対するターゲット ※再定義
  229.   #--------------------------------------------------------------------------
  230.   def targets_for_opponents
  231.     if item.for_random?
  232.       Array.new(item.number_of_targets) { opponents_unit.random_target_true }
  233.     elsif item.for_one?
  234.       num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  235.       if @target_index < 0
  236.         [opponents_unit.top_hat] * num
  237.       else
  238.         [opponents_unit.smooth_target(@target_index)] * num
  239.       end
  240.     else
  241.       opponents_unit.alive_members
  242.     end
  243.   end
  244. end

球帮忙看看这两个脚本是哪里冲突了.zip

1.44 MB, 下载次数: 73

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

本版积分规则

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

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

GMT+8, 2024-11-16 00:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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