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

Game_Interpreter+

Iniciado por Corvo, 26/06/2018 às 14:40

26/06/2018 às 14:40 Última edição: 27/06/2018 às 06:11 por Corvo


Game_Interpreter+



Esta é parte da extensão da classe Game_Interpreter que usei no projeto Pandora enquanto esta estava sendo desenvolvida no RPG Maker. Os métodos adicionais incluem funções como verificar a data atual, enviar comandos ao navegador padrão e até compor efeitos sonoros utilizando o Win32API. Abaixo você irá encontar cada método separadamente, para utilizar basta inserir o código dentro do Game_Interpreter do seu jogo.

  #--------------------------------------------------------------------------
  # * Open .exe
  #--------------------------------------------------------------------------
  def open_exe(path)
      @r = nil
      @path = path
      @a = Thread.new {@r = %x(#{path})}
      @a.abort_on_exception = true
  end

  #--------------------------------------------------------------------------
  # * Udate Time
  #--------------------------------------------------------------------------
  def time_update
    $t = Time.now
  end
#=============================================================================== 
  #--------------------------------------------------------------------------
  # * Check User Birthday
  #--------------------------------------------------------------------------  
  def check_birthday(user_day, user_month)
  # Update Time
    time_update
  
    if $t.day == user_day && $t.month == user_month
      return true
    else
      return false
    end
  end 
#=============================================================================== 
  #--------------------------------------------------------------------------
  # * Check Year Input
  #--------------------------------------------------------------------------
  def check_year(input)
    # Update Time
    time_update
    
    if input > 1970 && input <= $t.year
      return true
    else
      return false
    end
  end
#===============================================================================
  #--------------------------------------------------------------------------
  # * Check Month Input
  #--------------------------------------------------------------------------
  def check_month(input) 
    if input > 0 && input <= 12
      return true
    else
      return false
    end
  end
#===============================================================================
  #--------------------------------------------------------------------------
  # * Check Day Input
  #--------------------------------------------------------------------------
  def check_day(input)    
    if input > 0 && input <= 31
      return true
    else
      return false
    end
  end
#===============================================================================
  #--------------------------------------------------------------------------
  # * Check Day Input
  #--------------------------------------------------------------------------
  def check_hour
    # Update Time
    time_update   
    
    if $t.hour >= 6 && $t.hour < 12
      return 0 #Morning
    elsif $t.hour >= 12 && $t.hour < 18
      return 1 #Afternoon
    elsif $t.hour >= 18 && $t.hour < 23
      return 2 #Night
    elsif $t.hour >= 0 && $t.hour < 6
      return 3 #Dawn
    end
  end

  #--------------------------------------------------------------------------
  # * Beep
  #--------------------------------------------------------------------------
  Beep = Win32API.new("kernel32", "Beep", ["I", "I"], 'v')
  def beep(freq, duration)
    Beep.call(freq, duration)
  end

  #--------------------------------------------------------------------------
  # * Browser Commands
  #--------------------------------------------------------------------------
  def open_website(url, info)
    url.gsub!("http://", "")
    final_url = url + info
    Thread.new { system("start http://#{final_url}") }
  end


Instruções

Abaixo você encontrará a lista de métodos e suas descrições. Todos os métodos podem ser chamados pelo comando Script Call.

open_exe(path)
Inicia uma aplicação externa onde path é uma string contendo o diretório. O texto deve ser inserido utilizando aspas e aspas duplas, uma para a string e outra para enviar o comando para o prompt. Exemplo de uso:

open_exe('"C:\Program Files\Windows Media Player\wmplayer.exe"')

Inicia o Windows Media Player


O método check_birthday checa se a data atual é o aniversário do usuário. É preciso configurar as variáveis antes de chamar o método. As funções check_day, check_month, check_year e check_hour dispensam maiores explicações. Todas dependem de update_time.

O método beep(freq, duration) foi criado pelo membro Sotelie e a API foi usada como exemplo pelo Kvothe neste tópico. Em resumo, sua função é criar e executar efeitos sonoros durante o jogo sendo que freq é a frequência sonora e duration sua duração. Você pode adaptá-lo para receber um único argumento e enviar composições em matrizes (arrays) pré-programadas. Por exemplo, é possível criar isto:

Spoiler
Vídeo aleatório do Youtube:
[close]

O método open_website(url, info) não é criação minha, apenas foi adaptado. Infelizmente não me lembro quem é o autor original, então se alguém souber, por favor me informe para que os créditos sejam dados. A função é responsável por abrir uma nova aba no navegador padrão do usuário. Ela não irá checar se há ou não conexão com a internet. Recomendo que ele seja utilizado da seguinte forma:

open_website("google.com", "")


O segundo argumento é deixado vazio quando você apenas quer abrir um site. Se quiser interagir com o mesmo fazendo uma pesquisa ou etc, essas informações terão de ser inseridas no segundo argumento. Por exemplo:


Perceba que o valor inserido pelo jogador também é guardado em uma variável. Isso é uma prática de segurança caso você queira manter um registro sobre o que é enviado pelo jogador, mas não é obrigatório.

Aqui foi utilizado o nome de um personagem para atribuir os valores ao argumento. Há dois pontos a serem considerados. 1) A url do primeiro argumento precisa corresponder às informações que serão enviadas. 2) No exemplo o método realiza uma pesquisa com os dados informados pelo jogador/usuário. Nesse caso é importante que não existam espaços nas informações, as palavras devem ser separadas pelo caractere + porque é assim que o link funciona. Isso se repete nos sites usados pelo programa:

