Necesito un Script para que aparezcan aleatoriamente enemigos por el mapa, no que vallas caminando y te aparezca un enemigo, si no que el enemigo se genere en el mapa de manera aleatoria y al chocarse contigo comience la pelea.
Script para que aparezcan enemigos aleatorios
Um... la mayoría de gente simplemente coloca eventos, NPCs con condición de inicio "Tocar evento/Colisionar", y con
<>Iniciar combate: tal-grupo
<>Borrar evento temporalmente
Hacer un script para ponerlos al azar... creo que no hay xd.
Podrias hacerlo mediante variables, y condiciones y efectos
Generas un valor de variable aleatorio, la cantidad la determina cuantos enemigos posibles quieres poner.
Luego en condiciones y efectos enumeras cada uno de los resultados posibles y su respectiva batalla.
Yo lo que hago es usar un script (Super-Sensor Event Range) para que los enemigos me detecten, me persigan y al chocar conmigo empiece la batalla (las dos últimas partes tendrás que hacerlas con eventos, pero tranquilo que es muy fácil).
Supongo que querrás hacer como el Dragon Quest IX, que tenía un sistema de aparición muy bueno... Pero el problema es que tendrás que poner dónde quieres los enemigos, porque que salgan al azar por el mapa es muy dificil...
En fin, echa un vistazo al script y me comentas ;)
Un saludo!
#-------------------------------------------------------------------------------
#--------------------Super-Sensor Event Range (XP/VX/ACE)-----------------------
# By:Super Shooter
# 11/01/2012 - V 1.3
# Establece un sensor en los eventos
#-------------------------------------------------------------------------------
# Los eventos con sensor activo deben llevar un comentario (nota o anotacion, el
# nombre cambia segun la version de maker que uses) el cual variara segun el
# tipo de sensor que quieras colocar, a continuacion los tipos de sensores y los
# comentarios que se deben incluir:
# sensor_circle x => este es el sensor el forma de circulo
# sensor_square x => sensor cuadrado
# sensor_cross x => sensor en forma de cruz
# siendo x la vision que tendran.
#-------------------------------------------------------------------------------
class Game_Event
LocalSwitch = 'D'#Interruptor que se activara cuando el heroe este en el rango
ActiveSensor = 7 #Interruptor que activa el sensor
#-------------------------------------------------------------------------------
# alias a los metodos initialize y update
#-------------------------------------------------------------------------------
alias supersensorevents_initialize initialize unless $@
alias supersensorevents_update update unless $@
#-------------------------------------------------------------------------------
# Modificacion al metodo initialize, para verificar si usa el sensor, su tipo y
# rango de funcionamiento
#-------------------------------------------------------------------------------
def initialize(map_id, event)
@sensor = check_sensor event
@range = range(@sensor[:sensor]) if @sensor
@range = @range.to_s.to_i if @range
supersensorevents_initialize(map_id, event)
end
#-------------------------------------------------------------------------------
# Modificacion al metodo update para actualizar el sensor en caso que este
# activo.
#-------------------------------------------------------------------------------
def update
supersensorevents_update
case @sensor[:type]
when 1
update_sensor_circle
when 2
update_sensor_square
when 3
update_sensor_cross
end if $game_switches[ActiveSensor] and @sensor[:type] and @sensor[:type] < 4 and @range
end
#-------------------------------------------------------------------------------
# update para el sensor cuando su tipo de rango es circular
#-------------------------------------------------------------------------------
def update_sensor_circle
sx = ($game_player.x - @x).abs
sy = ($game_player.y - @y).abs
key = [@map_id, @event.id, LocalSwitch]
if sx + sy <= @range
$game_self_switches[key] = true
$game_map.need_refresh = true
else
$game_self_switches[key] = false
$game_map.need_refresh = true
end
end
#-------------------------------------------------------------------------------
# update para el sensor cuando su tipo de rango es el cuadro
#-------------------------------------------------------------------------------
def update_sensor_square
sx = $game_player.x
sy = $game_player.y
key = [@map_id, @event.id, LocalSwitch]
if sx >= @x - @range and sx <= @x + @range and sy >= @y - @range and sy <= @y + @range
$game_self_switches[key] = true
$game_map.need_refresh = true
else
$game_self_switches[key] = false
$game_map.need_refresh = true
end
end
#-------------------------------------------------------------------------------
# update para el sensor cuando su tipo es en cruz
#-------------------------------------------------------------------------------
def update_sensor_cross
sx = $game_player.x
sy = $game_player.y
key = [@map_id, @event.id, LocalSwitch]
if sx == @x and sy <= @y + @range and sy >= @y - @range or
sy == @y and sx <= @x + @range and sx >= @x - @range
$game_self_switches[key] = true
$game_map.need_refresh = true
else
$game_self_switches[key] = false
$game_map.need_refresh = true
end
end
#-------------------------------------------------------------------------------
# Metodo que verifica su el evento usa o no el sensor, retorna un booleano
#-------------------------------------------------------------------------------
def check_sensor(event)
event.pages.each do |i|
i.list.each do |a|
return {:sensor => a.parameters[0], :type => 1} if a.code == 108 and /sensor.circle/.match a.parameters[0]
return {:sensor => a.parameters[0], :type => 2} if a.code == 108 and /sensor.square/.match a.parameters[0]
return {:sensor => a.parameters[0], :type => 3} if a.code == 108 and /sensor.cross/.match a.parameters[0]
end
end
return {}
end
#-------------------------------------------------------------------------------
# Metodo que retorna el rango, retorna MatchData por lo que se debe cambiar a
# String y luego a entero para usarse
#-------------------------------------------------------------------------------
def range(sensor)
return /\d+/.match sensor.to_s
end
end