Beyond Sky 2 #1 Postado 27 Janeiro, 2012 Nome: Entendendo Mínimo e Máximo de Dano de uma SpellDescriçã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) 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. 1 Suuhei reagiu a isto Compartilhar este post Link para o post
vHp 6 #2 Postado 7 Fevereiro, 2012 Muito bom amigo, perfeito, meus parabéns! Compartilhar este post Link para o post
dalvorsn 46 #3 Postado 7 Fevereiro, 2012 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 1 Beyond Sky reagiu a isto Compartilhar este post Link para o post
Windobar 0 #4 Postado 23 Abril, 2012 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
dalvorsn 46 #5 Postado 23 Abril, 2012 Ae cara, eu estou tentando aprender aqui tudo mas ta um pouco complicado!! xD Isto é a Flame Strike, porem não entendi nada na parte do COMBAT_FORMULA_LEVELMAGIC!! Alguem poderia me explicar melhor? Obrigado! é 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 2 Suuhei e Longhart reagiu a isto Compartilhar este post Link para o post
Suuhei 0 #6 Postado 16 Maio, 2014 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 #7 Postado 17 Maio, 2014 é 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