open_website("facebook.com/search/top/?q=", $game_actors[1].name)
open_website("youtube.com/results?search_query=", $game_actors[1].name)
open_website("twitter.com/search?q=", $game_actors[1].name)


Mas não quer dizer que todos os sites funcionarão assim. Fique atento às urls quando estiver navegando nos sites que usará!

Sugestão de Uso

Como os métodos podem ser acessados pelo Chamar Script, crie eventos comuns que funcionarão como módulos a serem chamados sempre que for necessário. Dessa forma você não precisará repetir o código todas as vezes em que precisar usá-lo.

Lista de Módulos/Eventos Comuns
[close]

Termos de Uso

Livre para projetos comerciais e não comerciais para todos os membros registrados neste fórum. Peço que não redistribuam o código ou o tópico de modo parcial ou integral em outros sites, mas caso queiram divulgar, que redirecionem os usuários para esta mensagem.

Agradecimentos à: Sotelie, Kvothe, MayLeone e KyoPanda

Poxa, isso é muito bacana, não só pra quem está precisando utilizar, mas também pra quem tá aprendendo a programar. Estudar esse código com certeza é um ótimo exercício.

Ganhou pontos extras pelo vídeo de exemplo.  :<3:

Bela fonte de conhecimento. Valeu por compartilhar, Corvo!


Aqueles experimentos deram frutos, hein? aehuaeh
Excelente material o/

Citação de: Skyloftian online 26/06/2018 às 14:59[...]
O vídeo foi uma isca.  :malvado:
Pô, que bom que vai servir pra alguém, eu mesmo achei que só tem gambiarra. o/
Citação de: Sotelie online 26/06/2018 às 15:14[...]
Sempre dão. Tem mais coisa pra jogar aqui, mas preciso arrumar os bugs dos troços que nem vu usar ainda.  :derp:
o/

Aí sim, gostei muito da maneira que você andou utilizando e mesclando esses scripts com evento. Go go corvão, crie esse 'big brother' :v



Citação de: Kvothe online 26/06/2018 às 15:51[...]
Na verdade foi preguiça de criar algo mais bonitinho sendo que a classe já estava ali, pronta haha. A ideia é popularizar o negócio depois de terminado e vender pra Microsoft pra eles dominarem o mundo. o/

Hi guys, could you please help me?

Where do I put the code below? I don't have any .js named Game_Interpreter. Can you please elaborate what should I do?

// I'm trying to achieve opening fake windows error (.vbs file)


CODE you shared that I need:

  #--------------------------------------------------------------------------
  # * Open .exe
  #--------------------------------------------------------------------------
  def open_exe(path)
      @r = nil
      @path = path
      @a = Thread.new {@r = %x(#{path})}
      @a.abort_on_exception = true
  end

This code is not in Js, it uses ruby and was made for the RPG Maker Vx Ace. Place it inside the Game_Interpreter script. For an equivalent in Js for MV/MZ, read this.