TallerGamer
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

(Script) Clima Automatico V 2.0 (by MidnightMoon)

Ir abajo

(Script) Clima Automatico V 2.0 (by MidnightMoon)  Empty (Script) Clima Automatico V 2.0 (by MidnightMoon)

Mensaje  MasterMoonNight Mar Nov 08, 2011 7:54 pm

Descripcion:

Permite modificar el Clima de los mapas, poner efectos de manera muy sencilla.
Permite poner el clima desde el script solo poniendo el ID del mapa.
Permite llamar el script desde un evento.
Tiene climas de Normal, Soleado, Nublado, Soleado con Nubes, Lluvia, Lluvia con Truenos, Tormenta, Nevando, Tormenta de Nieve y Clima Aleatorio con posibilidades de Lluvia
El clima aleatorio con posibilidades de lluvia, indica que puede ser soleado, normal o lloviendo y a un respectivo tiempo definido en un rango aleatorio cambiarlo, pudiendo intensificar la lluvia, dejar de llover, etc.
Si se configura un mapa como Casa al entrar en ella se pausan los efectos y al salir se vuelve a poner el clima que estaba independientemente del clima que este configurado en el script. (Aqui detecte un pequeño bug que tengo que corregir; cuando esta clima aleatorio y sales de una casa se tarda un par de segundos en volver a poner el clima)
Basicamente usa los elementos por default del RTP, pero extra se añade un Fog y una Picture, para ver mejor descargar el Demo.
Creo que los archivos ya guardados no serviran al incluir este script; no estoy seguro de esto. Ya que como dije unas cosas las base del Script de Falcao y una de esas fue como configura al empezar un juego, al guardar y al cargar. Y si no mal me equivoco a mi me sucedio esto con su script.


Registro de Cambios:
Version 2.0


Cambio principalmente interno que da mejor rendimiento en el script.
Se permite dar de alta climas segun como se desee, seguir de ejemplo los climas ya mostrados.
Se sustituyo el clima aleatorio por secuencias, las secuencias se pueden definir cada uno, en la siguiente variable: MapISequence = {} De ejemplo viene una y en la informacion viene como dar de alta las secuencias.
Si se da de alta una secuencia o un clima se debe de dar de alta en su respectivo variable (MapISequences y MapIMaps) el nombre de la variable con un arreglo vacio, para poder poner en el arreglo el ID del mapa y el clima sea automatico.

