Postado Novembro 9, 2024 Nov 9 fiz essa spell e cheguei até o ponto dela tirar dano do primeiro alvo, alcançar mais 2 alvos, mas o dano nas criaturas subsequentes e a animação da arma ricocheteando não aparece. O que pode ser? Se alguém tiver o script da magia "Executioner's Throw" talvez ajude. Grato. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_WEAPONTYPE) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) -- Função para calcular o dano function onGetFormulaValues(cid, level, skill, attack, element, factor) local levelTotal, formula = level / 5, 0.0332 local normal, elemental = -(skill * attack * formula + levelTotal), math.ceil((skill * element * formula + levelTotal)) return normal / 2, normal, -math.random(elemental / 2, elemental) end -- Função para aplicar o dano com intervalo de tempo function aplicarDanoComIntervalo(cid, targets, damage) local delay = 500 -- Meio segundo de atraso entre os ataques (500 milissegundos) for i, target in ipairs(targets) do -- Adiciona um evento para aplicar o dano com intervalo de tempo addEvent(function() -- Aplica a animação do projetil doSendDistanceShoot(getCreaturePosition(cid), getCreaturePosition(target), CONST_ANI_WEAPONTYPE) -- Aplica o dano doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, damage, damage, CONST_ME_HITAREA) end, i * delay) -- Atraso aumenta com cada ricochete (i * delay) end end -- Função para ricochetear a magia em até 2 alvos a 2 SQMs de distância function ricochetear(cid, firstTarget, var, damage) local position = getCreaturePosition(firstTarget) local ricochetTargets = {} -- Verificar até 2 alvos próximos a 2 SQMs de distância (em todas as direções) for _, direction in ipairs({{x=1, y=0}, {x=-1, y=0}, {x=0, y=1}, {x=0, y=-1}}) do -- A cada direção, verifica até 2 SQMs de distância for dist = 1, 2 do local newPos = {x=position.x + direction.x * dist, y=position.y + direction.y * dist, z=position.z} local creature = getTopCreature(newPos).uid if isCreature(creature) and creature ~= firstTarget then table.insert(ricochetTargets, creature) end end end -- Aplica o dano com intervalo de tempo nos alvos aplicarDanoComIntervalo(cid, {firstTarget, unpack(ricochetTargets)}, damage) end -- Função para o efeito de cast da magia function onCastSpell(cid, var) -- Inicializa a magia local target = getCreatureTarget(cid) local damage = doCombat(cid, combat, var) -- Aplica o dano inicial ao alvo principal -- Aplica o dano inicial e animação no alvo principal if target then -- Animação do projetil do jogador até o alvo doSendDistanceShoot(getCreaturePosition(cid), getCreaturePosition(target), CONST_ANI_WEAPONTYPE) -- Aplica o dano ao alvo inicial doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, damage, damage, CONST_ME_HITAREA) -- Aplica o ricochete se houver um alvo ricochetear(cid, target, var, damage) -- Chama a função de ricochete para outros alvos end return damage end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
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.