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

some errors in spells

wafuboe

Member
Joined
Dec 24, 2010
Messages
881
Solutions
2
Reaction score
22
Hi i edited this spells but i cant make them work
1. wanted to add this spell a bleeding but it doesnt work

Code:
local condition = Condition(CONDITION_BLEEDING)
condition:setParameter(CONDITION_PARAM_DELAYED, true)
condition:addDamage(25, 4000, -45)
combat:setCondition(condition)

-- the amount of spears we want to throw
local spears = 3
-- the time inbetween each action
local pause = .5
-- a table to hold all instances of the combat objects
local combat = {}
for i = 1, spears do
    combat[i] = Combat()
    combat[i]:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
    combat[i]:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
    combat[i]:setParameter(COMBAT_PARAM_DISTANCEEFFECT,  CONST_ANI_SPEAR)
    combat[i]:setParameter(COMBAT_PARAM_BLOCKARMOR, false)
    combat[i]:setParameter(COMBAT_PARAM_USECHARGES, false)
    _G['onGetFormulaValues'..i] = function(player, skill, attack, factor)
        local min = (player:getLevel() / 5) + (skill * attack * 0.02) + 4
        local max = (player:getLevel() / 5) + (skill * attack * 0.04) + 9
        return -min, -max
    end
    combat[i]:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues"..i)
end
function throwSpears(cid, var, n)
    local creature = Creature(cid)
    if creature then
        combat[n]:execute(creature, var)
    end
end
function onCastSpell(creature, variant)
    for x = 1, spears do
        addEvent(throwSpears, (pause * x) * 1000, creature:getId(), variant, x)
    end
    return true
end

2. i make this like a wave of spear but i just throws a spear the one square you are facing
Code:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SPEAR)
combat:setArea(createCombatArea(AREA_SQUAREWAVE5, AREADIAGONAL_SQUAREWAVE4))

function onGetFormulaValues(player, skill, attack, factor)
    local distSkill = player:getEffectiveSkillLevel(SKILL_DISTANCE)
    local min = (player:getLevel() / 5) + distSkill * 1.5
    local max = (player:getLevel() / 5) + distSkill + 8
    return -min, -max
end

combat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(creature, variant)
    return combat:execute(creature, variant)
end

This spell doesnt do any damage
Code:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_DRAWBLOOD)
combat:setParameter(COMBAT_PARAM_BLOCKARMOR, 0)
combat:setParameter(COMBAT_PARAM_BLOCKSHIELD, 0)
local Crossbows = {2455, 5803, 8849, 8850, 8851, 8852, 8853, 18453, 16111, 22419, 22420, 22421}
local Bows = {2456, 7438, 8854, 8855, 8856, 8857, 8858, 10295, 13873, 15643, 15644, 18454, 22416, 22417, 22418}
local Arrows = {2544, 2545, 2546, 7365, 7364, 7838, 7840, 7839, 7850, 15648, 18437, 18304}
local Bolts = {2543, 2547, 6529, 7363, 15649, 18435, 18436}
local Throwables = {2111, 2389, 3965, 7367, 7378, 2399, 7368, 7366, 2410}


