Registrarse

[DUDA] ¿Cómo hacer que un NPC siga al Prot.?

Estado
Cerrado para nuevas respuestas.
¡Hola! Necesito que me digan como hago para que un npc siga al protagonista, así como en Diamante/Perla y Platino, Blanco y negro, donde en los dos los rivales siguen al protagonista al comienzo de la historia.
También el como hacer que un npc se acerque a otro, sin depender la ubicación de ninguno de los dos, les explico:
Breve, quiero que a el protagonista lo siga la profesora (1ra pregunta) y que al llegar al laboratorio vea a su ayudante y se acerque a ella. (2da pregunta) Recuerden que la profesora, en mi caso, puede estar en ese momento en cualquier lado del prota. según el prota. se mueva... no sé si me entienden pero es algo importante ¡Gracias!
 

Sutto

Pokemon Hecatombe Xd
Para que un npc te siga puedes llamar el scrip:
Kernel.pbAddDependency2(@event_id,"XXX")
En xxx pones el nombre del evento (npc), y para quitar que te siga pones
Kernel.pbRemoveDependency2("XXX")
Para tu segunda duda no se si sea posible hacerlo, pero te recomiendo "limitar el espacio de donde llega el jugador a unos 3 bloques, de esta manera puedes crear eventos en cada uno con los movimientos adecuados.
Espero haberte ayudado, saludos :).​
 
Última edición:

kanda

Creador de Pokémon HighSchool
No sé cómo puedes hacer que dos eventos se encuentren aleatoriamente.

Sin embargo hay una manera de llevarlos a un lugar haciendo que ellos encuentren el camino de ida. A ver si me explico correctamente:

Este script es necesario, lo pones sobre MAIN:
Código:
class Game_Character
  def move_toward_event(event)
    sx = @x - event.x
    sy = @y - event.y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    if abs_sx == abs_sy
      (rand(2) == 0) ? abs_sx += 1 : abs_sy += 1
    end
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end

  def move_toward_position(x, y)
    sx = @x - x
    sy = @y - y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    if abs_sx == abs_sy
      (rand(2) == 0) ? abs_sx += 1 : abs_sy += 1
    end
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end
end

def getEventByName(name)
  if name.is_a?(Symbol)
    name = name.to_s
  end

  $game_map.events.values.each do |event|
    return event if event.name.downcase == name.downcase
  end

  return nil
end

def _resolveEvent(event)
  if event.is_a?(Game_Event)
    return event
  end

  if event.is_a?(Numeric)
    return get_character(event)
  end

  return getEventByName(event) # Symbol or string
end

def pbMoveTowardEvent(event, otherEvent)
  event = _resolveEvent(event)
  otherEvent = _resolveEvent(otherEvent)

  maxsize=[$game_map.width,$game_map.height].max
  #return if !pbEventCanReachPlayer?(event,otherEvent,maxsize)
  loop do
    x=event.x
    y=event.y
    event.move_toward_event(otherEvent)
    break if event.x==x && event.y==y
    while event.moving?
      Graphics.update
      Input.update
      pbUpdateSceneMap
    end
  end
  $PokemonMap.addMovedEvent(event.id) if $PokemonMap
end

def pbMoveTowardPosition(event, x, y)
  event = _resolveEvent(event)

  maxsize=[$game_map.width,$game_map.height].max
  #return if !pbEventCanReachPlayer?(event,otherEvent,maxsize)
  loop do
    event.move_toward_position(x, y)
    break if event.x==x && event.y==y
    while event.moving?
      Graphics.update
      Input.update
      pbUpdateSceneMap
    end
  end
  $PokemonMap.addMovedEvent(event.id) if $PokemonMap
end

Y luego en RPG Maker, pones en un evento:
pbMoveTowardPosition:)Nombre del evento, X,Y)

En tu caso sería simplemente poner:
pbMoveTowardPosition:)Profesora, 24,71)
pbMoveTowardPosition:)Ayudante, 23,71)

Así por ejemplo, la profesora iría a la ubicación 24,71 como pueda, sin que tú le digas la ruta. Y la ayudante haría lo mismo con la ubicación 23,71, que sería la casilla de al lado.

Es lo único que se me ocurre que te puede ayudar, sino simplemente tendrías que hacer ese momento a mano y luego ponerlos con "movimiento aleatorio".
 
Es casi imposible leer lo que pone ahí, te recomiendo usar imgur.com para subir las imágenes.
¿Podrías mejor enseñar el evento por dentro?
Vale, http://imgur.com/a/1wNJJ

Es casi imposible leer lo que pone ahí, te recomiendo usar imgur.com para subir las imágenes.
¿Podrías mejor enseñar el evento por dentro?

Ahí está el error, el primer evento donde se acerca un npc a otro (Dos imágenes) y el otro donde debe seguir el npc al héroe
 

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Vale, Imgur: The most awesome images on the Internet



Ahí está el error, el primer evento donde se acerca un npc a otro (Dos imágenes) y el otro donde debe seguir el npc al héroe
Has puesto esto:
Código:
Kernel.pbAddDependency2(@event_id,"Profesora",)
Lo que está mal porque has dejado una coma de más fuera del string ("profesora",)
Además por el tamaño de la casilla de "llamar script" se ha separado en dos comandos, te recomiendo sustituir @event_id por la ID del evento que quieres que te siga (16 en este caso por lo que parece)
Código:
Kernel.pbAddDependency2(16,"Profesora")
Luego está el comando de pbMoveTowardPosition que también te recomiendo que uses la ID del evento en lugar del nombre y que no pongas 018 o 034 porque no tiene sentido poner un cero delante de un número cuando estamos hablando de posiciones.
 
Has puesto esto:
Código:
Kernel.pbAddDependency2(@event_id,"Profesora",)
Lo que está mal porque has dejado una coma de más fuera del string ("profesora",)
Además por el tamaño de la casilla de "llamar script" se ha separado en dos comandos, te recomiendo sustituir @event_id por la ID del evento que quieres que te siga (16 en este caso por lo que parece)
Código:
Kernel.pbAddDependency2(16,"Profesora")
Luego está el comando de pbMoveTowardPosition que también te recomiendo que uses la ID del evento en lugar del nombre y que no pongas 018 o 034 porque no tiene sentido poner un cero delante de un número cuando estamos hablando de posiciones.
¡Otro error!
 
Última edición por un moderador:

kanda

Creador de Pokémon HighSchool
Prueba esto:
Código:
pbAddDependency2(@event_id,"Profesora Nogal",14)
Yo lo tengo así y funciona bien.
 
Última edición:
Estado
Cerrado para nuevas respuestas.
Arriba