Project1

标题: 战斗中 选择目标用的指针 的脚本问题 [打印本页]

作者: 蓝天下的女孩    时间: 2015-8-11 11:02
标题: 战斗中 选择目标用的指针 的脚本问题

不懂脚本去用MOG是不是作死……
轻微的用了一下立绘战斗脚本,基本上测试起来没有问题。

……结果出现了一个小问题

战斗时,有一个选择目标的、、
使用技能后,无论是打别人还是奶自己都要做的选目标、、

这是一个把选目标做成了一个指针的脚本,(键盘操纵的指针,不需要用鼠标)
如果是单个目标来选的话,毫无问题。。

不过,如果要是遇到不需要选目标的情况【使用者,全体己方,全体敌人】
就会直接卡住游戏。。接下来的指令什么都做不成了。。

如果技能设成【使用者,全体己方】,游戏直接卡住。
如果技能设成【全体敌人】,会冒出一个指针选一个后再对全体有效。

这个小问题直接对游戏有着大硬伤。。。
直接卡住不能继续游戏什么的。。。
没有全体奶的技能的游戏也不现实、、、

如果有可以代替此功能(战斗中选定目标的指针)的脚本也行、、、
脚本废求助一下、、、

在此谢谢了。。。



RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG - Battle Cursor (3.3) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # [url]https://atelierrgss.wordpress.com/[/url]
  6. #==============================================================================
  7. # Sistema de cursor animado de batalha nos sprites dos battlers.
  8. #==============================================================================
  9. # Arquivo necessário. (Graphics/System)
  10. #
  11. # Battle_Cursor.png
  12. # Battle_Cursor2.png *(necessário o script Scope EX)
  13. #
  14. #==============================================================================
  15. # NOTA - Deixe este script abaixo do script Battler Motion.
  16. #==============================================================================
  17. # ● Histórico (Version History)
  18. #==============================================================================
  19. # (3.3) - Correção do bug de não atualizar a index quando o battler é morto.
  20. # (3.2) - Melhoria de compatibilidade com Scope EX
  21. # (3.1) - Melhoria na posição dos battler aliados mortos. (MOG Sprite Actor)
  22. # (3.0) - Correção do cursor não acompanhar a posição do battler em movimento.
  23. #       - Apresentar o cursor na seleção de todos os alvos.
  24. #==============================================================================
  25. $imported = {} if $imported.nil?
  26. $imported[:mog_battle_cursor] = true
  27.  
  28. #==============================================================================
  29. # ■ CURSOR SETTING
  30. #==============================================================================
  31. module MOG_BATTLE_CURSOR
  32.   #Definição da posição do cursor em relação ao alvo.
  33.   CURSOR_POSITION = [0, 0]
  34.   #Definição da posição do nome do alvo.
  35.   CURSOR_NAME_POSITION = [-10, 35]
  36.   #Ativar efeito deslizar.
  37.   CURSOR_SLIDE_EFFECT = true
  38.   #Ativar animação de levitação.
  39.   CURSOR_FLOAT_EFFECT = true
  40.   #Definição da prioridade do cursor.
  41.   CURSOR_Z = 155
  42.   #Posição do cursor Secundário.
  43.   TARGET_CURSOR_2_POS = [0, -48]
  44.   #Ativar animação de zoom.
  45.   TARGET_CURSOR_2_ZOOM_EFFECT = false
  46. end
  47.  
  48. #==============================================================================
  49. # ■ Game Temp
  50. #==============================================================================
  51. class Game_Temp
  52.  
  53.   attr_accessor :battle_cursor
  54.   attr_accessor :battle_cursor_data
  55.   attr_accessor :target_skill
  56.   attr_accessor :battle_end
  57.   attr_accessor :sprite_visible
  58.   attr_accessor :battle_cursor_need_refresh
  59.   attr_accessor :battle_cursor_scope_refresh
  60.   attr_accessor :battle_cursor_target
  61.   attr_accessor :target_data
  62.   attr_accessor :target_cursor_need_refresh
  63.   attr_accessor :target_window_active
  64.   #--------------------------------------------------------------------------
  65.   # ● Initialize
  66.   #--------------------------------------------------------------------------  
  67.   alias mog_battle_cursor_initialize initialize
  68.   def initialize
  69.       @battle_cursor = [0,0,false,""] ; @target_skill = [] ; @battle_end = false
  70.       @battle_cursor_need_refresh = [false,false] ; @battle_cursor_target = [nil,nil]
  71.       @target_data = [nil,nil] ; @target_cursor_need_refresh = false
  72.       @target_window_active = [false,false] ; @battle_cursor_scope_refresh = false
  73.       mog_battle_cursor_initialize
  74.   end  
  75.  
  76.   #--------------------------------------------------------------------------
  77.   # ● Clear Target Temp
  78.   #--------------------------------------------------------------------------   
  79.   def clear_target_temp
  80.       $game_party.members.each {|t| t.target_temp = false } rescue nil
  81.       $game_troop.members.each {|t| t.target_temp = false } rescue nil   
  82.       @target_data = [nil,nil] ; @battle_cursor_target = [nil,nil]
  83.   end
  84.  
  85.   #--------------------------------------------------------------------------
  86.   # ● Sprite Visible
  87.   #--------------------------------------------------------------------------   
  88.   def sprite_visible
  89.       return false if $game_message.visible
  90.       return false if $game_temp.battle_end
  91.       return true
  92.   end
  93.  
  94. end
  95.  
  96. #==============================================================================
  97. # ■ Spriteset Battle Cursor
  98. #==============================================================================
  99. class Sprite_Battle_Cursor < Sprite
  100.   include MOG_BATTLE_CURSOR
  101.  
  102.   #--------------------------------------------------------------------------
  103.   # ● Initialize
  104.   #--------------------------------------------------------------------------        
  105.   def initialize(viewport = nil)
  106.       super(viewport)
  107.       $game_temp.battle_cursor = [0,0,false,""] ; $game_temp.battle_end = false
  108.       self.bitmap = Cache.system("Battle_Cursor")
  109.       self.visible = $game_temp.battle_cursor[2] ; self.z = CURSOR_Z
  110.       @cw = self.bitmap.width / 2 ; @ch = [self.bitmap.height, Graphics.height - self.bitmap.height]
  111.       @cursor_name = Sprite.new ; @cursor_name.bitmap = Bitmap.new(120,32)
  112.       @cursor_name.z = self.z + 1 ; @cursor_name.bitmap.font.size = 16
  113.       @cursor_name_enemy = $game_temp.battle_cursor[3] ; @cs_x = 0
  114.       @cursor_name_position = [CURSOR_NAME_POSITION[0] ,CURSOR_NAME_POSITION[1]]
  115.       @cursor_float = [0,0] ;  refresh_cursor_name
  116.       @face_battler = SceneManager.face_battler? if $imported[:mog_battle_hud_ex]
  117.       @cs_x = (15 * MOG_SPRITE_ACTOR::SPRITE_ZOOM).truncate if $imported[:mog_sprite_actor]  
  118.   end
  119.  
  120.   #--------------------------------------------------------------------------
  121.   # ● Dispose Sprite
  122.   #--------------------------------------------------------------------------         
  123.   def dispose
  124.       super
  125.       dispose_sprite_cursor
  126.   end
  127.  
  128.   #--------------------------------------------------------------------------
  129.   # ● Dispose Sprite Cursor
  130.   #--------------------------------------------------------------------------            
  131.   def dispose_sprite_cursor
  132.       @cursor_name.bitmap.dispose ; @cursor_name.dispose
  133.       self.bitmap.dispose ; $game_temp.clear_target_temp
  134.   end
  135.  
  136.   #--------------------------------------------------------------------------
  137.   # ● Refresh Cursor Name
  138.   #--------------------------------------------------------------------------              
  139.   def refresh_cursor_name
  140.       @cursor_name_enemy = $game_temp.battle_cursor[3]
  141.       @cursor_name.bitmap.clear
  142.       @cursor_name.bitmap.draw_text(0,0,120,32,@cursor_name_enemy.to_s,1)
  143.   end
  144.  
  145.   #--------------------------------------------------------------------------
  146.   # ● Update Sprite Cursor
  147.   #--------------------------------------------------------------------------              
  148.   def update_sprite_cursor
  149.       update_battle_camera_cursor if update_battle_cursor_r?
  150.       if force_hide? ; self.visible = false ; @cursor_name.visible = false ; return ; end
  151.       update_visible ; update_cursor_float_effect ; set_real_position
  152.       execute_move(0,self.x,$game_temp.battle_cursor[0])
  153.       execute_move(1,self.y,$game_temp.battle_cursor[1] + @cursor_float[1])
  154.       update_sprite_name
  155.       self.visible = false if !$game_temp.sprite_visible
  156.       @cursor_name.opacity = 0 if @cursor_name and !$game_temp.sprite_visible
  157.   end
  158.  
  159.   #--------------------------------------------------------------------------
  160.   # ● Process Cursor Move
  161.   #--------------------------------------------------------------------------
  162.   def process_cursor_move
  163.       return unless cursor_movable?
  164.       last_index = @index
  165.       cursor_move_index(1) if Input.repeat?(:DOWN)
  166.       cursor_move_index(-1) if Input.repeat?(:UP)
  167.       cursor_move_index(1) if Input.repeat?(:RIGHT)
  168.       cursor_move_index(-1) if Input.repeat?(:LEFT)
  169.       $game_temp.battle_cursor_data = $game_troop.alive_members[@index]
  170.       Sound.play_cursor if @index != last_index
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● Update Battle Cursor
  174.   #--------------------------------------------------------------------------              
  175.   def update_battle_cursor_r?
  176.       return false if $imported[:mog_battle_camera] == nil
  177.       if $imported[:mog_battle_hud_ex] and SceneManager.face_battler? and $game_temp.battle_cursor_target[0] != nil
  178.          self.ox = 0 ; self.oy = 0 ; @cursor_name.ox = 0 ; @cursor_name.oy = 0
  179.          return false
  180.       end   
  181.       return true
  182.    end   
  183.  
  184.   #--------------------------------------------------------------------------
  185.   # ● Update Battle Camera Cursor
  186.   #--------------------------------------------------------------------------              
  187.   def update_battle_camera_cursor
  188.       self.ox = $game_temp.viewport_oxy[0]
  189.       self.oy = $game_temp.viewport_oxy[1]
  190.       @cursor_name.ox = self.ox
  191.       @cursor_name.oy = self.oy
  192.   end
  193.  
  194.   #--------------------------------------------------------------------------
  195.   # ● Set Real Position
  196.   #--------------------------------------------------------------------------              
  197.   def set_real_position  
  198.       return if $game_temp.target_data == [nil,nil]
  199.       return if $game_temp.battle_cursor_target == [nil,nil]
  200.       $game_temp.battle_cursor[0] = $game_temp.target_data[1].x - @cw + CURSOR_POSITION[0]
  201.       $game_temp.battle_cursor[1] = $game_temp.target_data[1].y + CURSOR_POSITION[1]
  202.       $game_temp.battle_cursor[1] -= ($game_temp.target_data[1].bitmap.height / 2) unless !$game_temp.target_data[1].bitmap
  203.       if $game_temp.target_data[0].is_a?(Game_Actor)
  204.          if $imported[:mog_sprite_actor] and $game_temp.target_data[0].dead?
  205.             if $game_temp.target_data[0].bact_sprite[5] == 6
  206.                $game_temp.battle_cursor[0] -= @cs_x
  207.             else
  208.                $game_temp.battle_cursor[0] += @cs_x
  209.             end   
  210.          end         
  211.          $game_temp.battle_cursor[1] -= @ch[0] if @face_battler and $game_temp.battle_cursor[1] > @ch[1]
  212.       end      
  213.   end
  214.  
  215.   #--------------------------------------------------------------------------
  216.   # ● Can Move Real Position?
  217.   #--------------------------------------------------------------------------               
  218.   def can_move_real_position?
  219.       return false if $game_temp.battle_cursor_data == nil
  220.       return false if $game_temp.battle_cursor_data.dead?
  221.       screen_x = $game_temp.battle_cursor_data.screen_x rescue nil
  222.       return false if screen_x == nil
  223.       return true
  224.   end   
  225.  
  226.   #--------------------------------------------------------------------------
  227.   # ● Force Hide
  228.   #--------------------------------------------------------------------------              
  229.   def force_hide?
  230.       return true if $game_temp.battle_cursor == nil
  231.       return true if $game_temp.battle_cursor[0] == nil
  232.       return true if $game_temp.battle_cursor[1] == nil   
  233.       return false
  234.   end
  235.  
  236.   #--------------------------------------------------------------------------
  237.   # ● Update Visible
  238.   #--------------------------------------------------------------------------               
  239.   def update_visible
  240.       $game_temp.battle_cursor_data = nil if !self.visible
  241.       if force_hide_battle_cursor?
  242.          self.visible = false ; return
  243.       end  
  244.       self.visible = $game_temp.battle_cursor[2]
  245.       (self.x = -64 ; self.y = -64) if !self.visible
  246.   end  
  247.  
  248.   #--------------------------------------------------------------------------
  249.   # ● Force Hide Battle Cursor
  250.   #--------------------------------------------------------------------------               
  251.   def force_hide_battle_cursor?
  252.       if $imported[:mog_sprite_actor] and !$game_temp.target_data.nil?
  253.          return true if !$game_temp.target_data[0].bact_sprite_visiblle
  254.       end  
  255.       return true if $imported[:mog_active_chain] and $game_temp.chain_action_phase
  256.       return true if $imported[:mog_atb_system] and BattleManager.actor == nil
  257.       return true if $imported[:mog_blitz_commands] and $game_temp.blitz_commands_phase
  258.       return false
  259.   end
  260.  
  261.   #--------------------------------------------------------------------------
  262.   # ● Update Sprite Name
  263.   #--------------------------------------------------------------------------               
  264.   def update_sprite_name
  265.       return if @cursor_name == nil
  266.       refresh_cursor_name  if @cursor_name_enemy != $game_temp.battle_cursor[3]
  267.       @cursor_name.x = self.x + @cursor_name_position[0]
  268.       @cursor_name.y = self.y + @cursor_name_position[1]
  269.       @cursor_name.opacity = self.opacity ; @cursor_name.visible = self.visible
  270.   end  
  271.  
  272.   #--------------------------------------------------------------------------
  273.   # ● Update Cursor Float Effect
  274.   #--------------------------------------------------------------------------              
  275.   def update_cursor_float_effect
  276.       return if !CURSOR_FLOAT_EFFECT
  277.       @cursor_float[0] += 1
  278.       case @cursor_float[0]
  279.         when 0..20  ; @cursor_float[1] += 1
  280.         when 21..40 ; @cursor_float[1] -= 1
  281.         else
  282.           @cursor_float[0] = 0 ;   @cursor_float[1] = 0
  283.       end        
  284.   end  
  285.  
  286.   #--------------------------------------------------------------------------
  287.   # ● Execute Move
  288.   #--------------------------------------------------------------------------      
  289.   def execute_move(type,cp,np)
  290.       sp = 5 + ((cp - np).abs / 5)
  291.       if cp > np
  292.          cp -= sp ; cp = np if cp < np
  293.       elsif cp < np
  294.          cp += sp ; cp = np if cp > np
  295.       end     
  296.        self.x = cp if type == 0 ; self.y = cp if type == 1
  297.   end      
  298.  
  299. end
  300.  
  301. #==============================================================================
  302. # ■ Spriteset Battle
  303. #==============================================================================
  304. class Spriteset_Battle
  305.  
  306.   #--------------------------------------------------------------------------
  307.   # ● Initialize
  308.   #--------------------------------------------------------------------------      
  309.   alias mog_battle_cursor_initialize initialize
  310.   def initialize
  311.       mog_battle_cursor_initialize
  312.       create_cursor
  313.   end
  314.  
  315.   #--------------------------------------------------------------------------
  316.   # ● Dispose
  317.   #--------------------------------------------------------------------------      
  318.   alias mog_battle_cursor_dispose dispose
  319.   def dispose
  320.       mog_battle_cursor_dispose
  321.       dispose_battle_cursor
  322.   end
  323.  
  324.   #--------------------------------------------------------------------------
  325.   # ● Update
  326.   #--------------------------------------------------------------------------         
  327.   alias mog_battle_cursor_update update
  328.   def update
  329.       mog_battle_cursor_update
  330.       update_battle_cursor
  331.   end  
  332.  
  333.   #--------------------------------------------------------------------------
  334.   # ● Create_Cursor
  335.   #--------------------------------------------------------------------------        
  336.   def create_cursor
  337.       return if @battle_cursor != nil
  338.       $game_temp.clear_target_temp ; @battle_cursor = Sprite_Battle_Cursor.new
  339.   end
  340.  
  341.   #--------------------------------------------------------------------------
  342.   # ● Dispose Cursor
  343.   #--------------------------------------------------------------------------        
  344.   def dispose_battle_cursor
  345.       return if @battle_cursor == nil
  346.       @battle_cursor.dispose ; @battle_cursor = nil
  347.   end  
  348.  
  349.   #--------------------------------------------------------------------------
  350.   # ● Update Battle Cursor
  351.   #--------------------------------------------------------------------------         
  352.   def update_battle_cursor
  353.       return if @battle_cursor == nil
  354.       @battle_cursor.update_sprite_cursor
  355.   end
  356.  
  357. end
  358.  
  359. #==============================================================================
  360. # ■ Battle Cursor Index
  361. #==============================================================================
  362. module Battle_Cursor_index
  363.  
  364.   include MOG_BATTLE_CURSOR
  365.  
  366.   #--------------------------------------------------------------------------
  367.   # ● Check Index Limit
  368.   #--------------------------------------------------------------------------      
  369.   def check_index_limit
  370.       self.index = 0 if self.index >= item_max
  371.       self.index = (item_max - 1) if self.index < 0
  372.   end      
  373.  
  374.   #--------------------------------------------------------------------------
  375.   # ● Set Cursor Position Enemy
  376.   #--------------------------------------------------------------------------   
  377.   def set_cursor_position_enemy
  378.       return if !self.active
  379.       self.index = 0 if $game_troop.alive_members[self.index].nil?
  380.       @fcursor = nil ; $game_temp.battle_cursor_need_refresh[1] = false
  381.       $game_temp.battle_cursor[0] = $game_troop.alive_members[self.index].screen_x + CURSOR_POSITION[0] rescue nil
  382.       $game_temp.battle_cursor[1] = $game_troop.alive_members[self.index].screen_y + CURSOR_POSITION[1] rescue nil
  383.       $game_temp.battle_cursor[3] = $game_troop.alive_members[self.index].name rescue nil
  384.       $game_temp.battle_cursor_data = $game_troop.alive_members[self.index]
  385.       return if $game_temp.battle_cursor_data == nil
  386.       enable_target_sprites($game_temp.battle_cursor_data.index)
  387.   end
  388.  
  389.   #--------------------------------------------------------------------------
  390.   # ● Enable Target Sprites
  391.   #--------------------------------------------------------------------------   
  392.   def enable_target_sprites(target_index)  
  393.       return if $game_temp.target_skill.empty?
  394.       if $imported[:mog_atb_system] and !BattleManager.subject.nil?
  395.          $game_temp.battle_cursor_scope_refresh = true
  396.       end   
  397.       $game_temp.clear_target_temp ; battler = $game_temp.target_skill[1]
  398.       type = $game_temp.target_skill[0].is_a?(RPG::Skill) ? 0 : 1
  399.       target_index = $game_temp.battle_cursor_data.index
  400.       battler.make_action_temp($game_temp.target_skill[0].id, target_index,type)      
  401.       targets = battler.action_temp.make_targets.compact
  402.       targets.each {|t| t.target_temp = true }
  403.   end  
  404.  
  405.   #--------------------------------------------------------------------------
  406.   # ● Refresh Scope Targets
  407.   #--------------------------------------------------------------------------   
  408.   def refresh_scope_targets
  409.       targets = battler.action_temp.make_targets.compact
  410.       targets.each {|t| t.target_temp = true }
  411.   end
  412.  
  413.   #--------------------------------------------------------------------------
  414.   # ● Set Cursor Position Actor
  415.   #--------------------------------------------------------------------------   
  416.   def set_cursor_position_actor
  417.       return if !self.active
  418.       self.index = 0 if $game_party.members[self.index].nil?
  419.       @fcursor = nil ; $game_temp.battle_cursor_need_refresh[0] = false
  420.       $game_temp.battle_cursor[0] = $game_party.members[self.index].screen_x + CURSOR_POSITION[0] rescue nil
  421.       $game_temp.battle_cursor[1] = $game_party.members[self.index].screen_y + CURSOR_POSITION[1] rescue nil
  422.       $game_temp.battle_cursor[3] = $game_party.members[self.index].name rescue nil
  423.       $game_temp.battle_cursor_data = $game_party.members[self.index]
  424.       $game_temp.battle_cursor = [0,0,false,0] if $game_temp.battle_cursor[0] == nil
  425.       enable_target_sprites(self.index)
  426.   end  
  427.  
  428.   #--------------------------------------------------------------------------
  429.   # ● Process Cursor Move Index
  430.   #--------------------------------------------------------------------------  
  431.   def cursor_move_index(value = 0)
  432.       self.index += value ;  check_index_limit
  433.   end
  434.  
  435. end
  436.  
  437. #==============================================================================
  438. # ■ Window_BattleActor
  439. #==============================================================================
  440. class Window_BattleActor < Window_BattleStatus
  441.   include Battle_Cursor_index
  442.  
  443.   #--------------------------------------------------------------------------
  444.   # ● Update
  445.   #--------------------------------------------------------------------------  
  446.   alias mog_battle_cursor_actor_update update
  447.   def update
  448.       pre_index = self.index
  449.       mog_battle_cursor_actor_update
  450.       $game_temp.battle_cursor_target[0] = $game_party.members[self.index]
  451.       $game_temp.battle_cursor_target[0] = nil if !self.active      
  452.       set_cursor_position_actor if refresh_cursor_position?(pre_index)
  453.       $game_temp.target_window_active[0] = self.active
  454.   end
  455.  
  456.   #--------------------------------------------------------------------------
  457.   # ● Refresh Cursor Position
  458.   #--------------------------------------------------------------------------  
  459.   def refresh_cursor_position?(pre_index)
  460.       return true if pre_index != self.index
  461.       return true if @fcursor
  462.       return true if $game_temp.battle_cursor_need_refresh[0]
  463.       return false
  464.   end
  465.  
  466.   #--------------------------------------------------------------------------
  467.   # ● Show
  468.   #--------------------------------------------------------------------------
  469.   alias mog_battle_cursor_show show
  470.   def show
  471.       if @info_viewport
  472.          set_cursor_position_actor ; $game_temp.battle_cursor[2] = true
  473.          @fcursor = true
  474.       end
  475.       mog_battle_cursor_show
  476.   end
  477.  
  478.   #--------------------------------------------------------------------------
  479.   # ● Hide
  480.   #--------------------------------------------------------------------------
  481.   alias mog_battle_cursor_hide hide
  482.   def hide
  483.       $game_temp.battle_cursor[2] = false if @info_viewport
  484.       if $game_temp.target_window_active[1] == false
  485.          ($game_temp.clear_target_temp ; $game_temp.target_skill.clear) unless self.active
  486.       end
  487.       mog_battle_cursor_hide
  488.   end  
  489.  
  490.   #--------------------------------------------------------------------------
  491.   # ● Process Cursor Move
  492.   #--------------------------------------------------------------------------
  493.   def process_cursor_move
  494.       return unless cursor_movable?
  495.       last_index = @index
  496.       cursor_move_index(1) if Input.repeat?(:DOWN)
  497.       cursor_move_index(-1) if Input.repeat?(:UP)
  498.       cursor_move_index(1) if Input.repeat?(:RIGHT)
  499.       cursor_move_index(-1) if Input.repeat?(:LEFT)
  500.       $game_temp.battle_cursor_data = $game_party.members[self.index]
  501.       Sound.play_cursor if @index != last_index
  502.   end
  503.  
  504. end
  505.  
  506. #==============================================================================
  507. # ■ Game Enemy
  508. #==============================================================================
  509. class Game_Enemy < Game_Battler
  510.   attr_accessor :index
  511. end
  512.  
  513. #==============================================================================
  514. # ■ Game Troop
  515. #==============================================================================
  516. class Game_Troop < Game_Unit
  517.  
  518.   #--------------------------------------------------------------------------
  519.   # * Setup
  520.   #--------------------------------------------------------------------------
  521.   alias mog_battle_cursor_setup setup
  522.   def setup(troop_id)
  523.       mog_battle_cursor_setup(troop_id)
  524.       if can_sort_index?
  525.          @enemies.sort! {|a,b| a.screen_x <=> b.screen_x}
  526.          @enemies.each_with_index {|e, i| e.index = i }
  527.       end
  528.   end
  529.  
  530.   #--------------------------------------------------------------------------
  531.   # * Can Sort Index?
  532.   #--------------------------------------------------------------------------
  533.   def can_sort_index?
  534.       return false if @enemies.size < 3
  535.       return false if troop.pages.size > 1
  536.       return false if !troop.pages[0].list[0].parameters.empty? rescue false
  537.       return true
  538.   end
  539.  
  540. end
  541.  
  542. #==============================================================================
  543. # ■ Window_BattleEnemy
  544. #==============================================================================
  545. class Window_BattleEnemy < Window_Selectable
  546.   include Battle_Cursor_index
  547.  
  548.   #--------------------------------------------------------------------------
  549.   # ● Update
  550.   #--------------------------------------------------------------------------  
  551.   alias mog_battle_cursor_enemy_update update
  552.   def update
  553.       pre_index = self.index
  554.       mog_battle_cursor_enemy_update
  555.       $game_temp.battle_cursor_target[1] = $game_troop.alive_members[self.index]
  556.       $game_temp.battle_cursor_target[1] = nil if !self.active
  557.       set_cursor_position_enemy if refresh_cursor_position?(pre_index)
  558.       $game_temp.target_window_active[1] = self.active
  559.   end
  560.  
  561.   #--------------------------------------------------------------------------
  562.   # ● Refresh Cursor Position
  563.   #--------------------------------------------------------------------------  
  564.   def refresh_cursor_position?(pre_index)
  565.       return true if pre_index != self.index
  566.       return true if @fcursor
  567.       return true if $game_temp.battle_cursor_need_refresh[1]
  568.       return false
  569.   end   
  570.  
  571.   #--------------------------------------------------------------------------
  572.   # ● Show
  573.   #--------------------------------------------------------------------------
  574.   alias mog_battle_cursor_show show
  575.   def show
  576.       if @info_viewport
  577.          set_cursor_position_enemy ; $game_temp.battle_cursor[2] = true
  578.          @fcursor = true
  579.       end
  580.       mog_battle_cursor_show
  581.   end
  582.  
  583.   #--------------------------------------------------------------------------
  584.   # ● Hide
  585.   #--------------------------------------------------------------------------
  586.   alias mog_battle_cursor_hide hide
  587.   def hide
  588.       $game_temp.battle_cursor[2] = false if @info_viewport
  589.       if $game_temp.target_window_active[0] == false
  590.       ($game_temp.clear_target_temp ; $game_temp.target_skill.clear) unless self.active
  591.       end
  592.       mog_battle_cursor_hide
  593.   end  
  594.  
  595.   #--------------------------------------------------------------------------
  596.   # ● Process Cursor Move
  597.   #--------------------------------------------------------------------------
  598.   def process_cursor_move
  599.       return unless cursor_movable?
  600.       last_index = @index
  601.       cursor_move_index(1) if Input.repeat?(:DOWN)
  602.       cursor_move_index(-1) if Input.repeat?(:UP)
  603.       cursor_move_index(1) if Input.repeat?(:RIGHT)
  604.       cursor_move_index(-1) if Input.repeat?(:LEFT)
  605.       $game_temp.battle_cursor_data = $game_troop.alive_members[@index]
  606.       Sound.play_cursor if @index != last_index
  607.   end
  608.  
  609. end
  610.  
  611. #==============================================================================
  612. # ■ Window Selectable
  613. #==============================================================================
  614. class Window_Selectable < Window_Base  
  615.  
  616.   #--------------------------------------------------------------------------
  617.   # * Process OK
  618.   #-------------------------------------------------------------------------
  619.   alias mog_target_cursor_process_ok process_ok
  620.   def process_ok
  621.       mog_target_cursor_process_ok
  622.       execute_target_selection if can_execute_target_selection?
  623.   end
  624.  
  625.   #--------------------------------------------------------------------------
  626.   # * Can Execute Target Selection
  627.   #-------------------------------------------------------------------------
  628.   def can_execute_target_selection?
  629.       return false if !SceneManager.scene_is?(Scene_Battle)
  630.       return false if !current_item_enabled?
  631.       return true if self.is_a?(Window_BattleSkill)
  632.       return true if self.is_a?(Window_BattleItem)
  633.       return true if self.is_a?(Window_ActorCommand) and self.index == 0
  634.       return false
  635.   end
  636.  
  637.   #--------------------------------------------------------------------------
  638.   # * Execute Target Selection
  639.   #-------------------------------------------------------------------------
  640.   def execute_target_selection      
  641.       return if BattleManager.actor == nil
  642.       $game_temp.target_skill.clear
  643.       item = @data[index] rescue nil      
  644.       item = $data_skills[BattleManager.actor.attack_skill_id] rescue nil if self.is_a?(Window_ActorCommand)
  645.       return if item == nil
  646.       if [2,8,10].include?(item.scope) or item.note =~ /<Scope Range = (\d+) - (\d+) - (\d+) - (\d+)>/   
  647.          $game_temp.target_skill = [item,BattleManager.actor]
  648.       end   
  649.   end  
  650.  
  651. end
  652.  
  653. #==============================================================================
  654. # ■ Game Battler
  655. #==============================================================================
  656. class Game_Battler < Game_BattlerBase
  657.  
  658.   attr_accessor :target_temp
  659.   attr_accessor :action_temp
  660.  
  661.   #--------------------------------------------------------------------------
  662.   # * Initialize
  663.   #--------------------------------------------------------------------------
  664.   alias mog_target_cursor_initialize initialize
  665.   def initialize
  666.       @target_cursor_temp = false
  667.       mog_target_cursor_initialize
  668.   end
  669.  
  670.   #--------------------------------------------------------------------------
  671.   # ● Make Action Temp
  672.   #--------------------------------------------------------------------------
  673.   def make_action_temp(action_id,target_index,type)
  674.       return if action_id == nil
  675.       action = Game_Action.new(self, true)
  676.       action.set_skill(action_id) if type == 0
  677.       action.set_item(action_id) if type == 1
  678.       action.target_index = target_index
  679.       @action_temp = action
  680.   end     
  681.  
  682.   #--------------------------------------------------------------------------
  683.   # ● Make Action Temp
  684.   #--------------------------------------------------------------------------
  685.   alias mog_battle_cursor_item_apply item_apply
  686.   def item_apply(user, item)
  687.       mog_battle_cursor_item_apply(user, item)
  688.       if self == $game_temp.battle_cursor_target[1]
  689.          $game_temp.battle_cursor_need_refresh[0] = true
  690.          $game_temp.battle_cursor_need_refresh[1] = true
  691.       end
  692.   end  
  693.  
  694. end
  695.  
  696. #==============================================================================
  697. # ■ Game BattlerBase
  698. #==============================================================================
  699. class Game_BattlerBase
  700.    attr_accessor :hidden
  701. end
  702.  
  703. #==============================================================================
  704. # ■ Sprite Battler
  705. #==============================================================================
  706. class Sprite_Battler < Sprite_Base
  707.   include MOG_BATTLE_CURSOR
  708.   #--------------------------------------------------------------------------
  709.   # * Initialize
  710.   #--------------------------------------------------------------------------
  711.   alias mog_target_cursor_initialize initialize
  712.   def initialize(viewport, battler = nil)
  713.       mog_target_cursor_initialize(viewport, battler)
  714.       create_target_cursor
  715.   end
  716.  
  717.   #--------------------------------------------------------------------------
  718.   # * Create Target Cursor
  719.   #--------------------------------------------------------------------------
  720.   def create_target_cursor
  721.       @target_cursor = Sprite.new
  722.       @target_cursor.bitmap = Cache.system("Battle_Cursor2")
  723.       @target_cursor.ox = @target_cursor.bitmap.width / 2
  724.       @target_cursor.oy = @target_cursor.bitmap.height / 2
  725.       @target_cursor_org = [@target_cursor.ox,@target_cursor.oy]
  726.       @target_cursor.visible = false
  727.       @target_visible_old = @target_cursor.visible
  728.       @tc_pos = [TARGET_CURSOR_2_POS[0],TARGET_CURSOR_2_POS[1] + @target_cursor.oy]
  729.       @face_battler = SceneManager.face_battler? if $imported[:mog_battle_hud_ex]
  730.       @target_cursor_ch = [@target_cursor.bitmap.height, Graphics.height - @target_cursor.bitmap.height]
  731.   end
  732.  
  733.   #--------------------------------------------------------------------------
  734.   # * Dispose
  735.   #--------------------------------------------------------------------------
  736.   alias mog_target_cursor_dispose dispose
  737.   def dispose
  738.       dispose_target_cursor
  739.       mog_target_cursor_dispose
  740.   end
  741.  
  742.   #--------------------------------------------------------------------------
  743.   # * Dispose Target Cursor
  744.   #--------------------------------------------------------------------------
  745.   def dispose_target_cursor
  746.       return if @target_cursor == nil
  747.       @target_cursor.bitmap.dispose ; @target_cursor.dispose
  748.   end
  749.  
  750.   #--------------------------------------------------------------------------
  751.   # * Update Postion
  752.   #--------------------------------------------------------------------------
  753.   alias mog_target_cursor_update_position update_position
  754.   def update_position
  755.       mog_target_cursor_update_position
  756.       update_battler_cursor_xy
  757.       update_target_cursor
  758.   end
  759.  
  760.   #--------------------------------------------------------------------------
  761.   # * Update Battler Cursor
  762.   #--------------------------------------------------------------------------
  763.   def update_battler_cursor_xy
  764.       return if @battler == nil
  765.       return if $game_temp.battle_cursor_target[0] != nil and @battler != $game_temp.battle_cursor_target[0]
  766.       return if $game_temp.battle_cursor_target[1] != nil and @battler != $game_temp.battle_cursor_target[1]
  767.       $game_temp.target_data = [@battler,self]
  768.   end  
  769.  
  770.   #--------------------------------------------------------------------------
  771.   # * Update Target Cursor
  772.   #--------------------------------------------------------------------------
  773.   def update_target_cursor
  774.       return if @target_cursor == nil
  775.       refresh_zoom if @target_visible_old != @target_cursor.visible
  776.       @target_cursor.visible = can_target_cursor_visible?
  777.       return if !@target_cursor.visible
  778.       @target_cursor.x = self.x + @tc_pos[0]
  779.       @target_cursor.y = self.y + @tc_pos[1]
  780.       @target_cursor.y -= (self.bitmap.height / 2) if self.bitmap
  781.       if @battler.is_a?(Game_Actor) and @face_battler
  782.          @target_cursor.y -= @target_cursor_ch[0] if @target_cursor.y > @target_cursor_ch[1]
  783.       end           
  784.       @target_cursor.z = CURSOR_Z + 1
  785.       @target_cursor.opacity = 130 + rand(125)
  786.       @target_cursor.zoom_x -= 0.05 if @target_cursor.zoom_x > 1.00
  787.       @target_cursor.zoom_x = 1.00 if @target_cursor.zoom_x < 1.00
  788.       @target_cursor.zoom_y = @target_cursor.zoom_x      
  789.       update_battle_camera_cursor_t if update_battle_camera_cursor_t?
  790.   end
  791.  
  792.   #--------------------------------------------------------------------------
  793.   # * Update Battle Camera Cursor T
  794.   #--------------------------------------------------------------------------
  795.   def update_battle_camera_cursor_t?
  796.       return false if $imported[:mog_battle_camera] == nil
  797.       return false if @battler == nil
  798.       if $imported[:mog_battle_hud_ex] and SceneManager.face_battler?
  799.          return false if @battler.is_a?(Game_Actor)
  800.       end  
  801.       return true
  802.   end
  803.  
  804.   #--------------------------------------------------------------------------
  805.   # ● Update Battle Camera Cursor
  806.   #--------------------------------------------------------------------------              
  807.   def update_battle_camera_cursor_t
  808.       @target_cursor.ox = $game_temp.viewport_oxy[0] + @target_cursor_org[0]
  809.       @target_cursor.oy = $game_temp.viewport_oxy[1] + @target_cursor_org[1]
  810.   end  
  811.  
  812.   #--------------------------------------------------------------------------
  813.   # * Refresh Zoom
  814.   #--------------------------------------------------------------------------
  815.   def refresh_zoom
  816.       @target_visible_old = @target_cursor.visible
  817.       @target_cursor.zoom_x = 1.50 if TARGET_CURSOR_2_ZOOM_EFFECT
  818.       @target_cursor.zoom_y = @target_cursor.zoom_x
  819.   end
  820.  
  821.   #--------------------------------------------------------------------------
  822.   # * Can Target Cursor Visible?
  823.   #--------------------------------------------------------------------------
  824.   def can_target_cursor_visible?
  825.       return false if !$game_temp.battle_cursor[2]
  826.       return false if @battler.dead?
  827.       return false if @battler.hidden
  828.       return false if !@battler.target_temp
  829.       return false if $game_message.visible
  830.       return false if $game_temp.battle_end
  831.       return false if $imported[:mog_sprite_actor] and !@battler.bact_sprite_visiblle
  832.       return false if $imported[:mog_active_chain] and $game_temp.chain_action_phase
  833.       return false if $imported[:mog_atb_system] and BattleManager.actor == nil
  834.       return false if $imported[:mog_blitz_commands] and $game_temp.blitz_commands_phase
  835.       return true
  836.   end
  837.  
  838. end
  839.  
  840. #==============================================================================
  841. # ■ Scene Battle
  842. #==============================================================================
  843. class Scene_Battle < Scene_Base
  844.  
  845.   #--------------------------------------------------------------------------
  846.   # * On Skill OK
  847.   #--------------------------------------------------------------------------
  848.   def on_skill_ok
  849.       if $imported[:mog_atb_system]
  850.          return if BattleManager.actor == nil
  851.          @skill_window.visible = false unless !@status_window.visible
  852.       end
  853.       @skill = @skill_window.item
  854.       BattleManager.actor.input.set_skill(@skill.id)
  855.       BattleManager.actor.last_skill.object = @skill
  856.      if [0,11].include?(@skill.scope)
  857.         @skill_window.hide
  858.         if $imported[:mog_atb_system]
  859.            next_command
  860.            BattleManager.command_end
  861.            hide_base_window
  862.         end               
  863.       elsif @skill.for_opponent?
  864.           select_enemy_selection
  865.       else
  866.           select_actor_selection
  867.       end
  868.   end
  869.  
  870.   #--------------------------------------------------------------------------
  871.   # * On Item OK
  872.   #--------------------------------------------------------------------------
  873.   def on_item_ok
  874.       if $imported[:mog_atb_system]
  875.          return if BattleManager.actor == nil
  876.          @item_window.visible = false unless !@status_window.visible
  877.       end   
  878.       @item = @item_window.item
  879.       BattleManager.actor.input.set_item(@item.id)
  880.       if [0,11].include?(@item.scope)
  881.          @item_window.hide
  882.          next_command
  883.          if $imported[:mog_atb_system]
  884.             next_command
  885.             BattleManager.command_end
  886.             hide_base_window
  887.          end         
  888.       elsif @item.for_opponent?
  889.           select_enemy_selection
  890.       else
  891.           select_actor_selection
  892.       end
  893.       $game_party.last_item.object = @item
  894.   end  
  895.  
  896.   #--------------------------------------------------------------------------
  897.   # * Turn End
  898.   #--------------------------------------------------------------------------
  899.   alias mog_battle_cursor_turn_end turn_end
  900.   def turn_end
  901.       mog_battle_cursor_turn_end
  902.       if $game_temp.battle_cursor_scope_refresh
  903.          $game_temp.battle_cursor_scope_refresh = false
  904.          $game_temp.battle_cursor_need_refresh[0] = true
  905.          $game_temp.battle_cursor_need_refresh[1] = true
  906.       end        
  907.   end  
  908.  
  909. end

