• 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 Trying to make a "fancy" summoning spell - nil value error

Lizard Helper

New Member
Joined
Apr 24, 2010
Messages
10
Reaction score
2
So I got this idea for a little spell that summons a creature in the midst of flames and bolts of lightning. I haven't gotten to the lightning yet, and the flames are there, but the creature won't show up.

This is what I have so far:
Code:
--				Combat Objects
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat1, COMBAT_PARAM_CREATEITEM, 1492)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat2, COMBAT_PARAM_CREATEITEM, 1492)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat3, COMBAT_PARAM_CREATEITEM, 1492)

local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat4, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat4, COMBAT_PARAM_CREATEITEM, 1492)

--				Combat Areas
area1 = {
{1,0,0},
{0,0,0},
{0,0,0},
{0,2,0}
}
area2 = {
{0,0,1},
{0,0,0},
{0,0,0},
{0,2,0}
}
area3 = {
{0,0,0},
{0,0,0},
{1,0,0},
{0,2,0}
}
area4 = {
{0,0,0},
{0,0,0},
{0,0,1},
{0,2,0}
}
local area1 = createCombatArea(area1)
local area2 = createCombatArea(area2)
local area3 = createCombatArea(area3)
local area4 = createCombatArea(area4)
setCombatArea(combat1, area1)
setCombatArea(combat2, area2)
setCombatArea(combat3, area3)
setCombatArea(combat4, area4)


--				OnCastSpell
local function onCastSpell1(parameters)
    return doCombat(parameters.cid, combat1, parameters.var)
end
local function onCastSpell2(parameters)
    return doCombat(parameters.cid, combat2, parameters.var)
end
local function onCastSpell3(parameters)
	
    return doCombat(parameters.cid, combat3, parameters.var)
end
local function onCastSpell4(parameters)
    return doCombat(parameters.cid, combat4, parameters.var)
end
local function onCastSpell5(parameters)
local summon = doCreateMonster("Dragon", pos)
doConvinceCreature(cid, summon)
end

--				Pull It All Together
function onCastSpell(cid, var)
local parameters = { cid = cid, var = var}
addEvent(onCastSpell1, 100, parameters)
addEvent(onCastSpell2, 200, parameters)
addEvent(onCastSpell3, 300, parameters)
addEvent(onCastSpell4, 400, parameters)
addEvent(onCastSpell5, 500, parameters)
end
onCast 1 through 4 work fine. I get the firefields to appear; but once I add the actual summoning part, I get this error:
Code:
[Error - Spell Interface] 
In a timer event called from: 
data/spells/scripts/custom/fireSummon.lua:onCastSpell
Description: 
attempt to index a nil value
stack traceback:
[C]: in function 'doCreateMonster'
data/spells/scripts/custom/fireSummon.lua:76: in function <data/spells/scripts/custom/fireSummon.lua:75>
Which I'm guessing would be the "pos" part of the spell.

So I'm kind of stuck here. I've tried several things; I tried editing the Undead Legion rune, which works until I add the firefields. I tries using "summon" instead of "create", using a couple different snippets of code I've seen around the forum, but they either give me the same error, a slightly different nil value error, or just say they can't find the monster.

Any tips? =/

EDIT: Also, my idea is to summon the creature on one specific SQM:
Code:
area = {
{0,0,0},
{0,1,0},
{0,0,0},
{0,2,0}
}
Right there. But I can't get it to appear whether I use that area or not.
 
Try this:
Code:
--				Combat Objects
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat1, COMBAT_PARAM_CREATEITEM, 1492)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat2, COMBAT_PARAM_CREATEITEM, 1492)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat3, COMBAT_PARAM_CREATEITEM, 1492)

local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat4, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat4, COMBAT_PARAM_CREATEITEM, 1492)

--				Combat Areas
area1 = {
{1,0,0},
{0,0,0},
{0,0,0},
{0,2,0}
}
area2 = {
{0,0,1},
{0,0,0},
{0,0,0},
{0,2,0}
}
area3 = {
{0,0,0},
{0,0,0},
{1,0,0},
{0,2,0}
}
area4 = {
{0,0,0},
{0,0,0},
{0,0,1},
{0,2,0}
}
local area1 = createCombatArea(area1)
local area2 = createCombatArea(area2)
local area3 = createCombatArea(area3)
local area4 = createCombatArea(area4)
setCombatArea(combat1, area1)
setCombatArea(combat2, area2)
setCombatArea(combat3, area3)
setCombatArea(combat4, area4)


--				OnCastSpell
local function onCastSpell1(parameters)
    return doCombat(parameters.cid, combat1, parameters.var)
end
local function onCastSpell2(parameters)
    return doCombat(parameters.cid, combat2, parameters.var)
