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

MBS - Quebrador de limites do database

Iniciado por Brandt, 28/01/2015 às 10:58

28/01/2015 às 10:58 Última edição: 28/01/2015 às 12:18 por Masked
MBS - Quebrador de limites do database


por Masked


Características


O script altera os arquivos da pasta Data de forma a permitir a criação de mais de 8000 999 heróis, habilidades, itens, animações...


Instruções


O próprio script as dá através de caixas de mensagem.

Screens


Spoiler
[close]

Script


Código: auto:0
#==============================================================================
# MBS - Quebrador de limites do database
#------------------------------------------------------------------------------
# por Masked
#==============================================================================
module MBS
  module LimitBreaker
#==============================================================================
# Configurações
#==============================================================================
 
    #--------------------------------------------------------------------------
    # Caso queira ativar o script, deixe como true, se não, mude para false
    #--------------------------------------------------------------------------
    BREAK_LIMITS = true
    
    #--------------------------------------------------------------------------
    # Caso queira criar um backup dos dados na pasta Data/Backup, deixe como
    # true, se não, mude para false
    #--------------------------------------------------------------------------
    BACKUP = true
 
    #--------------------------------------------------------------------------
    # Definição do limite de itens para cada parte do database
    #--------------------------------------------------------------------------
    LIMITS = {
      actors:        999, # Heróis
      classes:       999, # Classes
      skills:        999, # Habilidades
      items:         999, # Itens
      weapons:       999, # Armas
      armors:        999, # Armaduras
      enemies:       999, # Inimigos
      troops:        999, # Grupos de inimigos
      states:        999, # Estados
      animations:    999, # Animações
      tilesets:      999, # Tilesets
      common_events: 999, # Eventos comuns
    }
    
#==============================================================================
# Fim das configurações
#==============================================================================
 
    #------------------------------------------------------------------------
    # Carregamento dos dados do database
    #------------------------------------------------------------------------
    DataManager.load_database
 
#==============================================================================
# Funções das janelas
#==============================================================================
    FindWindow = Win32API.new('user32', 'FindWindow', 'vp', 'i')
    MessageBox = Win32API.new('user32', 'MessageBox', 'ippi', 'v')
    
    #--------------------------------------------------------------------------
    # Transformação do texto em ASCII
    #--------------------------------------------------------------------------
    def self.ascii(txt)
      txt.unpack('U*').pack('C*')
    end
    
    #--------------------------------------------------------------------------
    # * Caixa de aviso
    #--------------------------------------------------------------------------
    def self.warnbox(message)
      MessageBox.call(FindWindow.call($data_system.game_title), ascii(message), $data_system.game_title, 0x2030)
    end
    
    #--------------------------------------------------------------------------
    # * Caixa de aviso
    #--------------------------------------------------------------------------
    def self.infobox(message)
      MessageBox.call(FindWindow.call($data_system.game_title), ascii(message), $data_system.game_title, 0x2040)
    end
    
    #--------------------------------------------------------------------------
    # * Caixa de erro
    #--------------------------------------------------------------------------
    def self.errorbox(message)
      MessageBox.call(FindWindow.call($data_system.game_title), ascii(message), $data_system.game_title, 0x2010)
    end
    
#==============================================================================
# Parte funcional
#==============================================================================
#------------------------------------------------------------------------------
# Condição para evitar que todos os dados do jogo sejam salvos a menos que ele 
# esteja sendo usado no modo de teste
#------------------------------------------------------------------------------
    if $TEST && BREAK_LIMITS
      1.times do      
        #------------------------------------------------------------------------
        # Aviso antes de começar...
        #------------------------------------------------------------------------
        warnbox( 'O script MBS - Quebrador de limites do database está ativado,' +
                ' se não salvou suas alterações, feche o jogo e salve-as.' )
        
