Ir para conteúdo
Beyond Sky

Combat Formula - Spells

Recommended Posts

Beyond Sky    2
Beyond Sky
Nome: Entendendo Mínimo e Máximo de Dano de uma Spell

Descrição: Tópico destinado a usuários que querem facilidade e perfeição no dano mágico da spell.

Autor: Beyond Sky (Aprendi com o usuário tibiaa4e de outro fórum)

 

Untitled-2-3.png

 

Muitos até hoje editam da forma que querem as spells, chegam ao seu valor de dano desejado mas não entendem como é chegado ao valor final uma spell. Neste tópico vou tentar ajudar aos que querem entender como a função da spells chega ao mínimo e máximo de dano de uma magia.

 

Sem mais delongas vamos trabalhar, primeiramente você deve saber que hoje existem duas sintaxes para CombatFormula "MAGIC".

 

A primeira é essa:

COMBAT_FORMULA_LEVELMAGIC, -minA,Min , MaxB, mAx

 

 

Mais conhecida como essa:

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, 0, -0.6, 0)

 

 

Sendo ela o seguinte, (si não entender aguarde que pra frente entenderá)

MinA: Minimo calculado, ou seja valor minimo que sera calculado.

Min: Minimo que a magia tirará ou dará.

MaxB: Maximo de dano ao ser calculado.

Max: Dano maximo fixo que dará a magia.

 

 

O calculo da fórmula si dá, da seguinte maneira:

(lvl*2 + ml*3) * MinA ou MaxB

e que como um bom aluno você deve saber que a equação dentro do parenteses é multiplicada antes de somar.

 

Bom está foi a primeira sintaxe mas dizem as má línguas que essa função funcionava dessa maneira somente antes do protocolo 7.8. Então você si pergunta, por que diabos esse *filho duma* me mostrou essa poha :domal:

 

Lhe mostrando essa sintaxe fica mais fácil assimilar como funciona o Combat Formula de uma spell (pelo menos foi assim para mim). E agora que você já sabe como funciona o sistema de Combat Formula você pode usar a segunda sintaxe que o tibiaa4e criou para facilidade e melhor desenvolvimento do dano mágico da spell.

 


function getCombatFormulas(cid, lv, maglv)
       local formula_min = -((lv*0.25 + maglv*3) * 0.52)
       local formula_max = -((lv*0.25 + maglv*3) * 0.68)

       if(formula_max < formula_min) then
               local tmp = formula_max
               formula_max = formula_min
               formula_min = tmp
       end
       return formula_min, formula_max
end

 

Mesmo parecendo complicada é só você notar que fica mais fácil. Perceba essa função em uma spell.

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)

function getCombatFormulas(cid, lv, maglv)
   local formula_min = ((lv*1.5 + maglv*30) * 1.2)
   local formula_max = ((lv*1.5 + maglv*30) * 1.4)

   if(formula_max < formula_min) then
       local tmp = formula_max
       formula_max = formula_min
       formula_min = tmp
   end
   return formula_min, formula_max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas")

function onCastSpell(cid, var)
   return doCombat(cid, combat, var)



end

 

Você tem que editar somente isso

   local formula_min = ((lv*1.5 + maglv*30) * 1.2)
   local formula_max = ((lv*1.5 + maglv*30) * 1.4)

 

Note a soma desses valores si baseando em um player com level 200 e magiclevel 13

MIN.: 200*1.5 = 300 || 13*30 = 390 || 300+390 = 690 || 690*1.2 = 828

 

MAX.: 200*1.5 = 300 || 13*30 = 390 || 300+390 = 690 || 690*1.4 = 966

 

É isso, acho que lendo com calma e com vontade de entender você poderá aprender facilmente como funciona esse sistema.

Compartilhar este post


Link para o post
vHp    6
vHp

Muito bom amigo, perfeito, meus parabéns!

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

Antes de mais nada, devo dizer que é um ótimo tutorial, meus parabéns e obrigado por contribuir com o fórum.

Além disso ao ensinar aprendemos mais e melhor.

No entanto existe uma informação errada no tutorial.

A primeira é essa:

COMBAT_FORMULA_LEVELMAGIC, -minA,Min , MaxB, mAx

 

 

Mais conhecida como essa:

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, 0, -0.6, 0)

 

 

Sendo ela o seguinte, (si não entender aguarde que pra frente entenderá)

 

 

O calculo da fórmula si dá, da seguinte maneira:

(lvl*2 + ml*3) * MinA ou MaxB

e que como um bom aluno você deve saber que a equação dentro do parenteses é multiplicada antes de somar.

• Sintax correta da função.

setCombatFormula(combat, type, mina, minb, maxa, maxb[, minl, maxl[, minm, maxm[, minc[, maxc]]]])

 

 

• Valores que os parametros adquirem quando não são declarados:

maxc = 0
minc = 0
maxm = valor do config.lua 'formulaMagic'
minm = valor do config.lua 'formulaMagic'
maxl = valor do config.lua 'formulaLevel'
minl = valor do config.lua 'formulaLevel'

 

 

• Os valores citados acima são usados em formulas de acordo com o tipo:

» Para type igual a FORMULA_LEVELMAGIC:

min = ((lvl / minl + mglvl * minm) * 1. * mina + minb)
max = ((lvl / maxl + mglvl * maxm) * 1. * maxa + maxb)

Obs.: os valores lvl, e mglvl, são respectivamente o level do player e o magic level do player.

 

» Para type igual a FORMULA_SKILL:

 

É um pouco mais confusa a formula, pois depende dos valores da skill da weapon usada.

 

 

» Para type igual a FORMULA_VALUE:

 

O valor min e max de damage são respectivamente os valores minb, maxb.

 

O que eu disse acima foi retirado diretamente das sources, com uma simples interpretação da função em luascripts.cpp e em combat.cpp do tfs 0.3.6pl1

 

cya

Compartilhar este post


Link para o post
Windobar    0
Windobar

Ae cara, eu estou tentando aprender aqui tudo mas ta um pouco complicado!! xD

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK)

setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)

 

function onCastSpell(cid, var)

return doCombat(cid, combat, var)

end

 

Isto é a Flame Strike, porem não entendi nada na parte do COMBAT_FORMULA_LEVELMAGIC!! Alguem poderia me explicar melhor? Obrigado!

Compartilhar este post


Link para o post
Suuhei    0
Suuhei

Eu sempre quis saber como era feito o calculo e nunca encontrei um tutorial. Muito bom mesmo, valeu!


Compartilhar este post


Link para o post
Longhart    16
Longhart

é igual equação cara, só aplicar valores.

ex.:

Estipulo essa formula:

setCombatFormula(combat, type, -1, -10, -1, -20, 5, 5, 1, 4)
Quero saber quanto eu ritaria para level 50 e ml 10

 

Input:

local lvl = 50
local mglvl = 10
local mina, minb, maxa, maxb, minl, maxl, minm, maxm = -1, -10, -1, -20, 5, 5, 1, 4
min = ((lvl / minl + mglvl * minm) * 1. * mina + minb)
max = ((lvl / maxl + mglvl * maxm) * 1. * maxa + maxb)
print("Minimo: "..min.."\nMáximo: "..max)
OutPut:

>lua -e "io.stdout:setvbuf 'no'" "xadrez.lua" 
Minimo: -30
Máximo: -70
>Exit code: 0

Você é um gênio! admirador como você respondeu de forma simples e correta. Mostrou respeito, obrigado!

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×