Postado Junho 20, 2019 6 anos .Qual servidor ou website você utiliza como base? TFS 0.3.6 REV11 Qual o motivo deste tópico? Estou tentando converter os danos do meu antigo servidor 8.10 (evolutions) para um novo 8.60 (tfs 0.3.6) porem não entendo a formula de dano usado em ambos, principalmente no TFS. Percebe-se que no script há 4 dígitos, eu não faço ideia oque eles significam. Você tem o código disponível? Se tiver publique-o aqui: Spell que estou tentando converter do meu servidor 8.10 (exevo gran mas frigo) ( depende menos do magic level e mais do level e no geral tira bem mais dano principalmente em niveis mais elevados) local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 42) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -2.0, -150, -1.6, -150) arr = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Spell que veio com o meu tfs (8.60) (Tem um dano médio fixo, o level e o magic level quase não fazem efeito no dano) local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ICETORNADO) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 6, 12) local area = createCombatArea(AREA_CROSS5X5) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end No meu atual tanto setAttackFormula como setCombatFormula funcionam, porém se eu copiar os valores do meu antigo para o novo, a magia simplesmente fica muito fraca. Tentei procurar nas sources do TFS como setCombatFormula ou setAttackFormula funcionam e não encontrei as formulas em nenhum lugar. Como eu faço essa conversão? Edit: procurando nas sources encontrei um comentario que pode ser util, porém não consegui entende-lo: setCombatFormula(combat, type, mina, minb, maxa, maxb[, minl, maxl[, minm, maxm[, minc[, maxc]]]]) Editado Junho 20, 2019 6 anos por Serpente (veja o histórico de edições)
Postado Junho 20, 2019 6 anos Solução setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, mglvl, min, lvl, max) Para facilitar, se você colocar assim: setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, mglvl, min, lvl, max) Ele irá causar 100% do seu Level + uns quebrados do seu Magic Level. As outras fórmulas eu não sei como funciona, mas são valores muito quebrados e nunca são exatos, tanto que mesmo nessa formula, para checar o Level Atual de forma correta, teria que ser um numero tipo 4.2222123, então eu recomendo você usar o onGetFormulaValues(cid, level, maglevel) function onGetFormulaValues(cid, level, maglevel) return -(level + maglevel), -(level + maglevel) end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") Neste caso ele irá retornar seu Level+MagicLevel. Você também pode com SKILL V function onGetFormulaValues(cid, level, skill) return -(level + skill), -(level + skill) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
Postado Junho 21, 2019 6 anos Autor Obrigado @Joaovettor essa duas funções que você enviou me ajudaram muito, com elas sou capaz de estimar o dano do meu antigo servidor usando essas funções Agora estou tentando decifrar a formula usada pelo meu servidor antigo, fiz algumas medições usando a magia e anotando o dano e cheguei ao seguinte resultado setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -2.0, -150, -1.6, -150) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -X, -Y, -Z, -H) X e Z são variaveis multiplicadoras que adicionam dano de acordo com o level e o magic level (ambas as variaveis agem de maneira igual, porém existem as 2 para existir uma variação de dano) A cada 1X descobri que o dano será +2*level e +3*mglevel o mesmo vale para o Z. As variaveis Y e H servem como dano minimo que irá ser somado a variação (dano X e Z), existem as duas para variar o dano minimo (se os 2 valores forem iguais não há variação). No exemplo que enviei convertendo pra outra função ficará: return -(150 + (3.2*level + 4.8*maglevel)), -(150+ (4*level + 6*maglevel)) Fiz essas contas com números redondos, por isso é uma aproximação, mais com essa formula ficou bem perto do meu antigo 8.10 os danos. Editado Junho 21, 2019 6 anos por Serpente (veja o histórico de edições)
Postado Junho 23, 2019 6 anos os parâmetros da formula são os seguintes setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, MinA, MinB, MaxA, MaxB) o dano baseado em magic level segue a seguinte formula MinDmg = (Level + ML * 4) * MinA + MinB MaxDmg = (Level + ML * 4) * MaxA + MaxB lembrando que os valores tem que ser todos negativos para dar dano setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.0, -900, -3.2, -1100) já a formula de dano baseada em skill fica assim setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1.0, -900, 3.2, -1100) dano minimo = MinB dano máximo sem arma equipada = MaxB dano máximo com arma equipada MaxDmg = ((2 * (WeaponAttack * (WeaponSkill + 5.8) / 25 + (level - 1) / 10)) / Stance) * MaxA + MaxB A instância de combate divide seu ataque por 1 se tiver em modo ofenssivo 1.2 se tiver em modo balanceado 2 se tiver em modo defensivo no caso de skills, o valor de MinA é irrelevante, porem o valor de MaxA DEVE ser positivo, caso contrario ao multiplicar o dano por um valor negativo ele inverteria o sinal
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.