Eventos Temporales
Los eventos temporales permiten que ciertos eventos, NPCs o sucesos en tu juego aparezcan o se comporten de forma diferente según la hora del día, el día de la semana, la fecha o la estación del año. Pokémon Essentials usa el reloj del sistema para determinar el tiempo, lo que permite crear un mundo dinámico.
Apariencia Basada en la Hora del Día
Essentials divide el día en varios períodos que puedes usar para controlar eventos:
| Período | Horario | Función de comprobación |
|---|---|---|
| Mañana | 05:00 - 09:59 | PBDayNight.isMorning? |
| Día | 10:00 - 16:59 | PBDayNight.isDay? |
| Tarde | 17:00 - 19:59 | PBDayNight.isEvening? |
| Noche | 20:00 - 04:59 | PBDayNight.isNight? |
Ejemplo: NPC que solo aparece de noche
# Condición de página del evento en Script:
PBDayNight.isNight?
# Este NPC solo será visible y activo durante la noche
Ejemplo: Diálogo diferente según la hora
if PBDayNight.isMorning?
pbMessage("¡Buenos días! ¡Qué bonita mañana!")
elsif PBDayNight.isDay?
pbMessage("¡Buenas tardes! ¡Hace un día espléndido!")
elsif PBDayNight.isEvening?
pbMessage("¡Buenas tardes! Ya está atardeciendo.")
else
pbMessage("¡Buenas noches! Ten cuidado, hay Pokémon nocturnos por aquí.")
end
Eventos por Día de la Semana
Puedes hacer que eventos ocurran solo en ciertos días de la semana usando la función pbIsWeekday?:
# Comprobar si es un día específico
# 0=Domingo, 1=Lunes, 2=Martes, 3=Miércoles,
# 4=Jueves, 5=Viernes, 6=Sábado
pbIsWeekday?(5) # ¿Es viernes?
pbIsWeekday?(0,6) # ¿Es fin de semana? (domingo o sábado)
Ejemplo: Mercado de los viernes
# Condición de página del evento:
pbIsWeekday?(5)
# Evento del vendedor especial de viernes
pbMessage("¡Bienvenido al Mercado del Viernes!")
pbMessage("Solo estoy aquí los viernes. ¡Tengo ofertas especiales!")
pbPokemonMart([
[:RARECANDY, 4800],
[:PPUP, 4800],
[:NUGGET, 1000]
], "¡Ofertas especiales de viernes!", false)
Ejemplo: Hermanos de la semana (estilo Pokémon G/S/C)
# Cada día de la semana, un hermano diferente da un objeto
dia = pbGetTimeNow.wday # 0-6
case dia
when 0 # Domingo
pbMessage("¡Soy Domingo! Toma esto.")
pbReceiveItem(:RARECANDY)
when 1 # Lunes
pbMessage("¡Soy Lunes! Aquí tienes.")
pbReceiveItem(:SHARPBEAK)
when 2 # Martes
pbMessage("¡Soy Martes! Un regalo para ti.")
pbReceiveItem(:PINKBOW)
when 3 # Miércoles
pbMessage("¡Soy Miércoles! Llévate esto.")
pbReceiveItem(:BLACKBELT)
when 4 # Jueves
pbMessage("¡Soy Jueves! Para ti.")
pbReceiveItem(:HARDSTONE)
when 5 # Viernes
pbMessage("¡Soy Viernes! Toma.")
pbReceiveItem(:POISONBARB)
when 6 # Sábado
pbMessage("¡Soy Sábado! Que lo disfrutes.")
pbReceiveItem(:SPELLTAG)
end
Eventos por Fecha Específica
Puedes crear eventos que ocurran en una fecha concreta del calendario:
# Obtener la fecha actual
ahora = pbGetTimeNow
mes = ahora.mon # Mes (1-12)
dia = ahora.day # Día del mes (1-31)
# Evento de Navidad (25 de diciembre)
if mes == 12 && dia == 25
pbMessage("¡Feliz Navidad! Toma este regalo especial.")
pbReceiveItem(:MASTERBALL)
end
# Evento de Halloween (31 de octubre)
if mes == 10 && dia == 31
pbMessage("¡Feliz Halloween! Los Pokémon fantasma están más activos hoy.")
end
Funciones Útiles de Tiempo
| Función | Descripción |
|---|---|
pbGetTimeNow |
Devuelve el objeto Time actual del sistema. |
pbIsWeekday?(d1, d2, ...) |
Devuelve true si hoy es uno de los días indicados (0=Dom, 6=Sáb). |
pbGetAbbrevMonthName(mes) |
Devuelve el nombre abreviado del mes (1-12). |
PBDayNight.isMorning? |
¿Es de mañana? (05:00-09:59) |
PBDayNight.isDay? |
¿Es de día? (10:00-16:59) |
PBDayNight.isEvening? |
¿Es por la tarde? (17:00-19:59) |
PBDayNight.isNight? |
¿Es de noche? (20:00-04:59) |
Sistema de Estaciones
Essentials soporta un sistema de estaciones (primavera, verano, otoño, invierno) que puede afectar visualmente los mapas y los encuentros Pokémon:
# Obtener la estación actual
# Las estaciones cambian cada mes en el juego:
# Enero/Mayo/Septiembre = Primavera
# Febrero/Junio/Octubre = Verano
# Marzo/Julio/Noviembre = Otoño
# Abril/Agosto/Diciembre = Invierno
estacion = pbGetSeason
# 0 = Primavera, 1 = Verano, 2 = Otoño, 3 = Invierno
case estacion
when 0
pbMessage("Es primavera. Las flores están floreciendo.")
when 1
pbMessage("Es verano. Hace mucho calor.")
when 2
pbMessage("Es otoño. Las hojas cambian de color.")
when 3
pbMessage("Es invierno. Todo está cubierto de nieve.")
end
Tiempo Real vs Tiempo del Juego
Essentials usa el reloj del sistema operativo por defecto (tiempo real). Esto significa que:
- Si son las 22:00 en el mundo real, será de noche en el juego.
- Los eventos del martes solo ocurren los martes reales.
- Las estaciones siguen los meses reales.
Si prefieres usar un sistema de tiempo propio del juego (independiente del reloj real), necesitarás crear un sistema personalizado que use variables del juego como reloj interno.
Eventos de Reinicio Diario
Para crear eventos que se puedan repetir una vez al día (como recibir un objeto diario), puedes usar variables para guardar la última fecha:
# Evento de regalo diario
ahora = pbGetTimeNow
ultimo_dia = $game_variables[50] # Variable que guarda el último día
if ultimo_dia != ahora.yday # yday = día del año (1-366)
pbMessage("¡Toma tu regalo diario!")
pbReceiveItem(:POTION)
$game_variables[50] = ahora.yday # Guardar el día actual
else
pbMessage("Ya recibiste tu regalo de hoy. ¡Vuelve mañana!")
end
Reinicio semanal
# Evento que se puede hacer una vez por semana
ahora = pbGetTimeNow
semana_actual = ahora.strftime("%U").to_i # Número de semana del año
ultima_semana = $game_variables[51]
if ultima_semana != semana_actual
pbMessage("¡El desafío semanal está disponible!")
# ... lógica del desafío ...
$game_variables[51] = semana_actual
else
pbMessage("Ya completaste el desafío de esta semana.")
end