local animation = {
[2543] = CONST_ANI_BOLT,
[2547] = CONST_ANI_POWERBOLT,
[6529] = CONST_ANI_INFERNALBOLT,
[7363] = CONST_ANI_PIERCINGBOLT,
[15649] = CONST_ANI_VORTEXBOLT,
[18435] = CONST_ANI_PRISMATICBOLT,
[18436] = CONST_ANI_DRILLBOLT,
[2544] = CONST_ANI_ARROW,
[2545] = CONST_ANI_POISONARROW,
[2546] = CONST_ANI_BURSTARROW,
[7365] = CONST_ANI_ONYXARROW,
[7364] = CONST_ANI_SNIPERARROW,
[7838] = CONST_ANI_FLASHARROW,
[7840] = CONST_ANI_FLAMMINGARROW,
[7839] = CONST_ANI_SHIVERARROW,
[7850] = CONST_ANI_EARTHARROW,
[15648] = CONST_ANI_TARSALARROW,
[18437] = CONST_ANI_ENVENOMEDARROW,
[18304] = CONST_ANI_CRYSTALLINEARROW,
[2111] = CONST_ANI_SNOWBALL,
[2389] = CONST_ANI_SPEAR,
[3965] = CONST_ANI_HUNTINGSPEAR,
[7367] = CONST_ANI_ENCHANTEDSPEAR,
[7378] = CONST_ANI_ROYALSPEAR,
[2399] = CONST_ANI_THROWINGSTAR,
[7368] = CONST_ANI_REDSTAR,
[7366] = CONST_ANI_GREENSTAR,
[2410] = CONST_ANI_THROWINGKNIFE
}
local damageType = {
[2544] = COMBAT_PHYSICALDAMAGE,
[2545] = COMBAT_PHYSICALDAMAGE,
[2546] = COMBAT_FIREDAMAGE,
[7365] = COMBAT_PHYSICALDAMAGE,
[7364] = COMBAT_PHYSICALDAMAGE,
[7838] = COMBAT_ENERGYDAMAGE,
[7840] = COMBAT_FIREDAMAGE,
[7839] = COMBAT_ICEDAMAGE,
[7850] = COMBAT_EARTHDAMAGE,
[15648] = COMBAT_EARTHDAMAGE,
[18437] = COMBAT_EARTHDAMAGE,
[18304] = COMBAT_EARTHDAMAGE,
[2111] = COMBAT_PHYSICALDAMAGE,
[2389] = COMBAT_PHYSICALDAMAGE,
[3965] = COMBAT_PHYSICALDAMAGE,
[7367] = COMBAT_PHYSICALDAMAGE,
[7378] = COMBAT_PHYSICALDAMAGE,
[2399] = COMBAT_PHYSICALDAMAGE,
[7368] = COMBAT_PHYSICALDAMAGE,
[7366] = COMBAT_PHYSICALDAMAGE,
[2410] = COMBAT_PHYSICALDAMAGE,
[2543] = COMBAT_PHYSICALDAMAGE,
[2547] = COMBAT_PHYSICALDAMAGE,
[6529] = COMBAT_PHYSICALDAMAGE,
[7363] = COMBAT_PHYSICALDAMAGE,
[15649] = COMBAT_PHYSICALDAMAGE,
[18435] = COMBAT_PHYSICALDAMAGE,
[18436] = COMBAT_PHYSICALDAMAGE,
[2111] = COMBAT_PHYSICALDAMAGE,
[2389] = COMBAT_PHYSICALDAMAGE,
[3965] = COMBAT_PHYSICALDAMAGE,
[7367] = COMBAT_PHYSICALDAMAGE,
[7378] = COMBAT_PHYSICALDAMAGE,
[2399] = COMBAT_PHYSICALDAMAGE,
[7368] = COMBAT_PHYSICALDAMAGE,
[7366] = COMBAT_PHYSICALDAMAGE,
[2410] = COMBAT_PHYSICALDAMAGE,
[1294] = COMBAT_PHYSICALDAMAGE
}
local magicEffect = 0
local dmgType = 0
local function doDoubleShotCombat(player, var)
    function getDistanceDamage(player, skill, attackValue, attackFactor)
        local level = player:getLevel()
            min = -(attackValue)
            max = -(attackValue + (level/5) + (skill/2) * 2.5)
        return min, max
    end
    return -min, -max
    local item = player:getSlotItem(CONST_SLOT_AMMO)
    combat:setCallback(CALLBACK_PARAM_SKILLVALUE, "getDistanceDamage")
    combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, magicEffect)
    combat:setParameter(COMBAT_PARAM_TYPE, dmgType)
    combat:execute(player, var)
    item:remove(1)
    return true
end
local function doDoubleShot(player, var)
local leftHand = pushThing(player:getSlotItem(CONST_SLOT_LEFT)).itemid
local rightHand = pushThing(player:getSlotItem(CONST_SLOT_RIGHT)).itemid
local ammoSlot = pushThing(player:getSlotItem(CONST_SLOT_AMMO)).itemid
    dmgType = damageType[ammoSlot]
    if(isInArray(Crossbows, leftHand) or isInArray(Crossbows, rightHand)) then
        if(isInArray(Bolts, ammoSlot)) then
            magicEffect = animation[ammoSlot]
            return doDoubleShotCombat(player, var)
        else
            return player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "You need bolts")
        end
    elseif(isInArray(Bows, leftHand) or isInArray(Bows, rightHand)) then
        if(isInArray(Arrows, ammoSlot)) then
            magicEffect = animation[ammoSlot]
            return doDoubleShotCombat(player, var)
        else
            return player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "You need arrows")
        end
    elseif(isInArray(Throwables, leftHand) or isInArray(Throwables, rightHand)) then
        if(isInArray(Throwables, leftHand)) then
            magicEffect = animation[leftHand]
        else
            magicEffect = animation[rightHand]
        end
        return doDoubleShotCombat(player, var)
    end
    return player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You need a distance weapon")
