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

Faalco Core Engine

Iniciado por Takkun, 14/07/2013 às 17:49

14/07/2013 às 17:49 Última edição: 14/07/2013 às 19:52 por Faalco


Pacote de script criando por mim que faz modificações no RPG Maker e possui várias funcionalidades embutidas. Ele e o principal script de uma linha que em breve estará chegando a vocês, ele em si já tem algumas características que podem ser encontradas no modulo de configuração. Sendo essa a primeira versão ela não está concluída muitas outras coisas serão ainda adicionadas mais apenas para já dar um gostinh a vocês do que está por vir decidi disponibiliza-lá.




1.0A:
- Mudança nas Barras de HP e MP e adição de uma Barra de EXP.
- Mudança de Resolução. (Altura e Largura da janela de teste)
- Configurações de Fonte. (Fonte, Cor e outras configurações)
- Aumento do número de seguidores.
- Aumento do número de Slots de saves.
- Linguagem dos System podem ser mudadas.
- Monstrar Site na Tela Tìtulo.
- Animação ao dar Level UP.
- Mudança da Altura de Vôo.
- Divisão de EXP entre os Hérois.
- 8 Direções.

Por enquanto isso.






Coloque acima do Main e configure do seu modo.





#==============================================================================
#   Faalco Core Engine
#   Autor: Faalco
#   Criado: 12/07/2013
#   Edited: 14/07/2013
#   Version: 1.0a
#==============================================================================
# Informações e Instruções
# -----------------------------------------------------------------------------
# Para instalar o script basta adiciona-ló acima do Main e abaixo dos Scripts
# Adicionais. Qualquer problema, bug, ou dúvida pode ser tirada no tópico de
# onde você retirou esse script.
#
# O uso do mesmo em projetos comerciais e liberada desde que apresente os
# devidos créditos a mim Faalco criador do Script. 
#
# *** Apenas para RPG Maker VXAce ***
#==============================================================================
module Cores
  #--------------------------------------------------------------------------#
  # * Configurações das Cores
  #--------------------------------------------------------------------------#
  HP_Bar1 = 28
  #Color1 da barra de HP.
  HP_Bar2 = 29
  #Color2 da barra de HP.
  MP_Bar1 = 23
  #Color1 da barra de MP.
  MP_Bar2 = 22
  #Color2 da barra de MP.
  EXP_Bar1 = 21
  #Color1 da barra de EXP.
  EXP_Bar2 = 17
  #Color2 da barra de EXP.
end

module FAALCO
  module CORE
  #--------------------------------------------------------------------------#
  # * Configurações
  #--------------------------------------------------------------------------#
  #Tela da janela de Testes
  Width = 544 #Default = 544
  Height = 416 #Default = 416
  
  #Configurações das Fontes
  Font.default_name = ["VL Gothic", "Verdana", "Arial", "Trebuchet MS"]
  #Defina acima as fontes que seu projeto poderá usar caso uma fonte não seja
  #encontrada ele passará para a seguinte.
  Font.default_size = 20
  #Tamanho da Fonte.
  Font.default_bold = false 
  #Fonte em Negrito
  Font.default_italic = false
  #Fonte em Itálico
  Font.default_shadow = true
  #Sombra na Fonte
  Font.default_color = Color.new(255, 255, 255)
  #Cor da Fonte em RGB
  
  #Barras - Menu
  Mostrar_EXP = true
  #Mostrar barra de EXP no Menu
  Vocab_EXP = "EXP"
  #Nome que irá aperecer na Barra de EXP.
  
  #Seguidores
  Seguidores_Max = 8 #Default = 3
  #Máximo de Seguidores em fila.
  
  #Salvar
  Save_Max = 32 #Default = 16
  #Número Máximo de Saves na Janela de Save.
  Save_Visible = 4 #Default = 4
  #Número de Saves visivéis na Janela de Save.
  
  #Japônes
  Japanese = false #Default = False
  #Determina se o jogo e os sistemas são em japônes.
  
  #Site
  Site_Visible = false #True = Sim - False = Não
  #Mostrar site na Tela Título.
  Vocab_Site = "Website"
  #Opção que irá aparecer na Tela Título
  #Para modificicar o site veja a linha 213 desse script.
  
  #Level UP
  Animation_LevelUP = 38
  #Animação que será mostrado quando o héroi mudar de nível.
  
  #Vôo
  Altura_Max = 40 #Default = 32
  #Altura Máxima de vôo das Aeronaves.
  
  end #CORE 
end #FAALCO

Graphics.resize_screen(FAALCO::CORE::Width, FAALCO::CORE::Height)
#==============================================================================#
# ** Window Base
#==============================================================================#
class Window_Base < Window
  def hp_gauge_color1;   text_color(Cores::HP_Bar1);  end;    # Medidor de HP 1
  def hp_gauge_color2;   text_color(Cores::HP_Bar2);  end;    # Medidor de HP 2
  def mp_gauge_color2;   text_color(Cores::MP_Bar1);  end;    # Medidor de P 1
  def mp_gauge_color1;   text_color(Cores::MP_Bar2);  end;    # Medidor de MP 1
  def mp_cost_color;     text_color(Cores::MP_Bar2);  end;    # Consumo de MP

  def draw_gauge(x, y, width, rate, color1, color2)
    fill_w = (width * rate).to_i
    gauge_y = y + line_height - 8
    contents.fill_rect(x, gauge_y, width, 10, gauge_back_color)
    contents.gradient_fill_rect(x, gauge_y, fill_w, 10, color1, color2)
  end

  def draw_actor_hp(actor, x, y, width = 130)
    draw_gauge(x-10, y, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2)
    change_color(system_color)
    draw_text(x-10, y, 30, line_height, Vocab::hp_a)
    draw_current_and_max_values(x, y, width, actor.hp, actor.mhp,
    hp_color(actor), normal_color)
  end

  def draw_actor_mp(actor, x, y, width = 130)
    draw_gauge(x-10, y, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2)
    change_color(system_color)
    draw_text(x-10, y, 30, line_height, Vocab::mp_a)
    draw_current_and_max_values(x, y, width, actor.mp, actor.mmp,
    mp_color(actor), normal_color)
  end
  
  def draw_actor_exp(actor, x, y, width = 100)
    draw_gauge(x, y, width, actor.exp.to_f / actor.next_level_exp.to_f, exp_gauge_color1, exp_gauge_color2)
    change_color(system_color)
    draw_text(x, y, 30, line_height, FAALCO::CORE::Vocab_EXP)
    draw_current_and_max_values(x, y, width, actor.exp, actor.next_level_exp,
      normal_color, normal_color)
  end
  def exp_gauge_color1
    text_color(Cores::EXP_Bar1)
  end
  def exp_gauge_color2
    text_color(Cores::EXP_Bar2)
  end
  
  def draw_actor_simple_status(actor, x, y)
    draw_actor_name(actor, x, y)
    draw_actor_icons(actor, x, y + line_height * 2)
    draw_actor_class(actor, x + 120, y)
    draw_actor_hp(actor, x + 120, y + line_height * 1)
    draw_actor_mp(actor, x + 120, y + line_height * 2)
    if FAALCO::CORE::Mostrar_EXP == true
    draw_actor_exp(actor, x, y + line_height * 1)
    end
  end
end
#==============================================================================#
# ** Game_Party
#==============================================================================#
class Game_Party < Game_Unit
  def max_battle_members
    return FAALCO::CORE::Seguidores_Max
  end
end  
#==============================================================================#
# ** Data Manager
#==============================================================================#
class << DataManager
  def savefile_max
    return FAALCO::CORE::Save_Max
  end
end
#==============================================================================#
# ** Scene_File
#==============================================================================#
class Scene_File < Scene_MenuBase
  def visible_max
    return FAALCO::CORE::Save_Visible
  end
end
#==============================================================================#
# ** Game_System
#==============================================================================#
class Game_System
  def japanese?
    return FAALCO::CORE::Japanese
  end
end
#==============================================================================
# ** Window_TitleCommand
#==============================================================================#
if FAALCO::CORE::Site_Visible == true
class Window_TitleCommand < Window_Command
  alias faalco_make_command_list make_command_list
  def make_command_list
    faalco_make_command_list
    add_command(FAALCO::CORE::Vocab_Site, :site)
      end
  end
end
#==============================================================================
# ** Scene_Title
#==============================================================================
class Scene_Title < Scene_Base
  alias faalco_create_command_window create_command_window
  def create_command_window
    faalco_create_command_window
    @command_window.set_handler(:site, method(:command_site))
  end
  def command_site
    c = Win32API.new("Shell32", "ShellExecute", "pppppl", "l")
    # Mudar URL
    c.call(nil, "open", "http://www.animastudios.weebly.com/", nil, nil, 0)
  end
end
#==============================================================================
# ** Game_Troop
#==============================================================================
class Game_Troop < Game_Unit
  def exp_total
    exp = 0
    for enemy in dead_members
      exp += dead_members.inject(0) {|r, enemy| r += enemy.exp }
    end
    party_size = $game_party.members.size == 0 ? 1 : $game_party.members.size
    return (exp / party_size)
  end
end
#==============================================================================
# ** Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  alias faalco_level_up level_up
   def level_up
    faalco_level_up
    recover_all
    $game_player.animation_id = FAALCO::CORE::Animation_LevelUP
  end
end
#==============================================================================
# ** Game_Player
#==============================================================================
class Game_Player < Game_Character
  def faalco_move_by_input move_by_input
    faalco_move_by_input
    return unless movable?
    return if $game_map.interpreter.running?
    case Input.dir8
           when 2,4,6,8;   move_straight(Input.dir4)
           when 1
             move_diagonal(4, 2)
             unless moving?
              move_straight(4)
              move_straight(2)
            end
          when 3
            move_diagonal(6, 2)
            unless moving?
              move_straight(6)
              move_straight(2)
            end
          when 7
            move_diagonal(4, 8)
            unless moving?
              move_straight(4)
              move_straight(8)
            end
          when 9
            move_diagonal(6, 8)
            unless moving?
              move_straight(6)
              move_straight(8)
            end
          end
        end
      end
#==============================================================================
# ** Game_Vehicle
#==============================================================================
class Game_Vehicle < Game_Character
  def max_altitude
      return FAALCO::CORE::Altura_Max
    end
  end

#=*==========================================================================*=#
# ** Fim do Script
#=*==========================================================================*=#






Não necessário.






Dax e Raizen.

O que você anda tramando ?  :hein:  :malvado:

Muito bom o script, espero para ver a linha completa. Você tem alguma previsão de quando terminará o pack de scripts, ou vai lançar assim que tiver as ideias ?
Uma sugestão: Você poderia fazer um sistema de fazenda, tipo Harvest Moon, ou um de combinação de itens, seria legal.


Vlw.
Mind: Até onde sua mente vai?

Citação de: lordiuri online 14/07/2013 às 19:18
O que você anda tramando ?  :hein:  :malvado:

Muito bom o script, espero para ver a linha completa. Você tem alguma previsão de quando terminará o pack de scripts, ou vai lançar assim que tiver as ideias ?
Uma sugestão: Você poderia fazer um sistema de fazenda, tipo Harvest Moon, ou um de combinação de itens, seria legal.


Vlw.

Primeiramente irei atualizar esse script e melhoras algumas funções desse script.
Eu irei lançar assim que eu tiver tempo, pois ando meio desanimado com o maker, fiz esse hoje porque já havia o começado a algum tempo e apenas o concluí.
Mais obrigado pelas ideias.
Um abraço.

Faalco!~


Pode parecer complicado a princípio, mas acho que você deveria considerar a utilização de um plugin de compatibilização dos aliases. A ideia é aumentar a compatibilidade do seu script com outros que também usem o tal plugin. (Você deve portanto, divulgar essa parada, se for usar. hue)
Depois que você pegar o jeito, vai facilitar bastante a modificação de scripts padrões.
Fiz um aqui; a única limitação que eu não consegui remover é que ao invés de return, você usa compatReturn.

Ou pode ser inútil mesmo e eu só fiz porque deu vontade e postei aqui porque era o tópico que dava mais margem pra possibilidade de usar isso. q

class BindableBlock
  class ArgAligner
    def initialize(args, instance_method)
      @result     = []
      @args       = args
      @parameters = instance_method.parameters.map(&:first)
      
      take(num(:req))
      take([num(:opt), args.size].min)
      take(args.size) if has?(:rest)
    end

    def call
      result
    end

    private

    attr_reader :args, :parameters, :result

    def has?(type)
      parameters.any? { |param| param == type }
    end

    def num(type)
      parameters.count { |param| param == type }
    end

    def take(n)
      n.times { result << args.shift }
    end
  end


  def initialize(klass, &block)
    @original_block  = block

    klass.__send__(:define_method, method_name, &block)
    @instance_method = klass.instance_method method_name
    klass.__send__(:remove_method, method_name)
  end

  attr_reader :instance_method, :original_block

  def bind(target)
    Proc.new do |*args, &block|
      instance_method.bind(target).call(*align(args), &block)
    end
  end

  def call(*args, &block)
    original_block.call(*args, &block)
  end

  def to_proc
    method(:call).to_proc
  end

  private

  def align(args)
    ArgAligner.new(args, instance_method).call
  end

  def method_name
    @method_name ||= "gabCompatibilizer_#{Time.now.to_i}_#{$$}"
  end
end


class Module
  ALIAS_MAP = {}
  
  def compatAliasInsert(name, pos=:end, &block)
    if method_defined?(name)
      if (needDef = !ALIAS_MAP.has_key?(name))
        ALIAS_MAP[name] = {:start => [], :end   => []}
        needDef = true
      end
      ALIAS_MAP[name][pos].push(BindableBlock.new(self, &block))
      
      if needDef
        newName = "gabCompatibilizer_#{Time.now.to_i}_#{$$}"
        alias_method(newName, name)
        oldMethod = instance_method(newName)
        
        define_method(name){|*args, &instBlock|
          begin
            ALIAS_MAP[name][:start].each{|m| m.bind(self).call(*args, &instBlock)}
          rescue CompatAliasReturn
            return *$___COMPAT_ALIAS_ARGS
          end
          oldMethod.bind(self).call(*args, &instBlock)
          begin
            ALIAS_MAP[name][:end].each{|m| m.bind(self).call(*args, &instBlock) }
          rescue CompatAliasReturn
            return *$___COMPAT_ALIAS_ARGS
          end
        }
      end
    else
      raise("Método não definido: #{name}");
    end
  end
end

class CompatAliasReturn < Exception
end

class Object
  def compatReturn(*args)
    $___COMPAT_ALIAS_ARGS = args
    raise(CompatAliasReturn)
  end
end

# TESTES:

class A
  def abc(acc=1)
    puts "ABC ORIGINAL"
  end
  
  def xyz
    return "METODO XYZ"
  end
end

# Modificações:
  # 1 - Bloco no início
  A.compatAliasInsert(:abc, :start){|arg1| 
    puts 'Trecho no inicio do metodo'
  }
  
  # 2 - Bloco no final
  A.compatAliasInsert(:abc, :end){|arg1| 
    puts 'Trecho no final do metodo'
  }

  # 3 - Teste de chamada
  A.compatAliasInsert(:abc){|arg1| 
    puts "Teste de chamada: #{self.xyz}"
  }
  
  # 4 - Teste de recebimento de argumentos #1
  A.compatAliasInsert(:abc){|arg1| 
    puts "Teste de argumentos #1: #{arg1}" 
  }
  
  # 5 - Teste de recebimento de argumentos #2
  A.compatAliasInsert(:abc){|a,b| 
    puts "Teste de argumentos #2: #{a}, #{b}"  
  }
  
  # 6 - Teste de recebimento de argumentos #3
  A.compatAliasInsert(:abc){|*args| 
    puts "Teste de argumentos #3: #{args}"   
  }
  
  # 7 - Teste de recebimento de argumentos #4
  A.compatAliasInsert(:abc){|*args, &block| 
    puts "Teste de argumentos #4: #{args}, #{block.call}"   
  }
  
  # 9 - Teste de retorno #1
  A.compatAliasInsert(:abc){|arg1| 
    compatReturn(1) if arg1
  }
  
  # 9 - Teste de retorno #2
  A.compatAliasInsert(:abc){|arg1| 
    compatReturn('Retornos quaisquer:', Object.new, 2, 383.3)
  }

# Roda testes:
t = A.new

k = t.abc(2){'oi'}     # Para pegar retorno 1
l = t.abc(false){'oi'} # Para pegar retorno 2
puts "\n---------------------\n"
puts "Retornos #1:\n\n"
puts k
puts "\n---------------------\n"
puts "Retornos #2:\n\n"
puts l

loop{Graphics.update}


Citação de: Gab! online 14/07/2013 às 21:28

Pode parecer complicado a princípio, mas acho que você deveria considerar a utilização de um plugin de compatibilização dos aliases. A ideia é aumentar a compatibilidade do seu script com outros que também usem o tal plugin. (Você deve portanto, divulgar essa parada, se for usar. hue)
Depois que você pegar o jeito, vai facilitar bastante a modificação de scripts padrões.
Fiz um aqui; a única limitação que eu não consegui remover é que ao invés de return, você usa compatReturn.

Ou pode ser inútil mesmo e eu só fiz porque deu vontade e postei aqui porque era o tópico que dava mais margem pra possibilidade de usar isso. q

