Ir para conteúdo

Featured Replies

Postado

.Qual servidor ou website você utiliza como base? 

OTX 2.8 

 

Qual o motivo deste tópico? 

aparece esse erro quando retira a arma no meio da magia

 

Está surgindo algum erro? Se sim coloque-o aqui. 

Citar

[13/1/2021 21:13:2] [Error - Spell Interface] 
[13/1/2021 21:13:2] In a timer event called from: 
[13/1/2021 21:13:2] data/spells/scripts/special/Shattering blades.lua:onCastSpell
[13/1/2021 21:13:3] Description: 
[13/1/2021 21:13:3] (LuaInterface::luaGetThing) Thing not found

 

Você tem o código disponível? Se tiver publique-o aqui: 

 local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, element, factor)
    local levelTotal = level / 5
    local skillTotal = skill * attack
    local min = levelTotal + (skillTotal * 0.005)
    local max = levelTotal + (skillTotal * 0.015)
    return -math.ceil(min), -math.ceil(max)
end

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")


combat_arr = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
}

local combat_area = createCombatArea(combat_arr)
setCombatArea(combat, combat_area)


local function weaponType(cid)
    local weapons = {[1] = 24, [2] = 26, [3] = 25}
    return weapons[getItemWeaponType(getPlayerWeapon(cid).uid)]
end

local function choose(...)
    local arg = {...}
    return arg[math.random(1,#arg)]
end


local function areaEffect(param)
    if isCreature(param.cid) and not getTilePzInfo(getCreaturePosition(param.cid)) then
        for i = 1, 3 do
            start_pos_1 = {x = getCreaturePosition(param.cid).x+choose(-8, 8), y = getCreaturePosition(param.cid).y+math.random(-6, 6), z = getCreaturePosition(param.cid).z}
            start_pos_2 = {x = getCreaturePosition(param.cid).x+math.random(-8, 8), y = getCreaturePosition(param.cid).y+choose(-6, 6), z = getCreaturePosition(param.cid).z}
            final_pos_1 = {x = getCreaturePosition(param.cid).x+(choose(-8, 8)*-1), y = getCreaturePosition(param.cid).y+(math.random(-6, 6)*-1), z = getCreaturePosition(param.cid).z}
            final_pos_2 = {x = getCreaturePosition(param.cid).x+(math.random(-8, 8)*-1), y = getCreaturePosition(param.cid).y+(choose(-6, 6)*-1), z = getCreaturePosition(param.cid).z}
            doSendDistanceShoot(start_pos_1, final_pos_1, weaponType(param.cid))
            doSendDistanceShoot(start_pos_2, final_pos_2, weaponType(param.cid))
        end
        return doCombat(param.cid, combat, param.var)
    end
end
 

function onCastSpell(cid, var)
    local parameters = {cid=cid, var=var}
    for i = 1, 40 do
        addEvent(areaEffect, i * 250, parameters)
    end
    return true
end

 

Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

 

Resolvido por Dwarfer

Ir para solução
Postado
  • Solução

Pelo que entendi da sua magia, já que não tive como testar, primeiro é recomendável que você adicione na tag da magia no spells.xml o seguinte:

needweapon="1"

 

Para que não dê mais erros, deixe a magia assim:

Spoiler

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, element, factor)
    local levelTotal = level / 5
    local skillTotal = skill * attack
    local min = levelTotal + (skillTotal * 0.005)
    local max = levelTotal + (skillTotal * 0.015)
    return -math.ceil(min), -math.ceil(max)
end

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")


combat_arr = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
}

local combat_area = createCombatArea(combat_arr)
setCombatArea(combat, combat_area)

local weapons = {[1] = 24, [2] = 26, [3] = 25}

local function weaponType(cid)
    local playerWeapon = getPlayerWeapon(cid).uid
    if playerWeapon > 0 then
        return weapons[getItemWeaponType(playerWeapon)]
    end
    return false
end

local function choose(...)
    local arg = {...}
    return arg[math.random(1,#arg)]
end


local function areaEffect(param)
    local p = getCreaturePosition(param.cid)
    if isCreature(param.cid) and not getTilePzInfo(p) then
        local playerWeapon = getPlayerWeapon(param.cid).uid
        if playerWeapon > 0 then
            local ret = weaponType(param.cid)
            if ret and ret == param.weaponType then
                for i = 1, 3 do
                    start_pos_1 = {x = p.x+choose(-8, 8), y = p.y+math.random(-6, 6), z = p.z}
                    start_pos_2 = {x = p.x+math.random(-8, 8), y = p.y+choose(-6, 6), z = p.z}
                    final_pos_1 = {x = p.x+(choose(-8, 8)*-1), y = p.y+(math.random(-6, 6)*-1), z = p.z}
                    final_pos_2 = {x = p.x+(math.random(-8, 8)*-1), y = p.y+(choose(-6, 6)*-1), z = p.z}
                    doSendDistanceShoot(start_pos_1, final_pos_1, ret)
                    doSendDistanceShoot(start_pos_2, final_pos_2, ret)
                end
                return doCombat(param.cid, combat, param.var)
            end
        end
    end
    return true
end
 

function onCastSpell(cid, var)
    local playerWeaponType = getItemWeaponType(getPlayerWeapon(cid).uid)
    local parameters = {cid=cid, var=var, weaponType = weapons[playerWeaponType]}
    for i = 1, 40 do
        addEvent(areaEffect, i * 250, parameters)
    end
    return true
end

 

 

Dessa maneira, caso o player desequipe a arma ou troque o tipo de arma em relação ao tipo que estava equipado quando soltou a magia (ex.: solta com sword e depois equipa um axe), a magia vai parar. Lembrando que do jeito que sua magia está, ele ainda vai poder desequipar a arma  e caso volte a equipá-la dentro do tempo de duração da magia, a magia voltará a atacar. Não sei se isso foi proposital, se é pra funcionar assim mesmo...

 

Ajuste o tempo de  duração da magia com o cooldown para soltar novamente e vai funcionar corretamente.

 

Contato:

 

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 519.6k

Informação Importante

Confirmação de Termo