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

Project1

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

[已经解决] MOG Scope 脚本该如何使用?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
118
在线时间
197 小时
注册时间
2011-1-23
帖子
41
跳转到指定楼层
1
发表于 2016-2-10 23:29:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
虽然明白功能是让技能和攻击有范围 使敌人有前后远近的效果
但不知道具体该怎么使用
RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG - Scope EX (v1.5) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # [url]https://atelierrgss.wordpress.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.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.  
  44. $imported = {} if $imported.nil?
  45. $imported[:mog_scope_ex] = true
  46.  
  47. module MOG_SCOPE_EX
  48.   #============================================================================
  49.   # Definição do modo que vai ser calculado a área do alvo.
  50.   #
  51.   # 0 - Baseado apenas na posição X e Y. (ignorando o tamanho do sprite)
  52.   # 1 - Baseado na posição X e Y + o tamanho do sprite do alvo.
  53.   #     (Alvos grandes tem maior area de impacto)
  54.   #
  55.   #============================================================================
  56.   SCOPE_TYPE = 1
  57.   #============================================================================
  58.   # Definição da porcentágem total do tamanho sprite, para ser efetuado o
  59.   # calculo. (Apenas se o valor do SCOPE_TYPE estiver no 1)
  60.   # Por exemplo, definindo o valor de 100% o sistema vai considerar 100% do
  61.   # tamanho do sprite para fazer o calculo.
  62.   #============================================================================
  63.   # SPRITE_SIZE_RANGE = [WIDTH %, HEIGHT %]  
  64.   #============================================================================
  65.   SPRITE_SIZE_RANGE = [80,70]  
  66. end
  67.  
  68. #==============================================================================
  69. # ■ Game Battler
  70. #==============================================================================
  71. class Game_Battler < Game_BattlerBase
  72.   attr_accessor :sprite_size
  73.  
  74.   #--------------------------------------------------------------------------
  75.   # * Initialize
  76.   #--------------------------------------------------------------------------
  77.   alias mog_scope_ex_initialize initialize
  78.   def initialize
  79.       @sprite_size = [0,0,true]
  80.       mog_scope_ex_initialize
  81.   end
  82.  
  83. end
  84.  
  85. #==============================================================================
  86. # ■ Sprite Battler
  87. #==============================================================================
  88. class Sprite_Battler < Sprite_Base
  89.  
  90.   #--------------------------------------------------------------------------
  91.   # * Update Bitmap
  92.   #--------------------------------------------------------------------------
  93.   alias mog_scope_ex_update_bitmap update_bitmap
  94.   def update_bitmap
  95.       @battler.sprite_size = [bitmap.width,bitmap.height,true] if bitmap
  96.       mog_scope_ex_update_bitmap
  97.   end
  98.  
  99. end
  100.  
  101. #==============================================================================
  102. # ■ Scene Battle
  103. #==============================================================================
  104. class Scene_Battle < Scene_Base
  105.  
  106.   #--------------------------------------------------------------------------
  107.   # * Show Normal Animation
  108.   #--------------------------------------------------------------------------
  109.   alias mog_scope_ex_show_normal_animation show_normal_animation
  110.   def show_normal_animation(targets, animation_id, mirror = false)
  111.       new_targets = []
  112.       targets.each do |t| new_targets.push(t) if t.sprite_size[2] end
  113.       targets = new_targets
  114.       mog_scope_ex_show_normal_animation(targets, animation_id, mirror)
  115.       targets.each do |t| t.sprite_size[2] = true end
  116.   end  
  117.  
  118. end
  119.  
  120. #==============================================================================
  121. # ■ Game Action
  122. #==============================================================================
  123. class Game_Action
  124.   include MOG_SCOPE_EX
  125.   #--------------------------------------------------------------------------
  126.   # * Make Targets
  127.   #--------------------------------------------------------------------------
  128.   def make_targets
  129.       if $imported[:mog_battler_motion] != nil and $imported[:mog_sprite_actor] != nil
  130.          return @subject.pre_target if @subject != nil and @subject.pre_target != nil
  131.       end
  132.       if !forcing && subject.confusion?
  133.          confusion_target
  134.       elsif item.for_opponent?
  135.          targets_for_opponents
  136.       elsif item.for_friend?
  137.          targets_for_friends
  138.       else
  139.         []
  140.       end
  141.   end  
  142.  
  143.   #--------------------------------------------------------------------------
  144.   # * Confusion Target
  145.   #--------------------------------------------------------------------------
  146.   def confusion_target
  147.       case subject.confusion_level
  148.       when 1 ; new_targets = make_new_targets([opponents_unit.random_target],0)
  149.       when 2
  150.           if rand(2) == 0
  151.             new_targets = make_new_targets([opponents_unit.random_target],0)
  152.           else
  153.             new_targets = make_new_targets([friends_unit.random_target],1)
  154.           end
  155.       else
  156.            new_targets = make_new_targets([friends_unit.random_target],1)  
  157.       end
  158.   end
  159.  
  160.   #--------------------------------------------------------------------------
  161.   # * Targets for Opponents
  162.   #--------------------------------------------------------------------------
  163.   def targets_for_opponents
  164.       if item.for_random?
  165.          org_target = Array.new(item.number_of_targets) { opponents_unit.random_target }
  166.          new_targets = make_new_targets(org_target,0)
  167.       elsif item.for_one?
  168.          num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  169.          if @target_index < 0
  170.             org_target = [opponents_unit.random_target] * num
  171.             new_targets = make_new_targets(org_target,0)
  172.          else
  173.             org_target = [opponents_unit.smooth_target(@target_index)] * num
  174.             new_targets = make_new_targets(org_target,0)
  175.          end
  176.        else
  177.           return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  178.           return opponents_unit.alive_members
  179.       end
  180.   end
  181.  
  182.   #--------------------------------------------------------------------------
  183.   # * All Targets
  184.   #--------------------------------------------------------------------------
  185.   def all_targets
  186.       return true if @item.object.note =~ /<All Targets>/
  187.       return false
  188.   end
  189.  
  190.   #--------------------------------------------------------------------------
  191.   # * Targets for Allies
  192.   #--------------------------------------------------------------------------
  193.   def targets_for_friends
  194.     if item.for_user?
  195.        new_targets = make_new_targets([subject],1)      
  196.     elsif item.for_dead_friend?
  197.         if item.for_one?
  198.            org_target = [friends_unit.smooth_dead_target(@target_index)]
  199.            new_targets = make_new_targets(org_target,2)   
  200.         else
  201.            org_target = friends_unit.dead_members
  202.            new_targets = make_new_targets(org_target,2)           
  203.         end
  204.     elsif item.for_friend?
  205.          if item.for_one?
  206.             org_target = [friends_unit.smooth_target(@target_index)]
  207.             new_targets = make_new_targets(org_target,1)   
  208.          else
  209.             return (opponents_unit.alive_members + friends_unit.alive_members) if all_targets
  210.             return friends_unit.alive_members
  211.          end
  212.     end
  213.   end
  214.  
  215.   #--------------------------------------------------------------------------
  216.   # * Make New Targets
  217.   #--------------------------------------------------------------------------
  218.   def make_new_targets(target,type = 0)
  219.       targets = []
  220.       if all_targets
  221.         members = (opponents_unit.alive_members + friends_unit.alive_members) if type <= 1
  222.         members = friends_unit.dead_members if type == 2      
  223.       else
  224.         members = opponents_unit.alive_members if type == 0
  225.         members = friends_unit.alive_members if type == 1
  226.         members = friends_unit.dead_members if type == 2
  227.       end
  228.       for t in target
  229.           for m in members
  230.               targets.push(m) if t == m
  231.               next if t == m
  232.              (targets.push(m); m.sprite_size[2] = false) if scope_range?(t,m)            
  233.           end
  234.       end
  235.       return targets
  236.   end
  237.  
  238.   #--------------------------------------------------------------------------
  239.   # * Scope Range
  240.   #--------------------------------------------------------------------------
  241.   def scope_range?(user,target)
  242.       t_r2 = [user.screen_x, user.screen_y] rescue nil
  243.       t_r3 = [target.screen_x, target.screen_y] rescue nil
  244.       return false if t_r2 == nil or t_r3 == nil
  245.       s_r = [0,0,0,0] ; s_p = [0,0]
  246.       s_r = [$1.to_i,$2.to_i,$3.to_i,$4.to_i] if @item.object.note =~ /<Scope Range = (\d+) - (\d+) - (\d+) - (\d+)>/
  247.       return false if s_r == [0,0,0,0]
  248.       if SCOPE_TYPE > 0
  249.          s_p = [target.sprite_size[0] / 2, target.sprite_size[1]]
  250.          s_p[0] = s_p[0] * SPRITE_SIZE_RANGE[0] / 100
  251.          s_p[1] = s_p[1] * SPRITE_SIZE_RANGE[1] / 100
  252.       end
  253.       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]))
  254.       return false if !t_r3[1].between?(t_r2[1] - s_r[2], t_r2[1] + s_r[3] + s_p[1])
  255.       return true
  256.   end  
  257.  
  258. end


PS:似乎http://www.atelier-rgss.com/的网站翻墙也上不去……

Lv3.寻梦者

梦石
0
星屑
1696
在线时间
761 小时
注册时间
2013-9-23
帖子
211

开拓者

2
发表于 2016-2-11 18:47:49 | 只看该作者
本帖最后由 午睡的风铃 于 2016-2-11 18:49 编辑

首先请把技能的目标设成单个敌人或单个队友或使用者

技能备注里
<Scope Range = 120 - 120 - 64 - 40>
目标两侧120像素,向上64像素,向下40像素
技能对上述范围内的目标生效

<All Targets>
范围内全部目标,不分敌我 = =
如果备注里填入
<All Targets>
<Scope Range = 544 - 544 - 416 - 416>
那好吧,这是一个地地道道的全屏范围的技能,当然你的画面尺寸是544*416.


精灵尺寸,大概是给怪物图设个尺寸来代替怪物图原本的尺寸
SPRITE_SIZE_RANGE = [80,70]
范围类型,大概是0表示用怪物图原本的尺寸,而1是用上面设置的尺寸
SCOPE_TYPE = 1
以上两个设定会影响到范围的计算,细微之处不是很确定。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 07:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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