class BindableBlock
  class ArgAligner
    def initialize(args, instance_method)
      @result     = []
      @args       = args
      @parameters = instance_method.parameters.map(&:first)
      
      take(num(:req))
      take([num(:opt), args.size].min)
      take(args.size) if has?(:rest)
    end

    def call
      result
    end

    private

    attr_reader :args, :parameters, :result

    def has?(type)
      parameters.any? { |param| param == type }
    end

    def num(type)
      parameters.count { |param| param == type }
    end

    def take(n)
      n.times { result << args.shift }
    end
  end


  def initialize(klass, &block)
    @original_block  = block

    klass.__send__(:define_method, method_name, &block)
    @instance_method = klass.instance_method method_name
    klass.__send__(:remove_method, method_name)
  end

  attr_reader :instance_method, :original_block

  def bind(target)
    Proc.new do |*args, &block|
      instance_method.bind(target).call(*align(args), &block)
    end
  end

  def call(*args, &block)
    original_block.call(*args, &block)
  end

  def to_proc
    method(:call).to_proc
  end

  private

  def align(args)
    ArgAligner.new(args, instance_method).call
  end

  def method_name
    @method_name ||= "gabCompatibilizer_#{Time.now.to_i}_#{$$}"
  end
end


class Module
  ALIAS_MAP = {}
  
  def compatAliasInsert(name, pos=:end, &block)
    if method_defined?(name)
      if (needDef = !ALIAS_MAP.has_key?(name))
        ALIAS_MAP[name] = {:start => [], :end   => []}
        needDef = true
      end
      ALIAS_MAP[name][pos].push(BindableBlock.new(self, &block))
      
      if needDef
        newName = "gabCompatibilizer_#{Time.now.to_i}_#{$$}"
        alias_method(newName, name)
        oldMethod = instance_method(newName)
        
        define_method(name){|*args, &instBlock|
          begin
            ALIAS_MAP[name][:start].each{|m| m.bind(self).call(*args, &instBlock)}
          rescue CompatAliasReturn
            return *$___COMPAT_ALIAS_ARGS
          end
          oldMethod.bind(self).call(*args, &instBlock)
          begin
            ALIAS_MAP[name][:end].each{|m| m.bind(self).call(*args, &instBlock) }
          rescue CompatAliasReturn
            return *$___COMPAT_ALIAS_ARGS
          end
        }
      end
    else
      raise("Método não definido: #{name}");
    end
  end
end

class CompatAliasReturn < Exception
end

class Object
  def compatReturn(*args)
    $___COMPAT_ALIAS_ARGS = args
    raise(CompatAliasReturn)
  end
end

# TESTES:

class A
  def abc(acc=1)
    puts "ABC ORIGINAL"
  end
  
  def xyz
    return "METODO XYZ"
  end
end

# Modificações:
  # 1 - Bloco no início
  A.compatAliasInsert(:abc, :start){|arg1| 
    puts 'Trecho no inicio do metodo'
  }
  
  # 2 - Bloco no final
  A.compatAliasInsert(:abc, :end){|arg1| 
    puts 'Trecho no final do metodo'
  }

  # 3 - Teste de chamada
  A.compatAliasInsert(:abc){|arg1| 
    puts "Teste de chamada: #{self.xyz}"
  }
  
  # 4 - Teste de recebimento de argumentos #1
  A.compatAliasInsert(:abc){|arg1| 
    puts "Teste de argumentos #1: #{arg1}" 
  }
  
  # 5 - Teste de recebimento de argumentos #2
  A.compatAliasInsert(:abc){|a,b| 
    puts "Teste de argumentos #2: #{a}, #{b}"  
  }
  
  # 6 - Teste de recebimento de argumentos #3
  A.compatAliasInsert(:abc){|*args| 
    puts "Teste de argumentos #3: #{args}"   
  }
  
  # 7 - Teste de recebimento de argumentos #4
  A.compatAliasInsert(:abc){|*args, &block| 
    puts "Teste de argumentos #4: #{args}, #{block.call}"   
  }
  
  # 9 - Teste de retorno #1
  A.compatAliasInsert(:abc){|arg1| 
    compatReturn(1) if arg1
  }
  
  # 9 - Teste de retorno #2
  A.compatAliasInsert(:abc){|arg1| 
    compatReturn('Retornos quaisquer:', Object.new, 2, 383.3)
  }

# Roda testes:
t = A.new

k = t.abc(2){'oi'}     # Para pegar retorno 1
l = t.abc(false){'oi'} # Para pegar retorno 2
puts "\n---------------------\n"
puts "Retornos #1:\n\n"
puts k
puts "\n---------------------\n"
puts "Retornos #2:\n\n"
puts l

loop{Graphics.update}

Obrigado Gab!
E agradeço pela dica, as vezes isso pode causar incompatibilidades com outros scripts que também utilizem os mesmas classes e aliases, agradeço muito Gab pela ajuda.
Obrigado pelo comentário Gab!
Um abraço.

Faalco!~