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

MBS - Load Notes from Files

Iniciado por Brandt, 17/05/2014 às 02:09

17/05/2014 às 02:09 Última edição: 24/05/2014 às 17:38 por Masked
[box2 class=titlebg]
MBS - Load Notes from Files
[/box2]

[box2 class=titlebg title=Introdução]Esse script foi feito a pedido do tiagoms, ele quem sugeriu o script, então qualquer reclamação falem com ele  :hahaha!: é zoeira hein...[/box2]

[box2 class=titlebg title=Características]O script permite que as notas dos personagens/itens/armaduras/armas/classes/habilidades/estados/tilesets sejam configuradas externamente, a partir de arquivos de texto, isso ajuda muito a organizar as notas e facilita para quem usa vários scripts que usem notas.[/box2]

[box2 class=titlebg title=Instruções]Há dois modos de script, o primeiro (Modo1) trabalha com um único arquivo, que deve ser criado na pasta raiz do jogo com o nome 'notes.txt' (sem aspas).
Dentro dele, para se configurar cada nota de cada tipo de coisa, usam-se tags e IDs, no caso, seguindo o modelo:
[tag]
<ID id = nota>
[/tag]


Sendo o id o ID daquele objeto no database, nota a nota do objeto, e a tag uma dessas:
actors
items
armors
weapons
classes
enemies
skills
states
tilsets

Cada uma dessas tags representa, respectivamente, Personagens, Itens, Armaduras, Armas, Classes, Inimigos, Habilidades, Estados e Tilesets


O segundo modo (Modo2), trabalha com pastas, então para cada nota, deve ser criado um arquivo na pasta Notes/tag do projeto, o nome do arquivo deve ser typeid.txt, sendo id o ID do objeto no database (O ID DEVE TER TRÊS DIGITOS, podendo ser 001 ou 100, mas se o id for 01, por exemplo, o arquivo não será contado) e type um dos itens:
actor
item
armor
weapon
class
enemy
skill
state
tileset

Sendo, respectivamente, Personagem, Item, Armadura, Arma, Classe, Inimigo, Habilidade, Estado e Tileset

O conteúdo da nota do objeto será, então, o conteúdo do arquivo que representa-o.


Independente do modo a ser usado, é importante apagar os arquivos-fonte das notas, ou elas continuarão a ser reescritas e há a possibilidade de serem alteradas, então, lembre-se de apagar o 'notes.txt' e a pasta 'Notes' (com tudo dentro) quando for encriptar e publicar o seu jogo.[/box2]

