Ir para conteúdo

Featured Replies

Postado

Base: 0.4

 

Boa Tarde galera, eu tive uma ideiazinha pra uma spell, é muito simples (eu acho), mas preciso de ajuda.

É o seguinte, a magia seria um exori hur, mas com martelo só. Quando a spell fosse usada, faria um efeito igual o exori hur, mas só como club. A magia atingiria o alvo e logo em seguida ele voltasse pro player (sem dar dano nele, claro)  como se fosse o martelo do Thor.

 

Eu tenho o código do exori hur aqui se precisar como base:

 

 

Citar

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_WHIRLWINDCLUB)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)

function onGetFormulaValues(cid, level, skill, attack, factor)
    local skillTotal, levelTotal = skill + attack, level / 5
    return -(skillTotal / 3 + levelTotal), -(skillTotal + levelTotal)
end

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
if isMonster(cid) then
        doCreatureSay(cid, "exori hur", TALKTYPE_MONSTER)
    end
    return doCombat(cid, combat, var)
end

 


Desde já agradeço 

 

 

Editado por Zazeros (veja o histórico de edições)

Postado

Bom tem uma aqui que eu não me lembro onde peguei mas acho que é o que você esta pedindo... 

Como funciona:
A skil vai em uma quantidade de sqm configurável e volta até o player.

 

local config = {
    distance = 6,              --Distância do "bumerangue".
    distEffect = 25,            --Distance effect.
    minDamage = 1,           --Dano mínimo.
    maxDamage = 150,          --Dano máximo.
    interval = 350             --Tempo para o bumerangue voltar, em milésimos de segundo.
}

function getPosisBetween(fromPos, toPos)
    local posis = {}
    for i = 1, getDistanceBetween(fromPos, toPos) do
        local choices = {fromPos.x, fromPos.x + 1, fromPos.x - 1}
        if fromPos.x ~= toPos.x then
            table.sort(choices, function(a, b) if fromPos.x - toPos.x < 0 then return a > b else return a < b end end)
            fromPos.x = choices[1]
        end
        if fromPos.y ~= toPos.y then
            choices = {fromPos.y, fromPos.y + 1, fromPos.y - 1}
            table.sort(choices, function(a, b) if fromPos.y - toPos.y < 0 then return a > b else return a < b end end)
            fromPos.y = choices[1]
        end
        table.insert(posis, {x = fromPos.x, y = fromPos.y, z = fromPos.z})
    end
    return posis
end

function onCastSpell(cid)
    local playerPos = getThingPos(cid)
    local toPos = {
        [0] = {x = playerPos.x, y = playerPos.y - config.distance, z = playerPos.z},
        [1] = {x = playerPos.x + config.distance, y = playerPos.y, z = playerPos.z},
        [2] = {x = playerPos.x, y = playerPos.y + config.distance, z = playerPos.z},
        [3] = {x = playerPos.x - config.distance, y = playerPos.y, z = playerPos.z}
    }
    local spellToPos = toPos[getCreatureLookDirection(cid)]
    local posis = getPosisBetween(getThingPos(cid), spellToPos)
    doSendDistanceShoot(getThingPos(cid), spellToPos, config.distEffect)
    for i = 1, #posis do
        if not getTileInfo(posis[i]).protection then
            local pid = getTopCreature(posis[i]).uid
            if isMonster(pid) or isPlayer(pid) then
                doTargetCombatHealth(cid, pid, COMBAT_PHYSICALDAMAGE, -config.minDamage, -config.maxDamage, -1)
            end
        end
    end
    addEvent(function()
        if not isPlayer(cid) then return true end
        doSendDistanceShoot(spellToPos, getThingPos(cid), config.distEffect)
        posis = getPosisBetween(spellToPos, getThingPos(cid))
        for i = 1, #posis do
            if not getTileInfo(posis[i]).protection then
                local pid = getTopCreature(posis[i]).uid
                if isMonster(pid) or isPlayer(pid) then
                    doTargetCombatHealth(cid, pid, COMBAT_PHYSICALDAMAGE, -config.minDamage, -config.maxDamage, -1)
                end
            end
        end
    end, config.interval)
    return true
end


Obs: Não sou script logo talvez não conseguirei lhe dar suporte para dúvidas.

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 520k

Informação Importante

Confirmação de Termo