作者: 午睡的风铃    时间: 2015-8-11 13:17
建议你使用默认战斗系统试试,如果不行再说。

以下仅代表个人观点,算是不负责任的脚本用后感,并且再次声明绝无恶意,而且我也一直在用。
MOG系列的脚本经过作者不断更新后的功能越来越全面,但同时也带来了越来越多的兼容性问题。
单单MOG系列战斗相关的脚本之间的不兼容就不只一个,当然这些并不会带来你所说的那样的恶性后果。
所以,更别提对系列之外脚本的兼容性了。
作者: yl51379    时间: 2015-8-11 16:16
MOG的指针脚本 一直都有这个用技能就会卡住的BUG  

兼容问题一直没有得到解决   最新版本的也是一样
作者: 午睡的风铃    时间: 2015-8-12 07:55
MOG兼容问题主要是更新后功能多了导致的,
给你个兼容性相对好到不知道要甩现在版本多少条街的早期MOG指针,先试试,还不行就还再说(─.─|||
  1. #==============================================================================
  2. # +++ MOG - Battle Cursor (2.2) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # http://www.atelier-rgss.com/
  6. #==============================================================================
  7. # Sistema de cursor animado de batalha nos sprites dos battlers.
  8. #==============================================================================
  9. # Arquivo necessário. (Graphics/System)
  10. #
  11. # Battle_Cursor.png
  12. # Battle_Cursor2.png *(necessário o script Scope EX)
  13. #
  14. #==============================================================================
  15. # NOTA - Deixe este script abaixo do script Battler Motion.
  16. #==============================================================================
  17. # ● Histórico (Version History)
  18. #==============================================================================
  19. # (2.2) Melhoria no sistema de posição da origem Z.
  20. #==============================================================================

  21. #==============================================================================
  22. # ■ CURSOR SETTING
  23. #==============================================================================
  24. module MOG_BATTLE_CURSOR
  25.   #Definição da posição do cursor em relação ao alvo.
  26.   CURSOR_POSITION = [-45, -16]
  27.   #Definição da posição do nome do alvo.
  28.   CURSOR_NAME_POSITION = [-10, 35]
  29.   #Ativar efeito deslizar.
  30.   CURSOR_SLIDE_EFFECT = true
  31.   #Ativar animação de levitação.
  32.   CURSOR_FLOAT_EFFECT = true
  33.   #Definição da prioridade do cursor.
  34.   CURSOR_Z = 105
  35.   #Posição do cursor Secundário.
  36.   TARGET_CURSOR_2_POS = [0, -48]
  37.   #Ativar animação de zoom.
  38.   TARGET_CURSOR_2_ZOOM_EFFECT = true
  39. end

  40. $imported = {} if $imported.nil?
  41. $imported[:mog_battle_cursor] = true

  42. #==============================================================================
  43. # ■ Game Temp
  44. #==============================================================================
  45. class Game_Temp
  46.   
  47.   attr_accessor :battle_cursor
  48.   attr_accessor :battle_cursor_data
  49.   attr_accessor :target_skill
  50.   
  51.   #--------------------------------------------------------------------------
  52.   # ● Initialize
  53.   #--------------------------------------------------------------------------  
  54.   alias mog_battle_cursor_initialize initialize
  55.   def initialize
  56.       @battle_cursor = [0,0,false,""] ; @target_skill = []
  57.       mog_battle_cursor_initialize
  58.   end  
  59.   
  60.   #--------------------------------------------------------------------------
  61.   # ● Clear Target Temp
  62.   #--------------------------------------------------------------------------   
  63.   def clear_target_temp
  64.       $game_party.members.each {|t| t.target_temp = false } rescue nil
  65.       $game_troop.members.each {|t| t.target_temp = false } rescue nil      
  66.   end
  67.    
  68. end

  69. #==============================================================================
  70. # ■ Spriteset Battle Cursor
  71. #==============================================================================
  72. class Sprite_Battle_Cursor < Sprite
  73.   include MOG_BATTLE_CURSOR
  74.   
  75.   #--------------------------------------------------------------------------
  76.   # ● Initialize
  77.   #--------------------------------------------------------------------------        
  78.   def initialize(viewport = nil)
  79.       super(viewport)
  80.       $game_temp.battle_cursor = [0,0,false,""]
  81.       self.bitmap = Cache.system("Battle_Cursor")
  82.       self.visible = $game_temp.battle_cursor[2] ; self.z = CURSOR_Z
  83.       @cursor_name = Sprite.new ; @cursor_name.bitmap = Bitmap.new(120,32)
  84.       @cursor_name.z = self.z + 1 ; @cursor_name.bitmap.font.size = 16
  85.       @cursor_name_enemy = $game_temp.battle_cursor[3]
  86.       @cursor_name_position = [CURSOR_NAME_POSITION[0] ,CURSOR_NAME_POSITION[1]]
  87.       @cursor_float = [0,0] ;  refresh_cursor_name
  88.   end
  89.   
  90.   #--------------------------------------------------------------------------
  91.   # ● Dispose Sprite
  92.   #--------------------------------------------------------------------------         
  93.   def dispose
  94.       super
  95.       dispose_sprite_cursor
  96.   end
  97.   
  98.   #--------------------------------------------------------------------------
  99.   # ● Dispose Sprite Cursor
  100.   #--------------------------------------------------------------------------            
  101.   def dispose_sprite_cursor
  102.       @cursor_name.bitmap.dispose ; @cursor_name.dispose
  103.       self.bitmap.dispose ; $game_temp.clear_target_temp
  104.   end

  105.   #--------------------------------------------------------------------------
  106.   # ● Refresh Cursor Name
  107.   #--------------------------------------------------------------------------              
  108.   def refresh_cursor_name
  109.       @cursor_name_enemy = $game_temp.battle_cursor[3]
  110.       @cursor_name.bitmap.clear
  111.       @cursor_name.bitmap.draw_text(0,0,120,32,@cursor_name_enemy.to_s,1)
  112.   end

  113.   #--------------------------------------------------------------------------
  114.   # ● Update
  115.   #--------------------------------------------------------------------------            
  116.   def update
  117.       super
  118.       update_sprite_cursor
  119.   end

  120.   #--------------------------------------------------------------------------
  121.   # ● Update Sprite Cursor
  122.   #--------------------------------------------------------------------------              
  123.   def update_sprite_cursor
  124.       update_visible ; update_cursor_float_effect
  125.       execute_move(0,self.x,$game_temp.battle_cursor[0])
  126.       execute_move(1,self.y,$game_temp.battle_cursor[1] + @cursor_float[1])
  127.       update_sprite_name
  128.   end

  129.   #--------------------------------------------------------------------------
  130.   # ● Update Visible
  131.   #--------------------------------------------------------------------------               
  132.   def update_visible
  133.       self.visible = $game_temp.battle_cursor[2]
  134.       (self.x = -64 ; self.y = -64) if !self.visible
  135.   end  
  136.   
  137.   #--------------------------------------------------------------------------
  138.   # ● Update Sprite Name
  139.   #--------------------------------------------------------------------------               
  140.   def update_sprite_name
  141.       return if @cursor_name == nil
  142.       refresh_cursor_name  if @cursor_name_enemy != $game_temp.battle_cursor[3]
  143.       @cursor_name.x = self.x + @cursor_name_position[0]
  144.       @cursor_name.y = self.y + @cursor_name_position[1]
  145.       @cursor_name.opacity = self.opacity ; @cursor_name.visible = self.visible
  146.   end  
  147.   
  148.   #--------------------------------------------------------------------------
  149.   # ● Update Cursor Float Effect
  150.   #--------------------------------------------------------------------------              
  151.   def update_cursor_float_effect
  152.       return if !CURSOR_FLOAT_EFFECT
  153.       @cursor_float[0] += 1
  154.       case @cursor_float[0]
  155.         when 0..20  ; @cursor_float[1] += 1
  156.         when 21..40 ; @cursor_float[1] -= 1
  157.         else
  158.           @cursor_float[0] = 0 ;   @cursor_float[1] = 0
  159.       end        
  160.   end  
  161.   
  162.   #--------------------------------------------------------------------------
  163.   # ● Execute Move
  164.   #--------------------------------------------------------------------------      
  165.   def execute_move(type,cp,np)
  166.       sp = 5 + ((cp - np).abs / 5)
  167.       if cp > np
  168.          cp -= sp ; cp = np if cp < np
  169.       elsif cp < np
  170.          cp += sp ; cp = np if cp > np
  171.       end     
  172.       self.x = cp if type == 0 ; self.y = cp if type == 1
  173.   end      
  174.   
  175. end

  176. #==============================================================================
  177. # ■ Spriteset Battle
  178. #==============================================================================
  179. class Spriteset_Battle
  180.   
  181.   #--------------------------------------------------------------------------
  182.   # ● Initialize
  183.   #--------------------------------------------------------------------------      
  184.   alias mog_battle_cursor_initialize initialize
  185.   def initialize
  186.       mog_battle_cursor_initialize
  187.       create_cursor
  188.   end
  189.   
  190.   #--------------------------------------------------------------------------
  191.   # ● Dispose
  192.   #--------------------------------------------------------------------------      
  193.   alias mog_battle_cursor_dispose dispose
  194.   def dispose
  195.       mog_battle_cursor_dispose
  196.       dispose_cursor
  197.   end
  198.   
  199.   #--------------------------------------------------------------------------
  200.   # ● Update
  201.   #--------------------------------------------------------------------------         
  202.   alias mog_battle_cursor_update update
  203.   def update
  204.       mog_battle_cursor_update
  205.       update_battle_cursor
  206.   end  
  207.   
  208.   #--------------------------------------------------------------------------
  209.   # ● Create_Cursor
  210.   #--------------------------------------------------------------------------        
  211.   def create_cursor
  212.       return if @battle_cursor != nil
  213.       $game_temp.clear_target_temp ; @battle_cursor = Sprite_Battle_Cursor.new      
  214.   end
  215.   
  216.   #--------------------------------------------------------------------------
  217.   # ● Dispose Cursor
  218.   #--------------------------------------------------------------------------        
  219.   def dispose_cursor
  220.       return if @battle_cursor == nil
  221.       @battle_cursor.dispose
  222.   end  
  223.   
  224.   #--------------------------------------------------------------------------
  225.   # ● Update Battle Cursor
  226.   #--------------------------------------------------------------------------         
  227.   def update_battle_cursor
  228.       return if @battle_cursor == nil
  229.       @battle_cursor.update      
  230.   end
  231.   
  232. end

  233. #==============================================================================
  234. # ■ Battle Cursor Index
  235. #==============================================================================
  236. module Battle_Cursor_index
  237.   
  238.   include MOG_BATTLE_CURSOR
  239.   
  240.   #--------------------------------------------------------------------------
  241.   # ● Check Index Limit
  242.   #--------------------------------------------------------------------------      
  243.   def check_index_limit
  244.       self.index = 0 if self.index >= item_max
  245.       self.index = (item_max - 1) if self.index < 0
  246.   end      
  247.   
  248.   #--------------------------------------------------------------------------
  249.   # ● Set Cursor Position Enemy
  250.   #--------------------------------------------------------------------------   
  251.   def set_cursor_position_enemy
  252.       return if !self.active
  253.       @fcursor = nil
  254.       $game_temp.battle_cursor[0] = $game_troop.alive_members[self.index].screen_x + CURSOR_POSITION[0] rescue nil
  255.       $game_temp.battle_cursor[1] = $game_troop.alive_members[self.index].screen_y + CURSOR_POSITION[1] rescue nil
  256.       $game_temp.battle_cursor[3] = $game_troop.alive_members[self.index].name rescue nil
  257.       $game_temp.battle_cursor_data = $game_troop.alive_members[self.index]
  258.       $game_temp.battle_cursor = [0,0,false,0] if $game_temp.battle_cursor[0] == nil
  259.       enable_target_sprites($game_temp.battle_cursor_data.index)
  260.   end
  261.   
  262.   #--------------------------------------------------------------------------
  263.   # ● Enable Target Sprites
  264.   #--------------------------------------------------------------------------   
  265.   def enable_target_sprites(target_index)  
  266.       return if $game_temp.target_skill.empty?
  267.       $game_temp.clear_target_temp ; battler = $game_temp.target_skill[1]
  268.       type = $game_temp.target_skill[0].is_a?(RPG::Skill) ? 0 : 1
  269.       target_index = $game_temp.battle_cursor_data.index
  270.       battler.make_action_temp($game_temp.target_skill[0].id, target_index,type)      
  271.       targets = battler.action_temp.make_targets.compact
  272.       targets.each {|t| t.target_temp = true }
  273.   end  
  274.    
  275.   #--------------------------------------------------------------------------
  276.   # ● Set Cursor Position Actor
  277.   #--------------------------------------------------------------------------   
  278.   def set_cursor_position_actor
  279.       return if !self.active      
  280.       @fcursor = nil
  281.       $game_temp.battle_cursor[0] = $game_party.members[self.index].screen_x + CURSOR_POSITION[0] rescue nil
  282.       $game_temp.battle_cursor[1] = $game_party.members[self.index].screen_y + CURSOR_POSITION[1] rescue nil
  283.       $game_temp.battle_cursor[3] = $game_party.members[self.index].name rescue nil
  284.       $game_temp.battle_cursor_data = $game_party.members[self.index]
  285.       $game_temp.battle_cursor = [0,0,false,0] if $game_temp.battle_cursor[0] == nil
  286.       enable_target_sprites(self.index)
  287.   end  
  288.   
  289.   #--------------------------------------------------------------------------
  290.   # ● Process Cursor Move
  291.   #--------------------------------------------------------------------------
  292.   def process_cursor_move
  293.       $game_temp.battle_cursor_data = nil
  294.       return unless cursor_movable?
  295.       last_index = @index
  296.       cursor_move_index(1) if Input.repeat?(:DOWN)
  297.       cursor_move_index(-1) if Input.repeat?(:UP)
  298.       cursor_move_index(1) if Input.repeat?(:RIGHT)
  299.       cursor_move_index(-1) if Input.repeat?(:LEFT)
  300.       $game_temp.battle_cursor_data = $game_troop.alive_members[@index]
  301.       Sound.play_cursor if @index != last_index
  302.   end
  303.       
  304.   #--------------------------------------------------------------------------
  305.   # ● Process Cursor Move Index
  306.   #--------------------------------------------------------------------------  
  307.   def cursor_move_index(value = 0)
  308.       self.index += value ;  check_index_limit
  309.   end

  310. end

  311. #==============================================================================
  312. # ■ Window_BattleActor
  313. #==============================================================================
  314. class Window_BattleActor < Window_BattleStatus
  315.   include Battle_Cursor_index
  316.   
  317.   #--------------------------------------------------------------------------
  318.   # ● Update
  319.   #--------------------------------------------------------------------------  
  320.   alias mog_battle_cursor_actor_update update
  321.   def update
  322.       pre_index = self.index
  323.       mog_battle_cursor_actor_update
  324.       set_cursor_position_actor if pre_index != self.index or @fcursor
  325.   end  

  326.   #--------------------------------------------------------------------------
  327.   # ● Show
  328.   #--------------------------------------------------------------------------
  329.   alias mog_battle_cursor_show show
  330.   def show
  331.       if @info_viewport
  332.          set_cursor_position_actor ; $game_temp.battle_cursor[2] = true
  333.          @fcursor = true
  334.       end
  335.       mog_battle_cursor_show
  336.   end

  337.   #--------------------------------------------------------------------------
  338.   # ● Hide
  339.   #--------------------------------------------------------------------------
  340.   alias mog_battle_cursor_hide hide
  341.   def hide
  342.       $game_temp.battle_cursor[2] = false if @info_viewport
  343.       $game_temp.clear_target_temp ; $game_temp.target_skill.clear
  344.       mog_battle_cursor_hide
  345.   end  
  346.   
  347. end

  348. #==============================================================================
  349. # ■ Game Enemy
  350. #==============================================================================
  351. class Game_Enemy < Game_Battler
  352.   attr_accessor :index
  353. end

  354. #==============================================================================
  355. # ■ Game Troop
  356. #==============================================================================
  357. class Game_Troop < Game_Unit
  358.    
  359.   #--------------------------------------------------------------------------
  360.   # * Setup
  361.   #--------------------------------------------------------------------------
  362.   alias mog_battle_cursor_setup setup
  363.   def setup(troop_id)
  364.       mog_battle_cursor_setup(troop_id)
  365.       if can_sort_index?
  366.          @enemies.sort! {|a,b| a.screen_x <=> b.screen_x}
  367.          @enemies.each_with_index {|e, i| e.index = i }
  368.       end
  369.   end
  370.   
  371.   #--------------------------------------------------------------------------
  372.   # * Can Sort Index?
  373.   #--------------------------------------------------------------------------
  374.   def can_sort_index?
  375.       return false if @enemies.size < 3
  376.       return false if troop.pages.size > 1
  377.       return false if !troop.pages[0].list[0].parameters.empty? rescue false
  378.       return true
  379.   end
  380.   
  381. end

  382. #==============================================================================
  383. # ■ Window_BattleEnemy
  384. #==============================================================================
  385. class Window_BattleEnemy < Window_Selectable
  386.   include Battle_Cursor_index
  387.   
  388.   #--------------------------------------------------------------------------
  389.   # ● Update
  390.   #--------------------------------------------------------------------------  
  391.   alias mog_battle_cursor_enemy_update update
  392.   def update
  393.       pre_index = self.index
  394.       mog_battle_cursor_enemy_update
  395.       set_cursor_position_enemy if pre_index != self.index or @fcursor
  396.   end
  397.   
  398.   #--------------------------------------------------------------------------
  399.   # ● Show
  400.   #--------------------------------------------------------------------------
  401.   alias mog_battle_cursor_show show
  402.   def show
  403.       if @info_viewport
  404.          set_cursor_position_enemy ; $game_temp.battle_cursor[2] = true
  405.          @fcursor = true
  406.       end
  407.       mog_battle_cursor_show
  408.   end
  409.   
  410.   #--------------------------------------------------------------------------
  411.   # ● Hide
  412.   #--------------------------------------------------------------------------
  413.   alias mog_battle_cursor_hide hide
  414.   def hide
  415.       $game_temp.battle_cursor[2] = false if @info_viewport
  416.       $game_temp.clear_target_temp ; $game_temp.target_skill.clear
  417.       mog_battle_cursor_hide
  418.   end  
  419.   
  420. end

  421. #==============================================================================
  422. # ■ Window Selectable
  423. #==============================================================================
  424. class Window_Selectable < Window_Base  

  425.   #--------------------------------------------------------------------------
  426.   # * Process OK
  427.   #-------------------------------------------------------------------------
  428.   alias mog_target_cursor_process_ok process_ok
  429.   def process_ok
  430.       mog_target_cursor_process_ok
  431.       execute_target_selection if can_execute_target_selection?
  432.   end
  433.   
  434.   #--------------------------------------------------------------------------
  435.   # * Can Execute Target Selection
  436.   #-------------------------------------------------------------------------
  437.   def can_execute_target_selection?
  438.       return false if !SceneManager.scene_is?(Scene_Battle)
  439.       return false if !current_item_enabled?
  440.       return true if self.is_a?(Window_BattleSkill)
  441.       return true if self.is_a?(Window_BattleItem)
  442.       return true if self.is_a?(Window_ActorCommand) and self.index == 0
  443.       return false
  444.   end

  445.   #--------------------------------------------------------------------------
  446.   # * Execute Target Selection
  447.   #-------------------------------------------------------------------------
  448.   def execute_target_selection
  449.       return if BattleManager.actor == nil
  450.       $game_temp.target_skill.clear
  451.       item = @data[index] rescue nil
  452.       item = $data_skills[BattleManager.actor.attack_skill_id] rescue nil if self.is_a?(Window_ActorCommand)
  453.       return if item == nil
  454.       if [2,8,10].include?(item.scope) or item.note =~ /<Scope Range = (\d+) - (\d+) - (\d+) - (\d+)>/   
  455.          $game_temp.target_skill = [item,BattleManager.actor]
  456.       end   
  457.   end  
  458.   
  459. end

  460. #==============================================================================
  461. # ■ Game Battler
  462. #==============================================================================
  463. class Game_Battler < Game_BattlerBase
  464.   
  465.   attr_accessor :target_temp
  466.   attr_accessor :action_temp
  467.   
  468.   #--------------------------------------------------------------------------
  469.   # * Initialize
  470.   #--------------------------------------------------------------------------
  471.   alias mog_target_cursor_initialize initialize
  472.   def initialize
  473.       @target_cursor_temp = false
  474.       mog_target_cursor_initialize
  475.   end
  476.   
  477.   #--------------------------------------------------------------------------
  478.   # ● Make Action Temp
  479.   #--------------------------------------------------------------------------
  480.   def make_action_temp(action_id,target_index,type)
  481.       return if action_id == nil
  482.       action = Game_Action.new(self, true)
  483.       action.set_skill(action_id) if type == 0
  484.       action.set_item(action_id) if type == 1
  485.       action.target_index = target_index
  486.       @action_temp = action
  487.   end     
  488.   
  489. end

  490. #==============================================================================
  491. # ■ Game BattlerBase
  492. #==============================================================================
  493. class Game_BattlerBase
  494.    attr_accessor :hidden
  495. end

  496. #==============================================================================
  497. # ■ Scene Battler
  498. #==============================================================================
  499. class Scene_Battle < Scene_Base

  500.   #--------------------------------------------------------------------------
  501.   # * On Skill OK
  502.   #--------------------------------------------------------------------------
  503.   def on_skill_ok
  504.       @skill = @skill_window.item
  505.       BattleManager.actor.input.set_skill(@skill.id)
  506.       BattleManager.actor.last_skill.object = @skill
  507.       if [0,11].include?(@skill.scope)
  508.          @skill_window.hide ; next_command
  509.       elsif @skill.for_opponent?
  510.          select_enemy_selection
  511.       else
  512.          select_actor_selection
  513.       end
  514.   end
  515.   
  516.   #--------------------------------------------------------------------------
  517.   # * On Item OK
  518.   #--------------------------------------------------------------------------
  519.   def on_item_ok
  520.       @item = @item_window.item
  521.       BattleManager.actor.input.set_item(@item.id)
  522.       if [0,11].include?(@item.scope)
  523.          @item_window.hide ; next_command
  524.       elsif @item.for_opponent?
  525.          select_enemy_selection
  526.       else
  527.          select_actor_selection
  528.       end
  529.       $game_party.last_item.object = @item
  530.   end
  531.   
  532. end

  533. #==============================================================================
  534. # ■ Sprite Battler
  535. #==============================================================================
  536. class Sprite_Battler < Sprite_Base
  537.   include MOG_BATTLE_CURSOR
  538.   #--------------------------------------------------------------------------
  539.   # * Initialize
  540.   #--------------------------------------------------------------------------
  541.   alias mog_target_cursor_initialize initialize
  542.   def initialize(viewport, battler = nil)
  543.       mog_target_cursor_initialize(viewport, battler)
  544.       create_target_cursor
  545.   end
  546.   
  547.   #--------------------------------------------------------------------------
  548.   # * Create Target Cursor
  549.   #--------------------------------------------------------------------------
  550.   def create_target_cursor
  551.       @target_cursor = Sprite.new
  552.       @target_cursor.bitmap = Cache.system("Battle_Cursor2")
  553.       @target_cursor.ox = @target_cursor.bitmap.width / 2
  554.       @target_cursor.oy = @target_cursor.bitmap.height / 2
  555.       @target_cursor.visible = false
  556.       @target_visible_old = @target_cursor.visible
  557.       @tc_pos = [TARGET_CURSOR_2_POS[0],TARGET_CURSOR_2_POS[1] + @target_cursor.oy]
  558.   end
  559.   
  560.   #--------------------------------------------------------------------------
  561.   # * Dispose
  562.   #--------------------------------------------------------------------------
  563.   alias mog_target_cursor_dispose dispose
  564.   def dispose
  565.       dispose_target_cursor
  566.       mog_target_cursor_dispose
  567.   end
  568.   
  569.   #--------------------------------------------------------------------------
  570.   # * Dispose Target Cursor
  571.   #--------------------------------------------------------------------------
  572.   def dispose_target_cursor
  573.       return if @target_cursor == nil
  574.       @target_cursor.bitmap.dispose ; @target_cursor.dispose
  575.   end
  576.   
  577.   #--------------------------------------------------------------------------
  578.   # * Update Postion
  579.   #--------------------------------------------------------------------------
  580.   alias mog_target_cursor_update_position update_position
  581.   def update_position
  582.       mog_target_cursor_update_position
  583.       update_target_cursor
  584.   end
  585.   
  586.   #--------------------------------------------------------------------------
  587.   # * Update Target Cursor
  588.   #--------------------------------------------------------------------------
  589.   def update_target_cursor
  590.       return if @target_cursor == nil
  591.       refresh_zoom if @target_visible_old != @target_cursor.visible
  592.       @target_cursor.visible = can_target_cursor_visible?
  593.       return if !@target_cursor.visible
  594.       @target_cursor.x = self.x + @tc_pos[0]
  595.       @target_cursor.y = self.y + @tc_pos[1]
  596.       @target_cursor.z = CURSOR_Z + 1
  597.       @target_cursor.opacity = 130 + rand(125)
  598.       @target_cursor.zoom_x -= 0.05 if @target_cursor.zoom_x > 1.00
  599.       @target_cursor.zoom_x = 1.00 if @target_cursor.zoom_x < 1.00
  600.       @target_cursor.zoom_y = @target_cursor.zoom_x            
  601.   end
  602.   
  603.   #--------------------------------------------------------------------------
  604.   # * Refresh Zoom
  605.   #--------------------------------------------------------------------------
  606.   def refresh_zoom
  607.       @target_visible_old = @target_cursor.visible
  608.       @target_cursor.zoom_x = 1.50 if TARGET_CURSOR_2_ZOOM_EFFECT
  609.       @target_cursor.zoom_y = @target_cursor.zoom_x
  610.   end
  611.   
  612.   #--------------------------------------------------------------------------
  613.   # * Can Target Cursor Visible?
  614.   #--------------------------------------------------------------------------
  615.   def can_target_cursor_visible?
  616.       return false if @battler.dead?
  617.       return false if @battler.hidden
  618.       return false if [email protected]_temp
  619.       return true
  620.   end
  621.   
  622. end
复制代码





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