[box2 class=titlebg title=Script]Modo1:
#==============================================================================
# MBS - Load Notes from file
#------------------------------------------------------------------------------
# por Masked
#==============================================================================
#==============================================================================
# ** DataManager
#==============================================================================
module DataManager
  class << self
    alias mbs_ldbtbs load_database
  end
  #--------------------------------------------------------------------------
  # * Carregamento do banco de dados
  #--------------------------------------------------------------------------
  def self.load_database
    mbs_ldbtbs
    load_notes
  end
  #--------------------------------------------------------------------------
  # * Carregamento das notas
  #--------------------------------------------------------------------------
  def self.load_notes
   
    n = FileTest.file?("Notes.rvdata2")
   
    File.open("Notes.rvdata2","wb") {|file| file.write(" ")} unless n
   
    if FileTest.file?("notes.txt")
      File.open("notes.txt","rb") {|file|
        File.open("Notes.rvdata2","w+") {|file2|
          Marshal.dump(file.read.unpack("C*"),file2)
        }
      }
    end
       
    contents = load_data("Notes.rvdata2").pack("U*")
    return if contents.nil?
    notedata = {}
    notedata[:actors] = contents[/\[actors\].+\[\/actors\]/im]
    notedata[:items] = contents[/\[items\].+\[\/items\]/im]
    notedata[:armors] = contents[/\[armors\].+\[\/armors\]/im]
    notedata[:weapons] = contents[/\[weapons\].+\[\/weapons\]/im]
    notedata[:enemies] = contents[/\[enemies\].+\[\/enemies\]/im]
    notedata[:classes] = contents[/\[classes\].+\[\/classes\]/im]
    notedata[:skills] = contents[/\[skills\].+\[\/skills\]/im]
    notedata[:states] = contents[/\[states\].+\[\/states\]/im]
    notedata[:tilesets] = contents[/\[tilesets\].+\[\/tilesets\]/im]
   
    $data_actors.each {|actor|
      break unless notedata[:actors]
      next unless actor
      notedata[:actors][/<ID\s*[0]*#{actor.id}\s*=\s*(.+)>/im]
      actor.note = $1.to_s
    }
    $data_items.each {|item|
    break unless notedata[:items]
      next unless item
      notedata[:items][/<ID\s*[0]*#{item.id}\s*=\s*(.+)\>/im]
      item.note = $1.to_s
    }
    $data_armors.each {|item|
    break unless notedata[:armors]
      next unless item
      notedata[:armors][/<ID\s*[0]*#{item.id}\s*=\s*(.+)\>/im]
      item.note = $1.to_s
    }
    $data_weapons.each {|item|
    break unless notedata[:weapons]
      next unless item
      notedata[:weapons][/<ID\s*[0]*#{item.id}\s*=\s*(.+)>/im]
      item.note = $1.to_s
    }
    $data_enemies.each {|enemy|
    break unless notedata[:enemies]
      next unless enemy
      notedata[:enemies][/<ID\s*[0]*#{enemy.id}\s*=\s*(.+)>/im]
      enemy.note = $1.to_s
    }
    $data_classes.each {|klass|
    break unless notedata[:classes]
      next unless klass
      notedata[:classes][/<ID\s*[0]*#{klass.id}\s*=\s*(.+)>/im]
      klass.note = $1.to_s
    }
    $data_skills.each {|skill|
    break unless notedata[:skills]
      next unless skill
      notedata[:skills][/<ID\s*[0]*#{skill.id}\s*=\s*(.+)>/im]
      skill.note = $1.to_s
    }
    $data_states.each {|state|
    break unless notedata[:states]
      next unless state
      cnotedata[:states][/<ID\s*[0]*#{state.id}\s*=\s*(.+)>/im]
      state.note = $1.to_s
    }
    $data_tilesets.each {|tileset|
    break unless notedata[:tilesets]
      next unless tileset
      notedata[:tilesets][/<ID\s*[0]*#{tileset.id}\s*=\s*(.+)>/im]
      tileset.note = $1.to_s
    }
  end
end


Modo2:
#==============================================================================
# MBS - Load Notes from file
#------------------------------------------------------------------------------
# por Masked
#==============================================================================
#==============================================================================
# ** DataManager
#==============================================================================
module DataManager
  class << self
    alias mbs_ldbtbs load_database
  end
  #--------------------------------------------------------------------------
  # * Carregamento do banco de dados
  #--------------------------------------------------------------------------
  def self.load_database
    mbs_ldbtbs
    load_notes
  end
  #--------------------------------------------------------------------------
  # * Carregamento das notas
  #--------------------------------------------------------------------------
  def self.load_notes
   
    if FileTest.exist?("Notes")
   
    n = FileTest.file?("Data/Notes.rvdata2")
   
    File.open("Data/Notes.rvdata2","wb") {|file| file.write(" ")} unless n
   
    data = {}
   
    #---------------------------------------------------------------------
    # Procs
    #---------------------------------------------------------------------    
    tag = ->(tag) {
      data[tag.to_sym] = []
    }
   
    save_data = ->(tag,file) {
    File.open(file,"rb") {|file2|
        data[tag][file[/\d+/].to_i] = file2.read.unpack("C*").pack("U*")
      }
    }
    #---------------------------------------------------------------------
    # Criação do conteúdo do arquivo "Data/Notes.rvdata2"
    #---------------------------------------------------------------------
    tag["actors"]
    $data_actors.each {|i|
      next unless i
      save_data[:actors,"Notes/actors/actor#{sprintf("%03d",i.id)}.txt"] if FileTest.file?("Notes/actors/actor#{sprintf("%03d",i.id)}.txt")
    }
    tag["items"]
    $data_items.each {|i|
      next unless i
      save_data[:items,"Notes/items/item#{sprintf("%03d",i.id)}.txt"] if FileTest.file?("Notes/items/item#{sprintf("%03d",i.id)}.txt")
    }
    tag["armors"]
    $data_armors.each {|i|
      next unless i
      save_data[:armors,"Notes/armors/armor#{sprintf("%03d",i.id)}.txt"] if FileTest.file?("Notes/armors/armor#{sprintf("%03d",i.id)}.txt")
    }
    tag["weapons"]
    $data_weapons.each {|i|
      next unless i
      save_data[:weapons,"Notes/weapons/weapon#{sprintf("%03d",i.id)}.txt"] if FileTest.file?("Notes/weapons/weapon#{sprintf("%03d",i.id)}.txt")
    }
    tag["enemies"]
    $data_enemies.each {|i|
      next unless i
      save_data[:enemies,"Notes/enemies/enemy#{sprintf("%03d",i.id)}.txt"] if FileTest.file?("Notes/enemies/enemy#{sprintf("%03d",i.id)}.txt")
    }
    tag["classes"]
    $data_classes.each {|i|
      next unless i
      save_data[:classes,"Notes/classes/class#{sprintf("%03d",i.id)}.txt"] if FileTest.file?("Notes/classes/class#{sprintf("%03d",i.id)}.txt")
    }
    tag["skills"]
    $data_skills.each {|i|
      next unless i
      save_data[:skills,"Notes/skills/skill#{sprintf("%03d",i.id)}.txt"] if FileTest.file?("Notes/skills/skill#{sprintf("%03d",i.id)}.txt")
    }
    tag["states"]
    $data_states.each {|i|
      next unless i
      save_data[:states,"Notes/states/state#{sprintf("%03d",i.id)}.txt"] if FileTest.file?("Notes/states/state#{sprintf("%03d",i.id)}.txt")
    }
    tag["tilesets"]
    $data_tilesets.each {|i|
      next unless i
      save_data[:tilesets,"Notes/tilesets/tileset#{sprintf("%03d",i.id)}.txt"] if FileTest.file?("Notes/tilesets/tileset#{sprintf("%03d",i.id)}.txt")
    }
   
    File.open("Data/Notes.rvdata2","w+") {|file|
      Marshal.dump(data,file)
    }
   
    end
    #---------------------------------------------------------------------
    # Atribuição das notas
    #---------------------------------------------------------------------
    contents = load_data("Data/Notes.rvdata2")
    return if contents.nil?
    $data_actors.each {|actor|
      break unless contents[:actors]
      next unless actor
      actor.note = contents[:actors][actor.id].to_s
    }
    $data_items.each {|item|
      break unless contents[:items]
      next unless item
      item.note = contents[:items][item.id].to_s
    }
    $data_armors.each {|item|
      break unless contents[:armors]
      next unless item
      item.note = contents[:armors][item.id].to_s
    }
    $data_weapons.each {|item|
      break unless contents[:weapons]
      next unless item
      item.note = contents[:weapons][item.id].to_s
    }
    $data_enemies.each {|enemy|
      break unless contents[:enemies]
      next unless enemy
      enemy.note = contents[:enemies][enemy.id].to_s
    }
    $data_classes.each {|klass|
      break unless contents[:classes]
      next unless klass
      klass.note = contents[:classes][klass.id].to_s
    }
    $data_skills.each {|skill|
      break unless contents[:skills]
      next unless skill
      skill.note = contents[:skills][skill.id].to_s
    }
    $data_states.each {|state|
      break unless contents[:states]
      next unless state
      state.note = contents[:states][state.id].to_s
    }
    $data_tilesets.each {|tileset|
      break unless contents[:tilesets]
      next unless tileset
      tileset.note = contents[:tilesets][tileset.id].to_s
    }
  end
end
Cole acima do main[/box2]

[box2 class=titlebg title=Créditos e Agradecimentos]- a mim, por criar e disponibilizar;
- a tiagoms, pela ideia.[/box2]
~ Masked

*Não estou crendo no que estou vendo!*
Masked isso é incrível, este script abre várias portas para o RM, principalmente para ABS (como por exemplo, o XAS) que usa essas Notas, podendo ser mudadas, pode se modificar muita coisa no jogo, sem precisar fazer gambiarras.
Jovem, eu certamente devo usar, principalmente para uma coisinha que já estava pensando aqui... hehe
Thanks a lot

Incrível!
Tio Masked manda ver nos scripts....parabéns pelo trabalho
tenho certeza que será muito útil para alguém... :ok:
Prazer, Terror dos Modinha

Ryan já era loco de dorgas nos sistemas, com um script desse pqp, virou o cão chupando siriguela

Realmente, tio masked tá demais nos scripts, ótimo trabalho  :ok:

Hu3 Hu3 Hu3, imagine as possibilidades que esse script abre para os eventers :v
Ainda não pensei em nenhuma, mas se eu pensar, eu crio HUSAHUSAHUASHUAHUS

Valeu pessoal  :XD:


EDIT: Corrigi uns bagulhos que estavam bugando no Modo 2, quem tiver a versão antiga, peço que peguem essa nova, quem está usando o Modo 1, não tem problema, pode ficar com a mesma versão porque não mudou nada.
~ Masked

Eu não entendi como usa isso, é para gerenciar as notas? onde coloca o arquivo notes? alguém tem uma demo ai?
....

Ótimo script mesmo, parabéns pela criação. Só queria sugerir, na verdade é um pedido, dá pra por um demo pra download? Obrigado.