Project1

标题: MOG - Scope EX 如何单独使用 [打印本页]

作者: morningboo    时间: 2014-10-31 21:06
标题: MOG - Scope EX 如何单独使用

请教,此技能范围脚本单独提取不能使用,大神可否看下是否如此?
还有,此脚本和sideview冲突吗?


RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG - Scope EX (v1.3) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # [url]http://www.atelier-rgss.com/[/url]
  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.  
  42. $imported = {} if $imported.nil?
  43. $imported[:mog_scope_ex] = true
  44.  
  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. #==============================================================================
  67. # ■ Game Battler
  68. #==============================================================================
  69. class Game_Battler < Game_BattlerBase
  70.   attr_accessor :sprite_size
  71.  
  72.   #--------------------------------------------------------------------------
  73.   # * Initialize
  74.   #--------------------------------------------------------------------------
  75.   alias mog_scope_ex_initialize initialize
  76.   def initialize
  77.       @sprite_size = [0,0,true]
  78.       mog_scope_ex_initialize
  79.   end
  80.  
  81. end
  82.  
  83. #==============================================================================
  84. # ■ Sprite Battler
  85. #==============================================================================
  86. class Sprite_Battler < Sprite_Base
  87.  
  88.   #--------------------------------------------------------------------------
  89.   # * Update Bitmap
  90.   #--------------------------------------------------------------------------
  91.   alias mog_scope_ex_update_bitmap update_bitmap
  92.   def update_bitmap
  93.       @battler.sprite_size = [bitmap.width,bitmap.height,true] if bitmap
  94.       mog_scope_ex_update_bitmap
  95.   end
  96.  
  97. end
  98.  
  99. #==============================================================================
  100. # ■ Scene Battle
  101. #==============================================================================
  102. class Scene_Battle < Scene_Base
  103.  
  104.   #--------------------------------------------------------------------------
  105.   # * Show Normal Animation
  106.   #--------------------------------------------------------------------------
  107.   alias mog_scope_ex_show_normal_animation show_normal_animation
  108.   def show_normal_animation(targets, animation_id, mirror = false)
  109.       new_targets = []
  110.       targets.each do |t| new_targets.push(t) if t.sprite_size[2] end
  111.       targets = new_targets
  112.       mog_scope_ex_show_normal_animation(targets, animation_id, mirror)
  113.       targets.each do |t| t.sprite_size[2] = true end
  114.   end  
  115.  
  116. end
  117.  
  118. #==============================================================================
  119. # ■ Game Action
  120. #==============================================================================
  121. class Game_Action
  122.   include MOG_SCOPE_EX
  123.   #--------------------------------------------------------------------------
  124.   # * Make Targets
  125.   #--------------------------------------------------------------------------
  126.   def make_targets
  127.       if !forcing && subject.confusion?
  128.          confusion_target
  129.       elsif item.for_opponent?
  130.          targets_for_opponents
  131.       elsif item.for_friend?
  132.          targets_for_friends
  133.       else
  134.         []
  135.       end
  136.   end  
  137.  
  138.   #--------------------------------------------------------------------------
  139.   # * Confusion Target
  140.   #--------------------------------------------------------------------------
  141.   def confusion_target
  142.       case subject.confusion_level
  143.       when 1 ; new_targets = make_new_targets([opponents_unit.random_target],0)
  144.       when 2
  145.           if rand(2) == 0
  146.             new_targets = make_new_targets([opponents_unit.random_target],0)
  147.           else
  148.             new_targets = make_new_targets([friends_unit.random_target],1)
  149.           end
  150.       else
  151.            new_targets = make_new_targets([friends_unit.random_target],1)  
  152.       end
  153.   end
  154.  
  155.   #--------------------------------------------------------------------------
  156.   # * Targets for Opponents
  157.   #--------------------------------------------------------------------------
  158.   def targets_for_opponents
  159.       if item.for_random?
  160.          org_target = Array.new(item.number_of_targets) { opponents_unit.random_target }
  161.          new_targets = make_new_targets(org_target,0)
  162.       elsif item.for_one?
  163.          num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  164.          if @target_index < 0
  165.             org_target = [opponents_unit.random_target] * num
  166.             new_targets = make_new_targets(org_target,0)
  167.          else
  168.             org_target = [opponents_unit.smooth_target(@target_index)] * num
  169.             new_targets = make_new_targets(org_target,0)
  170.          end
  171.        else
  172.           return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  173.           return opponents_unit.alive_members
  174.       end
  175.   end
  176.  
  177.   #--------------------------------------------------------------------------
  178.   # * All Targets
  179.   #--------------------------------------------------------------------------
  180.   def all_targets
  181.       return true if @item.object.note =~ /<All Targets>/
  182.       return false
  183.   end
  184.  
  185.   #--------------------------------------------------------------------------
  186.   # * Targets for Allies
  187.   #--------------------------------------------------------------------------
  188.   def targets_for_friends
  189.     if item.for_user?
  190.        new_targets = make_new_targets([subject],1)      
  191.     elsif item.for_dead_friend?
  192.         if item.for_one?
  193.            org_target = [friends_unit.smooth_dead_target(@target_index)]
  194.            new_targets = make_new_targets(org_target,2)   
  195.         else
  196.            org_target = friends_unit.dead_members
  197.            new_targets = make_new_targets(org_target,2)           
  198.         end
  199.     elsif item.for_friend?
  200.          if item.for_one?
  201.             org_target = [friends_unit.smooth_target(@target_index)]
  202.             new_targets = make_new_targets(org_target,1)   
  203.          else
  204.             return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  205.             return friends_unit.alive_members
  206.          end
  207.     end
  208.   end
  209.  
  210.   #--------------------------------------------------------------------------
  211.   # * Make New Targets
  212.   #--------------------------------------------------------------------------
  213.   def make_new_targets(target,type = 0)
  214.       targets = []
  215.       if all_targets
  216.         members = (opponents_unit.alive_members + friends_unit.alive_members) if type <= 1
  217.         members = friends_unit.dead_members if type == 2      
  218.       else
  219.         members = opponents_unit.alive_members if type == 0
  220.         members = friends_unit.alive_members if type == 1
  221.         members = friends_unit.dead_members if type == 2
  222.       end
  223.       for t in target
  224.           for m in members
  225.               targets.push(m) if t == m
  226.               next if t == m
  227.              (targets.push(m); m.sprite_size[2] = false) if scope_range?(t,m)            
  228.           end
  229.       end
  230.       return targets
  231.   end
  232.  
  233.   #--------------------------------------------------------------------------
  234.   # * Scope Range
  235.   #--------------------------------------------------------------------------
  236.   def scope_range?(user,target)
  237.       t_r2 = [user.screen_x, user.screen_y] rescue nil
  238.       t_r3 = [target.screen_x, target.screen_y] rescue nil
  239.       return false if t_r2 == nil or t_r3 == nil
  240.       s_r = [0,0,0,0] ; s_p = [0,0]
  241.       s_r = [$1.to_i,$2.to_i,$3.to_i,$4.to_i] if @item.object.note =~ /<Scope Range = (\d+) - (\d+) - (\d+) - (\d+)>/
  242.       if SCOPE_TYPE > 0
  243.          s_p = [target.sprite_size[0] / 2, target.sprite_size[1]]
  244.          s_p[0] = s_p[0] * SPRITE_SIZE_RANGE[0] / 100
  245.          s_p[1] = s_p[1] * SPRITE_SIZE_RANGE[1] / 100
  246.       end
  247.       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]))
  248.       return false if !t_r3[1].between?(t_r2[1] - s_r[2], t_r2[1] + s_r[3] + s_p[1])
  249.       return true
  250.   end  
  251.  
  252. end

作者: 哇哈哈哇哈哈    时间: 2014-11-2 10:26
理论上讲应该与Battle_Cursor同时使用。




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