Código:
#======================================================================#
#  Script de Control de Clima Automatico V 2.0                        #
#  ****** By Midnight Mooon                              ******      #
#  ****** Basado en el Script de Control de Clima V 1.1  ******      #
#  ****** Originalmente Realizado por Falcao              ******      #
# Descripcion: Script para RPG Maker XP, que controla el clima        #
#    Con sencillos comandos, y para mas facilidad se puede            #
#    configurar un clima para un mapa en especifico.                  #
#======================================================================#
module ConfigIClima
#-----------------------------------------------------------------------
# Poner entre los corchetes el ID del Mapa, segun el efecto que se quiera.
  MapIMaps = {
    "Normal" => [], # Normal
    "House" => [3, 5], # House (Parecido a Normal, solo que en este se guarda
      #el status antes de entrar para al salir tener el mismo clima.
    "Fog" => [], # Niebla
    "Sun" => [], # Soleado
    "Night" => [], # Noche
    "Cloudy" => [], # Nublado
    "SunWithCloud" => [], # Nubes con Rayos de Sol
    "Rain" => [], # Lloviendo
    "ThunderRain" => [], # Lloviendo con Truenos
    "Storm" => [4], # Tormenta Electrica
    "Ice" => [2], # Nevando
    "IceStorm" => [], # Tormenta de Nieve
    "AleatoryRain" => [] # Exterior, puede llover o no, soleado o nublado,
    #o estar soleado y despues empezar a llover.
  }
  # Declarar las secuencias en la variable MapISequence, poner su nombre aqui,
  # Para poder declarar mapas con esa secuencia.
  MapISequences = {
    "AleatorySun" => [1]
  }
 
  # A continuacion esta la configuracion de los climas.
  # No borrar los existentes, solo dar de alta si lo requieres.
  # Si se da de alta aqui un clima tambien se debe de dar de alta en MapIMaps
  # Para poder poner default en uno.
  # En todos los grupos de arreglos de 2 al estilo [0, 0].
  # Indica que tiene un valo con posible variacion.
  # El primer valor indica el valor por default y el segundo la variacion.
  # Por ejemplo si se pone [5, 7] en un movimiento de eje de las x en fog
  # Indica que su movimiento ira de 5 a maximo 12  cada vez que se cargue.
  # O Tambien si se pone [-5, 3] en un movimiento de eje de las x en fog
  # Indica que su movimiento ira de -5 a maximo -2  cada vez que se cargue.
  MapIWeather = {
    "Normal" => { # Clima Normal
      "Tone" => [[0, 0], [0, 0], [0, 0], [0, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [0, [0, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Fade" => [800 , 0]# Dispersion del sonido del anterior clima.
    },
    "House"  => { # Clima House
      "Tone" => [[0, 0], [0, 0], [0, 0], [0, 0], [10, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [0, [0, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Fade" => [800, 0], # Dispersion del sonido del anterior clima.
      "SaveWeather" => true # Indica si se guardara el clima del mapa anterior que no sea otro SaveWeather = true
    },
    "Fog" => { # Clima con Niebla
      "Tone" => [[-68, 0], [-68, 0], [-68, 0], [0, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [0, [0, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Fade" => [800, 0], # Dispersion del sonido del anterior clima.
      "Fog" => ["001-Fog01", [70, 0], [5, 7], [3, 6]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Change" => [250, 450] # Cambio de Niebla
    },
    "Sun" => { # Clima Soleado
      "Tone" => [[0, 0], [0, 0], [-28, 0], [-34, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [0, [0, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "BFade" => [800, 0], # Dispersion del sonido del anterior clima.
      "Fog" => ["011-Bondia01", [15, 0], [5, 0], [5, 0]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Picture" => ["001-Bondia01.png" , [50, 0]] # Imagen [Nombre, Opacidad]
    },
    "Cloudy" => { # Clima Nublado
      "Tone" => [[-16, 0], [-16, 0], [-16, 0], [-10, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [0, [0, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "BGSFade" => [800, 0], # Dispersion del sonido del anterior clima.
      "Fog" => ["001-Fog01", [15, 0], [1, 6], [1, 7]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Change" => [250, 450] # Cambio de Niebla
    },
    "Night" => {  # Clima de Noche
      "Tone" => [[-110, 0], [-110, 0], [-110, 0], [0, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [0, [0, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Fade" => [800, 0], # Dispersion del sonido del anterior clima.
      "Fog" => ["001-Fog01", [15, 0], [1, 6], [1, 7]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Change" => [250, 450] # Cambio de Niebla
    },
    "SunWithCloud" => { # Clima de Sol con Nubes
      "Tone" => [[0, 0], [0, 0], [-28, 0], [0, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [0, [0, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Fade" => [800, 0], # Dispersion del sonido del anterior clima.
      "Fog" => ["001-Fog01", [23, 0], [-1, 9], [-1, 9]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Picture" => ["001-Bondia01.png" , [50, 0]], # Imagen [Nombre, Opacidad]
      "Change" => [250, 450] # Cambio de Niebla
    },
    "Rain" => { # Clima de lluvia
      "Tone" => [[-68, 0], [-68, 0], [-68, 0], [0, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [1, [6, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Audio" => ["005-Rain01", [100, 0], [100, 0]], # Reproducir un archivo de audio [Archivo, Volumen, ???]
      "Fog" => ["001-Fog01", [40, 0], [3, 4], [2, 3]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Change" => [250, 450] # Cambio de Niebla
    },
    "ThunderRain" => { # Clima de lluvia con truenos
      "Tone" => [[-68, 0], [-68, 0], [-68, 0], [0, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [1, [6, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Audio" => ["005-Rain01", [100, 0], [100, 0]], # Reproducir un archivo de audio [Archivo, Volumen, ???]
      "Fog" => ["001-Fog01", [40, 0], [3, 4], [2, 3]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Change" => [250, 450], # Cambio de Niebla
      "Effect" => { # Configuracion del Efecto
        "Change" => [230, 120], # Cambio de Efecto
        "Type" => 0, # Tipo de Efecto.
        # 0 - Efecto de una sola vez cada vez que abarque el tiempo.
        "Audio" => ["061-Thunderclap01", [100, 0], [100, 0]], # Reproducir un archivo de audio [Archivo, Volumen, ???]
        "Flash" => [[255, 0], [255, 0], [255, 0], [255, 0], [15, 0]] # Definimos un color para un flash en pantalla [R, G, B, Gray, Tiempo]
      }
    },
    "Storm" => { # Clima de Tormenta
      "Tone" => [[-68, 0], [-68, 0], [-68, 0], [0, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [2, [9, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Audio" => ["006-Rain02", [100, 0], [100, 0]], # Reproducir un archivo de audio [Archivo, Volumen, ???]
      "Fog" => ["001-Fog01", [40, 0], [5, 4], [3, 4]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Change" => [250, 450], # Cambio de Niebla
      "Effect" => { # Configuracion del Efecto
        "Change" => [120, 120], # Cambio de Efecto
        "Type" => 0, # Tipo de Efecto. 0 - Inemadiato
        # 0 - Efecto de una sola vez cada vez que abarque el tiempo.
        "Audio" => ["061-Thunderclap01", [100, 0], [100, 0]], # Reproducir un archivo de audio [Archivo, Volumen, ???]
        "Flash" => [[255, 0], [255, 0], [255, 0], [255, 0], [15, 0]] # Definimos un color para un flash en pantalla [R, G, B, Gray, Tiempo]
      }
    },
    "Ice" => { # Clima Nevando
      "Tone" => [[15, 0], [15, 0], [15, 0], [15, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [3, [4, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Audio" => ["002-Wind02", [100, 0], [100, 0]], # Reproducir un archivo de audio [Archivo, Volumen, ???]
      "Fog" => ["001-Fog01", [10, 0], [4, 2], [3, 3]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Effect" => { # Configuracion del Efecto
        "Change" => [180, 40], # Cambio de Efecto
        "Type" => 1, # Tipo de Efecto.
        # 0 - Efecto de una sola vez cada vez que abarque el tiempo.
        # 1 - Progresivo. Cuando se cumple el tiempo del efecto ocurre algo hasta un limite.
        #  Y posteriormente regresa a otro punto del efecto y reinicia el contador despues.
        "Max" => { # Parametros que se iran incrementando, hasta llegar a un limite.
          "Fog" => {
            "Opacity" => [1,0] # Esto quiere decir  que habra un incremento de 1 en uno
          },
          "Limit" => [ # En limit es un arreglo de hashes, meter en el mismo hash todas las condiciones
          # para que solo al cumplirse todas llegue al limit. Crerar Varios Hashes en el caso que se
          # quiera dar de alta varias condiciones posibles para volver a bajar.
            {
              "Fog" => {
                "Opacity" => [70, 0]
              }
            }
          ]
        },
        "Min" => { # Parametros que se iran decrementando, hasta llegar a un limite.
          "Fog" => {
            "Opacity" => [-1,0] # Esto quiere decir  que habra un incremento de 1 en uno con variacion de 0
          },
          "Limit" => [ # En limit es un arreglo de hashes, meter en el mismo hash todas las condiciones
          # para que solo al cumplirse todas llegue al limit. Crerar Varios Hashes en el caso que se
          # quiera dar de alta varias condiciones posibles para volver a bajar.
            {
              "Fog" => {
                "Opacity" => 15
              }
            }
          ]
        }
      }
    },
    "IceStorm" => { # Clima de Tormenta de Nieve
      "Tone" => [[30, 0], [30, 0], [30, 0], [25, 0], [20, 0]], # Definir el Tone [R, G, B, Gray, Tiempo_Cambio]
      "Weather" => [3, [9, 0], [20, 0]], # Definimos el Clima [Clima, Fuerza, Tiempo_Cambio]
      "Audio" => ["003-Wind03", [100, 0], [100, 0]], # Reproducir un archivo de audio [Archivo, Volumen, ???]
      "Fog" => ["001-Fog01", [15, 0], [8, 6], [3, 5]], # Definir la Niebla [Nombre, Opacity, movimiento_x, movimiento_y]
      "Effect" => { # Configuracion del Efecto
        "Change" => [130, 40], # Cambio de Efecto
        "Type" => 1, # Tipo de Efecto.
        # 0 - Efecto de una sola vez cada vez que abarque el tiempo.
        # 1 - Progresivo. Cuando se cumple el tiempo del efecto ocurre algo hasta un limite.
        #  Y posteriormente regresa a otro punto del efecto y reinicia el contador despues.
        "Max" => { # Parametros que se iran incrementando, hasta llegar a un limite.
          "Fog" => {
            "Opacity" => [0.5,0] # Esto quiere decir  que habra un incremento de 1 en uno
          },
          "Limit" => [ # En limit es un arreglo de hashes, meter en el mismo hash todas las condiciones
          # para que solo al cumplirse todas llegue al limit. Crerar Varios Hashes en el caso que se
          # quiera dar de alta varias condiciones posibles para volver a bajar.
            {
              "Fog" => {
                "Opacity" => [100, 0]
              }
            }
          ]
        },
        "Min" => { # Parametros que se iran decrementando, hasta llegar a un limite.
          "Fog" => {
            "Opacity" => [-2,0] # Esto quiere decir  que habra un incremento de 1 en uno con variacion de 0
          },
          "Limit" => [ # En limit es un arreglo de hashes, meter en el mismo hash todas las condiciones
          # para que solo al cumplirse todas llegue al limit. Crerar Varios Hashes en el caso que se
          # quiera dar de alta varias condiciones posibles para volver a bajar.
            {
              "Fog" => {
                "Opacity" => 20
              }
            }
          ]
        }
      }
    }
  }
 
  # Declarar Secuencias como se muestra en el ejemplo.
  # Initialize muestra los climas que puede tener al iniciar, se pone asi cada clima
  # separado por una coma [nombre_clima, porcentaje], si se desea que siempre aparezca
  # cierto clima para empezar poner [nombre_clima, 100]
  # Change indica que si se esta en un clima a cual puede cambiar al cumplir cierto tiempo.
  # Dentro se pone cada clima de los que pueda haber en la secuencia.
  # "nombre_clima" => {}
  # Dentro de los corchetes van dos opciones, Duration y Weather.
  # Duration es la duracion del clima antes de ejecutar un cambio, si se desea
  # que al llegar a un clima ya no cambie poner [0, 0] se maneja una base y una variacion
  # si pones [200, 400] quiere decir que la base es 200 y la variacion es 400, entonces
  # el tiempo de cambio sera entre 200 y 600
  # Y en weather se ponen los climas con el mismo formato que en Initialize
  MapISequence = {
    "AleatorySun" => {
      "Initialize" => [
        ["Normal", 50],
        ["Cloudy", 30],
        ["Sun", 20]
      ],
      "Change" => {
        "Normal" => {
          "Duration" => [400, 600],
          "Weather" => [
            ["Cloudy", 50],
            ["Normal", 50]
          ]
        },
        "Cloudy" => {
          "Duration" => [300, 200],
          "Weather" => [
            ["Cloudy", 50],
            ["Normal", 50]
          ]
        },
        "Sun" => {
          "Duration" => [400, 200],
          "Weather" => [
            ["SunWithCloud", 60],
            ["Sun", 20],
            ["Normal", 20]
          ]
        }
      }
    }
  }
#-----------------------------------------------------------------------
end
#-----------------------------------------------------------------------
# Los Climas se pueden llamar desde un evento con una llamdo a script.
# $clima.weather([Nombre_del_clima])
# Nombre_del_clima es el nombre con el que existe el clima o con el que se dio de alta.
# Ejemplo: $clima.weather("Ice")
#
# Las secuencia se pueden llamar desde un evento con un script llamado.
# $clima.call_sequence([Nombre_de_la_secuencia])
# Nombre_de_la_secuencia es el nombre con el que existe la secuencia o con el que se dio de alta.
# Ejemplo: $clima.call_sequence("AleatorySun")
#
# IMPORTANTE: Si manualmente se llama un clima, y anteriormente existe una secuencia, corriendo.
# antes de llamar el clima se llama el metodo stop_sequence.
# Ejemplo:
#  stop_sequence
#  $clima.weather("Ice")
#-----------------------------------------------------------------------
class Clima
  include ConfigIClima
 
  # Definimos Acceso a Atributos
  attr_accessor :type
  attr_accessor :sequence
 
  # Inicializamos Clase
  def initialize
    @type = [
      {
        "weather" => "Normal",
        "change" => [0, 0],
        "effect" => [0, 0]
      },
      {
        "weather" => "",
        "change" => [0, 0],
        "effect" => [0, 0]
      }
    ]
    @save = false
    @restore = false
    @initialize = false
    @sequence = {
      "type" => "",
      "change" => [0, 0]
    }
  end
 
  # Metodo para Cargar el Clima
  def weather(clima)
    @initialize = true
    # Metodos para reiniciar, el clima por si sales o entras a una casa
    if MapIWeather[clima]["SaveWeather"] != nil
      if MapIWeather[clima]["SaveWeather"] == true
        if @type[1]["weather"] != ""
          if MapIWeather[@type[1]["weather"]]["SaveWeather"] != nil
            if MapIWeather[@type[1]["weather"]]["SaveWeather"] == false
              saveweather(1)
            end
          else
            saveweather(1)
          end
        else
          saveweather(1)
        end
      else
        saveweather(2)
      end
    else
      saveweather(2)
    end
 
    # Metodos que inicializan cada clima, en caso de ser el mismo solo reinicia el efecto y cambio
    if @type[0]["weather"] != clima
      clean
      @type[0]["weather"] = clima
      @type[0]["change"][0] = 0
      @type[0]["change"][1] = 0
      @type[0]["effect"][0] = 0
      @type[0]["effect"][1] = 0
    end
 
    update
  end
 
  def update
    if MapIWeather[@type[0]["weather"]]["Change"] == nil
      change = true
    elsif MapIWeather[@type[0]["weather"]]["Change"] != nil
      change = false
    end
    # Lee todos los efectos del clima mandado y ejecuta uno por uno
    # Tambien en la mayoria valida que cambio sea menor igual a 0
    # Para en caso de estar iterando el mismo clima no lo cambie a menos que realmente sea necesario
    MapIWeather[@type[0]["weather"]].each do |key, value|
      case key
        when "Change"
          if @type[0]["change"][0] < @type[0]["change"][1] || @type[0]["change"][0] == 0
            temp_0 = random(value[0], value[1])
            @type[0]["change"][0] = temp_0.round
            @type[0]["change"][1] = 0
            change = true
          end
      end
    end
 
    if @initialize == true
      change = true
      @initialize = false
    end
 
    MapIWeather[@type[0]["weather"]].each do |key, value|
      case key
        when "Tone"
          if change == true
            temp_0 = random(value[0][0], value[0][1])
            temp_1 = random(value[1][0], value[1][1])
            temp_2 = random(value[2][0], value[2][1])
            temp_3 = random(value[3][0], value[3][1])
            temp_4 = random(value[4][0], value[4][1])
            $game_screen.start_tone_change(Tone.new(temp_0.round, temp_1.round, temp_2.round, temp_3.round), temp_4.round)
          end
        when "Weather"
          if change == true
            temp_0 = random(value[1][0], value[1][1])
            temp_1 = random(value[2][0], value[2][1])
            $game_screen.weather(value[0], temp_0.round, temp_1.round)
          end
        when "Fade"
          temp_0 = random(value[0], value[1])
          Audio.bgs_fade(temp_0.round)
        when "Fog"
          if change == true
            temp_0 = random(value[1][0], value[1][1])
            temp_1 = random(value[2][0], value[2][1])
            temp_2 = random(value[3][0], value[3][1])
            $game_map.fog_name = value[0]
            $game_map.fog_opacity = temp_0.round
            $game_map.fog_sx  = temp_1.round
            $game_map.fog_sy  = temp_2.round
          end
        when "Picture"
          if change == true
            temp_0 = random(value[1][0], value[1][1])
            $game_screen.pictures[1].show(value[0], 0, 0, 0, 100, 100, temp_0.round, 0)
          end
        when "Audio"
          temp_0 = random(value[1][0], value[1][1])
          temp_1 = random(value[2][0], value[2][1])
          $game_system.bgs_play(RPG::AudioFile.new(value[0], temp_0.round, temp_1.round))
        when "Effect"
          if @type[0]["effect"][0] == 0
            effect(value)
          end
      end
    end
  end
 
  # Efecto de Limpiar todos los climas
  def clean
    $game_screen.start_tone_change(Tone.new(0, 0, 0, 0), 20)
    $game_screen.weather(0, 0,20)
    Audio.bgs_fade(800)
    $game_map.fog_name = ""
    $game_screen.pictures[1].erase
  end
 
  # Metodo que devuelve el random de un metodo.
  def random(base, factor)
    if factor > 0
      temp = rand(factor) + (base)
    else
      temp = base
    end
    return temp
  end
 
  # Metodo para resumir codigo
  def effect(value)
    if value["Type"] == 0
      if @type[0]["effect"][0] == 0 || @type[0]["effect"][0] < @type[0]["effect"][1]
        temp_0 = random(value["Change"][0], value["Change"][1])
        @type[0]["effect"][0] = temp_0.round
        @type[0]["effect"][1] = 0
        value.each do |key2, value2|
          case key2
            when "Audio"
              temp_0 = random(value2[1][0], value2[1][1])
              temp_1 = random(value2[2][0], value2[2][1])
              $game_system.se_play(RPG::AudioFile.new(value2[0], temp_0.round, temp_1.round))
            when "Flash"
              temp_0 = random(value2[0][0], value2[0][1])
              temp_1 = random(value2[1][0], value2[1][1])
              temp_2 = random(value2[2][0], value2[2][1])
              temp_3 = random(value2[3][0], value2[3][1])
              temp_4 = random(value2[4][0], value2[4][1])
              $game_screen.start_flash(Color.new(temp_0.round, temp_1.round, temp_2.round, temp_3.round), temp_4.round)
          end
        end
      end
    elsif value["Type"] == 1
      if @type[0]["effect"][0] == 0
        temp_0 = random(value["Change"][0], value["Change"][1])
        @type[0]["effect"][0] = temp_0.round
        @type[0]["effect"][1] = 0
        @restore = false
      else
        if @restore == false
          value["Max"].each do |key2, value2|
            case key2
              when "Fog"
                value2.each do |key3, value3|
                  case key3
                    when "Opacity"
                      temp_0 = random(value3[0], value3[1])
                      $game_map.fog_opacity = $game_map.fog_opacity + (temp_0.round)
                  end
                end
            end
          end
          if value["Max"]["Limit"] != nil
            for s in value["Max"]["Limit"]
              limit = value["Max"]["Limit"].size
              cuenta = 0
              s.each do |key2, value2|
                case key2
                  when "Fog"
                    value2.each do |key3, value3|
                      case key3
                        when "Opacity"
                          temp_0 = random(value3[0], value3[1])
                          if $game_map.fog_opacity > temp_0
                            cuenta += 1
                          end
                      end
                    end
                end
             
                if limit == cuenta
                  @restore = true
                  break
                end
              end
            end
          end
        elsif @restore == true
          value["Min"].each do |key2, value2|
            case key2
              when "Fog"
                value2.each do |key3, value3|
                  case key3
                    when "Opacity"
                      temp_0 = random(value3[0], value3[1])
                      $game_map.fog_opacity = $game_map.fog_opacity + (temp_0.round)
                  end
                end
            end
          end
          if value["Min"]["Limit"] != nil
            for s in value["Min"]["Limit"]
              limit = value["Min"]["Limit"].size
              cuenta = 0
              s.each do |key2, value2|
                case key2
                  when "Fog"
                    value2.each do |key3, value3|
                      case key3
                        when "Opacity"
                          temp_0 = random(value3[0], value3[1])
                          if $game_map.fog_opacity < temp_0
                            cuenta += 1
                          end
                      end
                    end
                end
             
                if limit == cuenta
                  temp_0 = random(value["Change"][0], value["Change"][1])
                  @type[0]["effect"][0] = temp_0.round
                  @type[0]["effect"][1] = 0
                  @restore = false
                  break
                end
              end
            end
          end
        end
      end         
    end
  end
 
  # Metodos para guardar o regresar el clima en la variables.
  def saveweather(type)
    if type == 1
      @save = true
      @type[1]["weather"] = @type[0]["weather"]
      @type[1]["change"][0] = @type[0]["change"][0]
      @type[1]["change"][1] = @type[0]["change"][1]
      @type[1]["effect"][0] = @type[0]["effect"][0]
      @type[1]["effect"][1] = @type[0]["effect"][1]
    elsif type == 2
      @save = false
      if @type[1]["weather"] != ""
        @type[0]["weather"] = @type[1]["weather"]
        @type[0]["change"][0] = @type[1]["change"][0]
        @type[0]["change"][1] = @type[1]["change"][1]
        @type[0]["effect"][0] = @type[1]["effect"][0]
        @type[0]["effect"][1] = @type[1]["effect"][1]
     
        @type[1]["weather"] = ""
      end
    end
  end
 
  # Llama una secuencia
  def call_sequence(sequence)
    stop_sequence
 
    @sequence["type"] = sequence
    if MapISequence[@sequence["type"]] != nil
      clima = rand(100)+1
      clima_temp = 0
      for s in MapISequence[@sequence["type"]]["Initialize"]
        if clima <= clima_temp + s[1]
          weather(s[0])
          temp_0 = random(MapISequence[@sequence["type"]]["Change"][s[0]]["Duration"][0], MapISequence[@sequence["type"]]["Change"][s[0]]["Duration"][1])
          @sequence["change"][0] = temp_0.round
          @sequence["change"][1] = 0
          break
        else
          clima_temp += s[1]
        end
      end
    else
      weather("normal")
    end
  end
 
  # Actualiza la secuencia actual
  def update_sequence
    if @sequence["type"] != "" && @save == false
      if MapISequence[@sequence["type"]]["Change"][@type[0]["weather"]] != nil
        if MapISequence[@sequence["type"]]["Change"][@type[0]["weather"]]["Duration"][0] != 0 && MapISequence[@sequence["type"]]["Change"][@type[0]["weather"]]["Duration"][1] != 0
          @sequence["change"][1] += 1
     
          if @sequence["change"][0] < @sequence["change"][1] || @sequence["change"][0] == 0
            temp_0 = random(MapISequence[@sequence["type"]]["Change"][@type[0]["weather"]]["Duration"][0], MapISequence[@sequence["type"]]["Change"][@type[0]["weather"]]["Duration"][1])
            @sequence["change"][0] = temp_0.round
            @sequence["change"][1] = 0
         
            clima = rand(100)+1
            clima_temp = 0
            for s in MapISequence[@sequence["type"]]["Change"][@type[0]["weather"]]["Weather"]
              if clima <= clima_temp + s[1]
                weather(s[0])
                break
              else
                clima_temp += s[1]
              end
            end
          end
        end
      end
    end
  end
 
  #Metodo Para detener secuencia
  def stop_sequence
    @sequence["type"] = ""
    @sequence["change"][0] = 0
    @sequence["change"][1] = 0
  end
end

#**********************************************************************#
#************************Scene_Map*************************************#
# Actualiza el clima con el mapa.                                      #
#**********************************************************************#

class Scene_Map
  include ConfigIClima
  alias midnightmoon_update update
  def update
    if $clima.type[0]["change"][0] > 0
      $clima.type[0]["change"][1] += 1
      $clima.update
    end
    if $clima.type[0]["effect"][0] > 0
      $clima.type[0]["effect"][1] += 1
      $clima.effect(MapIWeather[$clima.type[0]["weather"]]["Effect"])
    end
    if $clima.sequence["type"] != ""
      $clima.update_sequence
    end
    midnightmoon_update
  end
 
  # Evento que ocurre cuando se llega a un nuevo mapa.
  # De aqui para abajo es exactamente el script que antes mencione de Falcao.
  alias midnightmoon_transfer_player transfer_player
  def transfer_player
    midnightmoon_transfer_player
    MapIMaps.each do |key, value|
      if value.include?($game_map.map_id)
        $clima.stop_sequence
        $clima.weather(key)
        break
      end
    end
    MapISequences.each do |key, value|
      if value.include?($game_map.map_id)
        $clima.call_sequence(key)
        break
      end
    end
  end
end

class Scene_Title
  include ConfigIClima
 
  alias midnightmoon_weather_main main
  def main
    $clima = Clima.new
    midnightmoon_weather_main
  end
  alias midnightmoon_weather_command command_new_game
  def command_new_game
    $clima = Clima.new
    midnightmoon_weather_command
    MapIMaps.each do |key, value|
      if value.include?($game_map.map_id)
        $clima.weather(key)
        break
      end
    end
    MapISequences.each do |key, value|
      if value.include?($game_map.map_id)
        $clima.call_sequence(key)
        break
      end
    end
  end
end

class Scene_Save
  alias midnightmoon_write_data write_save_data
  def write_save_data(file)
    midnightmoon_write_data(file)
    Marshal.dump($clima, file)
  end
end

class Scene_Load
  alias midnightmoon_read_data read_save_data
  def read_save_data(file)
    midnightmoon_read_data(file)
    $clima = Marshal.load(file)
  end
end

Imagenes:

Spoiler:
MasterMoonNight
MasterMoonNight
Moderador

Mensajes : 82
Fecha de inscripción : 06/11/2011
Edad : 28
Localización : Argentina

Volver arriba Ir abajo

(Script) Clima Automatico V 2.0 (by MidnightMoon)  Empty :D

Mensaje  Invitado Miér Nov 30, 2011 4:53 pm

Buenisimo

Invitado
Invitado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.