• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Lua Learning spells

Maxilos1221

New Member
Joined
Sep 3, 2017
Messages
3
Reaction score
0
Hi. I have trouble with npc learning spells.

My lua script responsible for learning:
LUA:
    if player:getLevel() >= spells[npcHandler.topic[cid]].level then
            if player:hasLearnedInstantSpell(spells[npcHandler.topic[cid]].spell_name) == false then
                if player:getMoney() >= spells[npcHandler.topic[cid]].price then
                    player:removeMoney(spells[npcHandler.topic[cid]].price)
                    npcHandler:say("Here you are. Look in your spellbook for the pronunciation of this spell.", cid)
                    player:learnInstantSpell(spells[npcHandler.topic[cid]].spell_name)
                    player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
                    npcHandler.topic[cid] = 0
                else
                    npcHandler:say("Oh. You do not have enough money.", cid)
                    npcHandler.topic[cid] = 0
                end   
            else
                npcHandler:say("You already know how to cast this spell.", cid)
                npcHandler.topic[cid] = 0
            end
        else
            npcHandler:say("You must be level " .. spells[npcHandler.topic[cid]].level .. " to learn this spell.", cid);
            npcHandler.topic[cid] = 0
        end

Here is array of spells:
LUA:
local spells = {
        [1] = {spell_name = "Destroy Field Rune", price = 700, level = 17, number = 1},
        [2] = {spell_name = "Holy Missile Rune", pice = 1600, level = 27, number = 2},
        [3] = {spell_name = "Disintegrate Rune", price = 900, level = 21, number = 3},
        [4] = {spell_name = "Light Healing", price = 0, level = 8, number = 4},
        [5] = {spell_name = "Intense Healing", price = 350, level = 20, number = 5},
        [6] = {spell_name = "Divine Healing", price = 3000, level = 35, number = 6},
        [7] = {spell_name = "Cure Poison", price = 150, level = 10, number = 7},
        [8] = {spell_name = "Cure Curse", price = 6000, level = 80, number = 8},
        [9] = {spell_name = "Recovery", price = 4000, level = 50, number = 9},
        [10] = {spell_name = "Salvation", price = 8000, level = 60, number = 10},
        [11] = {spell_name = "Intense Recovery", price = 10000, level = 100, number = 11},
        [12] = {spell_name = "Conjure Arrow", price = 450, level = 13, number = 12},
        [13] = {spell_name = "Enchant Spear", price = 2000, level = 45, number = 13},
        [14] = {spell_name = "Conjure Explosive Arrow", price = 1000, level = 25, number = 14},
        [15] = {spell_name = "Ethereal Spear", price = 1100, level = 23, number = 15},
        [16] = {spell_name = "Divine Missile", price = 1800, level = 40, number = 16},
        [17] = {spell_name = "Divine Caldera", price = 3000, level = 50, number = 17},
        [18] = {spell_name = "Holy Flash", price = 7500, level = 70, number = 18},
        [19] = {spell_name = "Strong Ethereal Spear", price = 10000, level = 90, price = 19},
        [20] = {spell_name = "Magic Rope", price = 200, level = 9, number = 20},
        [21] = {spell_name = "Levitate", price = 500, level = 12, number = 21},
        [22] = {spell_name = "Haste", price = 600, level = 14, number = 22},
        [23] = {spell_name = "Find Person", price = 80, level = 8, number = 23},
        [24] = {spell_name = "Light", price = 100, level = 8, number = 24},
        [25] = {spell_name = "Cancel Invisibility", price = 1600, level = 26, number = 25},
        [26] = {spell_name = "Great Light", price = 500, level = 13, number = 26}
    }

When I try learn any spell i've got this error in console:
C++:
Lua Script Error: [Npc interface]
data/npc/scripts/Helor.lua:onCreatureSay
data/npc/scripts/Helor.lua:84: attempt to call method 'hasLearnedInstantSpell' (a nil value)
stack traceback:
        [C]: in function 'hasLearnedInstantSpell'
        data/npc/scripts/Helor.lua:84: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:430: in function 'onCreatureSay'
        data/npc/scripts/Helor.lua:7: in function <data/npc/scripts/Helor.lua:7>

Line 84 in Helor.lua is:
LUA:
if player:hasLearnedInstantSpell(spells[npcHandler.topic[cid]].spell_name) == false then

Someone know why i got this error? I'm using TFS 1.1 on linux
 
Solution
Change
LUA:
player:hasLearnedInstantSpell(spells[npcHandler.topic[cid]].spell_name)
to
LUA:
player:hasLearnedSpell(spells[npcHandler.topic[cid]].spell_name)
Change
LUA:
player:hasLearnedInstantSpell(spells[npcHandler.topic[cid]].spell_name)
to
LUA:
player:hasLearnedSpell(spells[npcHandler.topic[cid]].spell_name)
 
Solution
Thanks bro. Its works, but it strange because I don't have that function in player.cpp...
But it does not matter. So it works so I will not tread subject.
 
Thanks bro. Its works, but it strange because I don't have that function in player.cpp...
But it does not matter. So it works so I will not tread subject.
Oh, it matters. If you ever run into similar error, you can look for a function in a luascript.cpp. (instead of player.cpp as you mentioned)
Or look for a list on a forum, like this one:
LUA Functions List [TFS 1.1] Updated: 09/08/2015
 
Back
Top