• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

OpenTibia SpellCreator: A graphical spell creation enviroment

Dude I tried to click on that link, ten minutes later (it was still loading) I decided fuck it
 
tfs 1.2+

trying to make lookdir spell
Code:
-- SpellCreator generated.

-- =============== COMBAT VARS ===============
-- Areas/Combat for 0ms
local combat0_Brush = createCombatObject()
setCombatParam(combat0_Brush, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_BLUE)
setCombatParam(combat0_Brush, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR)
setCombatParam(combat0_Brush, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatArea(combat0_Brush,createCombatArea({{1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 3, 0, 0, 0, 0}}))
setCombatFormula(combat0_Brush, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat0_Brush = {CONST_ANI_ETHEREALSPEAR,0,1,1,2,0,2,-1,2,-1,3,-2,3,0,3,1,3,2,3,3,4,2,4,1,4,0,4,-1,4,-2,4,-3,4,-4,5,-3,5,-2,5,-1,5,0,5,1,5,2,5,3,5,4,5}

-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos,startDir) -- Part
    if (isCreature(cid)) then
        doCombat(cid, c, var)
        if (dirList ~= nil) then -- Emit distance effects
            local i = 2;
            while (i < #dirList) do
                if (startDir == 0) then -- N
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
                elseif (startDir == 2) then -- S
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x+dirList[i],y=dirEmitPos.y+dirList[i+1],z=dirEmitPos.z},dirList[1])
                elseif (startDir == 1) then -- E
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x+dirList[i+1],y=dirEmitPos.y+dirList[i],z=dirEmitPos.z},dirList[1])
                else -- W / Something weird happened
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i+1],y=dirEmitPos.y-dirList[i],z=dirEmitPos.z},dirList[1])
                end
                i = i + 2
            end       
        end
    end
end

function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)
    local startDir = getCreatureLookDirection(cid)
    RunPart(combat0_Brush,cid,var,dfcombat0_Brush,startPos,startDir)
    return true
end

Code:
Lua Script Error: [Spell Interface]
data/spells/scripts/attack/luxamento.lua:onCastSpell
data/spells/scripts/attack/luxamento.lua:41: attempt to call global 'getCreatureLookDirection' (a nil value)
stack traceback:
        [C]: in function 'getCreatureLookDirection'
        data/spells/scripts/attack/luxamento.lua:41: in function <data/spells/scripts/attack/luxamento.lua:39>

ref

bump - need it for tfs 1.2
 
tfs 1.2+

trying to make lookdir spell
Code:
-- SpellCreator generated.

-- =============== COMBAT VARS ===============
-- Areas/Combat for 0ms
local combat0_Brush = createCombatObject()
setCombatParam(combat0_Brush, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_BLUE)
setCombatParam(combat0_Brush, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR)
setCombatParam(combat0_Brush, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatArea(combat0_Brush,createCombatArea({{1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 3, 0, 0, 0, 0}}))
setCombatFormula(combat0_Brush, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat0_Brush = {CONST_ANI_ETHEREALSPEAR,0,1,1,2,0,2,-1,2,-1,3,-2,3,0,3,1,3,2,3,3,4,2,4,1,4,0,4,-1,4,-2,4,-3,4,-4,5,-3,5,-2,5,-1,5,0,5,1,5,2,5,3,5,4,5}

-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos,startDir) -- Part
    if (isCreature(cid)) then
        doCombat(cid, c, var)
        if (dirList ~= nil) then -- Emit distance effects
            local i = 2;
            while (i < #dirList) do
                if (startDir == 0) then -- N
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
                elseif (startDir == 2) then -- S
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x+dirList[i],y=dirEmitPos.y+dirList[i+1],z=dirEmitPos.z},dirList[1])
                elseif (startDir == 1) then -- E
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x+dirList[i+1],y=dirEmitPos.y+dirList[i],z=dirEmitPos.z},dirList[1])
                else -- W / Something weird happened
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i+1],y=dirEmitPos.y-dirList[i],z=dirEmitPos.z},dirList[1])
                end
                i = i + 2
            end      
        end
    end
end

function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)
    local startDir = getCreatureLookDirection(cid)
    RunPart(combat0_Brush,cid,var,dfcombat0_Brush,startPos,startDir)
    return true
