nbb147 8 Postado Outubro 9, 2015 Share Postado Outubro 9, 2015 Pessoal, gostaria de saber se é possível fazer com que o dano de uma magia seja definida por uma outra skill sem ser o magic level propriamente dita, por exemplo o nivel da skill first aumentando o dano da magia. Link para o comentário https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/ Compartilhar em outros sites More sharing options...
0 Night Wolf 285 Postado Outubro 9, 2015 Share Postado Outubro 9, 2015 vou fazer algo melhor do que simplesmente te dar a resposta, vou te ensinar como fazer isso pra qualquer spell que vc queira;Primeiramente vc tem que extrair as informações que você tem na sua spell, isso significa essas 3 coisinhas aqui (pro seu caso): TIPO DE DAMAGE:local combat = createCombatObject()setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) EFEITO:setCombatParam(combat, COMBAT_PARAM_EFFECT, 30) AREA:arr = {{0, 0, 0, 0, 0},{0, 1, 1, 1, 0},{0, 1, 3, 1, 0},{0, 1, 1, 1, 0},{0, 0, 0, 0, 0},} local area = createCombatArea(arr)--------- COM ESSAS INFORMAÇÕES, VAMOS COMEÇAR NOSSO CÓDIGO ------ Agora vá em data/lib/constant.lua e vc primeiramente irá procurar uma tabela parecida com essa daqui: COMBAT_NONE = 0 COMBAT_PHYSICALDAMAGE = 1 COMBAT_ENERGYDAMAGE = 2 COMBAT_EARTHDAMAGE = 4 COMBAT_POISONDAMAGE = 4 COMBAT_FIREDAMAGE = 8 COMBAT_UNDEFINEDDAMAGE = 16 COMBAT_LIFEDRAIN = 32 COMBAT_MANADRAIN = 64 COMBAT_HEALING = 128 COMBAT_DROWNDAMAGE = 256 COMBAT_ICEDAMAGE = 512 COMBAT_HOLYDAMAGE = 1024 COMBAT_DEATHDAMAGE = 2048 Se você olhar o último item dessa tabela podemos ver COMBAT_DEATHDAMAGE = 2048 agora olhando praquela primeira informação que nós temos "tipo de damage" iremos ver que esse COMBAT_DEATHDAMAGE também está presente: local combat = createCombatObject()setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) Certo, agora precisamos definir nosso efeito.. os efeitos ficam convenientemente no mesmo arquivo constant.lua, vimos ali no seu código que vc usa o efeito de número 30 setCombatParam(combat, COMBAT_PARAM_EFFECT, 30) Certo, a área iremos usar a mesma.. agora vamos ao chamado "CORE" do script, também conhecido como corpo ou escopo principal, vou utilizar um aqui que ja foi criado pensando em spells que utilizem skills/mana/vida para tirar dano: "AREA DA SPELL" function onCastSpell(cid, var) "SKILLS QUE SERAO USADAS" local formula = { min = ("alguma formula louca aqui dentro"), max = ("alguma formula louca aqui dentro") } doAreaCombatHealth(cid, "TIPO DE DAMAGE", getCreaturePosition(cid), "AREA DA SPELL", -formula.min, -formula.max, "EFEITO") return true end Certo, agora vamos por partes:Por enquanto tudo que sabemos é que o "EFEITO" é 30, o "TIPO DE DAMAGE" é o 2048 e a "AREA DA SPELL" é igual aquela área desenhada.Substituindo oque a gente sabe fica assim: arr = { {0, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {0, 1, 3, 1, 0}, {0, 1, 1, 1, 0}, {0, 0, 0, 0, 0}, } local area = createCombatArea(arr) -- define a variavel area como a area de combat acima (pra usar na funcao la embaixo) function onCastSpell(cid, var) "SKILLS QUE SERAO USADAS" local formula = { min = ("alguma formula louca aqui dentro"), max = ("alguma formula louca aqui dentro") } doAreaCombatHealth(cid, 2048, getCreaturePosition(cid), area, -formula.min, -formula.max, 30) return true end Perceba que a única coisa que falta na nossa função são as fórmulas.. Você pode literalmente definir QUALQUER coisa como fórmula, se eu colocar apenas 50 ali no min e no max minha magia sempre vai tirar 50. Se eu colocar 50 no min e 100 no max ela sempre vai tirar algo entre esses dois números... mas nós não queremos que a magia hite um numero constante, nós queremos que ela dependa da skill da pessoa, do nível dela, do ml. Do contrário, ela ia ser extremamente podre pois não possui uma evolução junto com o player."tá lobo, mas como vou saber que fórmula usar?"Essa é uma pergunta muito delicada, temos sempre que considerar os casos extremos, se uma magia pode ser usada no nv 10 por exemplo, e a formula dela é level * ml temos que checar os dois casos abaixo: - Caso 1 Player nivel 10, ml 1 irá arrancar 10 de life na magia.. parece justo - Caso 2 Player nivel 300, ml 90 irá arrancar 27.000 de life na magia.. não parece tão justo hahaha Existe uma dica que o próprio tibia nos dá de como montar fórmulas justas, que é usar constantes de proporcionalidade. "Meu deus, Lobo, que caralhas é isso?" bem, o nome é bem mais complicado do que a coisa em si. Acompanhe cmg -> eu quero que minha magia tire 200 +- então eu coloco como min sendo 150 + (A * fist) e o max sendo 200 + (B * fist);Com isso eu defino A e B de forma a nem prejudicar os niveis baixos e nem deixar os niveis altos extremamente apelões. Nesse caso eu faço maior skill que alguém pode chegar no meu sv (vou considerar 110) e o skill inicial (10).Chamarei a diferença de skills no meu server de difskilldifskill é a diferença entre o nivel máximo de skill q alguem costuma ter no meu server e o inicial;Divididos difskill pelo que falta pra completar o numero que queremos na constante.No min nós temos 150 na constante e queremos um dano em torno de 200, então divideremos 50 por difskill ficando com150 + (A * fist) onde A é (50/difskill). No final chegamos que um A "bom" seria (0.5 OU 1/2).Agora vamos aplicar a fórmula que chegamos pro nosso min e ver se está compatível150 + (skill/2)com 10 de skill vc tira 155, com 100 vc tira 200, está muito compatível.Agora podemos achar B a partir de A simplesmente achando valores ligeiramente maiores que se enquadrem dentro do nosso range de dano.Nesse caso eu diria que um bom B é 3 * (skill/2)Vamos aplicar a formula200 + (3 * (skill/2)) com 10 de skill vc tira 215 no max, com 100 de skill vc tira 350. Parece plausível. Finalizando as fórmulas, temos min = (150 + (skill /2)) e max = (200 + (3 * (skill/2))) Tá, mas como ensinar pro nosso script oque é "skill" e que ela representa o fist fighting? bem, é nessa hr que olhamos pra aquele pequeno espaço no script dizendo "SKILLS QUE SERÃO USADAS".Ali você deve criar uma variável skill que irá ler a skill do player, através da função getPlayerSkillLevel(cid, "código da skill")"Mas como eu sei o código da skill?", muito simples meu caro.. lembra que eu falei pra você ir em data/lib/constant? Esse documento tem todas as informações que você precisa pra fazer qualquer código, e é justamente nele que iremos procurar qual é o código da skill fist.Depois de uma rápida procura eu me deparei com esta tabela> SKILL_FIST = 0 SKILL_CLUB = 1 SKILL_SWORD = 2 SKILL_AXE = 3 SKILL_DISTANCE = 4 SKILL_SHIELD = 5 SKILL_FISHING = 6 SKILL__MAGLEVEL = 7 SKILL__LEVEL = 8 e nela podemos ver que o código para a skill fist é 0. Declaro ali naquele espaço do script local fist = getPlayerSkillLevel(cid, 0) e a partir de agora no lugar de skill nas minhas fórmulas eu só escreverei fist e o server irá entender o que eu quero.O script final fica: arr = { {0, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {0, 1, 3, 1, 0}, {0, 1, 1, 1, 0}, {0, 0, 0, 0, 0}, } local area = createCombatArea(arr) -- define a variavel area como a area de combat acima (pra usar na funcao la embaixo) local factor = 1 function onCastSpell(cid, var) local fist = getPlayerSkillLevel(cid, 0) local formula = { min = factor * (150 + (fist /2)), -- nao esqueca dessa virgula pra separar o min do max max = factor * (200 + (3 * (fist/2))) } doAreaCombatHealth(cid, 2048, getCreaturePosition(cid), area, -formula.min, -formula.max, 30) return true end Aquele factor que eu coloquei é uma coisinha (fator de correção de erro) que é sempre bom colocar pois nem sempre as formulas na prática tiram oque elas tiram na teoria, o dano varia de acordo com o combat que nós escolhemos e as vezes é bom adicionar esse factor para podermos ajustar a fórmula mais facilmente.Espero que não tenha preguiça de ler tudo, se você entender como isso funciona garanto que conseguirá fazer magias que se baseiam em somas de skills e criar fórmulas ultra realistas para magias não só baseadas em skills como baseadas em cap, mana, vida, velocidade e qualquer outra coisa que você conseguir pensar.. manoellouro reagiu a isso 1 Link para o comentário https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/#findComment-1671962 Compartilhar em outros sites More sharing options...
0 Night Wolf 285 Postado Outubro 9, 2015 Share Postado Outubro 9, 2015 ter tem, mas teria que fazer a fórmula sem utilizar as predefinições da source, fazendo tudo manualmente via código. Link para o comentário https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/#findComment-1671950 Compartilhar em outros sites More sharing options...
0 nbb147 8 Postado Outubro 9, 2015 Autor Share Postado Outubro 9, 2015 você saberia fazer isso? Link para o comentário https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/#findComment-1671953 Compartilhar em outros sites More sharing options...
0 Night Wolf 285 Postado Outubro 9, 2015 Share Postado Outubro 9, 2015 sim.. me manda alguma magia que vc queira que eu coloque o dano dela baseada em fist que eu faço Link para o comentário https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/#findComment-1671955 Compartilhar em outros sites More sharing options...
0 nbb147 8 Postado Outubro 9, 2015 Autor Share Postado Outubro 9, 2015 local combat = createCombatObject()setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 30) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, -300, -1.5, -450) arr = { {0, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {0, 1, 3, 1, 0}, {0, 1, 1, 1, 0}, {0, 0, 0, 0, 0}, } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Link para o comentário https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/#findComment-1671956 Compartilhar em outros sites More sharing options...
0 nbb147 8 Postado Outubro 10, 2015 Autor Share Postado Outubro 10, 2015 Nossa cara, ótima explicação fiquei surpreso, embora eu tenha tido um pouco de dificuldade para compreender talvez seja por conta do meu entender sobre scripts que é pouco, obrigado pela ajuda, rep+ Link para o comentário https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/#findComment-1672151 Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Outubro 10, 2015 Share Postado Outubro 10, 2015 Tópico movido para dúvidas / pedidos resolvidos. Link para o comentário https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/#findComment-1672152 Compartilhar em outros sites More sharing options...
0 onokamisama 2 Postado Dezembro 18, 2015 Share Postado Dezembro 18, 2015 Bela explicação, me fez entender de uma forma completamente intuitiva, muito bom mesmo. REP+ Link para o comentário https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/#findComment-1678457 Compartilhar em outros sites More sharing options...
Pergunta
nbb147 8
Pessoal, gostaria de saber se é possível fazer com que o dano de uma magia seja definida por uma outra skill sem ser o magic level propriamente dita, por exemplo o nivel da skill first aumentando o dano da magia.
Link para o comentário
https://xtibia.com/forum/topic/237246-skill-fist-ter-influ%C3%AAncia-no-dano-de-certa-magia/Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados