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

NPC won't answer

AGS

DeathSouls Owner
Joined
Oct 29, 2007
Messages
400
Reaction score
10
Location
Mexico
When I updated to TFS 0.2.10, I replaced my npcsystem with the one from tfs.

Now, when I talk to an npc, it answers to hi, and, to keywords and to keywords in the creatureSayCallback function, but when I say a shop keywork, i get this error in console:
Code:
Lua Script Error: [Npc interface]
data/npc/scripts/seller.lua:onCreatureSay

data/npc/lib/npcsystem/modules.lua:669: attempt to index global 'npcHandler' (a
nil value)
This is one of my npc scripts:
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)			npcHandler:onCreatureAppear(cid)			end
function onCreatureDisappear(cid)		npcHandler:onCreatureDisappear(cid)			end
function onCreatureSay(cid, type, msg)	npcHandler:onCreatureSay(cid, type, msg)	end
function onThink()						npcHandler:onThink()						end

function creatureSayCallback(cid, type, msg)
    -- Place all your code in here. Remember that hi, bye and all that stuff is already handled by the npcsystem, so you do not have to take care of that yourself.
    if(npcHandler.focus ~= cid) then
        return false
    end

        player_gold = getPlayerItemCount(cid,2148)
        player_plat = getPlayerItemCount(cid,2152)*100
        player_crys = getPlayerItemCount(cid,2160)*10000
        player_money = player_gold + player_plat + player_crys
        repair_price = 10000

        if msgcontains(msg, 'soft boots') or msgcontains(msg, 'magic boots') then
            selfSay('Whoa! Those are really rare boots, Do you want me to repair them for '..repair_price..' gold?')
            talk_state = 1
		elseif msgcontains(msg, 'obsidian knife') or msgcontains(msg, 'obsidian') or msgcontains(msg, 'knife') then
             selfSay('Do you want to trade a piece of draconian steel and an obsidian lance for an obsidian knife?')
            talk_state = 2
        elseif msgcontains(msg, 'green') or msgcontains(msg, 'tunic') or msgcontains(msg, 'green tunic') or msgcontains(msg, 'green piece of cloth') then
            selfSay('Do you want trade 20 green tunics for a green piece of cloth?')
            talk_state = 3
        elseif msgcontains(msg, 'red') or msgcontains(msg, 'robe') or msgcontains(msg, 'red robe') or msgcontains(msg, 'red piece of cloth') then
            selfSay('Do you want trade a red robe for a red piece of cloth?')
            talk_state = 4
        elseif msgcontains(msg, 'blue') or msgcontains(msg, 'turban') or msgcontains(msg, 'mystic turban') or msgcontains(msg, 'blue piece of cloth') then
            selfSay('Do you want trade a mystic turban for a blue piece of cloth?')
            talk_state = 5
------------------------------------------------ confirm yes ------------------------------------------------
        elseif msgcontains(msg, 'yes') and talk_state == 1 then
            if getPlayerItemCount(cid,6530) >= 1 and player_money > repair_price then
                if doPlayerTakeItem(cid,6530,1) == 0 then
                    if pay(cid,repair_price) then
                        selfSay('Here you are.')
                        doPlayerAddItem(cid,6132,1)
                    else
                        selfSay('Sorry, you don\'t have enough money.')
                    end
                else
                    selfSay('Sorry, you don\'t have the worn soft boots.')
                end
            else
            end
            talk_state = 0
		elseif msgcontains(msg, 'yes') and talk_state == 2 then
            if getPlayerItemCount(cid,5889) >= 1 and getPlayerItemCount(cid,2425) >= 1 then
                if doPlayerTakeItem(cid,5889,1) == 0 and doPlayerTakeItem(cid,2425,1) == 0 then
                    selfSay('Here you are.')
                    doPlayerAddItem(cid,5908,1)
                end
            else
                selfSay('Sorry, you don\'t have the items.')
            end
            talk_state = 0 
			        elseif msgcontains(msg, 'yes') and talk_state == 3 then
            if getPlayerItemCount(cid,2652) >= 20 then
                if doPlayerTakeItem(cid,2652,20) == 0 then
                    selfSay('Here you are.')
                    doPlayerAddItem(cid,5910,1)
                end
            else
                selfSay('Sorry, you don\'t have the items.')
            end
            talk_state = 0
        elseif msgcontains(msg, 'yes') and talk_state == 4 then
            if getPlayerItemCount(cid,2655) >= 1 then
                if doPlayerTakeItem(cid,2655,1) == 0 then
                    selfSay('Here you are.')
                    doPlayerAddItem(cid,5911,1)
                end
            else
                selfSay('Sorry, you don\'t have the item.')
            end
            talk_state = 0
        elseif msgcontains(msg, 'yes') and talk_state == 5 then
            if getPlayerItemCount(cid,2663) >= 1 then
                if doPlayerTakeItem(cid,2663,1) == 0 then
                    selfSay('Here you are.')
                    doPlayerAddItem(cid,5912,1)
                end
            else
                selfSay('Sorry, you don\'t have the item.')
            end
            talk_state = 0 
------------------------------------------------ confirm no ------------------------------------------------
        elseif msgcontains(msg, 'no') and talk_state >= 1 and talk_state <= 5 then
            selfSay('Not good enough, is it?.')
            talk_state = 0
        end
    -- Place all your code in here. Remember that hi, bye and all that stuff is already handled by the npcsystem, so you do not have to take care of that yourself.
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new()) 

