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

formula de dano

Iniciado por Konde Keimado, 24/04/2014 às 14:32

24/04/2014 às 14:32 Última edição: 25/04/2014 às 20:11 por King Gerar
boas, inicei-me no rpg maker há pouco tempo e tenho andado a procura da melhor formula de dano ( na minha opinião) possível. no entanto as formulas que mais gostam não funcionam e não consigo perceber porque.

( 20 * a.atk / 10 ) * ( a.atk / b.def )

esta formula funciona perfeitamente quando o atk é igual ou superior a def. no entanto quando é inferior nunca causa dano. não consigo perceber por que raio isso acontece.

50 * ( a.level / 20 + 1 ) * ( a.atk / b.def )

nesta formula, a parte : ( a.level / 20 + 1 ) , é ignorada. ou seja independentemente do lvl o dano é sempre o msm.

se alguém me pudesse ajudar/ explicar o pk  e apresentar soluções/alternativas ficaria mto agradecido

24/04/2014 às 14:36 #1 Última edição: 24/04/2014 às 14:45 por Lima
Bem penso que não seja script o problema está que por eventos 2/3=0,66667 e o rpg maker considera como 0, ou seja, o a.level no fim é multiplicado por 0 e daí que você diga que é ignorada

Está fazendo por eventos? Pode tirar print?

eu estou a usar o rpg maker vx em que dá para inserir directamente a formula.  alias, eu percebo pouco de eventos e de scripts então é 0

Bem, uma forma de você ver se a fórmula está boa, ao menos
a princípio, é substituindo os valores pelos que os personagens
vão ter. No caso, sua fórmula utiliza, do atacante: ataque e level;
e do defendendo: defesa.

Vamos supor os seguintes dados:

Guerreiro - Lv. 1 - Atk 20
Slime - Def 4


Agora substituindo na sua fórmula:

50 * (1 / 20 + 1) * (20 / 4)
50 * (0 + 1) * 5
50 * 1 * 5
Logo, o resultado vai ser algo próximo a 250.

Então, tipo, naquela parte do level, até o nível 19, a divisão vai dar zero,
vez que nesse cálculo não te utilizam casas decimais. Então só a partir
do level 20 que vai haver uma mudança significativa.

Acho que é por isso, se minha matemática estiver certa x)

É, o que acontece é que Integers não podem ter valor decimal, apenas floats, não sei se vai funcionar (não posso testar agora), mas tente substituir por isso:
50 * ( a.level / 20.0 + 1 ) * ( a.atk / b.def )


Aí o a.level seria dividido por 20.0 (que é Float, é tipo 20, mas por exemplo, 2/20 = 0 e 2/20.0=0.1)e voraria um decimal, quando fosse multiplicado por 50, viraria um número inteiro e tal.
~ Masked

muito obrigado a todos pela ajuda. problema resolvido  :XD: