PortalPortal  InícioInício  FAQFAQ  BuscarBuscar  Registrar-seRegistrar-se  Conectar-se  

Compartilhe|

Sistema de - Dia/Noite

Ver o tópico anterior Ver o tópico seguinte Ir em baixo
AutorMensagem
zero
avatar
Membro Especial
Membro Especial

Postagens : 301
Data de inscrição : 14/05/2009


Ver perfil do usuário http://animechaos.forumeiros.com/
MensagemAssunto: Sistema de - Dia/Noite Seg Out 19, 2009 2:04 pm

Dia/Noite

Introdução:
Muito bom. Ele permite cria um sistema de tempo com segundos, minutos,horas e dias. Você pode nomear os dias, definir tonalidades de tela para os mapas "exteriores" (defina quais são colocando um [KTS] antes do nome) para cada período e criar eventos baseados no tempo.

Como Usar:
Colar o script em cima de Main, as instruções estão no próprio script.

script

Código:


   #
# Sistema de Tempo Kylock para VX v1.3
#    10.5.2008
# traduzido pela Equipe Gemstone
#
#  script por: Kylock
#            Praticamente todo reescrito desde a versão para XP. Códigos mais limpos
# e compatíveis. Esse é o meu sistema de dia e noite. Ele adiciona uma nova janela
# ao menu, então, se você usa um CMS, cole este script acima dele.
#            Eu tentei fazer esse o mais customizável possível, as configurações
# são encontrada logo em baixo. Embora as variáveis sejam opcionais, eu
# sugiro que as usem, pois poderão construtir eventos baseados nesse script
# mais facilmente.
#
# Histórico
#  1.0 - Lançamento.
#  1.1 - Corrigido a mudança de tonalidade nas batalhas.  Coloque este script
#      abaixo de scripts de batalha caso você note alguma erro na mesma.
#  1.2 - Corrigida a precisão de $kts.stop e $kts.go
#  1.3 - $kts.stop realmente para tudo agora.  Adicionadas switches para eventos.
#
# Instruções de Mudança de Tonalidade
#
#            Mapas designados como "fora" são os únicos que devem ser afetados pela
# tonalidade. Coloque um [KTS] antes do nome do mapa para criar este efeito.
#
# Chamar Funções do script
#
#            Use o comando "Chamar script".
#   $kts.stop         - parar o tempo
#   $kts.go           - continuar o tempo
#   $kts.sec(n)        - avança (n) segundos
#   $kts.min(n)        - avança (n) minutos
#   $kts.hours(n)      - avança (n) horas
#   $kts.days(n)       - avança (n) dias.
#   $kts.jump_to_hour(n) - Muda o tempo para a hora (n).
#
# Configurações do Dabatase do Jogo
#
#   Esse script, por padrão, usa as seguintes variáveis e switches:
#  Variáveis:
#   [1] O tempio atual                   [4] Horas Atual
#   [2] Segundo atual        [5] Dia Atual
#   [3] Minuto atual         [6] Nome do dia atual
#  Switches:
#   [1] ON durante a noite        (2200-0400)(10pm-4am)
#   [2] ON durante a madrugada      (0500-0800)( 5am-8am)
#   [3] ON durante o amanhecer      (0900-1800)( 9am-6pm)
#   [4] ON durante o anoitecer      (1900-2100)( 7pm-9pm)
#
#

