Ir para conteúdo
  • Cadastre-se

Posts Recomendados

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")

 

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo