• 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!

How to make monsters use spells

DreadShi

Member
Joined
May 18, 2019
Messages
180
Reaction score
7
i just created this spell with spell creator software and wondering how can i add this script to a monster? to attack with it
tfs 1.3
Code:
-- SpellCreator generated.

-- =============== COMBAT VARS ===============
-- Areas/Combat for 0ms
local combat0_Brush = createCombatObject()
setCombatParam(combat0_Brush, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT)
setCombatParam(combat0_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatArea(combat0_Brush,createCombatArea({{0, 2, 0},
{0, 0, 0},
{0, 0, 0},
{1, 1, 1},
{1, 1, 1}}))
function getDmg_Brush(cid, level, maglevel)
    return (10)*-1,(20)*-1
end
setCombatCallback(combat0_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush")
local dfcombat0_Brush = {CONST_ANI_FIRE,0,4,1,4,1,3,0,3,-1,4,-1,3}

-- Areas/Combat for 200ms
local combat2_Brush_2 = createCombatObject()
setCombatParam(combat2_Brush_2, COMBAT_PARAM_EFFECT, CONST_ME_TELEPORT)
setCombatParam(combat2_Brush_2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatArea(combat2_Brush_2,createCombatArea({{0, 2, 0},
{0, 0, 0},
{0, 0, 0},
{1, 1, 1},
{1, 1, 1}}))
function getDmg_Brush_2(cid, level, maglevel)
    return (10)*-1,(20)*-1
end
setCombatCallback(combat2_Brush_2, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush_2")
local dfcombat2_Brush_2 = {CONST_ANI_ENERGYBALL,1,4,0,4,-1,4,-1,3,0,3,1,3}

-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos) -- Part
    if (isCreature(cid)) then
        doCombat(cid, c, var)
        if (dirList ~= nil) then -- Emit distance effects
            local i = 2;
            while (i < #dirList) do
                doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
                i = i + 2
            end       
        end
    end
end

function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)
    RunPart(combat0_Brush,cid,var,dfcombat0_Brush,startPos)
    addEvent(RunPart,200,combat2_Brush_2,cid,var,dfcombat2_Brush_2,startPos)
    return true
end
 
show me how you added it to your monster file
Code:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Thundergiant" nameDescription="a Thundergiant" race="undead" speed="500" manacost="3000">
    <health now="20000" max="20000" />
    <look type="994" corpse="0" />
    <targetchange interval="4000" chance="20" />
    <flags>
        <flag pet="1" />
        <flag summonable="0" />
        <flag attackable="1" />
        <flag hostile="0" />
        <flag illusionable="0" />
        <flag convinceable="1" />
        <flag pushable="1" />
        <flag canpushitems="0" />
        <flag canpushcreatures="1" />
        <flag staticattack="98" />
        <flag targetdistance="0" />
        <flag runonhealth="9000" />
    </flags>
    <attacks>
        <attack name="melee" interval="200" chance="25" min="-100" max="-310" />
        <attack name="thunderstorm" interval="200" chance="90" range="5" />
        <attack name="Front Sweep" interval="500" chance="23" length="3" spread="3" min="-100" max="-500">
            <attribute key="areaEffect" value="lifedrain" />
        </attack>
        <attack name="energy" interval="2000" chance="15" range="7" length="2" min="-75" max="-705">
            <attribute key="shootEffect" value="energyball" />
            <attribute key="areaEffect" value="energy" />
        </attack>
    </attacks>
    <defenses armor="55" defense="95">
        <defense name="healing" interval="3000" chance="25" min="80" max="600">
            <attribute key="areaEffect" value="blueshimmer" />
        </defense>
        <defense name="Challenge" interval="100" chance="15">
            <attribute key="areaEffect" value="exeta res" />
        </defense>
    </defenses>
    <elements>
        <element firePercent="0" />
        <element earthPercent="0" />
        <element energyPercent="0" />
        <element deathPercent="0" />
        <element physicalPercent="0" />
        <element holyPercent="0" />
        <element icePercent="0" />
    </elements>
    <immunities>
        <immunity paralyze="1" />
        <immunity invisible="1" />
    </immunities>
</monster>

<attack name="thunderstorm" interval="200" chance="90" range="5" />


spells.xml
<instant name="thunderstorm" words="###475" selftarget="1" exhaustion="2000" needlearn="0" script="monster/thundergiant.lua"/>

spells/monster/thundergiant
Code:
local combat0_Brush = createCombatObject()
setCombatParam(combat0_Brush, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT)
setCombatParam(combat0_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatArea(combat0_Brush,createCombatArea({{0, 2, 0},
{0, 0, 0},
{0, 0, 0},
{1, 1, 1},
{1, 1, 1}}))
function getDmg_Brush(cid, level, maglevel)
    return (10)*-1,(20)*-1
end
setCombatCallback(combat0_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush")
local dfcombat0_Brush = {CONST_ANI_FIRE,0,4,1,4,1,3,0,3,-1,4,-1,3}

-- Areas/Combat for 200ms
local combat2_Brush_2 = createCombatObject()
setCombatParam(combat2_Brush_2, COMBAT_PARAM_EFFECT, CONST_ME_TELEPORT)
setCombatParam(combat2_Brush_2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatArea(combat2_Brush_2,createCombatArea({{0, 2, 0},
{0, 0, 0},
{0, 0, 0},
{1, 1, 1},
{1, 1, 1}}))
function getDmg_Brush_2(cid, level, maglevel)
    return (10)*-1,(20)*-1
end
setCombatCallback(combat2_Brush_2, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush_2")
local dfcombat2_Brush_2 = {CONST_ANI_ENERGYBALL,1,4,0,4,-1,4,-1,3,0,3,1,3}

-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos) -- Part
    if (isCreature(cid)) then
        doCombat(cid, c, var)
        if (dirList ~= nil) then -- Emit distance effects
            local i = 2;
            while (i < #dirList) do
                doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
                i = i + 2
            end       
        end
    end
end

function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)
    RunPart(combat0_Brush,cid,var,dfcombat0_Brush,startPos)
    addEvent(RunPart,200,combat2_Brush_2,cid,var,dfcombat2_Brush_2,startPos)
    return true
end

 
Back
Top