🤔 Para Refletir :
"De pixel a pixel, os tiles compõem o Mapa."
- Core32

RPG Maker VX Ace Ajuda com script "MOG - Elnard Enemy Encounter"

Hermanoteu Masculino

Novato
Membro
Membro
Eu vou. Tu vais. Ele vai.
Juntou-se
20 de Julho de 2021
Postagens
13
Bravecoins
41
Fala, meus bons, cês tão bão?
Estou fazendo um jogo que usa um sistema de encontros de inimigos baseado em um radar, com uma HUD, onde o encontro só ocorre se o ponto azul encosta no ponto vermelho. O script funciona super bem, tendo inclusive uma opção de desativar o radar por meio do comando: "$game_system.enemy_radar = false", que além de esconder a HUD, desativa os encontros. Eu gosto dessa opção, porque é muito pertinente para criarmos cutscenes ou puzzles e etc, mas eu gostaria de uma outra opção de apenas esconder a HUD, mantendo os encontros, para que seja "disponibilizado" o radar somente mais a frente no jogo. Eu não sou programador, alguém consegue fazer alguma alteração nesse script, por gentileza? Desde já, agradeço.
Código:
#==============================================================================
# +++ MOG - Elnard Enemy Encounter (v1.6) +++
#==============================================================================
# By Moghunter
# https://atelierrgss.wordpress.com/
#==============================================================================
# Sistema de encontros de inimigos baseado no radar, caso o ponto azul encostar
# no ponto vermelho a batalha será ativada.
# Sistema semelhante ao do Elnard / The 7th Saga / Mystic Ark
#==============================================================================
#
# NOTA 1 - O radar será ativado apenas em mapas com lista de inimigos.
#
#==============================================================================
#
# NOTA 2 - Se deseja (forçar) desativar o radar para fazer alguma cena
#          de evento em um mapa com inimigos , use o código abaixo.
#
# $game_system.enemy_radar = false
#
#==============================================================================
#
# NOTA 3 - Se deseja parar os inimigos temporariamente use o código abaixo.
#
# $game_temp.enemy_radar_stop_duration = X     #60 = 1sec
#
#==============================================================================

#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 1.6 - Correção na posição dos ponteiros após a batalha.
#       - Melhoria na animação dos ponteiros.
#==============================================================================

module MOG_ELNARD_ENEMY_ENCOUNTER
   #Quantidade de inimigos no radar. (de 0 a 50)
   ENEMY_RADAR_NUMBER_OF_ENEMIES = 6
   #Velocidade de movimento do ponto inimigo (de 10 a 999...)
   ENEMY_MOVE_SPEED = 90
   #Tamanho do radar inimigo.
   ENEMY_RADAR_SIZE = [80,80]   
   #Posição do radar do inimigo
   ENEMY_RADAR_POSITION = [440,25]
   #Posição do layout.
   ENEMY_RADAR_LAYOUT_POSITION = [-7,-13]
   #Prioridade da Hud na tela.
   ENEMY_RADAR_Z = 50
   #Cor do ponto do jogador.
   POINT_COLOR_1 = Color.new(0,150,250,255)
   #Cor do ponto do Inimigo.
   POINT_COLOR_2 = Color.new(255,120,0,160)
end 
 
#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp
  attr_accessor :enemy_radar_reset
  attr_accessor :enemy_radar_player_move
  attr_accessor :enemy_radar_pre_xy
  attr_accessor :enemy_radar_active
  attr_accessor :enemy_radar_stop_duration
  attr_accessor :enemy_radar_battle_start
 
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------   
  alias mog_enemy_radar_initialize initialize
  def initialize
      @enemy_radar_reset = false
      @enemy_radar_player_move = []
      @enemy_radar_pre_xy = []
      @enemy_radar_active = true
      @enemy_radar_stop_duration = 0
      @enemy_radar_battle_start = false
      mog_enemy_radar_initialize
  end
 
end

