Modificando o Banco de Dados Dinamicamente com RGSS (RMXP) - Aula 7
Modificando o Banco de Dados Dinamicamente com RGSS (RMXP) Aula 7 - Inimigos e Tropas
Introdução
Os inimigos infernizam a vida do herói, não? Ainda mais quando vêm com hordas de outros inimigos, certo? Nessa aula, lhes ensinarei a criar os inimigos e as tropas.
Os inimigos
Os inimigos são representados pelos RPG::Enemy e RPG::Enemy::Action.
Criando um RPG::Enemy
Para criar um RPG::Enemy:
Código:
enemy = RPG::Enemy.new
Para modificar as propriedades do inimigo, o código:
Código:
enemy.property = value
Vejamos as propriedades dos inimigos:
name
É o nome do inimigo.
Código:
enemy.name = "Flooder"
battler_name e battler_hue
Indicam o nome e a tonalidade do inimigo.
animation1_id e animation2_id
São as animações do inimigo. animation1_id indica a animação de inimigo ao atacar e animation2_id indica a animação do alvo do inimigo.
Código:
enemy.animation1_id = 0
enemy.animation2_id = 4
element_ranks e state_ranks
Indicam a resistência eos elementos e aos status. Atenção: 1 = A, 2 = B, 3 = C, 4 = D, 5 = E e 6 = F.
Se você deixar valores da tabela como nil isso pode gerar um erro!
Para isso, coloque o seguinte código:
Código:
class.element_ranks.resize(load_data("Data/System.rxdata").elements.size)
for i in 1..load_data("Data/System.rxdata").elements.size
enemy.element_ranks[i] = 3
end
class.state_ranks.resize(load_data("Data/States.rxdata").size)
for i in 1..load_data("Data/States.rxdata").size
enemy.state_ranks[i] = 3
end
actions
Esse array[ indica as ações do inimigo. Elas são representadas pela classe [b]RPG::Enemy::Action[b].
Veja as propriedades da RPG::Enemy::Action:
kind: Tipo da ação (0 = Básica, 1 = Habilidade).
basic: Ação básica, só tem efeito se kind for 0 (0 = Atacar, 1 = Defender, 2 = Fugir, 3 = Esperar).
skill_id: ID da habilidade, só tem efeito se kind for 1.
condition_turn_a e condition_turn_b (opcional): Se forem definidos, a ação poderá ocorrer no turno condition_turn_a + condition_turn_bX. Exemplo: Se condition_turn_a é igual a 1 e condition_turn_b é igual a 3, então o ataque irá acontecer nos turnos 1, 4, 7, 10, 13... até o fim da batalha. Se não for usar essa condição, não defina essas propriedades.
condition_hp: Se for definido, a ação poderá ocorrer se a porcentagem de HP do inimigo for igual or menor que condition_hp. Se não for usar essa condição, não defina essa propriedade.
condition_level: Se for definido, a ação poderá ocorrer se o nível médio da equipe for igual ou maior que condition_level. Se não for usar essa condição, não defina essa propriedade.
condition_switch_id: Se for definido, a ação poderá ocorrer se a switch condition_switch_id estiver ativada. Se não for usar essa condição, não defina essa propriedade.
rating: Frequência da ação. Isso é explicado no RPG Maker XP (de 1 a 10).
exp e gold
Indicam a experiência e o dinheiro dados pelo inimigo.
Código:
enemy.exp = 280
enemy.gold = 500
item_id, weapon_id, armor_id e treasure_prob
São informações do tesouro dado pelo inimigo. Você pode usar ou item_id, ou weapon_id, ou armor_id. Não pode usar dois ou três desses ao mesmo tempo. treasure_prob indica a chance do herói receber o tesouro (em %). Se o inimigo não deixar tesouro, não defina essas propriedades.
As Tropas
As tropas infernizam ainda mais o herói. Afinal, tropas são hordas de inimigos. Elas são representadas pelas classes RPG::Troop, RPG::Troop::Member, RPG::Troop::Page e RPG::Troop::Page::Condition.
Criando uma Classe RPG::Troop
É simples:
Código:
troop = RPG::Troop
A classe RPG::Troop tem apenas três propriedades. São elas:
name
É o nome da tropa.
Código:
troop.name = "Fantasma"
Dica:
Defina a propriedade members primeiro, e depois use o seguinte código, que dá automaticamente o nome à tropa no estilo RPG Maker:
Código:
ids = {}
names = []
for en in troop.members
if ids.has_key?(en.enemy_id)
ids[en.enemy_id] += 1
else
ids[en.enemy_id] = 1
end
end
for key in ids.keys
name = $data_enemies[key].name
name += "*" + ids[key] if ids[key] > 1
names << name
end
first_time = true
troop.name = ""
for name in names
troop.name += ", " unless first_time
troop.name += name
end
members
Esse array indica os membros da tropa, representados pela RPG::Troop::Member.
Veja as propriedades da RPG::Troop::Member:
troop = RPG::Troop
member = RPG::Troop::Member.new
member.enemy_id = 1
member.x = 320
member.y = 304
member.hidden = false
member.immortal = false
troop.members << member
ids = {}
names = []
for en in troop.members
if ids.has_key?(en.enemy_id)
ids[en.enemy_id] += 1
else
ids[en.enemy_id] = 1
end
end
for key in ids.keys
name = $data_enemies[key].name
name += "*" + ids[key] if ids[key] > 1
names << name
end
first_time = true
troop.name = ""
for name in names
troop.name += ", " unless first_time
troop.name += name
end
troop.id = $data_troops.size
$data_troops << troop
save_data($data_troops, "Data/Troops.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 outra longa aula, eu lhes apresentei os inimigos e as tropas. Na próxima aula, lhes apresentarei os status! Até lá!