# Guarda as configurações definidas.
#
module KTS
  #-
  # Define as configurações do relógio
  #-
  # Define a velocidade do relógio.
  #  1 é o tempo real. O padrão é 100 (cem vezes mais rápido do que o tempo real)
  SPEED     = 100
  #AM-PM? (True: relógio de 12 horas AM e 12 horas PM, False: relógio de 24 horas)
  AMPM     = false
  # Define o horário inicial do jogo.
  START_HOUR = 0
  START_DAY  = 1
  #-
  # Nomes dos dias
  #-
  DAY_NAMES = ["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"]
  #-
  # Períodos
  #-
  T1 = [ 0,5 ] # Noite       # Arruma os períodos para a tonalidade.
  T2 = [ 6,8 ] # Madrugada        # [Hora Inicial, Hora Final]
  T3 = [ 9,18] # Manhã        # Use termos de um relógio de 24 horas.
  T4 = [19,21] # Tarde
  T5 = [22,24] # Noite       # <- Ex: Noite é entre 22:00 e 24:00
  #-
  # Configurações para as variáveis em jogo
  #-
  # True para colocar o tempo nas variáveis e switches definidas
  DATABASE_OUTPUT = true
   # Variável a ser usada
   TIME   = 1 #(É nesse formato: "2:48 AM" ou "02:48")
   SECONDS = 2
   MINUTES = 3
   HOURS  = 4
   DAYS   = 5
   DAYNAME = 6
   # Switches
   NIGHT  = 1 #    Estará on nas horas definidas
   DAWN   = 2 #  Estará on nas horas definidas
   DAY    = 3 # Estará on nas horas definidas
   SUNSET  = 4 #  Estará on nas horas definidas
  #-
  # Configurações para a tonalidade da tela
  #-
  # True para habilitar essa função; false para desabilitar essa função.
  USE_TONE = true
  # Duração da mudança de tonalidade (em frames)
  FADE_LENGTH = 120
  # Definir Tonalidades para cada período
  #           Vermelho, Verde, Azul, Cinza
  C1 = Tone.new(-187,  -119,  -17,  68)
  C2 = Tone.new(  17,  -51, -102,  0)
  C3 = Tone.new(  0,    0,   0,  0)
  C4 = Tone.new( -68,  -136,  -34,  0)
  C5 = Tone.new(-187,  -119,  -17,  68)
end

#
# Engine do Sistema de Tempo
#
class Kylock_Time_System
  # arrumas as variáveis
  def initialize
   $kts_map_data = load_data("Data/MapInfos.rvdata")
   @event_offset = (KTS::START_HOUR * 3600)  (KTS::START_DAY * 86400)
   @kts_stop = false
   $kts_event_tone = false
   $kts_battle_tone = true
  end
 
  # Guarda o tempo e atualiza
  def update
   if !@kts_stop
     @total_seconds = (Graphics.frame_count * KTS::SPEED / 60)  @event_offset
     @seconds = (@total_seconds) % 60
     @minutes = (@total_seconds / 60) % 60
     @hours  = (@total_seconds / 3600) % 24
     @days   = (@total_seconds / 86400)
     update_tint
     if KTS::DATABASE_OUTPUT
      update_variables
      update_switches
     end
   end
  end

  def update_variables
   $game_variables[KTS::TIME]   = getTime
   $game_variables[KTS::SECONDS] = @seconds
   $game_variables[KTS::MINUTES] = @minutes
   $game_variables[KTS::HOURS]  = @hours
   $game_variables[KTS::DAYS]   = @days
   $game_variables[KTS::DAYNAME] = getDayName
  end

  def update_switches
   if @period == 1 || @period == 5
     $game_switches[KTS::NIGHT] = true
   else
     $game_switches[KTS::NIGHT] = false
   end
   if @period == 2
     $game_switches[KTS::DAWN] = true
   else
     $game_switches[KTS::DAWN] = false
   end
   if @period == 3
     $game_switches[KTS::DAY] = true
   else
     $game_switches[KTS::DAY] = false
   end
   if @period == 4
     $game_switches[KTS::SUNSET] = true
   else
     $game_switches[KTS::SUNSET] = false
   end
  end

  def getTime
   if KTS::AMPM
     # Formats a 12-Hour Clock
     if @hours > 12
      hours1 = @hours - 12
      if hours1 > 9
        time = sprintf("d:d"  " PM", hours1, @minutes)
      else
        time = sprintf("d:d"  " PM", hours1, @minutes)
      end
     else
      if @hours > 9
        time = sprintf("d:d"  " AM", @hours, @minutes)
      else
        time = sprintf("d:d"  " AM", @hours, @minutes)
      end
     end
     return time
   else
     # Formats a 24-Hour Clock
     time = sprintf("d:d", @hours, @minutes)
     return time
   end
  end
  #-
  # Comandos para as Funções do script
  #-
  def stop
   @time_stopped = @total_seconds
   @kts_stop = true
  end
  def go
   total_seconds = (Graphics.frame_count * KTS::SPEED / 60)  @event_offset
   @event_offset -= (total_seconds - @time_stopped)
   @kts_stop = false
  end
  def sec(sec = 0)
   @event_offset  = sec
  end
  def min(min = 0)
   @event_offset  = min * 60
  end
  def hours(hours = 0)
   @event_offset  = hours * 3600
  end
  def days(days = 0)
   @event_offset  = days * 86400
  end
  def jump_to_hour(jhour = 0)
   while @hours != jhour
     @event_offset  = 1
     $kts.update
   end
  end
  #-
  # Outras funções
  #-
  def getDayName
   weekday = (@days % KTS::DAY_NAMES.length)
   return KTS::DAY_NAMES[weekday]
  end

  #-
  # Tonalidade de Tela
  #-
  def update_tint(duration = KTS::FADE_LENGTH)
   if KTS::USE_TONE && !$kts_event_tone && $kts_map_data[$game_map.map_id].outside_tint?
     if @hours >= KTS::T1[0] and @hours <= KTS::T1[1]
      @period = 1
      screen.start_tone_change(KTS::C1,duration)
     elsif @hours >= KTS::T2[0] and @hours <= KTS::T2[1]
      @period = 2
      screen.start_tone_change(KTS::C2,duration)
     elsif @hours >= KTS::T3[0] and @hours <= KTS::T3[1]
      @period = 3
      screen.start_tone_change(KTS::C3,duration)
     elsif @hours >= KTS::T4[0] and @hours <= KTS::T4[1]
      @period = 4
      screen.start_tone_change(KTS::C4,duration)
     elsif @hours >= KTS::T5[0] and @hours <= KTS::T5[1]
      @period = 5
      screen.start_tone_change(KTS::C5,duration)
     end
   else
     # sem mundaça nos mapas "dentro"
     if !$kts_map_data[$game_map.map_id].outside_tint?
      screen.start_tone_change(Tone.new(0,0,0,0),duration)
     end
   end
  end
  def screen
   if $game_temp.in_battle
     return $game_troop.screen
   else
     return $game_map.screen
   end
  end