end
function onCastSpell(player, var)
    return doDoubleShot(player, var)
end
 
Last edited:
Idk what distro you're using but this works on TFS 1.1

For first one try something like this:
Code:
local combatbleed = createConditionObject(0+CONDITION_BLEEDING)
addDamageCondition(combatbleed, 3, 2000, -100)
setCombatCondition(combatbleed, combat)

For the second try:
Code:
local acombat, combat = createCombatObject(), createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_NONE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLAMMINGARROW)
local arr =
       {
    {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0}}
setCombatArea(acombat, createCombatArea(arr))
function onGetFormulaValues(cid, level, maglevel)
    min = -((level / 5) + (maglevel * 3.25) + 5)
    max = -((level / 5) + (maglevel * 6.75) + 30)
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onTargetTile(cid, pos) doCombat(cid, combat, positionToVariant(pos)) end
setCombatCallback(acombat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")
function onCastSpell(cid, var) return doCombat(cid, acombat, var) end

Third, idk.
 
Idk what distro you're using but this works on TFS 1.1

For first one try something like this:
Code:
local combatbleed = createConditionObject(0+CONDITION_BLEEDING)
addDamageCondition(combatbleed, 3, 2000, -100)
setCombatCondition(combatbleed, combat)

For the second try:
Code:
local acombat, combat = createCombatObject(), createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_NONE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLAMMINGARROW)
local arr =
       {
    {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0}}
setCombatArea(acombat, createCombatArea(arr))
function onGetFormulaValues(cid, level, maglevel)
    min = -((level / 5) + (maglevel * 3.25) + 5)
    max = -((level / 5) + (maglevel * 6.75) + 30)
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onTargetTile(cid, pos) doCombat(cid, combat, positionToVariant(pos)) end
setCombatCallback(acombat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")
function onCastSpell(cid, var) return doCombat(cid, acombat, var) end

Third, idk.

Where do i put this on the script?

Code:
local combatbleed = createConditionObject(0+CONDITION_BLEEDING)
addDamageCondition(combatbleed, 3, 2000, -100)
setCombatCondition(combatbleed, combat)
 
After the callback, if it works it'll probably bleed for every time the spear hits, you might have to rework it but just keep moving stuff around and trying stuff until you get it right.
 
all working just heartseeker strike doesnt do blled

thanks man,

You know how to make spear barrage like in 3 waves?
I mean cast the spell and shoot the wave 3 times in less than 2 seconds
 
Last edited:
I would try something like:
Code:
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

Then add events like:
Code:
function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)
    RunPart(combat1,cid,var)
    addEvent(RunPart,1,combat1,cid.uid,var)
    addEvent(RunPart,3000,combat2,cid.uid,var)
    addEvent(RunPart,6000,combat3,cid.uid,var)
    addEvent(RunPart,9000,combat4,cid.uid,var)
    return true
end
 
aw2c1x.png


got this error on new spear barrage

Code:
local acombat, combat = createCombatObject(), createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SPEAR)

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

local arr =
       {
    {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0}}
setCombatArea(acombat, createCombatArea(arr))
function onGetFormulaValues(cid, level, distskill)
    min = -((level / 5) + (distskill * 3.25) + 40)
    max = -((level / 5) + (distskill * 4.5) + 70)
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
function onTargetTile(cid, pos) doCombat(cid, combat, positionToVariant(pos)) end
setCombatCallback(acombat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")
function onCastSpell(cid, var) return doCombat(cid, acombat, var) end
function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)
    RunPart(combat1,cid,var)
    addEvent(RunPart,1,combat1,cid.uid,var)
    addEvent(RunPart,3000,combat2,cid.uid,var)
    addEvent(RunPart,6000,combat3,cid.uid,var)
    addEvent(RunPart,9000,combat4,cid.uid,var)
    return true
end
 
Back
Top