O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

É possível que um evento passe por outro sem acionar a opção atravessar?

Iniciado por dragolipe2, 23/02/2020 às 22:36

É possível fazer com que um evento passe por outro evento, sem acionar a opção atravessar ? Obg desde ja. 


"Não se pode chegar à alvorada, a não ser pelo caminho da escuridão"

Não. Afinal, essa opção serve justamente para isso.


GIVE ME CONTEXT! haha

assim, so pra saber mesmo, mas, o que aconteceu pra gera essa sua duvida?

A mesma resposta do Gabriel, mas estou respondendo também porque talvez eu saiba exatamente o que você quer fazer haha.
Eu tive esse probleminha quando fiz um desafio de eventos porque o atravessar faz o evento atravessar simplesmente tudo, árvores e tudo mais, enquanto o meu plano era que ele pudesse atravessar apenas os outros eventos.

Se for isso, fale a engine que ai a gente dá um jeito se for possível xD.

Eu consegui, venho usando o VX ACE. Era por conta que estou usando um sistema de inimigos no mapa e criei um com movimento aleatório no mapa e utilizei alguns eventos para mapear, além de alguns eventos de sistemas pelo mapa e o inimigo não estava passando pelos eventos, ele ficava preso e limitava muito por
onde ele podia passar ou não, então eu tive a ideia de colocar atravessar nele, porém ele começou a atrevessar tudo igual o Raizen falou e ai fiquei quebrando a cabeça, atras de outra forma de um evento atravessar outro. E a resposta estava bem na minha cara, era só colocar atravessar nos outros eventos imoveis e o inimigo no mapa passaria por eles normalmente, foi mal gente sou meio lesado e muito obrigado mesmo pela ajuda.


"Não se pode chegar à alvorada, a não ser pelo caminho da escuridão"

Exatamente, quando se usa um evento para completar uma parte do mapa (onde não deu para colocar um tile), que fica abaixo ou acima do jogador e dos eventos, a opção de ultrapassar deve ser marcada nele.


Já que o problema foi resolvido acredito que não será mais útil para você, mas, inspirado pela resposta do Raizen, fiz um script aqui, pro VXAce, para que seja possível controlar o que o evento irá atravessar. Geralmente esse tipo de controle não é necessário, já que podemos simplesmente usar o atravessar/ultrapassar nos demais eventos, como no caso das árvores, mas nunca se sabe o que o pessoal vai tentar fazer, né? Então pode ser útil para alguém. Deixo o código abaixo:

#==============================================================================
# ** Event Through | Conditions
#------------------------------------------------------------------------------
#  Adiciona a possibilidade dos eventos atravessarem apenas eventos ou apenas
# tiles. Para usar basta inserir as seguintes tags ao nome do evento:
#
#   <through_events>    - Para que o evento atravesse apenas eventos.
#
#   <through_tiles>     - Para que o evento atravesse apenas tiles.
#
#   <through_region id> - Para que o evento atravesse tudo apenas dentro da
#                         região do id indicado. Altere id pelo id da região.
#
#==============================================================================
#==============================================================================
# ** Game_CharacterBase
#==============================================================================
class Game_CharacterBase
 
  #--------------------------------------------------------------------------
  # * Variáveis públicas
  #--------------------------------------------------------------------------
  attr_accessor :event_name
 
  #--------------------------------------------------------------------------
  # * Inicialização de variáveis públicas
  #--------------------------------------------------------------------------
  alias :esteem_etc_gcb_init_public_members :init_public_members
  def init_public_members
    esteem_etc_gcb_init_public_members
    @event_name = ""
  end
 
  #--------------------------------------------------------------------------
  # * Definição de passabilidade
  #     x : coordenada X
  #     y : coordenada Y
  #     d : direção (2,4,6,8)
  #--------------------------------------------------------------------------
  alias :esteem_etc_gcb_passable? :passable?
  def passable?(x, y, d)
    x2 = $game_map.round_x_with_direction(x, d)
    y2 = $game_map.round_y_with_direction(y, d)
    return false unless $game_map.valid?(x2, y2)
    if @event_name =~ /<through_events>/i
      return false unless map_passable?(x, y, d)
      return false unless map_passable?(x2, y2, reverse_dir(d))
      return true
    elsif @event_name =~ /<through_tiles>/i
      return false if collide_with_characters?(x2, y2)
      return true
    elsif @event_name =~ /<through_region\s\d+>/i
      region = @event_name.slice(/<through_region\s\d+>/i)[/\d+/].to_i
      return true if region_id == region && (get_region_id(x2, y2) == region || 
      (map_passable?(x2, y2, reverse_dir(d)) && !collide_with_characters?(x2, y2)))
      return true if get_region_id(x2, y2) == region
    end
    esteem_etc_gcb_passable?(x, y, d)
  end
 
  #--------------------------------------------------------------------------
  # * Obter o ID da região
  #     x : coordenada X
  #     y : coordenada Y
  #--------------------------------------------------------------------------
  def get_region_id(x, y)
    $game_map.region_id(x, y)
  end
 
end # Game_CharacterBase
#==============================================================================
# ** Game_Event
#==============================================================================
class Game_Event < Game_Character
 
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #     event : RPG::Event
  #--------------------------------------------------------------------------
  alias esteem_etc_ge_initialize initialize
  def initialize(map_id, event)
    esteem_etc_ge_initialize(map_id, event)
    @event_name = @event.name
  end
 
end # Game_Event


Para definir o que o evento pode atravessar basta inserir uma das tags no seu nome.

Para que o evento atravesse apenas eventos:
<through_events>


Para que o evento atravesse apenas tiles:
<through_tiles>


Para que o evento atravesse tudo apenas dentro de determinada região:
<through_region id>

Nesse caso, é necessário alterar id pelo id da região desejada.

Exemplo:
[gifv]https://i.imgur.com/FYy1ZeR.mp4[/gifv]