#==============================================================================
# Variáveis úteis
#==============================================================================
        #------------------------------------------------------------------------
        # Associação dos símbolos do LIMITS com as variáveis do banco de dados
        #------------------------------------------------------------------------
        Data = {
          actors:        $data_actors, 
          classes:       $data_classes, 
          skills:        $data_skills,
          items:         $data_items,
          weapons:       $data_weapons,
          armors:        $data_armors,
          enemies:       $data_enemies,
          troops:        $data_troops,
          states:        $data_states,
          animations:    $data_animations,
          tilesets:      $data_tilesets,
          common_events: $data_common_events,
        }
        
        #------------------------------------------------------------------------
        # Associação dos símbolos do LIMITS com as classes usadas pelas variáveis
        # do banco de dados
        #------------------------------------------------------------------------
        Data_S = {
          actors:        RPG::Actor,
          classes:       RPG::Class,
          skills:        RPG::Skill,
          items:         RPG::Item,
          weapons:       RPG::Weapon,
          armors:        RPG::Armor,
          enemies:       RPG::Enemy,
          troops:        RPG::Troop,
          states:        RPG::State,
          animations:    RPG::Animation,
          tilesets:      RPG::Tileset,
          common_events: RPG::CommonEvent,
        }
        
        #------------------------------------------------------------------------
        # Associação dos símbolos do LIMITS com os arquivos da pasta Data
        #------------------------------------------------------------------------
        Data_F = {
          actors:        'Actors.rvdata2',
          classes:       'Classes.rvdata2',
          skills:        'Skills.rvdata2',
          items:         'Items.rvdata2',
          weapons:       'Weapons.rvdata2',
          armors:        'Armors.rvdata2',
          enemies:       'Enemies.rvdata2',
          troops:        'Troops.rvdata2',
          states:        'States.rvdata2',
          animations:    'Animations.rvdata2',
          tilesets:      'Tilesets.rvdata2',
          common_events: 'CommonEvents.rvdata2',
        }
      
#==============================================================================
# Criação do backup 
#==============================================================================
        if BACKUP
          begin
            Dir.mkdir('Data/Backup') unless FileTest.directory?('Data/Backup')
            Data_F.each do |key, filename|
              save_data(Data[key], 'Data/Backup/' + filename)
            end
          rescue
            errorbox( 'Um erro aconteceu enquanto o backup era salvo, para evitar ' +
                      'perda de dados, o script será encerrado.')
            break
          end
        end
 
#==============================================================================
# Ajuste dos itens das arrays do banco de dados
#==============================================================================
        begin
          LIMITS.each do |key, max|
            max.times do |i|
              next if Data[key][i+1]
              Data[key][i+1] = Data_S[key].new
            end
          end
        rescue
          errorbox( 'Um erro aconteceu durante o ajuste dos itens das arrays ' +
                    'do banco de dados, para evitar perda de dados, o script ' + 
                    'será encerrado')
          break
        end
#==============================================================================
# Salvamento dos dados nos arquivos da pasta Data
#==============================================================================
        begin
          Data.each do |key, data|
            save_data(data, 'Data/' + Data_F[key])
          end
        rescue
          errorbox( 'Um erro aconteceu durante o salvamento dos dados, para ' +
                    'evitar problemas, o script será encerrado')
          break
        end
 
#==============================================================================
# Finalização
#==============================================================================
        infobox( 'O script terminou as alterações no banco de dados, para que as'  +
                 ' alterações façam efeito, feche o RPG Maker sem salvar e depois' +
                 ' abra-o novamente')
        
        infobox( 'É recomendável desativar o script após usá-lo, para isso, mude' +
                ' a constante BREAK_LIMITS nas configurações' )
                
        if BACKUP
          infobox( 'Um backup foi salvo na pasta Data/Backups' )
        end
        
      end
    end
  end
end


Créditos e Agradecimentos


- a mim, por criar;
- ao Peter Tosh Co. pela ideia.
~ Masked

Muito bom a ideia. Apesar que pra mim não é tão necessário usar tantos itens, armas etc. Só uma pergunta. Você sabe ou conhece algum script que aumenta a capacidade de espaço para escrever a descrisão dos itens, armas, armaduras?

Tipo, pois seria bem maneiro. Pensei nisso tirando de Dark Souls, que é bem útil pois lá os itens tem uma descrição bem grande, pra poder explicar os efeitos das armas.

Enfim, ótimo script :ok:
Prazer, Terror dos Modinha

É, eu pensei a mesma coisa, mas pode acabar sendo útil pra alguém que tenha fôlego pra fazer mil e tantos itens xP

Nunca vi, mas acho que daria pra fazer algo assim, acho que seria necessário usar as notas pra escrever a descrição, talvez algum arquivo, ou quem sabe no próprio script mesmo... É uma boa ideia, vou tentar fazer aqui.
~ Masked

É meio dificil alguém ultrapassar esses numeros de itens, herois etc... mas... vai que alguém decide fazer isso...
Provavelmente a maioria procura esse tipo de script pelo mesmo motivo, quebrar limite de nível. o que não vi aí. seria uma boa esse limite poder ser quebrado
Clique e conheça o meu canal - Canal RPG Maker Zone

Eu tenho que dizer....esse script é muito  :o__o:
Estou testando varias coisas que antes não podia !!! muito bom.

Vlw.

Pode ser utilizado comercialmente? :D
JeSuS está voltando! Volte para ele antes!

Pode, só lembre de dar os créditos :D
~ Masked

Obrigado! :D
JeSuS está voltando! Volte para ele antes!