#==============================================================================
# ■ Game System
#==============================================================================
class Game_System
  attr_accessor :enemy_radar
  attr_accessor :enemy_radar_map
 
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------   
  alias mog_enemy_radar_initialize initialize
  def initialize
      @enemy_radar = true
      @enemy_radar_map = false
      mog_enemy_radar_initialize
  end
 
end 

#==============================================================================
# ■ Game Player
#==============================================================================
class Game_Player < Game_Character

  #--------------------------------------------------------------------------
  # ● Encounter
  #-------------------------------------------------------------------------- 
  alias mog_enemy_radar_encounter encounter
  def encounter
      return false
      mog_enemy_radar_encounter
  end
    
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  alias mog_enemy_radar_update update
  def update
      pre_pos = [@x,@y]
      mog_enemy_radar_update
      if @move_succeed
         new_x = pre_pos[0] - @x
         new_y = pre_pos[1] - @y
         $game_temp.enemy_radar_player_move = [new_x,new_y]
      end 
  end
    
  #--------------------------------------------------------------------------
  # ● Enemy Radar Battle
  #-------------------------------------------------------------------------- 
  def enemy_radar_battle
      make_encounter_count
      troop_id = make_encounter_troop_id
      return false unless $data_troops[troop_id]
      BattleManager.setup(troop_id)
      BattleManager.on_encounter
      SceneManager.call(Scene_Battle)
      $game_temp.enemy_radar_reset = true
      $game_temp.enemy_radar_stop_duration = 30
  end
 
end 

#==============================================================================
# ■ Game Map
#==============================================================================
class Game_Map
 
  #--------------------------------------------------------------------------
  # ● Setup
  #--------------------------------------------------------------------------
  alias mog_enemy_radar_setup setup
  def setup(map_id)
      mog_enemy_radar_setup(map_id)
      $game_temp.enemy_radar_reset = true
      $game_temp.enemy_radar_stop_duration = 20
      $game_system.enemy_radar_map = encounter_list.empty? ? false : true
  end
 
end

#==============================================================================
# ■ Spriteset Map
#==============================================================================
class Spriteset_Map
 
  include MOG_ELNARD_ENEMY_ENCOUNTER
 
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  alias mog_enemy_radar_initialize initialize
  def initialize
      mog_enemy_radar_initialize
      create_enemy_radar 
  end
 
  #--------------------------------------------------------------------------
  # ● Dispose
  #------------------------------------------------------------------------- 
  alias mog_enemy_radar_dispose dispose
  def dispose
      mog_enemy_radar_dispose
      dispose_enemy_radar
  end
 
  #--------------------------------------------------------------------------
  # ● Update
  #-------------------------------------------------------------------------- 
  alias mog_enemy_radar_update update
  def update
      mog_enemy_radar_update
      update_enemy_radar
  end
 
  #--------------------------------------------------------------------------
  # ● Create Enemy Radar
  #--------------------------------------------------------------------------   
  def create_enemy_radar
      $game_temp.enemy_radar_active = can_active_enemy_radar?
      create_enemy_radar_background
      create_enemy_radar_point
      update_enemy_radar_visible
  end 
 
  #--------------------------------------------------------------------------
  # ● Create Enemy Radar Background
  #--------------------------------------------------------------------------     
  def create_enemy_radar_background
      $game_system.enemy_radar_map = $game_map.encounter_list.empty? ? false : true
      @radar_size = ENEMY_RADAR_SIZE
      @enemy_radar_layout = Sprite.new
      @enemy_radar_layout.bitmap = Cache.system("Enemy_Radar") rescue nil
      @enemy_radar_layout.bitmap = Cache.system("") if @enemy_radar_layout.bitmap == nil
      @enemy_radar_layout.z = ENEMY_RADAR_Z
      @enemy_radar_layout.x = ENEMY_RADAR_POSITION[0] + ENEMY_RADAR_LAYOUT_POSITION[0]
      @enemy_radar_layout.y = ENEMY_RADAR_POSITION[1] + ENEMY_RADAR_LAYOUT_POSITION[1]     
      @enemy_radar = Sprite.new
      @enemy_radar.bitmap = Bitmap.new(@radar_size[0] + 2, @radar_size[1] + 2)
      @enemy_radar.bitmap.fill_rect(Rect.new(0, 0, @radar_size[0], @radar_size[1]),Color.new(0,0,0,120))
      @enemy_radar.z = ENEMY_RADAR_Z + 1
      @enemy_radar.x = ENEMY_RADAR_POSITION[0] - 2
      @enemy_radar.y = ENEMY_RADAR_POSITION[1] - 2
  end
  #--------------------------------------------------------------------------
  # ● Create Enemy Radar Point
  #--------------------------------------------------------------------------       
  def create_enemy_radar_point
      point_size = ENEMY_RADAR_NUMBER_OF_ENEMIES
      point_size = 50 if point_size > 50
      index = 0
      @radar_point= []
      for i in 0..point_size
          @radar_point.push(Point_Sprite.new(nil,index,@radar_size[0] - 4,@radar_size[1] - 4))
          index += 1
      end
  end 
 
  #--------------------------------------------------------------------------
  # ● Dispose Enemy Radar
  #--------------------------------------------------------------------------   
  def dispose_enemy_radar
      return if @enemy_radar == nil
      @enemy_radar_layout.bitmap.dispose
      @enemy_radar_layout.dispose
      @enemy_radar.dispose
      @enemy_radar.bitmap.dispose
      index = 0
      for i in @radar_point
          $game_temp.enemy_radar_pre_xy[index] = [i.x, i.y]
          i.dispose
          index += 1
      end
      @radar_point.each {|sprite| sprite.dispose }     
  end
 
  #--------------------------------------------------------------------------
  # ● Update Enemy Radar
  #--------------------------------------------------------------------------   
  def update_enemy_radar
      return if @radar_point == nil
      $game_temp.enemy_radar_active = can_active_enemy_radar?
      up_radar = can_update_enemy_radar?
      update_enemy_radar_visible
      @radar_point.each {|sprite| sprite.update_radar(up_radar) }
      if $game_temp.enemy_radar_battle_start and $game_temp.enemy_radar_stop_duration == 0
         $game_temp.enemy_radar_battle_start = false
         $game_player.enemy_radar_battle
         $game_temp.enemy_radar_reset = true
      end
      $game_temp.enemy_radar_stop_duration -= 1 if $game_temp.enemy_radar_stop_duration > 0
      $game_temp.enemy_radar_reset = false if $game_temp.enemy_radar_reset
      $game_temp.enemy_radar_player_move.clear
      $game_temp.enemy_radar_pre_xy.clear
  end
    
  #--------------------------------------------------------------------------
  # ● Can Active Enemy Radar
  #--------------------------------------------------------------------------     
  def can_active_enemy_radar?
      return false if !$game_system.enemy_radar
      return false if !$game_system.enemy_radar_map
      return false if $game_message.visible
      return true
  end 
 
  #--------------------------------------------------------------------------
  # ● Can Update Enemy Radar
  #--------------------------------------------------------------------------       
  def can_update_enemy_radar?
      return false if $game_map.interpreter.running?
      return false if !$game_temp.enemy_radar_active
      return false if $game_temp.enemy_radar_stop_duration > 0
      return true
  end
 
  #--------------------------------------------------------------------------
  # ● Update Enemy Radar Visible
  #--------------------------------------------------------------------------       
  def update_enemy_radar_visible
      @enemy_radar.visible = $game_temp.enemy_radar_active
      @enemy_radar_layout.visible = $game_temp.enemy_radar_active   
  end 
 
end