end
Lua:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_BLUE)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR)
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
combat:setArea(createCombatArea({
    {1, 1, 1, 1, 1, 1, 1, 1, 1},
    {0, 1, 1, 1, 1, 1, 1, 1, 0},
    {0, 0, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 0, 1, 1, 1, 0, 0, 0},
    {0, 0, 0, 0, 3, 0, 0, 0, 0}
}))
combat:setFormula(COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat = {
    CONST_ANI_ETHEREALSPEAR, 
    0,1,1,2,0,2,-1,2,-1,3,-2,3,0,3,1,3,
    2,3,3,4,2,4,1,4,0,4,-1,4,-2,4,-3,4,
    -4,5,-3,5,-2,5,-1,5,0,5,1,5,2,5,3,5,
    4,5
}

-- =============== CORE FUNCTIONS ===============
local function RunPart(cid, var, dirList, dirEmitPos, startDir) -- Part
    local creature = Creature(cid)
    if creature then
        combat:execute(cid, var)
        if next(dirList) then -- Emit distance effects
            for i = 2, #dirList, 2 do
                if (startDir == 0) then -- N
                    Position(dirEmitPos):sendDistanceEffect({x=dirEmitPos.x-dirList[i], y=dirEmitPos.y-dirList[i+1], z=dirEmitPos.z}, dirList[1])
                elseif (startDir == 2) then -- S
                    Position(dirEmitPos):sendDistanceEffect({x=dirEmitPos.x+dirList[i], y=dirEmitPos.y+dirList[i+1], z=dirEmitPos.z}, dirList[1])
                elseif (startDir == 1) then -- E
                    Position(dirEmitPos):sendDistanceEffect({x=dirEmitPos.x+dirList[i+1], y=dirEmitPos.y+dirList[i], z=dirEmitPos.z}, dirList[1])
                else -- W / Something weird happened
                    Position(dirEmitPos):sendDistanceEffect({x=dirEmitPos.x-dirList[i+1], y=dirEmitPos.y-dirList[i], z=dirEmitPos.z}, dirList[1])
                end
            end     
        end
    end
end

function onCastSpell(creature, variant)
    RunPart(creature:getId(), variant, dfcombat, creature:getPosition(), creature:getDirection())
    return true
end

If it doesn't execute then change combat:execute(cid, var) to combat:execute(creature, var)
 
Last edited by a moderator:
Direction="1" in your spells.xml?
yes

this is the script of the spell
Lua:
-- SpellCreator generated.

-- =============== COMBAT VARS ===============
-- Areas/Combat for 0ms
local combat0_Brush = createCombatObject()
setCombatParam(combat0_Brush, COMBAT_PARAM_EFFECT, 81)
setCombatParam(combat0_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatArea(combat0_Brush,createCombatArea({{1, 3, 1}}))
function getDmg_Brush(cid, level, maglevel)
    return (10)*-1,(20)*-1
end
setCombatCallback(combat0_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush")local combat0_Brush_2 = createCombatObject()
setCombatParam(combat0_Brush_2, COMBAT_PARAM_EFFECT, 82)
setCombatParam(combat0_Brush_2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatArea(combat0_Brush_2,createCombatArea({{1, 1, 1},
{1, 1, 1},
{0, 2, 0}}))
function getDmg_Brush_2(cid, level, maglevel)
    return (10)*-1,(20)*-1
end
setCombatCallback(combat0_Brush_2, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush_2")local combat0_Brush_3 = createCombatObject()
setCombatParam(combat0_Brush_3, COMBAT_PARAM_EFFECT, 83)
setCombatParam(combat0_Brush_3, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatArea(combat0_Brush_3,createCombatArea({{1, 1, 1},
{0, 0, 0},
{0, 0, 0},
{0, 2, 0}}))
function getDmg_Brush_3(cid, level, maglevel)
    return (10)*-1,(20)*-1
end
setCombatCallback(combat0_Brush_3, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush_3")

-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos,startDir) -- Part
    if (isCreature(cid)) then
        doCombat(cid, c, var)
        if (dirList ~= nil) then -- Emit distance effects
            local i = 2;
            while (i < #dirList) do
                if (startDir == 0) then -- N
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
                elseif (startDir == 2) then -- S
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x+dirList[i],y=dirEmitPos.y+dirList[i+1],z=dirEmitPos.z},dirList[1])
                elseif (startDir == 1) then -- E
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x+dirList[i+1],y=dirEmitPos.y+dirList[i],z=dirEmitPos.z},dirList[1])
                else -- W / Something weird happened
                    doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i+1],y=dirEmitPos.y-dirList[i],z=dirEmitPos.z},dirList[1])
                end
                i = i + 2
            end       
        end
    end
end

function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)
    local startDir = getCreatureLookDirection(cid)
    RunPart(combat0_Brush,cid,var)
    RunPart(combat0_Brush_2,cid,var)
    RunPart(combat0_Brush_3,cid,var)
    return true
end
 
99eGy1n.png


Is there a reason for this? x)
 
Every one who have problem "Unable to read data from outside of stream" or in polish: "nie mozna odczytac danych spoza konca strumienia", must download other version of tibia, in my own tibia 10.99 and tibia 10.97 not working, but when download 8.5 and in file of spell creator "settings" change stream from tibia 10.99 to 8.5 every will repair and working now. Application probably not compatible with highest versions of tibia.
 
if someone can copy sprites from highest versions of tibia and paste to lower which working with this spell creator, please did it and public there :) then more brushes ;)
 
How to add your own graphics as a brush ? I can already, add other outfit and ground, but idk how paint my own spell with new graphic :/ Please ask, or update Spell Creator <3 i tried add graphic in .spr but not working :()
 
Back
Top