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

Can someone help me with my fail spell scripting?

Cornwallis

Member
Joined
Jan 3, 2010
Messages
480
Reaction score
16
I need someone to make each hit min 1.0 per level/ skill min 4 max level 1.3 / max skill 5
Code:
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, 11)
setCombatParam(combat1, COMBAT_PARAM_BLOCKARMOR, TRUE)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, 32)
setCombatParam(combat1, COMBAT_PARAM_USECHARGES, TRUE)
setCombatFormula(combat1, COMBAT_FORMULA_SKILL, 0, -20, 0.5, 0)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, 15)
setCombatParam(combat2, COMBAT_PARAM_BLOCKARMOR, TRUE)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, 33)
setCombatParam(combat2, COMBAT_PARAM_USECHARGES, TRUE)
setCombatFormula(combat2, COMBAT_FORMULA_SKILL, 0, -20, 0.5, 0)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, 43)
setCombatParam(combat3, COMBAT_PARAM_BLOCKARMOR, TRUE)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, 34)
setCombatParam(combat3, COMBAT_PARAM_USECHARGES, TRUE)
setCombatFormula(combat3, COMBAT_FORMULA_SKILL, 0, -20, 0.5, 0)

local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, 9)
setCombatParam(combat4, COMBAT_PARAM_BLOCKARMOR, TRUE)
setCombatParam(combat4, COMBAT_PARAM_DISTANCEEFFECT, 17)
setCombatParam(combat4, COMBAT_PARAM_USECHARGES, TRUE)
setCombatFormula(combat4, COMBAT_FORMULA_SKILL, 0, -20, 0.5, 0)

local function castSpell(cid, var, combat)
    doCombat(cid, combat, var)
end

function onCastSpell(cid, var)
	castSpell(cid, var, combat1)
	addEvent(castSpell, 250, cid, var, combat2)
	addEvent(castSpell, 500, cid, var, combat3)
	addEvent(castSpell, 750, cid, var, combat4)
	return true
end
 
Last edited:
Code:
local combat = {}
local effect =
{[1] = 11, [2] = 15, [3] = 43, [4] = 9}
local distEffect =
{[1] = 32, [2] = 33, [3] = 34, [4] = 17}
local cType =
{[1] = COMBAT_ENERGYDAMAGE, [2] = COMBAT_FIREDAMAGE,
 [3] = COMBAT_ICEDAMAGE, [4] = COMBAT_PHYSICALDAMAGE}

for i = 1, #effect do
	combat[i] = createCombatObject()
	setCombatParam(combat[i], COMBAT_PARAM_TYPE, cType[i])
	setCombatParam(combat[i], COMBAT_PARAM_EFFECT, effect[i])
	setCombatParam(combat[i], COMBAT_PARAM_BLOCKARMOR, true)
	setCombatParam(combat[i], COMBAT_PARAM_DISTANCEEFFECT, distEffect[i])
	setCombatParam(combat[i], COMBAT_PARAM_USECHARGES, true)
	function onGetFormulaValues(cid, level, maglevel)
		local t, min, max = getItemInfo(math.max(100, getPlayerWeapon(cid).itemid)).weaponType, 0, 0
		local wType = t == 1 and 2 or t == 2 and 1 [B][COLOR="Red"]or t == 5 and 4[/COLOR][/B] or t
		if isInArray({SKILL_CLUB, SKILL_SWORD, SKILL_AXE[B][COLOR="Red"], SKILL_DISTANCE[/COLOR][/B]}, wType) then
			min = level * 1.0 + getPlayerSkillLevel(cid, wType) * 4
			max = level * 1.3 + getPlayerSkillLevel(cid, wType) * 5
		end
		return -min, -max
	end
	setCombatCallback(combat[i], CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
end

local function castSpell(cid, var, combat)
	return isPlayer(cid) and doCombat(cid, combat, var)
end

function onCastSpell(cid, var)
	castSpell(cid, var, combat[1])
	for i = 2, #combat do
		addEvent(castSpell, i * 250 - 250, cid, var, combat[i])
	end
	return true
end
 
Last edited:
it doesn't work, wait a few mins for me to fix it :p (I used weapontypes wrong)

okay, I think i got it

You can also put needweapon="1" in spells.xml if you don't want it to miss if player doesn't have a weapon.
 
Last edited:
here is the error:
Code:
[14/06/2010 16:36:43] Lua Script Error: [Spell Interface] 
[14/06/2010 16:36:43] in callback: data/spells/scripts/custom/arrow.lua:onGetFormulaValues
[14/06/2010 16:36:43] (Unknown scriptfile)

[14/06/2010 16:36:43] data/spells/scripts/custom/arrow.lua:18: attempt to call global 'getItemInfo' (a nil value)

Sorry I waited so long to post, I didn't see your post on the second page
 
Last edited:
Code:
local combat = {}
local effect =
{[1] = 11, [2] = 15, [3] = 43, [4] = 9}
local distEffect =
{[1] = 32, [2] = 33, [3] = 34, [4] = 17}
local cType =
{[1] = COMBAT_ENERGYDAMAGE, [2] = COMBAT_FIREDAMAGE,
 [3] = COMBAT_ICEDAMAGE, [4] = COMBAT_PHYSICALDAMAGE}

for i = 1, #effect do
	combat[i] = createCombatObject()
	setCombatParam(combat[i], COMBAT_PARAM_TYPE, cType[i])
	setCombatParam(combat[i], COMBAT_PARAM_EFFECT, effect[i])
	setCombatParam(combat[i], COMBAT_PARAM_BLOCKARMOR, TRUE)
	setCombatParam(combat[i], COMBAT_PARAM_DISTANCEEFFECT, distEffect[i])
	setCombatParam(combat[i], COMBAT_PARAM_USECHARGES, TRUE)
	function onGetFormulaValues(cid, level, maglevel)
		local t, min, max = getItemWeaponType(math.max(100, getPlayerWeapon(cid).uid)), 0, 0
		local wType = t == 1 and 2 or t == 2 and 1 or t == 5 and 4 or t
		if isInArray({SKILL_CLUB, SKILL_SWORD, SKILL_AXE, SKILL_DISTANCE}, wType) then
			min = level * 1.0 + getPlayerSkillLevel(cid, wType) * 4
			max = level * 1.3 + getPlayerSkillLevel(cid, wType) * 5
		end
		return -min, -max
	end
	setCombatCallback(combat[i], CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
end

local function castSpell(cid, var, combat)
	return isPlayer(cid) and doCombat(cid, combat, var)
end

function onCastSpell(cid, var)
	castSpell(cid, var, combat[1])
	for i = 2, #combat do
		addEvent(castSpell, i * 250 - 250, cid, var, combat[i])
	end
	return true
end
 
[15/06/2010 00:29:35] Warning: [Event::loadScript] Can not load script. data/spells/scripts/custom/arrow.lua
[15/06/2010 00:29:35] data/spells/scripts/custom/arrow.lua:1: '=' expected near 'combat'


I feel stupid not being able to script.
 
Back
Top