O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Gab Timed Events

Iniciado por Raizen, 18/12/2012 às 19:51

18/12/2012 às 19:51 Última edição: 19/12/2012 às 11:22 por Raizen
[box class=titlebg2]
Gab Timed Events
[/box]

[box class=catbg]Introdução:[/box]
[box class=randomquote]     Atendendo o pedido do [user]Mestre Jordan[/user]. Faz com que você possa agendar mudanças para variáveis e switches de acordo com o tempo.[/box]

[box class=catbg]Características:[/box]
[box class=randomquote]- Rápido e Simples
- Várias possibilidades de uso
- Plug 'n Play
[/box]

[box class=catbg]Screenshots:[/box]
[box class=randomquote]
Não perceptível por imagens
[/box]

[box class=catbg]Como usar:[/box]
[box class=randomquote]- Colocar o menu acima do Main.

Você deve chamar o script:

addTimeEvent(frames, sov, id, newValue)


Onde:

ArgumentoSignificado
framesQuantidade de tempo (em frames) que demorará para ocorrer.
sovSwitch ou variável? (Usar :variable para variável e :switch para switch)
idID da variável ou switch que será modificada
newValueNovo valor que a switch/variável receberá após a mudança.


Pode ocorrer de querer modificar as variáveis através de operações lógicas, como soma, subtração, multiplicação, etc. Para isto, você deve acessar o valor atual delas e então operar com outro valor. (Vide os exemplos).
[/box]

[box class=catbg]Exemplos:[/box]
[box class=randomquote]
Por ser um pouco complexo, preferi deixar exemplos de uso nesse script. Você deve saber, antes de ler, que para acessar o valor da variável "x", usa-se $game_variables[x].

Ligando a switch 52 após 20 frames:

addTimeEvent(20, :switch, 52, true)



Desligando a switch 28 após 100 frames:

addTimeEvent(100, :switch, 28, false)



Modificando o valor da variável 19 para 20 após 400 frames:

addTimeEvent(400, :variable, 19, 20)



Somando 15 à variável 100 após 250 frames:

addTimeEvent(250, :variable, 100, $game_variables[100] + 15)



Fazendo com que a variável 10 seja igual à variável 20 subtraida de 5 após 300 frames:

addTimeEvent(300, :variable, 10, $game_variables[20] - 5)


[/box]

[box class=catbg]Script:[/box]
[box class=randomquote]
#==============================================================================#
# Gab Timed Events                                                             #
#------------------------------------------------------------------------------#
# Autor: Gab!                                                                  #
# Data: 23/09/12                                                               #
#------------------------------------------------------------------------------#
# Adiciona uma função para modificar o valor de switches e de variáveis após   #
# determinada quantidade de frames.                                            #
#------------------------------------------------------------------------------#
# Modo de usar:                                                                #
#   - Adicione no evento a seguinte chamada de script:                         #
#     addTimeEvent(frames, sov, id, newValue)                                  #
#                                                                              #
#     :frames   - Quantidade de tempo que demorará para ocorrer a mudança      #
#     :sov      - Switch ou variável? (Usar :variable para o variável e :switch#
#                                      para switch)                            #
#     :id       - ID da variável ou switch que será modificada                 #
#     :newValue - Novo valor da variável                                       #
#------------------------------------------------------------------------------#
# Caso queira somar, subtrair, multiplicar ou realizar qualquer outra operação #
# com a quantidade da variável antes da chamada pode fazer o acesso desse modo #
#                                                                              #
#   - Variável "X" = $game_variables[x]                                        #
#   - Switch   "Y" = $game_switches[y]                                         #
#------------------------------------------------------------------------------#
# Exemplos:                                                                    #
#                                                                              #
#    - Ligando a switch 52 após 20 frames:                                     #
#      addTimeEvent(20, :switch, 52, true)                                     #
#                                                                              #
#    - Desligando a switch 28 após 100 frames:                                 #
#      addTimeEvent(100, :switch, 28, false)                                   #
#                                                                              #
#    - Modificando o valor da variável 19 para 20 após 400 frames:             #
#      addTimeEvent(400, :variable, 19, 20)                                    #
#                                                                              #
#    - Somando 15 à variável 100 após 250 frames:                              #
#      addTimeEvent(250, :variable, 100, $game_variables[100] + 15)            #
#                                                                              #
#    - Fazendo com que a variável 10 seja igual à variável 20 subtraida de 5   #
#      após 300 frames:                                                        #
#      addTimeEvent(300, :variable, 10, $game_variables[20] - 5)               #
#==============================================================================#

class Scene_Map
  @@modificationQueue  = []
  @@modificationTimer  = 0
  
  class << self
    def requestTime(plus)
      return @@modificationTimer + plus
    end
    
    def addEvent(time, proc)
      @@modificationQueue.push([time, proc])
    end
  end
  
  alias gab_timemodifier_update update unless $@
  
  def update(*args)
    gab_timemodifier_update(*args)
    @@modificationTimer += 1;
    checkModificationQueue
  end
  
  private
  def checkModificationQueue
    finished = []
    @@modificationQueue.each{|data|
      time, func = data
      if @@modificationTimer == time
        func.call 
        finished.push(data)
      end
    }
    
    finished.each{|obj| @@modificationQueue.delete(obj)}
  end
end

class Interpreter
  def addTimeEvent(frames, sov, id, newValue)
    destTime = Scene_Map.requestTime(frames)
    if sov == :variable or sov == :var
      prc = Proc.new{$game_variables[id] = newValue}      
    else
      prc = Proc.new{$game_switches[id] = !!newValue}
    end
    
    Scene_Map.addEvent(destTime, prc)
  end
end

[/box]

[box class=catbg]Créditos e Considerações finais:[/box]
[box class=randomquote][user]Gab![/user] - Criação do script
Qualquer dúvida de como usar, procurem ele no msn (gab.teles@hotmail.com) ou por PM.
[/box]