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

Solved 1 spell with a different effect for each vocation

mijnoma

Learning to build ot
Joined
Feb 7, 2009
Messages
19
Reaction score
0
Okay,
Since I'm getting more familiar with the scripts I was trying to get more advanced and create 1 spell but with a different effect for each vocation.
So I tried this:
Lua:
local	combat = createCombatObject()
local	playerVoc = getPlayerVocation(cid)
	if		playerVoc == 1 then
		setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
		setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
		setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
	elseif	playerVoc == 2 then
		setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
		setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK)
		setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
	elseif	playerVoc == 3 then

		setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
		setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
		setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
	elseif	playerVoc == 4 then
		setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
		setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER)
		setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
	end



arr = {
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 3, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end

Now this error -.-
[17/05/2013 00:44:40] [Error - Spell Interface]
[17/05/2013 00:44:40] data/spells/scripts/attack/multi twirl.lua
[17/05/2013 00:44:40] Description:
[17/05/2013 00:44:40] (internalGetPlayerInfo) Player not found when requesting player info #6
 
Last edited:
Check for the vocations under function onCastSpell because it uses cid, so you need the parameter cid from the function.
You can make different combats, then use 1 for each vocation.
 
Define 4 combat objects like "combatSorc", "combatDruid", "combatPala" and "combatKnight" then under function onCastSpell(cid, var)
Check for the vocation:
Lua:
local voc = getPlayerVocation(cid)
if voc == 1 then
    return doCombat(cid, combatSorc, var)
elseif voc == 2 then
    return doCombat(cid, combatDruid, var)
-- etc.
end
 
hmmzzz i thought i understanded it now but still error

Lua:
local	combat = createCombatObject()

combatSorc =
		setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
		setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
		setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)

combatDruid =
		setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
		setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK)
		setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
combatPally =
		setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
		setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
		setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
CombatKnight =
		setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
		setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER)
		setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
		
arr = {
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 3, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
}

local area = createCombatArea(arr)
setCombatArea(combat, area)local voc = getPlayerVocation(cid)
if voc == 1 then
    return doCombat(cid, combatSorc, var)
elseif voc == 2 then
    return doCombat(cid, combatDruid, var)
elseif voc == 3 then
    return doCombat(cid, combatPally, var)
elseif voc == 4 then
    return doCombat(cid, combatKnight, var)
end
function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
 
end

[17/05/2013 13:20:33] [Error - Spell Interface]
[17/05/2013 13:20:33] data/spells/scripts/attack/test.lua
[17/05/2013 13:20:33] Description:
[17/05/2013 13:20:33] (internalGetPlayerInfo) Player not found when requesting player info #6

I can cast the spell in the game now but all vocations get the groundshaker effect
 
Try this one mate

Code:
local combat = createCombatObject()
local combatSorc = createCombatObject()
		setCombatParam(combatSorc, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
		setCombatParam(combatSorc, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
		setAttackFormula(combatSorc, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
local combatDruid = createCombatObject()
		setCombatParam(combatDruid, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
		setCombatParam(combatDruid, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK)
		setAttackFormula(combatDruid, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
local combatPally = createCombatObject()
		setCombatParam(combatPally, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
		setCombatParam(combatPally, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
		setAttackFormula(combatPally, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
local combatKnight = createCombatObject()
		setCombatParam(combatKnight, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
		setCombatParam(combatKnight, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER)
		setAttackFormula(combatKnight, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
 
arr = {
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 3, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
}
 
local area = createCombatArea(arr)
setCombatArea(combat, area)

local voc = getPlayerVocation(cid)

if voc == 1 then
    return doCombat(cid, combatSorc, var)
elseif voc == 2 then
    return doCombat(cid, combatDruid, var)
elseif voc == 3 then
    return doCombat(cid, combatPally, var)
elseif voc == 4 then
    return doCombat(cid, combatKnight, var)
end
function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
 
end
 
still this error
[22/05/2013 14:12:32] [Error - Spell Interface]
[22/05/2013 14:12:32] data/spells/scripts/attack/test.lua
[22/05/2013 14:12:32] Description:
[22/05/2013 14:12:32] (internalGetPlayerInfo) Player not found when requesting player info #6
 
Lua:
local combatSorc = createCombatObject()
setCombatParam(combatSorc, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combatSorc, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setAttackFormula(combatSorc, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
 
local combatDruid = createCombatObject()
setCombatParam(combatDruid, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combatDruid, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK)
setAttackFormula(combatDruid, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
 
local combatPally = createCombatObject()
setCombatParam(combatPally, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combatPally, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
setAttackFormula(combatPally, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
 
local combatKnight = createCombatObject()
setCombatParam(combatKnight, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combatKnight, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER)
setAttackFormula(combatKnight, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 7, 14)
 
arr = {
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 3, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
{0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
}
 
local area = createCombatArea(arr)
setCombatArea(combatSorc, area)
setCombatArea(combatDruid, area)
setCombatArea(combatPally, area)
setCombatArea(combatKnight, area)
 
function onCastSpell(cid, var)
	local voc = getPlayerVocation(cid)
	if voc == 1 or voc == 5 then
		doCombat(cid, combatSorc, var)
	elseif voc == 2 or voc == 6 then
		doCombat(cid, combatDruid, var)
	elseif voc == 3 or voc == 7 then
		doCombat(cid, combatPally, var)
	elseif voc == 4 or voc == 8 then
		doCombat(cid, combatKnight, var)
	end
	return true
end
 
Back
Top