end
local function onCastSpell3(parameters)
	
    return doCombat(parameters.cid, combat3, parameters.var)
end
local function onCastSpell4(parameters)
    return doCombat(parameters.cid, combat4, parameters.var)
end
local function onCastSpell5(parameters)
[COLOR="red"]doSummonMonster(cid, "Dragon")[/COLOR]
end

--				Pull It All Together
function onCastSpell(cid, var)
local parameters = { cid = cid, var = var}
addEvent(onCastSpell1, 100, parameters)
addEvent(onCastSpell2, 200, parameters)
addEvent(onCastSpell3, 300, parameters)
addEvent(onCastSpell4, 400, parameters)
addEvent(onCastSpell5, 500, parameters)
end
 
Thanks, but it didn't work. Like I said, when I try using "summon" instead of "create", instead of nil value I get
Code:
[31/08/2010 03:22:00] [Error - Spell Interface] 
[31/08/2010 03:22:00] In a timer event called from: 
[31/08/2010 03:22:00] data/spells/scripts/custom/fireSummon.lua:onCastSpell
[31/08/2010 03:22:00] Description: 
[31/08/2010 03:22:00] (luaDoSummonMonster) Creature not found
 
Try now:
Code:
--				Combat Objects
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat1, COMBAT_PARAM_CREATEITEM, 1492)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat2, COMBAT_PARAM_CREATEITEM, 1492)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat3, COMBAT_PARAM_CREATEITEM, 1492)

local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat4, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat4, COMBAT_PARAM_CREATEITEM, 1492)

--				Combat Areas
area1 = {
{1,0,0},
{0,0,0},
{0,0,0},
{0,2,0}
}
area2 = {
{0,0,1},
{0,0,0},
{0,0,0},
{0,2,0}
}
area3 = {
{0,0,0},
{0,0,0},
{1,0,0},
{0,2,0}
}
area4 = {
{0,0,0},
{0,0,0},
{0,0,1},
{0,2,0}
}
local area1 = createCombatArea(area1)
local area2 = createCombatArea(area2)
local area3 = createCombatArea(area3)
local area4 = createCombatArea(area4)
setCombatArea(combat1, area1)
setCombatArea(combat2, area2)
setCombatArea(combat3, area3)
setCombatArea(combat4, area4)


--				OnCastSpell
local function onCastSpell1(parameters)
    return doCombat(parameters.cid, combat1, parameters.var)
end
local function onCastSpell2(parameters)
    return doCombat(parameters.cid, combat2, parameters.var)
end
local function onCastSpell3(parameters)
	
    return doCombat(parameters.cid, combat3, parameters.var)
end
local function onCastSpell4(parameters)
    return doCombat(parameters.cid, combat4, parameters.var)
end

--				Pull It All Together
function onCastSpell(cid, var)
local parameters = { cid = cid, var = var}
addEvent(onCastSpell1, 100, parameters)
addEvent(onCastSpell2, 200, parameters)
addEvent(onCastSpell3, 300, parameters)
addEvent(onCastSpell4, 400, parameters)
[COLOR="red"]doSummonMonster(cid, "Dragon")[/COLOR]
end
 
Code:
local function onCastSpell5(parameters)
	local mob = doCreateMonster(name, variantToPosition(parameters.var))
	doConvinceCreature(parameters.cid, mob)
	return true
end

:)
 
Code:
local function onCastSpell5(parameters)
	local mob = doCreateMonster(name, variantToPosition(parameters.var))
	doConvinceCreature(parameters.cid, mob)
	return true
end
:)

w00t

Thanks a lot! Now, I just have to find out how to summon any monster I want. That can wait, though.
 
No, I mean saying spell "creature". It would probably be easier if that was the first thing to be done, I dunno. I did manage to make a spell that shoots a bolt of energy at someone and teleports them, a là Heal Friend, but it teleported you and not your "friend". I think I've figured out why, though. So I'll try to fix that later on.

In the meantime, I'll post my "finished" spell for all to see. I know this isn't a showroom, I just figure why make another thread. This way you can see what you helped me do. It's not all that impressive; you fire some fields, clouds shoot lightning from the sky and a Dragon Lord is summoned. Next, I'll make one with an earth theme =P
Code:
--				Combat Objects

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat1, COMBAT_PARAM_CREATEITEM, 1492)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat2, COMBAT_PARAM_CREATEITEM, 1492)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat3, COMBAT_PARAM_CREATEITEM, 1492)

local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat4, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatParam(combat4, COMBAT_PARAM_CREATEITEM, 1492)



local combat5 = createCombatObject()
setCombatParam(combat5, COMBAT_PARAM_EFFECT, 40)