keywordHandler:addKeyword({'job'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I own this shop. I know how to repair boots too, and I exchange cloths. I also make obsidian knives from some items.'})
keywordHandler:addKeyword({'cloth'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I exchange mystic turbans for blue pieces of cloths, 20 green tunics for green pieces of cloth and red robes for red pieces of clothes.'})
keywordHandler:addKeyword({'bags'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I have brown, blue, jungle, golden, green, grey, purple, red, seastar, fur and yellow bags for 5gps.'})
keywordHandler:addKeyword({'backpacks'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I have brown, blue, jungle, golden, green, grey, purple, red, seastar, fur and yellow backpacks for 10gps.'})
keywordHandler:addKeyword({'tools'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I sell shovels(50gps), picks(100gps), fishing rods(150gps), torches(2gps), lamps(8gps), candles(2gps), ropes(50gps), scythes(50gps), sickles(50gps), fire bugs(100gps) and machetes(35gps).'})
keywordHandler:addKeyword({'offers'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I sell bags and backpacks(in all colors), worms(5gp per sixpack), tools, watches(50gp), footballs(111gp), amulets of loss(10k). I have helmets of the deep, you can rent them for a 5,000 gold coins deposit. I also exchange cloths and obsidian knives. And I repair boots.'})

local shopModule = ShopModule:new()
npcHandler:addModule(shopModule)

--bags
shopModule:addBuyableItem({'blue bag'}, 1995, 5, 'blue bag')
shopModule:addBuyableItem({'jungle bag'}, 3939, 5, 'jungle bag')
shopModule:addBuyableItem({'golden bag'}, 1997, 5, 'golden bag')
shopModule:addBuyableItem({'green bag'}, 1991, 5, 'green bag')
shopModule:addBuyableItem({'grey bag', 'gray back'}, 1996, 5, 'grey bag')
shopModule:addBuyableItem({'purple bag'}, 1994, 5, 'purple bag')
shopModule:addBuyableItem({'red bag'}, 1993, 5, 'red bag')
shopModule:addBuyableItem({'seastar bag'}, 5950, 5, 'seastar bag')
shopModule:addBuyableItem({'yellow bag'}, 1992, 5, 'yellow bag')
shopModule:addBuyableItem({'fur bag'}, 7343, 5, 'fur bag')
shopModule:addBuyableItem({'brown bag', 'bag'}, 1987, 5, 'brown bag')
--backpacks
shopModule:addBuyableItem({'blue backpack'}, 2002, 10, 'blue backpack')
shopModule:addBuyableItem({'jungle backpack'}, 3940, 10, 'jungle backpack')
shopModule:addBuyableItem({'golden backpack'}, 2004, 10, 'golden backpack')
shopModule:addBuyableItem({'green backpack'}, 1998, 10, 'green backpack')
shopModule:addBuyableItem({'grey backpack', 'gray backpack'}, 2003, 10, 'grey backpack')
shopModule:addBuyableItem({'purple backpack'}, 2001, 10, 'purple backpack')
shopModule:addBuyableItem({'red backpack'}, 2000, 10, 'red backpack')
shopModule:addBuyableItem({'seastar backpack'}, 5949, 10, 'seastar backpack')
shopModule:addBuyableItem({'yellow backpack'}, 1999, 10, 'yellow backpack')
shopModule:addBuyableItem({'fur backpack'}, 7342, 10, 'fur backpack')
shopModule:addBuyableItem({'brown backpack', 'backpack'}, 1988, 10, 'brown backpack')
--tools
shopModule:addBuyableItem({'shovel'}, 2554, 50, 'shovel')
shopModule:addBuyableItem({'pick'}, 2553, 100, 'pick')
shopModule:addBuyableItem({'fishing rod'}, 2580, 150, 'fishing rod')
shopModule:addBuyableItem({'torch'}, 2050, 2, 'torch')
shopModule:addBuyableItem({'candle'}, 2047, 2, 'candle')
shopModule:addBuyableItem({'lamp'}, 2044, 8, 'lamp')
shopModule:addBuyableItem({'oil'}, 2006, 20, 11, 'vial of oil')
shopModule:addBuyableItem({'rope'}, 2120, 50, 'rope')
shopModule:addBuyableItem({'scythe'}, 2550, 50, 'scythe')
shopModule:addBuyableItem({'sickle'}, 2405, 50, 'sickle')
shopModule:addBuyableItem({'fire bug'}, 5468, 100, 'fire bug')
shopModule:addBuyableItem({'machete'}, 2420, 35, 'machete')
shopModule:addBuyableItem({'watch'}, 2036, 50, 'watch')
shopModule:addBuyableItem({'football'}, 2109, 111, 'football')
shopModule:addBuyableItem({'amulet of loss', 'aol'}, 2173, 10000, 'amulet of loss')
shopModule:addSellableItem({'helmet of the deep'}, 5461, 5000, 'helmet of the deep')
shopModule:addBuyableItem({'helmet of the deep'}, 5461, 5000, 'helmet of the deep')
shopModule:addBuyableItem({'worm'}, 3976, 5, 1, 'worm')
npcHandler:addModule(FocusModule:new())

thanks in advance =\
 
Back
Top