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

Lua Spell casting like in Ragnarok Online

Slime

Active Member
Joined
Jan 25, 2014
Messages
115
Reaction score
32
I'm posting this since it may be useful for someone and also it needs some improvement (which I can't really do, because I'm a beginner at scripting). The code itself is a bit chaotic:
Code:
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, 41)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -5, -5, -5, -12)
local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, 42)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -5, -5, -5, -12)
local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, 41)
setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -5, -5, -5, -12)


local area1 = createCombatArea(AREA_CROSS6X6)
local area2 = createCombatArea(AREA_CROSS6X6)
local area3 = createCombatArea(AREA_CROSS6X6)


setCombatArea(combat1, area1)
setCombatArea(combat2, area2)
setCombatArea(combat3, area3)

local function onCastSpell1(parameters)
doCombat(parameters.cid, parameters.combat1, parameters.var)

end
local function onCastSpell2(parameters)
doCombat(parameters.cid, parameters.combat2, parameters.var)
end
local function onCastSpell3(parameters)
doCombat(parameters.cid, parameters.combat3, parameters.var)
end

local function castingTime(cid)
    doCreatureSay(cid, "[CASTING]Storm Gust!", TALKTYPE_ORANGE_1)
    doPlayerSendCancel(cid, "You cannot move while casting a spell.")
    doCreatureSetNoMove(cid, 1)
end
local function castingStop(cid)
    doCreatureSay(cid, "Storm Gust!", TALKTYPE_ORANGE_1)
    doCreatureSetNoMove(cid, 0)
end

function onCastSpell(cid, var)
    local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2, combat3 = combat3, }
    local castreduction=(getPlayerSkillLevel(cid, SKILL_SWORD)*0.7 + getPlayerSkillLevel(cid, SKILL_AXE)*0.3)
    local casttime = 3000
    local globaltime=((casttime)-casttime*castreduction*0.01)

   
    if (globaltime <= 0) then
    addEvent(castingStop, (50), cid)
    addEvent(onCastSpell1, (51), parameters)
    addEvent(onCastSpell2, (500), parameters)
    addEvent(onCastSpell3, (1000), parameters)

    else
    addEvent(castingTime, 1, cid)
    addEvent(castingStop, (globaltime+50), cid)
    addEvent(onCastSpell1, (globaltime+51), parameters)
    addEvent(onCastSpell2, (globaltime+500), parameters)
    addEvent(onCastSpell3, (globaltime+1000), parameters)

    end
    return true
end
So basically casting time in this script is reduced by sword an axe fighting (they are replaced by intellect and luck on my server) but you can use whatever stat you want by changing the castreduction formula. The player can't move during the casting.
 
Last edited:
Back
Top