#==============================================================================
# ■ Spriteset Battle
#==============================================================================
class Spriteset_Battle 

  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------   
  alias mog_enemy_radar_sprite_dispose dispose
  def dispose
      mog_enemy_radar_sprite_dispose
      $game_temp.enemy_radar_stop_duration = 30
  end
    
end

#==============================================================================
# ■ Point Sprite
#==============================================================================
class Point_Sprite < Sprite
 
  include MOG_ELNARD_ENEMY_ENCOUNTER
 
  #--------------------------------------------------------------------------
  # ● Initialize
  #-------------------------------------------------------------------------- 
  def initialize(viewport = nil,index = 0,slx = 81,sly = 81)
      super(viewport)
      @pos = [ENEMY_RADAR_POSITION[0],ENEMY_RADAR_POSITION[1]]
      @point_size = 4
      @index = index
      @screen_size = [slx ,sly]
      @screen_limit = [@screen_size[0] + @pos[0], @screen_size[1] + @pos[1]]
      @cp = [(@screen_size[0] / 2) + @pos[0], (@screen_size[1] / 2) + @pos[1]]
      @cp_limit_x = [(@cp[0] - (@point_size / 2)), (@cp[0] + (@point_size / 2))]
      @cp_limit_y = [(@cp[1] - (@point_size / 2)), (@cp[1] + (@point_size / 2))]   
      @move_time_limit = ENEMY_MOVE_SPEED
      @move_time_limit = 10 if @move_time_limit < 10
      @move_time = rand(@move_time_limit)
      @move_mode = 0
      create_bitmap
      @np = [self.x,self.y]
      if !$game_temp.enemy_radar_pre_xy.empty?
         restore_position
      else 
         reset_position
      end   
      @np = [self.x,self.y]
      update_position
      update_visible     
  end
 
  #--------------------------------------------------------------------------
  # ● Create Bitmap
  #--------------------------------------------------------------------------   
  def create_bitmap
      self.bitmap = Bitmap.new(@point_size,@point_size)
      self.ox = @point_size / 2
      self.oy = @point_size / 2
      self.z = ENEMY_RADAR_Z + 2
      if @index == 0
         self.bitmap.fill_rect(Rect.new(0, 0, @point_size, @point_size),point_color_1)
         self.x = @cp[0]
         self.y = @cp[1]
      else
         self.bitmap.fill_rect(Rect.new(0, 0, @point_size, @point_size),point_color_2)
      end 
  end
      
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------   
  def dispose
      self.bitmap.dispose
      super
  end
    
  #--------------------------------------------------------------------------
  # ● Update Radar
  #--------------------------------------------------------------------------   
  def update_radar(up_radar = true)
      update_visible
      return if !up_radar or !self.visible
      update_position
      reset_position if out_of_screen?
  end   

  #--------------------------------------------------------------------------
  # ● Update Visible
  #--------------------------------------------------------------------------     
  def update_visible
      self.visible = $game_temp.enemy_radar_active
      if @index > 0 and $game_temp.enemy_radar_stop_duration > 0
         self.visible = false
         self.x = -32
         self.y = -32
      end 
  end 
 
  #--------------------------------------------------------------------------
  # ● Reset Position
  #--------------------------------------------------------------------------   
  def reset_position
      return if @index == 0
      side = rand(2)
      side2 = rand(2)
      if side == 0
         self.x = rand(@screen_size[0]) + @pos[0]
         self.y = side2 == 0 ? + @pos[1] : @screen_limit[1]
      else   
         self.x = side2 == 0 ? + @pos[0] : @screen_limit[0]
         self.y = rand(@screen_size[1]) + @pos[1]       
      end 
      @np = [self.x,self.y]
   end   
 
  #--------------------------------------------------------------------------
  # ● Restore position
  #--------------------------------------------------------------------------     
  def restore_position
      return if @index == 0
      self.x = $game_temp.enemy_radar_pre_xy[@index][0]
      self.y = $game_temp.enemy_radar_pre_xy[@index][1]
      @np = [self.x,self.y]
  end 
 
  #--------------------------------------------------------------------------
  # ● Out of Screen?
  #--------------------------------------------------------------------------   
  def out_of_screen?
      return true if $game_temp.enemy_radar_reset
      return true if !self.x.between?(@pos[0],@screen_limit[0])
      return true if !self.y.between?(@pos[1],@screen_limit[1])
      return false     
  end
 
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------   
  def update_position
      return if @index == 0
      @move_time += 1
      update_player_movement if !$game_temp.enemy_radar_player_move.empty?     
      execute_move(0,self.x,@np[0])
      execute_move(1,self.y,@np[1])     
      execute_movement if @move_time > @move_time_limit
      execute_battle if can_execute_battle?
  end 
 
  #--------------------------------------------------------------------------
  # ● Update Player Movement
  #--------------------------------------------------------------------------     
  def update_player_movement
      @np[0] += ($game_temp.enemy_radar_player_move[0] * @point_size)
      @np[1] += ($game_temp.enemy_radar_player_move[1] * @point_size)         
  end
      
  #--------------------------------------------------------------------------
  # ● Can Execute Battle
  #--------------------------------------------------------------------------     
  def can_execute_battle?
      return false if !self.x.between?(@cp_limit_x[0],@cp_limit_x[1])
      return false if !self.y.between?(@cp_limit_y[0],@cp_limit_y[1])
      return false if $game_temp.enemy_radar_stop_duration > 0
      return true
  end
 
  #--------------------------------------------------------------------------
  # ● Execute Battle
  #--------------------------------------------------------------------------   
  def execute_battle
      $game_temp.enemy_radar_battle_start = true
      $game_temp.enemy_radar_pre_xy = []
  end
 
  #--------------------------------------------------------------------------
  # ● Execute Movement
  #--------------------------------------------------------------------------   
  def execute_movement
      @move_time = 0
      if @move_mode == 0
         @move_mode = 1
         move_toward_player
      else   
         @move_mode = 0   
         move_random
      end   
  end 
 
  #--------------------------------------------------------------------------
  # ● Move Random
  #--------------------------------------------------------------------------     
  def move_random
      rand_d = rand(2)
      rand_s = rand(2)
      move_d = rand_s == 0 ? -@point_size : @point_size
      if rand_d == 0
         @np[0] += move_d
      else 
         @np[1] += move_d
      end 
  end 
 
  #--------------------------------------------------------------------------
  # ● Move Toward Player
  #--------------------------------------------------------------------------     
  def move_toward_player
      sx = (self.x - @cp[0])
      sy = (self.y - @cp[1])
      move_x = sx > 0 ? -@point_size : @point_size
      move_y = sy > 0 ? -@point_size : @point_size     
      if sx.abs > sy.abs
         @np[0] += move_x
         @np[1] += move_y if sy != 0
      elsif sy != 0           
         @np[0] += move_x if sx != 0
         @np[1] += move_y
      end   
  end 

  #--------------------------------------------------------------------------
  # ● Execute Move
  #--------------------------------------------------------------------------     
  def execute_move(type,cp,np)
      sp = 1 + ((cp - np).abs / 30)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      self.x = cp if type == 0
      self.y = cp if type == 1
  end   
 
  #--------------------------------------------------------------------------
  # ● Point Color 1
  #--------------------------------------------------------------------------   
  def point_color_1
      POINT_COLOR_1
  end   
    
  #--------------------------------------------------------------------------
  # ● Point Color 2
  #--------------------------------------------------------------------------   
  def point_color_2
      POINT_COLOR_2
  end 
 
end

#===============================================================================
# ■ Scene Battle
#===============================================================================
class Scene_Battle < Scene_Base

 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------   
 alias mog_elnard_radar_initialize initialize
 def initialize 
      mog_elnard_radar_initialize
      $game_temp.enemy_radar_pre_xy = []
 end
    
end
 
Voltar
Topo Inferior