end

#
# Atualiza instantaneamente quando se teletransporta
#
class Game_Map
  alias kts_setup setup
  def setup(map_id)
   kts_setup(map_id)
   $kts_event_tone = false
   $kts.update
   $kts.update_tint(0)
  end
end

#
# Atualiza instantaneamente quando entra na batalha
#
class Spriteset_Battle
  alias kts_create_battleback create_battleback
  def create_battleback
   $kts.update_tint(0)
   kts_create_battleback
  end
end

#
# Desabilita temporariamente quando um evento muda a tonalidade
#
class Game_Interpreter
  alias kts_Interpreter_command_223 command_223
  def command_223
   $kts_event_tone = true
   kts_Interpreter_command_223
  end
end

#
# Integra o sistema ao Game System
#
class Game_System
  # inits a KTS object
  alias kts_initialize initialize
  def initialize
   $kts=Kylock_Time_System.new
   kts_initialize
  end
  # Updates kts every game frame
  alias kts_update update
  def update
   $kts.update
   kts_update
  end
end

#
# Scaneia mapas para o nome
#
class RPG::MapInfo
  def name # Impede que sistemas de localização leiam o [KTS]
   return @name.gsub(/\\[.*\\]/) {""} # colchetes e os inclusos
  end
  def original_name
   return @name
  end
  def outside_tint?
   return @name.scan(/\\[KTS\\]/).size > 0
  end
end

#
# Configura a janela de tempo
#
class Window_KTS < Window_Base
  def initialize(x, y)
   super(x, y, 160, WLH  32)
   refresh
  end
  def refresh
   self.contents.clear
   self.contents.draw_text(4, -6, 120, 32, $kts.getTime, 2)
  end
  def update
   super
   $kts.update
   self.contents.clear
   self.contents.draw_text(4, -6, 120, 32, $kts.getTime, 2)
  end
end

#
# Adiciona a janela ao menu
#
class Scene_Menu < Scene_Base
  alias kts_start start
  def start
   kts_start
   @kts_window = Window_KTS.new(0,305)
  end
  alias kts_terminate terminate
  def terminate
   kts_terminate
   @kts_window.dispose
  end
  alias kts_update update
  def update
   kts_update
   @kts_window.update
  end
end

#
# Para as tela de Load/Save
#
class Scene_File
  alias kts_write_save_data write_save_data
  def write_save_data(file)
   kts_write_save_data(file)
   Marshal.dump($kts, file)
  end
  alias kts_read_save_data read_save_data
  def read_save_data(file)
   kts_read_save_data(file)
   $kts = Marshal.load(file)
  end
end


Créditos e Agradecimentos:


1. Kylock por criar o script
2.Traduzido por Gemstone
3. Postado por Zero em TWEG
Voltar ao Topo Ir em baixo

Sistema de - Dia/Noite

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo
Página 1 de 1

Permissão deste fórum:Você não pode responder aos tópicos neste fórum
The World of EverGrand :: Programação em Linguagens :: Ruby Game Scripting System :: Scripts :: RPG Maker VX-