local combat6 = createCombatObject()
setCombatParam(combat6, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat6, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
setCombatParam(combat6, COMBAT_PARAM_CREATEITEM, 1495)

local combat7 = createCombatObject()
setCombatParam(combat7, COMBAT_PARAM_EFFECT, 40)

local combat8 = createCombatObject()
setCombatParam(combat8, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat8, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
setCombatParam(combat8, COMBAT_PARAM_CREATEITEM, 1495)

local combat9 = createCombatObject()
setCombatParam(combat9, COMBAT_PARAM_EFFECT, 40)

local combat10 = createCombatObject()
setCombatParam(combat10, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat10, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
setCombatParam(combat10, COMBAT_PARAM_CREATEITEM, 1495)




--				Combat Areas
area1 = {
{1,0,0},
{0,0,0},
{0,2,0}
}
area2 = {
{0,0,1},
{0,0,0},
{0,2,0}
}
area3 = {
{0,0,0},
{0,0,0},
{1,2,0}
}
area4 = {
{0,0,0},
{0,0,0},
{0,2,1}
}
area5 = {
{0,1,1,1,0},
{1,1,1,1,1},
{1,1,1,1,1},
{1,1,1,1,1},
{0,1,3,1,0}
}
area6 = {
{0,1,0,0,0},
{0,0,0,0,1},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,2,0,0}
}
area7 = {
{0,0,0,1,0},
{0,0,0,0,0},
{0,0,0,0,0},
{1,0,0,0,0},
{0,0,2,0,1}
}
area8 = {
{0,0,0,1,0},
{0,0,0,0,0},
{0,0,0,0,0},
{1,0,0,0,0},
{0,0,2,0,1}
}
area9 = {
{0,0,0,0,0},
{1,0,0,1,0},
{0,0,0,0,0},
{0,0,0,1,0},
{0,0,2,0,0}
}
area10 = {
{0,0,0,0,0},
{1,0,0,0,0},
{0,0,0,0,0},
{0,0,0,1,0},
{0,0,2,0,0}
}
local area1 = createCombatArea(area1)
local area2 = createCombatArea(area2)
local area3 = createCombatArea(area3)
local area4 = createCombatArea(area4)
local area5 = createCombatArea(area5)
local area6 = createCombatArea(area6)
local area7 = createCombatArea(area7)
local area8 = createCombatArea(area8)
local area9 = createCombatArea(area9)
local area10 = createCombatArea(area10)
setCombatArea(combat1, area1)
setCombatArea(combat2, area2)
setCombatArea(combat3, area3)
setCombatArea(combat4, area4)
setCombatArea(combat5, area5)
setCombatArea(combat6, area6)
setCombatArea(combat7, area7)
setCombatArea(combat8, area8)
setCombatArea(combat9, area9)
setCombatArea(combat10, area10)

--				OnCastSpell

local function onCastSpell1(parameters)
    return doCombat(parameters.cid, combat1, parameters.var)
end
local function onCastSpell2(parameters)
    return doCombat(parameters.cid, combat2, parameters.var)
end
local function onCastSpell3(parameters)
	
    return doCombat(parameters.cid, combat3, parameters.var)
end
local function onCastSpell4(parameters)
    return doCombat(parameters.cid, combat4, parameters.var)
end
local function onCastSpell5(parameters)
	local mob = doCreateMonster("Dragon Lord", variantToPosition(parameters.var))
	doConvinceCreature(parameters.cid, mob)
	return true
end
local function onCastSpell6(parameters)
    return doCombat(parameters.cid, combat5, parameters.var)
end
local function onCastSpell7(parameters)
    return doCombat(parameters.cid, combat6, parameters.var)
end
local function onCastSpell8(parameters)
    return doCombat(parameters.cid, combat7, parameters.var)
end
local function onCastSpell9(parameters)
    return doCombat(parameters.cid, combat8, parameters.var)
end
local function onCastSpell10(parameters)
    return doCombat(parameters.cid, combat9, parameters.var)
end
local function onCastSpell11(parameters)
	return doCombat(parameters.cid, combat10, parameters.var)
end


--				Pull It All Together
function onCastSpell(cid, var)
local parameters = { cid = cid, var = var}
addEvent(onCastSpell1, 100, parameters)
addEvent(onCastSpell2, 200, parameters)
addEvent(onCastSpell3, 300, parameters)
addEvent(onCastSpell4, 400, parameters)
addEvent(onCastSpell5, 500, parameters)
addEvent(onCastSpell6, 550, parameters)
addEvent(onCastSpell7, 600, parameters)
addEvent(onCastSpell8, 650, parameters)
addEvent(onCastSpell9, 700, parameters)
addEvent(onCastSpell10, 750, parameters)
addEvent(onCastSpell11, 800, parameters)
end
Thanks again for your help, guys.
 
Back
Top