Npcs com movimento aleatório em determinada área

13 Respostas   1373 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

guKing

  • *
  • Posts: 109
  • Ouros: 36
Tópico criado em: 15/01/2017 às 03:54 - Última modificação por King Gerar em 25/01/2017 às 16:02

Eu dei uma olhada no fórum e no google e não achei nada que eu realmente entendesse :( Alguém sabe me explicar se tem como marcar uma área para que o um NPC perambule por ela sem sair da delimitação? A minha ideia é fazer isso para colocar alguma animais de enfeite no mapa.

EDIT: Área errada tem como mover? É para VX ACE, perdão. :(

E eu queria saber se a função REGIÃO do VX ACE tem como ser usada para isso.

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 1: 15/01/2017 às 08:30

Movi para a área correta.

Dá uma olhada nesse tópico. Creio que seu problema seja equivalente, portanto, de igual solução.

guKing

  • *
  • Posts: 109
  • Ouros: 36
Resposta 2: 15/01/2017 às 15:55 - Última modificação por guKing em 15/01/2017 às 16:51

Tchê, era isso mesmo brother! Muito obrigado!

edit

Então, funciona e tals, mas quando eu adiciono um NPC com movimento sem região ele buga. É pra ser isso mesmo?

sloder

  • *
  • Posts: 34
  • Ouros: 1
Resposta 3: 20/01/2017 às 19:59

Tem do miguel8884 de acordo com a região

guKing

  • *
  • Posts: 109
  • Ouros: 36
Resposta 4: 22/01/2017 às 15:05

[user]King Gerar[/user] Eu to tendo um problema com o rolê. Ele funciona e muito bem, mas, se eu quiser fazer com que um  NPC se mova por evento ou qualquer outra coisa, eu preciso definir uma região pra ele também. Tem como arrumar isso?

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 5: 22/01/2017 às 15:50

[user]King Gerar[/user] Eu to tendo um problema com o rolê. Ele funciona e muito bem, mas, se eu quiser fazer com que um  NPC se mova por evento ou qualquer outra coisa, eu preciso definir uma região pra ele também. Tem como arrumar isso?
Se tu fizer este evento com duas páginas, uma para se mover em regiões, outra sem esse comentário para que ele se mova
livremente, não funciona não? É que o script não é meu, e não lembro bem se eu o utilizava fora dessas condições.

guKing

  • *
  • Posts: 109
  • Ouros: 36
Resposta 6: 22/01/2017 às 16:36

Não funciona, buga mesmo ._.

Crixus

Resposta 7: 23/01/2017 às 20:31 - Última modificação por TanatosMaker em 23/01/2017 às 20:36

O ruim é que provavelmente você não vai usar uma área ao quadrado, ou seja com 4 lados sendo as laterais e os diametros iguais, daí seria possível fazer isso por eventos sem muita dificuldade.

Deixar o animal em processo paralelo:
Citar
<>Comentário: Verificar coordenadas do evento
<>Var "Animal A-X" igual X coordenada (Este evento)
<>Var "Animal A-Y" igual Y coordenada (Este evento)
<>Comentário: #Verificar se o animal sai da posição X
<>Condição "Animal A-X" menor  que 15
   <>Mover evento: Este Evento:
   :                          :Andar passo para direita
   :                          :Andar passo para direita
   <>
:Fim
<>Condição "Animal A-X" maior  que 55
   <>Mover evento: Este Evento:
   :                          :Andar passo para esquerda
   :                          :Andar passo para esquerda
   <>
:Fim
<>Comentário: #Verificar se o animal sai da posição Y
<>Condição "Animal A-X" menor que 12
   <>Mover evento: Este Evento:
   :                          :Andar passo para cima
   :                          :Andar passo para cima
   <>
:Fim
<>Condição "Animal A-X" maior que 30
   <>Mover evento: Este Evento:
   :                          :Andar passo para baixo
   :                          :Andar passo para baixo
   <>
:Fim
<>


Eu coloquei para retornar dois passos caso passe das coordenadas estipuladas, mas pode diminuir pra 1.

guKing

  • *
  • Posts: 109
  • Ouros: 36
Resposta 8: 24/01/2017 às 13:54

O ruim é que provavelmente você não vai usar uma área ao quadrado, ou seja com 4 lados sendo as laterais e os diametros iguais, daí seria possível fazer isso por eventos sem muita dificuldade.

Deixar o animal em processo paralelo:
Citar
<>Comentário: Verificar coordenadas do evento
<>Var "Animal A-X" igual X coordenada (Este evento)
<>Var "Animal A-Y" igual Y coordenada (Este evento)
<>Comentário: #Verificar se o animal sai da posição X
<>Condição "Animal A-X" menor  que 15
   <>Mover evento: Este Evento:
   :                          :Andar passo para direita
   :                          :Andar passo para direita
   <>
:Fim
<>Condição "Animal A-X" maior  que 55
   <>Mover evento: Este Evento:
   :                          :Andar passo para esquerda
   :                          :Andar passo para esquerda
   <>
:Fim
<>Comentário: #Verificar se o animal sai da posição Y
<>Condição "Animal A-X" menor que 12
   <>Mover evento: Este Evento:
   :                          :Andar passo para cima
   :                          :Andar passo para cima
   <>
:Fim
<>Condição "Animal A-X" maior que 30
   <>Mover evento: Este Evento:
   :                          :Andar passo para baixo
   :                          :Andar passo para baixo
   <>
:Fim
<>


Eu coloquei para retornar dois passos caso passe das coordenadas estipuladas, mas pode diminuir pra 1.

Realmente não :(

Mas o script que ele me passou me resolve o problema. A única questão é: qualquer evento (seja com movimento aleatório ou com rota) tem que ter uma região para si.

Crixus

Resposta 9: 24/01/2017 às 23:37 - Última modificação por TanatosMaker em 24/01/2017 às 23:40

Não precisa fazer uma cópia da mensagem pra responder a minha já que era a única acima da sua...

Sobre a script, é realmente, você vai ter que criar uma ID de terreno pra cada evento possivel, se mais de um evento puder se limitar a mesma área você usaria a mesma ID.

AbsoluteXandy

  • *
  • Posts: 163
  • Ouros: 92
  • "Please, won't you dance with me?"
  • Equipamentos "Esta peça foi forjada pelo grande ferreiro Dimitry, há algumas eras atrás. Diz-se a lenda que, não importa quantas vezes caia, este escudo sempre levantará seu portador.
Resposta 10: 25/01/2017 às 01:27

Uma resposta meio "burra" pra isso, que pode gerar um certo lag, é demarcar o terreno que ele pode ir com eventos vazios, assim ele não irá passar.
Spoiler
[close]
Dessa forma você pode fazer o movimento que quiser com o personagem e ele nunca sairá da área que colocou os eventos, pois ele vai detectar que há algo ali (certifique-se de não botar gráfico algum nos eventos e de NÃO ativar a opção de atravessar).


You See!~

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 11: 25/01/2017 às 07:23

[user]King Gerar[/user] Eu to tendo um problema com o rolê. Ele funciona e muito bem, mas, se eu quiser fazer com que um  NPC se mova por evento ou qualquer outra coisa, eu preciso definir uma região pra ele também. Tem como arrumar isso?
Consegui mexer no script. Se o evento estiver com uma página ativa na qual contém a tag <region 0>, ele não irá
sofrer limitação por regiões.

Código: [Selecionar]
#-------------------------------------------------------------------------------
#                              NPC Region Move
#-------------------------------------------------------------------------------
# Este script faz com que determinados eventos somente andem sobre tiles com
# determinadas regiões.
#-------------------------------------------------------------------------------
# Instruções:
# Comente o evento com "<region id>"
# No id colocar o id da region que o npc se moverá :)
# Caso queira que o evento se movimente em qualquer região, coloque o id nesta
# tag como 0 (zero).
#===============================================================================

#===============================================================================
# ** Game_CharacterBase
#-------------------------------------------------------------------------------
#  Esta classe gerencia os personagens. Comum a todos os persongens, armazena
# informações básicas como coordenadas e gráficos
# Esta classe é usada como superclasse da classe Game_Character.
#===============================================================================

class Game_Event < Game_Character
  #---------------------------------------------------------------------------
  # * Movimento em linha reta em
  #     d       : direção (2,4,6,8)
  #     turn_ok : permissão para mudar de direção
  #-----------------------------------------------------------------------------
  def move_straight(d, turn_ok = true)
    @move_succeed = passable?(@x, @y, d)
    if @list[0].parameters[0][0..6] == '<region'
      @list[0].parameters[0][9] != '>' ? @region_id = @list[0].parameters[0][8..9] : @region_id = list[0].parameters[0][8]
    end
    if @region_id != "0"
      @move_succeed = false unless $game_map.region_to_pass(@x, @y, d) == @region_id.to_i     
    end
    if @move_succeed
      set_direction(d)
      @x = $game_map.round_x_with_direction(@x, d)
      @y = $game_map.round_y_with_direction(@y, d)
      @real_x = $game_map.x_with_direction(@x, reverse_dir(d))
      @real_y = $game_map.y_with_direction(@y, reverse_dir(d))
      increase_steps
    elsif turn_ok
      set_direction(d)
      check_event_trigger_touch_front
    end
  end
end
#===============================================================================
# ** Game_Map
#-------------------------------------------------------------------------------
#  Esta classe gerencia o mapa. Inclui funções de rolagem e definição de
# passagens. A instância desta classe é referenciada por $game_map.
#===============================================================================

class Game_Map
  #-----------------------------------------------------------------------------
  # * Definição de ID da região
  #     x   : coordenada X
  #     y   : coordenada Y
  #-----------------------------------------------------------------------------
  def region_to_pass(x, y, d)
    case d
    when 2
      y += 1
    when 4
      x -= 1
    when 6
      x += 1
    when 8
      y -= 1
    end
    valid?(x, y) ? @map.data[x, y, 3] >> 8 : 0
  end
end

guKing

  • *
  • Posts: 109
  • Ouros: 36
Resposta 12: 25/01/2017 às 15:26

[user]King Gerar[/user] <3 que homem ein. Muito obrigado!

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 13: 25/01/2017 às 15:37

A danada sou eu  :rei:

Haha, bom que funcionou (eu acho). Qualquer bug, só dar um toque que destranco o tópico.

 :lock: