Registrarse

[AYUDA]script de fecha virtual

Estado
Cerrado para nuevas respuestas.

~LV~

Un entrenador pasajero
hola queria pedir ayuda para un script para programar una fecha en pokemon essentials algo asi como para hacer un evento que se active en cierto dia.
no se mucho de sripts y encontre este me preguntaba si se podia modificar este para usarse en el essentials

#==============================================================================#
#*#*#*#*#*#*#*#*#*#*#=*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#=#
# TIEMPO VIRTUAL # #Este script fue creado partiendo del script original *
# VERSION 1.0 # *"Windows_PlayTime" del rpg maker xp y modificado para #
# by AMROTZ # #mis necesidades.Eres libre de usarlo y/o modificarlo *
#*#*#*#*#*#*#*#*#*#*#=*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#=#
#
#INSTRUCCIONES:pegar este script en una nueva pagina encima de main.
#
#
#===============================================================================
#
#--Creamos la clase encargada de la fecha y la hora
#
# ■ Fecha
#------------------------------------------------------------------------------
#  Esta clase controla el tiempo virtual
#===============================================================================

#------Damos nombre a la clase--------------------------------------------------

class Fecha

#--Creamos los metodos de clase-----------------------------------------------
#Aqui haremos que las variables indicadas se puedan leer y escribir, solo
#leer o solo escribir desde otras clases, el attr_"X" es el encargado de
#otorgarlo esos permisos, dependiendo de lo que sea "X" las variables se
#podran leer, escribir, o ambas cosas desde otras clases.


#Estas variables solo se podran LEER desde otras clases.

attr_reader :mes
attr_reader :dia
attr_reader :hora
attr_reader :horas
attr_reader :minuto
attr_reader :segundo
attr_reader :diasemana
attr_reader :nombremes
attr_reader :numdiasemana

attr_reader :img_tiempo
attr_reader :img_tiempo_rect


attr_accessor :numestacion
attr_accessor :estacion

attr_reader :hora_amanece
attr_reader :hora_anochece
attr_reader :hora_dia
attr_reader :hora_noche

attr_reader :amaneciendo
attr_reader :de_dia
attr_reader :anocheciendo
attr_reader :de_noche


#Estas variables se podran LEER y MODIFICAR desde otras clases, asi que
#cuidado cuando realiceis eventos en el juego con estas variables, podeis
#sumar y restar para aumentar o disminuir la fecha o la hora, pero nunca
#les otorgueis un valor o el script daria un erro y dejaria de funcionar

attr_accessor :año
attr_accessor :totalmes
attr_accessor :totaldia
attr_accessor :totalhor
attr_accessor :totalmin

attr_accessor :system_color
attr_accessor :normal_color
attr_accessor :scolor
attr_accessor :ncolor

attr_accessor :n_min
attr_accessor :n_hor
attr_accessor :n_dia
attr_accessor :n_mes
attr_accessor :n_año

attr_accessor :ir_min
attr_accessor :ir_hor
attr_accessor :ir_dia
attr_accessor :ir_mes
attr_accessor :ir_año


#Para referirse a estas variables en el juego en algun evento, ya sea para
#aumentar o disminuir su valor, debeis de poner delante $fecha. y la variable.
#por ejemplo para aumentar 4 horas seria.
# $fecha.totalhor =+ 4
#Para realizar acciones dependiendo de la hora o la fecha utilizar las otras
#variables, que son las que se muestran en la ventana, estas variables son
#las totales, por ejemplo, si pasaron 4 meses virtuales habran pasado
#124 dias, ya que las variables totales aumentan sin parar no como las otras.

#--Metodos creados------------------------------------------------------------

#--------------------------------------------------------------------------
# - Inicio de Objetos...
#--------------------------------------------------------------------------


def initialize

#VARIABLES PARA AUMENTAR EL TIEMPO
#variable que permite aumentar los minutos,cambiar 50 por el minuto inicial
@n_min = 50
#variable que permite aumentar las horas,cambiar 7 por la hora inicial
@n_hor = 6
#variable que permite aumentar los dias,cambiar 18 por el dia inicial - 1
@n_dia = 19
#variable que permite aumentar los meses,cambiar 5 por el mes inicial - 1
@n_mes = 5
#variable que permite aumentar los años,cambiar 2000 por el año inicial
@n_año = 2000

#VARIABLES PARA IR A UN "TIEMPO" CONCRETO
#variable para ir a un minuto concreto
@ir_min = 0
#variable para ir a una hora concreta
@ir_hor = 0
#variable para ir a un dia concreto
@ir_dia = 0
#variable para ir a un mes concreto
@ir_mes = 0
#variable para ir a un año concreto
@ir_año = 0

# Variables que permiten pausar o continuar el tiempo
@pause = false
@pause_menu = false

# Variables que van almacenando el tiempo total.
# El tiempo pausado es el tiempo que se guarda de el tiempo total que se ha
#pausado,para asi al ponerle play solamente reste el tiempo pausado al total
#que se ha jugado.
# tiempo_temp es el tiempo que transcurre cada vez que se le pone pause
#hasta que se le vuelve a poner play y se incializa.
@totalsec = 0
@tiempo_pausado = 0
@tiempo_temp = 0

# Es el indice de velocidad del juego. Al dejar a 1 avanza 1 segundo real
#por un segundo del juego.
# 60 = 1 segundo real es un minuto en el juego.
@speed = 60

#---Definimos los tonos de pantalla.Podeis configurarlos a vuestro gusto.

@tono_amanece = Tone.new(20, 20, -20, 20)
@tono_dia = Tone.new(30, 30, 30, 0)
@tono_anochece = Tone.new(30, -50, -50, 50)
@tono_noche = Tone.new(-100, -100, -100, -100)
@tiempo_tono = 20 #tiempo que tarda en cambiar el tono

#Aqui el tono para interiores

@tono_int = Tone.new(-10, -10, -10, 0)

#aqui el tono extra, en principio lo pondre igual que el de noche,
#pero podeis modificarlo a vuestro antojo.

@tono_extra = Tone.new(-100, -100, -100, -100)


#---Creamos variables para interiores.
#== @int == es una variable utilizada para que al salir de un mapa
#interior a otro exterior el tono de pantalla en vez de cambiar
#progresivamente cambiara de golpe.

@int = 0

#== @interior == es un array donde pondremos las ids de los mapas donde no
#querramos que el tono de pantalla cambie, como por ejemplo en los
#interiores, solo poner las id`s separadas por comas asi:
#@interior = [2, 5, 6, 8]

@interior = [2, 4]

#== @sonido_int == es igual que el array anterior solo que este es para
#que no suenen los sonidos de amanecer y anochecer en los mapas que
#elijamos.

@sonido_int = [2]

#--TONO DE PANTALLA EXTRA--
#este es un tono de pantalla para mapas que no cambiaran su tono aunque
#pasen las horas y se haga de dia o de noche, siempre tendra el mismo tono
#el funcionamiento es igual que los dos arrays anteriores, entre los
#corchetes "[]" poner las IDs de los mapas que querrais que tengan este
#tono siempre, ponerlos separados por comas, igual que en los 2 anteriores

@map_extra = [3]


#---Definimos variables de los dias de semana y asignamos los nombre-----
#el array "@diasemana" comienza a contar desde 0, por lo que
# @diasemana[0] dara como resultado Lunes.si es 1 dara Martes, etc.
#si kereis utilizar el dia de semana en algun evento podeis hacerlo de
#dos formas, para especificar el dia hacer esto.

#FORMA1 : $fecha.diasemana["aqui el numero correspondiente al dia"]
#como he dicho antes, empieza desde el 0 = Lunes y va asta el 6 = Domingo

#FORMA 2 :$fecha.numdiasemana == "numero"
#igual que antes, empieza desde el 0 = Lunes asta 6 = Domingo

#NOTA: NO SE PUEDE NI ASIGNAR UN DIA CONCRETO NI HACER NINGUNA OPERACION
#CON ESTE ARRAY, PARA AUMENTAR DIAS UTILIZAR LA VARIABLE @TOTALDIA.
#un ejemplo de utilizar los dias de semana es, por ejemplo, para hacer
#que algunas tiendas esten cerradas un dia concreto, es simple, basta
#con utilizar un condicional.
#EJEMPLO: Para que una tienda este cerrada en domingo.
# if $fecha.diasemana == $fecha.diasemana[6]
# @tienda = "valor para "cerrada""
# else
# @tienda = "valor para "abierta" "
# si kereis usar mejor el numero de dia de semana simplemente
#cambiar $fecha.diasemana ==$fecha.diasemana[6] por
#$fecha.numdiasemana == 6
#la variable @tienda es orientativa, poner la que utiliceis para ello.

@diasemana = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"]



#--Definimos variables de los nombres de los meses-----------------------
#aqui pasa lo mismo, por eso le ponemos como primer valor 0, ya que
#la variable @mes almacena el numero de mes y nunca pasa de 12, pero
#tampoco llega a 0, utilizaremos la variable @mes para definir el valor
#de @nombremes, y como @mes nunca llega a 0, el primer valor de @nombremes
#sera un valor nulo, nunca sera mostrado.

@nombremes = ["0", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]


#creamos dos variables para almacenar 2 colores diferentes dependiendo de la
#etapa del dia en que estemoas, lo utilizo para las ventanas.
@scolor = Color.new(255, 255, 255, 255)
@ncolor = Color.new(255, 255, 255, 255)



refresh
end #end del initialize

#Creamos las operaciones para pausar el tiempo virtual cuando sea necesario.
#Para pausar el tiempo desde un evento comun poner:
#$Fecha.pause
#Para volver a reanudar el tiempo poner
#$Fecha.play

def pause
if @pause == false
@tiempo_temp = Graphics.frame_count
@pause = true
end
end

def play
if @pause == true
@tiempo_pausado += (Graphics.frame_count - @tiempo_temp)
@tiempo_temp = 0
@pause = false
end
end

#Aqui definimos los metodos para pausar el juego al entrar al menu, y reanudar
#el tiempo al salir del menu en el caso de que no estuviera parado antes.
#Si no quereis parar el tiempo al entrar al menu comentar las lineas que esten
#entre el def y el ultimo end de cada operacion.No comentar ni el def ni el
#ultimo end de cada operacion u os dara error.

def pause_menu
if @pause == false and @pause_menu == false
@tiempo_temp = Graphics.frame_count
@pause_menu = true
end
end

def play_menu
if @pause == false and @pause_menu == true
@tiempo_pausado += (Graphics.frame_count - @tiempo_temp)
@tiempo_temp = 0
end
@pause_menu = false
end





#--------------------------------------------------------------------------
# - Actualizacion
#--------------------------------------------------------------------------

def refresh

#------Definimos variables totales--------------------------------------------

#Si queremos avanzar en el tiempo en el juego deberemos utilizar estas
#variables.
#$fecha.totalmin =+ "los minutos que quieras avanzar"
#igual con las demas,nunca le asigneis un valor,solo sumar o restar
#si le asignais un valor dejara de correr el tiempo de esa variable.
#Por ejemplo, si haceis
#$fecha.totalhor = 5
#la hora se quedara permanentemente en cinco, y no sumara cada 60 minutos

if @pause == false and @pause_menu == false
@totalsec = ((Graphics.frame_count- @tiempo_pausado) * @speed) / Graphics.frame_rate
else
end



#Aqui especifico los valores de las variebles totales, es decir, estas
#variables estaran sumando indefinidamente mientras el tiempo estea activo,
#un ejemplo: @totalmin al llegar a 60 seguira a 61, estas variables no son
#las encargadas de mostrar la fecha, solo de controlarla.

@totalmin = @totalsec / 60 + @n_min
@totalhor = @totalmin / 60 + @n_hor
@totaldia = @totalhor / 24 + @n_dia
@totalmes = @totaldia / 31 + @n_mes
@año = totalmes / 12 + @n_año


#----Definimos variables de tiempo---------------------------------------

#Estas variables dependen totalmente de las variables totales de arriba,
#aqui indicamos cual es el numero maximo a mostrar.EJEMPLO
#@hora = @totalhor % 24
#el % es el resto, o sea,
#@hora es igual al resto de @totalhor dividido entre 24.
#basicamente hara que cuando la hora llegue a 23, la hora siguiente sera 0
#NOTA: el mes .el dia y @horas no marcaran 0 por el condicional que se
#los impide

#ATENCION:la variable totaldiasem tiene que ser igual a @totaldia
#menos los dias que le habeis asignado de inicio, y despues sumarle
#el numero de dia de semana en el que querais empezar, empezando
#por 0 que es Lunes asta 6 que es Domingo.
#por ejemplo, digamos que habeis definido el dia inicial en 20, como dije
#arriba, se le debera poner un numero menos por que aqui abajo sumara 1,
#por lo tanto el dia que debereis poner en @n_dia sera 19, pues
#entonces totaldiasem tendra que estar asi:
#
# totaldiasem = (@totaldia - 19) + 1
#si no le sumais ningun numero al final, el valor inicial de totaldiasem
#sera 0, por lo tanto sera Lunes

totaldiasem = (@totaldia -20) + 3

@mes = @totalmes % 12 +1
@dia = @totaldia % 31 +1
@horas = @totalhor % 12
if @horas == 0
@horas = 12
end
@hora = @totalhor % 24
@minuto = @totalmin % 60
@segundos = @totalsec % 60

@numdiasemana = totaldiasem % 7



#-----------------------------------------------------------------------------
#==Inicio del sistema de estaciones
#-----------------------------------------------------------------------------


#==ESTACIONES DEL AÑO=======================================================

#Para cambiar la hora de inicio de cada parte del dia simplemente cambiar el
#valor de las variables hora_"parte del dia" por las que correspondan.
#Para cambiar el numero de estaciones o los dias en que empiezan, cambiar
#los condicionales poniendo mas "elsif" en caso de querer poner mas
#estaciones y cambiar las variables @mes y @dia por las que correspondan

#Estaciones del año===========================


if (@mes == 3 and @dia >= 20) or @mes == 4 or @mes == 5 or (@mes == 6 and @dia < 20)
@numestacion = 1
elsif (@mes == 6 and @dia >=20) or @mes == 7 or @mes == 8 or (@mes == 9 and @dia < 20)
@numestacion = 2
elsif (@mes == 9 and @dia >= 20) or @mes == 10 or @mes == 11 or (@mes == 12 and @dia < 20)
@numestacion = 3
elsif (@mes == 12 and @dia >= 20) or @mes == 1 or @mes == 2 or (@mes == 3 and @dia < 20)
@numestacion = 4
end

#Definimos los nombres de cada estacion y establecemos las horas en que
#empieza cada parte del dia.
#donde solo hay un numero es la hora en que empiza esa parte del dia.
#donde hay muchos numeros son las horas que pertenecen a esa parte del dia.

case @numestacion

when 1
#Horario primavera
@estacion = "Primavera"
@hora_amanece = 4
@amaneciendo = [4, 5, 6, 7]
@hora_dia = 8
@de_dia = [8, 9, 10, 11, 12, 13, 14, 15]
@hora_anochece = 16
@anocheciendo = [16, 17, 18, 19]
@hora_noche = 20
@de_noche = [20, 21, 22, 23, 0, 1, 2, 3]

when 2
#horario verano
@estacion = "Verano"
@hora_amanece = 4
@amaneciendo = [4, 5, 6, 7]
@hora_dia = 8
@de_dia = [8, 9, 10, 11, 12, 13, 14, 15]
@hora_anochece = 16
@anocheciendo = [16, 17, 18, 19]
@hora_noche = 20
@de_noche = [20, 21, 22, 23, 0, 1, 2, 3]

when 3
#Horario otoño
@estacion = "Otoño"
@hora_amanece = 4
@amaneciendo = [4, 5, 6, 7]
@hora_dia = 8
@de_dia = [8, 9, 10, 11, 12, 13, 14, 15]
@hora_anochece = 16
@anocheciendo = [16, 17, 18, 19]
@hora_noche = 20
@de_noche = [20, 21, 22, 23, 0, 1, 2, 3]


when 4
#horario invierno
@hora_amanece = 4
@amaneciendo = [4, 5, 6, 7]
@hora_dia = 8
@de_dia = [8, 9, 10, 11, 12, 13, 14, 15]
@hora_anochece = 16
@anocheciendo = [16, 17, 18, 19]
@hora_noche = 20
@de_noche = [20, 21, 22, 23, 0, 1, 2, 3]

end #end del case @numestacion

#============================================================================


end #end del refresh



#=============================================================================
#==AMANECER-ANOCHECER
#=============================================================================
def amanecer_anochecer

#Para poner mas acciones que se realicen al amanecer o al anochecer
#ponerlas en los condicionales de abajo.

#Si son acciones que solo se realizan una vez en cada parte del dia
#(como el sonido del gallo por la mañana) ponerlas dentro del condicional
#del sonido de amanecer anochecer o la parte del dia que sea.

#Si son acciones que siempre esten presentes durante esa parte del dia
#ponerlas en el condicional de las partes del dia.

#=====================INFORMACION========================================#
#Si quereis que dichas acciones se realicen en TODOS los mapas, #
# entonces ponerlo en donde pone: #
# "#en TODOS los mapas" #
# #
#Si quereis que las acciones se realicen SOLO en los mapas donde NO se #
#escucha el sonido entonces ponerlo en donde pone: #
# "#si en el mapa SI se escucha el sonido" # #
# #
#Si quereis que las acciones se realicen SOLO en los mapas donde SI se #
#escucha el sonido entonces ponerlo en donde pone: #
# "#si en el mapa NO se escucha el sonido" #
# #
#Si quereis que las acciones se realicen SOLO en los mapas que habeis #
#definido como interiores, entonces ponerlo en donde pone: #
# "#en los mapas INTERIORES" #
# #
#Si quereis que las acciones se realicen SOLO en los mapas que no habeis #
#definido como interiores, entonces ponerlo donde pone: #
# "#en los mapas EXTERIORES" #
# #
#Si quereis que las acciones se realicen SOLO en los mapas que habeis #
#definido como "extra", entonces ponerlo en donde pone: #
# "#en los mapas EXTRA" #
# #
#Si quereis que las acciones se realicen SOLO en los mapas que no habeis #
#definido como extra, entonces ponerlo donde pone: #
# "#en los mapas que NO son extra" #
# #
#Si os fijais en los codigos para cada mapa podreis poner acciones que #
#se realicen en mapas especificos en otras partes del script. #
#========================================================================#

#Comando para las partes del dia

if @amaneciendo.include?(@hora) #si esta amaneciendo
@tono = @tono_amanece
#en TODOS los mapas

if @sonido_int.include?($game_map.map_id)
#si en el mapa NO se escucha el sonido

else
#si en el mapa SI se escucha el sonido

end

if @interior.include?($game_map.map_id)
#en los mapas INTERIORES

else
#en los mapas EXTERIORES

end

if @map_extra.include?($game_map.map_id)
#en los mapas EXTRA

else
#en los mapas que NO son extra

end



elsif @de_dia.include?(@hora) #si es de dia
@tono = @tono_dia
#en TODOS los mapas

if @sonido_int.include?($game_map.map_id)
#si en el mapa NO se escucha el sonido

else
#si en el mapa SI se escucha el sonido

end

if @interior.include?($game_map.map_id)
#en los mapas INTERIORES

else
#en los mapas EXTERIORES

end

if @map_extra.include?($game_map.map_id)
#en los mapas EXTRA

else
#en los mapas que NO son extra

end



elsif @anocheciendo.include?(@hora) #si esta anocheciendo
@tono = @tono_anochece
#en TODOS los mapas

if @sonido_int.include?($game_map.map_id)
#si en el mapa NO se escucha el sonido

else
#si en el mapa SI se escucha el sonido

end

if @interior.include?($game_map.map_id)
#en los mapas INTERIORES

else
#en los mapas EXTERIORES

end

if @map_extra.include?($game_map.map_id)
#en los mapas EXTRA

else
#en los mapas que NO son extra

end



elsif @de_noche.include?(@hora) #si es de noche
@tono = @tono_noche
#en TODOS los mapas

if @sonido_int.include?($game_map.map_id)
#si en el mapa NO se escucha el sonido

else
#si en el mapa SI se escucha el sonido

end

if @interior.include?($game_map.map_id)
#en los mapas INTERIORES

else
#en los mapas EXTERIORES

end

if @map_extra.include?($game_map.map_id)
#en los mapas EXTRA

else
#en los mapas que NO son extra

end



end #end del condicional de las partes del dia


#Comandos para las horas en que cambie la parte del dia.
#
#Todas las acciones que querais realizar en la hora que comienza una
#parte del dia, debeis de ponerlo siempre antes de
#"variable de la parte del dia" = 1 -- EJEMPLO: @amanecer = 1
#
#SI QUEREIS QUE UNA ACCION ESTEA SIEMPRE QUE ESA PARTE DEL DIA ESTE ACTIVA
#PONERLA ARRIBA, EL COMANDO PARA LAS PARTES DEL DIA, AQUI ABAJO SOLO VAN
#LAS ACCIONES QUE SE REALICEN SOLO EN LA HORA CONCRETA EN LA QUE EMPIEZA
#UNA PARTE DEL DIA Y NO DURANTE TODA LA PARTE DEL DIA.


#Cuando empieza a amanecer

if @hora != @hora_amanece
@amanecer = 0
end

if @hora == @hora_amanece and @amanecer == 0
#en TODOS los mapas

if @sonido_int.include?($game_map.map_id)
#si en el mapa NO se escucha el sonido

@amanecer = 1
else
Audio.se_play("Audio/SE/gallo.mp3")
#si en el mapa SI se escucha el sonido

@amanecer = 1
end
end

#Cuando empieza el dia

if @hora != @hora_dia
@sdia = 0
end

if @hora == @hora_dia and @sdia == 0
#en TODOS los mapas

if @sonido_int.include?($game_map.map_id)
#si en el mapa NO se escucha el sonido

@sdia = 1
else
#si en el mapa SI se escucha el sonido

@sdia = 1
end
end



#Cuando empieza a anochecer

if @hora != @hora_anochece
@anochecer = 0
end

if @hora == @hora_anochece and @anochecer == 0
#en TODOS los mapas

if @sonido_int.include?($game_map.map_id)
#si en el mapa NO se escucha el sonido

@anochecer = 1
else
Audio.se_play("Audio/SE/lechuza.mp3")
#si en el mapa SI se escucha el sonido

@anochecer = 1
end
end

#Cuando empieza la noche

if @hora != @hora_noche
@snoche = 0
end

if @hora == @hora_noche and @snoche == 0
#en TODOS los mapas

if @sonido_int.include?($game_map.map_id)
#si en el mapa NO se escucha el sonido

@snoche = 1
else
#si en el mapa SI se escucha el sonido

@snoche = 1
end
end



end #end del amanecer_anochecer




#============================================================================





def cambio_tono

#====================================================================
#Cambio de pantalla====================================
#Aqui definimos los cambios de tono en diferentes mapas.
#====================================================================
if @interior.include?($game_map.map_id)
$game_screen.start_tone_change(@tono_int, 0)
@int = 1
elsif @map_extra.include?($game_map.map_id)
$game_screen.start_tone_change(@tono_extra, 0)
@int = 1
elsif @int == 1
$game_screen.start_tone_change(@tono, 0)
@int = 0
elsif @hora == @hora_amanece or @hora != @hora_amanece
$game_screen.start_tone_change(@tono, @tiempo_tono)
end


end #end del cambio_tono


#======================================================================
#Para sumar un tiempo determinado, poner en llamar script.
#$fecha.n_"unidad de tiempo" += "el tiempo que quereis avanzar"
#Estas son las "unidad de tiempo" existentes.

#"min" avanzar minutos ($fecha.n_min) EJ: $fecha.n_min += 5 (suma 5 minutos)
#"hor" avanzar horas ($fecha.n_hor) EJ: $fecha.n_hor += 5 (suma 5 horas)
#"dia" avanzar dias ($fecha.n_dia) EJ: $fecha.n_dia += 5 (suma 5 dias)
#"mes" avanzar meses ($fecha.n_mes) EJ: $fecha.n_mes += 5 (suma 5 meses)
#"año" avanzar años ($fecha.n_año) EJ: $fecha.n_año += 5 (suma 5 años)
#
#Para ir a un determinado tiempo virtual, solamente definir el tiempo
#y despues poner $fecha.ir_a_tiempo , todo ello en llamar script.
#EJEMPLO:iremos al dia 5 de febrero de 2056 a las 12:05
#
#$fecha.ir_min = 5
#$fecha.ir_hor = 12
#$fecha.ir_dia = 5
#$fecha.ir_mes = 2
#$fecha.ir_año = 2056
#$fecha.ir_a_tiempo
#
#Si solo quereis definir alguna de las unidades de tiempo y no todas,
#entonces debereis de poner a las que no querais definir la variable de su
#unidad de tiempo correspondiene.EJEMPLO:Iremos solo al dia 5 sin especificar
#nada mas
#
#$fecha.ir_min = $fecha.minuto
#$fecha.ir_hor = $fecha.hora
#$fecha.ir_dia = 5 (para no definir el dia es $fecha.dia)
#$fecha.ir_mes = $fecha.mes
#$fecha.ir_año = $fecha.año
#
#Si el tiempo que definis es inferior al actual, no retrocedera.EJEMPLO:
#estamos a dia 5 de febrero en el juego, y hay un evento para ir al dia 2.
#como no retrocede el pj ira al 2 de marzo.
#si el evento esta definido para ir al 2 de febrero, entonces avanzara un año
#igual con los minutos y las horas, si el minuto es inferior al actual
#avanzara una hora, y si la hora es inferior a la actual sumara un dia.si el
#mes es inferior al actual sumara un año.
#con los años no pasa asi, los años si es posible retroceder.

def ir_a_tiempo

if @ir_min < @minuto and @ir_hor == 0
@n_min += (60 - @minuto + @ir_min)
else
@n_min += (@ir_min - @minuto)
end

if @ir_hor < @hora and @ir_dia == 0
@n_hor += (24 - @hora + @ir_hor)
else
@n_hor += (@ir_hor- @hora)
end

if @ir_dia < @dia and @ir_mes == 0
@n_dia += (31 - @dia + @ir_dia)
else
@n_dia += (@ir_dia - @dia)
end

if @ir_mes < @mes and @ir_año == 0
@n_mes += (12 - @mes + @ir_mes)
else
@n_mes += (@ir_mes - @mes)
end

@n_año += (@ir_año - @año)

$fecha.ir_min = 0
$fecha.ir_hor = 0
$fecha.ir_dia = 0
$fecha.ir_mes = 0
$fecha.ir_año = 0

end



#-------------------------------------------------------------
#--------------------------------------------------------------------------
# - Renovacion del frame
#--------------------------------------------------------------------------
def update


amanecer_anochecer

cambio_tono

refresh

end #end del update


end #end de la class Fecha


#==============================================================================#
#=====================================================#========================#
#--Creamos la ventana donde se mostrara la fecha(MENU)#========================#
#=====================================================#========================#
# ■ Window_Fecha
#------------------------------------------------------------------------------
#  Esta ventana muestra el tiempo virtual en el menu del juego
#==============================================================================

#------Damos nombre a la clase y definimos su herencia----------------------

class Window_Fecha < Window_Base

#--------------------------------------------------------------------------
# - Inicio de Objetos...
#--------------------------------------------------------------------------

#-----Definimos el tamaño de la ventana y otros aspectos-------------------

def initialize


super(0, 0, 160, 120)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
refresh
end
#--------------------------------------------------------------------------
# - Actualizacion
#--------------------------------------------------------------------------

def refresh
self.contents.clear

#-----Definimos y creamos texto a imprimir en ventana--------------------
#Si queremos que algo no salga suprimimos su linea
#para modificar la posicion dentro de la ventana
#o su tamaño es asi:
#...draw_text(posicionX, posicionY, ANCHO, ALTO, lo que se imprime, ALINEACION)
#La alineacion es 0=a la izkierda, 1=centrado y 2=a la derecha
#La primera linea es la del icono del sol o la luna,los dos primeros
#numeros (que por defecto son 0, 0 ) son la posicion en X y posicion en Y.
#el ultimo numero de este no es la alineacion, si no su opacidad.

#Aqui se modifican los colores del texto en ventana y el windowskin
#scolor es el color del texto
#ncolor es el color de los numeros

@linea1_rect = Rect.new(0, 0, 70, 20)
@linea2_rect = Rect.new(0, 0, 121, 16)
@linea3_rect = Rect.new(0, 0, 89, 16)
@linea4_rect = Rect.new(0, 0, 80, 43)

@img_linea = RPG::Cache.picture("linea.png")

if $fecha.amaneciendo.include?($fecha.hora)
self.windowskin = RPG::Cache.windowskin("amaneceskin_menu.png")
scolor = Color.new(255, 255, 255, 255)
ncolor = Color.new(155, 255, 155, 255)
elsif $fecha.de_dia.include?($fecha.hora)
self.windowskin = RPG::Cache.windowskin("diaskin_menu.png")
scolor = Color.new(255, 255, 255, 255)
ncolor = Color.new(155, 255, 155, 255)
elsif $fecha.anocheciendo.include?($fecha.hora)
self.windowskin = RPG::Cache.windowskin("anocheceskin_menu.png")
scolor = Color.new(255, 255, 255, 255)
ncolor = Color.new(155, 255, 155, 255)
elsif $fecha.de_noche.include?($fecha.hora)
self.windowskin = RPG::Cache.windowskin("nocheskin_menu.png")
scolor = Color.new(255, 255, 255, 255)
ncolor = Color.new(155, 155, 255, 255)
end


self.contents.blt(25, 0, @img_linea, @linea1_rect, 70)
self.contents.blt(0, 25, @img_linea, @linea2_rect, 70)
self.contents.blt(0, 45, @img_linea, @linea3_rect, 70)
self.contents.blt(20, 70, @img_linea, @linea4_rect, 70)



# self.contents.blt(0, 0, @img_tiempo, @img_tiempo_rect, 250)

self.contents.font.color = scolor
self.contents.draw_text(25, 0, 70, 20, $fecha.diasemana[$fecha.numdiasemana], 1)

self.contents.font.color = scolor
self.contents.draw_text(0, 25, 39, 16, "Fecha:", 0)

textf = sprintf("%02d/%02d/%02d", $fecha.dia, $fecha.mes, $fecha.año)
self.contents.font.color = ncolor
self.contents.draw_text(42, 25, 82, 16, textf, 2)

self.contents.font.color = scolor
self.contents.draw_text(0, 45, 39, 16, "Hora:", 0)

texth = sprintf("%02d:%02d", $fecha.horas, $fecha.minuto)
self.contents.font.color = ncolor
self.contents.draw_text(30, 45, 50, 16, texth, 2)

self.contents.font.color = scolor
self.contents.draw_text(20, 60, 80, 40, $fecha.nombremes[$fecha.mes], 1)

#esto esta comentado por que no saldra en pantalla, si queres ponerlo debereis
#modificar las posiciones y tamaños del resto de objetos o sustiruir
#a un objeto poniendo su misma posiscion, despues descomentarlo.

#self.contents.font.color = system_color
#self.contents.draw_text(0, 60, 80, 40, @fecha.estacion, 0)

end


#-------------------------------------------------------------
#--------------------------------------------------------------------------
# - Renovacion del frame
#--------------------------------------------------------------------------
def update
super
$fecha.update
refresh
end


end

#==============================================================================#
#=====================================================#========================#
#--Creamos la ventana donde se mostrara la fecha(MAPA)#========================#
#=====================================================#========================#
# ■ Window_Fecha_mini
#------------------------------------------------------------------------------
#  Esta ventana muestra el tiempo virtual en el mapa
#==============================================================================

#------Damos nombre a la clase y definimos su herencia----------------------

class Window_Fecha_mini < Window_Base

#--------------------------------------------------------------------------
# - Inicio de Objetos...
#--------------------------------------------------------------------------

#-----Definimos el tamaño de la ventana y otros aspectos-------------------

def initialize


super(0, 0, 220, 73)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.opacity = 200
refresh
end
#--------------------------------------------------------------------------
# - Actualizacion
#--------------------------------------------------------------------------

def refresh
self.contents.clear
#-----Definimos y creamos texto a imprimir en ventana--------------------
#NOTA:Hay lineas comentadas aqui abajo, las comente para poder hacer la
#ventana de fecha/hora del mapa mas pequeña,si quieres incluir esas
#partes en la ventana del mapa,ademas de descomentarlas tendras que
#modificar el tamaño de la ventana y las posiciones de los contenidos.

#Aqui se modifican los colores del texto en ventana y el windowskin
#scolor es el color del texto
#ncolor es el color de los numeros

@linea1_rect = Rect.new(28, 0, 185, 20)
@linea2_rect = Rect.new(28, 20, 130, 20)
@img_linea = RPG::Cache.picture("linea.png")

if $fecha.amaneciendo.include?($fecha.hora)
self.windowskin = RPG::Cache.windowskin("amaneceskin_map.png")
scolor = Color.new(255, 255, 255, 255)
ncolor = Color.new(155, 255, 155, 255)
elsif $fecha.de_dia.include?($fecha.hora)
self.windowskin = RPG::Cache.windowskin("diaskin_map.png")
scolor = Color.new(255, 255, 255, 255)
ncolor = Color.new(155, 255, 155, 255)
elsif $fecha.anocheciendo.include?($fecha.hora)
self.windowskin = RPG::Cache.windowskin("anocheceskin_map.png")
scolor = Color.new(255, 255, 255, 255)
ncolor = Color.new(155, 255, 155, 255)
elsif $fecha.de_noche.include?($fecha.hora)
self.windowskin = RPG::Cache.windowskin("nocheskin_map.png")
scolor = Color.new(255, 255, 255, 255)
ncolor = Color.new(155, 155, 255, 255)
end


