Forums » RGSS

Modificando o Banco de Dados Dinamicamente com RGSS - Aula 3

    • 683 posts
    4 de junho de 2015 12h53min56s ART

    Modificando o Banco de Dados Dinamicamente com RGSS (RMXP)
    Aula 3 - Heróis e Classes


    Introdução
    Finalmente vamos à prática! Mas primeiro o que vem primeiro. Nessa aula, vamos aprender a criar nossos heróis e nossas classes.
    Observação:

    Spoiler 
    Os dados criados por script durarão até uma nova chamada do Scene_Title (com um Game Over, ou o jogador indo no menu e saindo do jogo, ou ainda com o comandoVoltar à Tela Título). Por isso eu aconselho que criem e modifiquem o database imediatamente antes de usá-lo.



    Os Heróis
    Os heróis, como eu disse na aula passada, são representados pela classe RPG::Actor. Vamos aprender a criar uma dessas e a modificá-la.

    Criando uma Classe RPG::Actor
    Isso é simples de fazer, basta colocar isto:

    actor = RPG::Actor.new

    A essa altura isso não é novidade para os mais experientes no RGSS.

    Modificando as Propriedades
    Não é difícil modificá-las. É só saber quais são e qual o seu valor. Para modificar uma, use isso:

    actor.property = value

    Onde actor é a variável onde você criou o RPG::Actorproperty é a propriedade e value é o valor. Vamos conhecê-las:

    name
    A propriedade name equivale ao nome do herói. Seu tipo é uma string.

    actor.name ="João B"


    class_id
    A propriedade class_id é um inteiro que indica o id da classe do herói:

    actor.class_id =2# Lanceiro


    initial_level e final_level
    São inteiros que indicam o nível inicial e final do herói:

    # Modificando o nível inicial e final respectivamente para 5 e 90 actor.initial_level =5 actor.final_level =90


    exp_basis e exp_inflation
    Esses inteiros controlam o crescimento da experiência do herói. exp_basis equivale ao Valor Inicial da experiência, e exp_inflation equivale ao Grau de Técnica:

    # Modificando a experiência actor.exp_basis =15 actor.exp_inflation =40


    character_name, character_hue, battler_name e battler_hue
    character_name e battler_name são strings que definem a imagem do char e do battler do herói. character_hue e battler_hue indicam a tonalidade do char e do battler (de 0 a 360).

    actor.character_name ="001-Fighter01" actor.character_hue =0 actor.battler_name ="001-Fighter-1" actor.battler_hue =0


    parameters
    É meio confuso de explicar. A propriedade parameters é uma tabela bidimensional que guarda os parâmetros das de força, destreza, agilidade e magia do jogador, além do HP máximo e do MP máximo.
    Para acessar, use o seguinte código:

    actor.parameters[param, level]= value

    Onde parameters é:

    • 0 para HP Máximo
    • 1 para SP Máximo
    • 2 para Força
    • 3 para Destreza
    • 4 para Agilidade
    • 5 para Magia

    level é um nível de 1 a 99.
    Dica:

    Spoiler 
    Eis aqui um código para fazer a curva de nível dos parâmetros:
    hp_max_1 =500  # HP Máximo de nível 1 hp_max_99 =5000# HP Máximo de nível 99 sp_max_1 =500  # SP Máximo de nível 1 sp_max_99 =5000# SP Máximo de nível 99 str_1 =50      # Força de nível 1 str_99 =500    # Força de nível 99 dex_1 =50      # Destreza de nível 1 dex_99 =500    # Destreza de nível 99 agi_1 =50      # Agilidade de nível 1 agi_99 =500    # Agilidade de nível 99 int_1 =50      # Magia de nível 1 int_99 =500    # Magia de nível 99 hp_max_increase =(hp_max_99 - hp_max_1)/99 sp_max_increase =(sp_max_99 - sp_max_1)/99 str_increase =(str_99 - str_1)/99 dex_increase =(dex_99 - dex_1)/99 agi_increase =(agi_99 - agi_1)/99 int_increase =(int_99 - int_1)/99 actor.parameters[0,1]= hp_max_1 actor.parameters[1,1]= sp_max_1 actor.parameters[2,1]= str_1 actor.parameters[3,1]= dex_1 actor.parameters[4,1]= agi_1 actor.parameters[5,1]= int_1 for i in2..99   actor.parameters[0, i]= hp_max_1 + hp_max_increase *(i -1)   actor.parameters[1, i]= sp_max_1 + sp_max_increase *(i -1)   actor.parameters[2, i]= str_1 + str_increase *(i -1)   actor.parameters[3, i]= dex_1 + dex_increase *(i -1)   actor.parameters[4, i]= agi_1 + agi_increase *(i -1)   actor.parameters[5, i]= int_1 + int_increase *(i -1)end
    Se usar, terá que me dar os créditos.



    weapon_id, armor1_id, armor2_id, armor3_id e armor4_id
    São inteiros que definem o equipamento usado. O weapon_id indica a arma que será inicialmente usada, e os armor*_id indicam as armaduras que serão inicialmente usadas.

    actor.weapon_id =1 actor.armor1_id =1 actor.armor2_id =5 actor.armor3_id =13 actor.armor4_id =0# Para não ter armadura 4


    weapon_fix, armor1_fix, armor2_fix, armor3_fix e armor4_fix
    São valores booleanos (true ou false) que indicam se a arma e/ou armaduras deverão ser irremovíveis (não podem ser tiradas pelo jogador).

    actor.weapon_fix =true actor.armor1_fix =false actor.armor2_fix =false actor.armor3_fix =false actor.armor4_fix =true


    Adicionando o Herói ao Banco de Dados
    Finalmente concluímos o nosso herói! Mas precisamos adicioná-lo ao banco de dados. Siga o código:

    actor.id = $data_actors.size $data_actors << actor


    Para salvar as alterações no arquivo, utilizamos ainda esse código:

    save_data($data_actors,"Data/Actors.rxdata")


    Código completo de Exemplo
    Aqui está o loooongo código para criarmos nosso herói:

    actor = RPG::Actor.new actor.name ="João B" actor.class_id =2# Lanceiro actor.initial_level =5 actor.final_level =90 actor.exp_basis =15 actor.exp_inflation =40 actor.character_name ="001-Fighter01" actor.character_hue =0 actor.battler_name ="001-Fighter-1" actor.battler_hue =0 hp_max_1 =500  # HP Máximo de nível 1 hp_max_99 =5000# HP Máximo de nível 99 sp_max_1 =500  # SP Máximo de nível 1 sp_max_99 =5000# SP Máximo de nível 99 str_1 =50      # Força de nível 1 str_99 =500    # Força de nível 99 dex_1 =50      # Destreza de nível 1 dex_99 =500    # Destreza de nível 99 agi_1 =50      # Agilidade de nível 1 agi_99 =500    # Agilidade de nível 99 int_1 =50      # Magia de nível 1 int_99 =500    # Magia de nível 99 hp_max_increase =(hp_max_99 - hp_max_1)/99 sp_max_increase =(sp_max_99 - sp_max_1)/99 str_increase =(str_99 - str_1)/99 dex_increase =(dex_99 - dex_1)/99 agi_increase =(agi_99 - agi_1)/99 int_increase =(int_99 - int_1)/99 actor.parameters[0,1]= hp_max_1 actor.parameters[1,1]= sp_max_1 actor.parameters[2,1]= str_1 actor.parameters[3,1]= dex_1 actor.parameters[4,1]= agi_1 actor.parameters[5,1]= int_1 for i in2..99   actor.parameters[0, i]= hp_max_1 + hp_max_increase *(i -1)   actor.parameters[1, i]= sp_max_1 + sp_max_increase *(i -1)   actor.parameters[2, i]= str_1 + str_increase *(i -1)   actor.parameters[3, i]= dex_1 + dex_increase *(i -1)   actor.parameters[4, i]= agi_1 + agi_increase *(i -1)   actor.parameters[5, i]= int_1 + int_increase *(i -1)end actor.weapon_id =1 actor.armor1_id =1 actor.armor2_id =5 actor.armor3_id =13 actor.armor4_id =0# Para não ter armadura 4 actor.weapon_fix =true actor.armor1_fix =false actor.armor2_fix =false actor.armor3_fix =false actor.armor4_fix =true actor.id = $data_actors.size $data_actors << actor save_data($data_actors,"Data/Actors.rxdata")



    As Classes
    As classes não são muito difícil de fazer, é só ter paciência. Elas são representadas pelo RPG::Class.

    Criando uma Classe
    É a mesma coisa que criar o herói, só que com o RPG::Class.

    class= RPG::Class.new


    Propriedades
    Para modificá-las, é o mesmo que no herói.

    class.property = value


    name
    O nome da classe:

    class.name ="Membro"


    position
    Um inteiro que indica em que posição está o herói com a classe.

    • 0 = Frente
    • 1 = Meio
    • 2 = Fundo
    class.position =1# Meio


    weapon_set e armor_set
    São arrays que indicam as armas e armaduras usáveis pela classe.

    class.weapon_set =[1,2,3]# Espada de Treino, Espada Longa e Espada Drowclass.armor_set =[1,2,3,4]# As primeiras 4 armaduras


    element_ranks e state_ranks
    Tabelas unidimensionais que indicam a resistência aos elementos e aos status.
    Atenção: 1 = A, 2 = B, 3 = C, 4 = D, 5 = E e 6 = F.

    class.element_ranks[1]=6class.element_ranks[2]=1class.state_ranks[2]=6class.state_ranks[4]=4

    Perigo:

    Spoiler 
    Se você deixar valores da tabela como nil isso pode gerar um erro!
    Para isso, coloque o seguinte código:
    class.element_ranks.resize(load_data("Data/System.rxdata").elements.size)for i in1..load_data("Data/System.rxdata").elements.size   class.element_ranks[i]=3endclass.state_ranks.resize(load_data("Data/States.rxdata").size)for i in1..load_data("Data/States.rxdata").size   class.state_ranks[i]=3end



    learnings
    É um array de classes RPG::Class::Learning e que guarda informações sobre os aprendizados de habilidades.
    Será abordado na próxima seção.

    Aprendendo habilidades
    Algumas classes permitiriam que você aprendesse habilidades, não? É fácil fazer isso pelo RGSS. Para isso, use o código:

    learning = RPG::Class::Learning.new learning.level =16# Nível para aprender a habilidade learning.skill_id =1# Habilidade aprendida no nívelclass.learnings << learning


    Adicionando a Classe ao Banco de Dados
    Para adicionar a classe ao banco de dados, siga o código:

    class.id = $data_classes.size $data_classes <<class


    Para salvar, use:

    save_data($data_classes,"Data/Classes.rxdata")


    Código Completo de Exemplo

    class= RPG::Class.new class.name ="Membro"class.position =1# Meioclass.weapon_set =[1,2,3]# Espada de Treino, Espada Longa e Espada Drowclass.armor_set =[1,2,3,4]# As primeiras 4 armadurasclass.element_ranks.resize(load_data("Data/System.rxdata").elements.size)for i in1..load_data("Data/System.rxdata").elements.size   class.element_ranks[i]=3endclass.state_ranks.resize(load_data("Data/States.rxdata").size)for i in1..load_data("Data/States.rxdata").size   class.state_ranks[i]=3endclass.element_ranks[1]=6class.element_ranks[2]=1class.state_ranks[2]=6class.state_ranks[4]=4 learning = RPG::Class::Learning.new learning.level =16# Nível para aprender a habilidade learning.skill_id =1# Habilidade aprendida no nívelclass.learnings << learning class.id = $data_classes.size $data_classes <<class save_data($data_classes,"Data/Classes.rxdata")


    Observação
    Quando for testar o jogo e fizer modificações direto no arquivo de dados, para ver as modificações, feche o jogo sem salvar e reabra-o.

    Conclusão
    Nessa longa aula, lhes ensinei a criar heróis e classes. Na próxima, veremos algo que torna o nosso jogo mágico... as habilidades!