self.contents.blt(28, 0, @img_linea, @linea1_rect, 70)
self.contents.blt(28, 20, @img_linea, @linea2_rect, 70)

self.contents.font.color = scolor
self.contents.draw_text(28, 0, 65, 20, $fecha.diasemana[$fecha.numdiasemana], 0)

#self.contents.font.color = system_color
#self.contents.draw_text(0, 25, 39, 16, "Fecha:", 0)

textf = sprintf(":%02d/%02d/%02d", $fecha.dia, $fecha.mes, $fecha.año)
self.contents.font.color = ncolor
self.contents.draw_text(88, 0, 85, 16, textf, 0)

#self.contents.font.color = system_color
#self.contents.draw_text(0, 45, 39, 16, "Hora:", 0)

texth = sprintf("-%02d:%02d", $fecha.horas, $fecha.minuto)
self.contents.font.color = ncolor
self.contents.draw_text(158, 0, 35, 16, texth, 0)

self.contents.font.color = scolor
self.contents.draw_text(28, 20, 65, 20, $fecha.estacion, 0)
self.contents.draw_text(106, 20, 65, 20, $fecha.nombremes[$fecha.mes], 1)




#Al pulsar la tecla F5 se activa/desactiva la ventana

if Input.trigger? (Input::F5)
self.visible = self.visible ? false : true
end

#===========================================================================



end

#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# - Renovacion del frame
#--------------------------------------------------------------------------
def update
super
$fecha.update
refresh
end

end

#Creamos alias para las clases por defecto.

#Alias es un nombre para un metodo de otra clase para incluir operaciones en
#dicha clase sin sustituirla, solamente incluye las operaciones que pongamos
#debajo de la ultima operacion que haya en la clase en dicho modulo.
#(Le llamo modulos a las operaciones que empiezan por "def"")

#Este alias iniciara el tiempo virtual al inicio del juego.

class Scene_Title
alias midnightmoon_fecha_main main
def main
$fecha = Fecha.new
midnightmoon_fecha_main
end
alias midnightmoon_fecha_command command_new_game
def command_new_game
$fecha = Fecha.new
midnightmoon_fecha_command
end
end

#Este alias guardara la informacion del tiempo virtual al guardar partida.

class Scene_Save
alias midnightmoon_fecha_write_data write_save_data
def write_save_data(file)
midnightmoon_fecha_write_data(file)
Marshal.dump($fecha, file)
end
end

#Este alias cargara la informacion del tiempo virtual al cargar partida.

class Scene_Load
alias midnightmoon_fecha_read_data read_save_data
def read_save_data(file)
midnightmoon_fecha_read_data(file)
$fecha = Marshal.load(file)
end
end

#Este alias para Scene_map pondra la ventana del tiempo virtual en el mapa

class Scene_Map
alias window_fecha_main main
def main
@window_fecha = Window_Fecha_mini.new
@window_fecha.x = 412
@window_fecha.y = 0
window_fecha_main
if $scene != self
@window_fecha.dispose
end
end
alias window_fecha_update update
def update
$fecha.update
@window_fecha.update
window_fecha_update
end

end

#Este alias para Scene_menu pondra la ventana de tiempo virtual en el menu

class Scene_Menu
alias fecha_menu_main main
def main
$fecha.pause_menu
@window_fecha = Window_Fecha.new
@window_fecha.x = 0
@window_fecha.y = 296
fecha_menu_main
if $scene != self
@window_fecha.dispose
$fecha.play_menu
end
end
alias fecha_menu_update update
def update
@window_fecha.update
fecha_menu_update
end
end

#Este alias hara que la ventana Window_Steps sea invisible,para asi poner la
#ventana del tiempo virtual en su lugar.

class Window_Steps
alias fecha_steps_initialize initialize
def initialize
fecha_steps_initialize
self.visible = false
end
end


#Creamos una copia de Window_PlayTime modificandola un poco para que la ventana
#de la fecha/hora entre en el menu, al crear la clase completa esta sustituira
#a la Window_PlayTime original.

class Window_PlayTime < Window_Base
#--------------------------------------------------------------------------
# - Inicio de Objetos...
#--------------------------------------------------------------------------
def initialize
super(0, 0, 160, 72)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
refresh
end
#--------------------------------------------------------------------------
# - Actualizacion
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 24, "Tiempo Jugado")
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, 20, 120, 24, text, 2)
end
#--------------------------------------------------------------------------
# - Renovacion del frame
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end

#Fin de la creacion de la copia de Window_PlayTime.

y una pregunta como hacer que el sprite del pokemon desaparezca cuando se usa vuelo o cavar?

eso es todo gracias. :D
 
Estado
Cerrado para nuevas respuestas.
Arriba