• 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 teach me upgrade npc with an example to tfs 1.5

Felipe93

Ghost Member
Joined
Mar 21, 2015
Messages
1,990
Solutions
9
Reaction score
334
Location
Chile
Hello I use this npc from tfs 1.x it's giving me errors in console with certain functions and with others it does works
Lua:
Lua Script Error: [Npc interface]
data/npc/scripts/Xodet.lua:onCreatureSay
data/npc/scripts/lib/npcsystem/npchandler.lua:642: table index is nil
stack traceback:
        [C]: in function '__newindex'
        data/npc/scripts/lib/npcsystem/npchandler.lua:642: in function 'say'
        data/npc/scripts/Xodet.lua:104: in function 'callback'
        data/npc/scripts/lib/npcsystem/npchandler.lua:420: in function 'onCreatureSay'
        data/npc/scripts/Xodet.lua:12: in function <data/npc/scripts/Xodet.lua:12>
can you convert this npc to be compatible with tfs 1.5? as example it will help me
Code:
dofile('data/npc/scripts/lib/greeting.lua')

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)



-- OTServ event handling functions
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

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

shopModule:addBuyableItem({'life'}, 2006, 60, 10, 'life fluid')
shopModule:addBuyableItem({'mana'}, 2006, 100, 7, 'mana fluid')
shopModule:addBuyableItem({'spellbook'}, 2175, 150, 'spellbook')
shopModule:addBuyableItem({'blank rune'}, 2260, 10, 'blank rune')

function creatureSayCallback(cid, type, msg) msg = string.lower(msg)
    if not npcHandler:isFocused(cid) then
        return false
    end
    
    if msgcontains(msg, 'vial') or msgcontains(msg, 'deposit') or msgcontains(msg, 'flask') then
        npcHandler:say("I will pay you 5 gold for every empty vial. Ok?", 1)
        talk_state = 857
    elseif talk_state == 857 and msgcontains(msg, 'yes') then
        if sellPlayerEmptyVials(cid) == true then
        npcHandler:say("Here's your money!", 1)
        talk_state = 0
        else
        npcHandler:say("You don't have any empty vials!", 1)
        talk_state = 0
        end
    end
    
    if msgcontains(msg, 'bp of lf') or msgcontains(msg, 'bp of life fluid') or msgcontains(msg, 'bp lf') then
    npcHandler:say('Do you want to buy a backpack of life fluid for 1200 gold coins?')
    talk_state = 5
    
        elseif msgcontains(msg, 'yes') and talk_state == 5 then
            if getPlayerMoney(cid) >= 1200 then
                purple2_bp = doPlayerAddItem(cid, 2000, 1)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doAddContainerItem(purple2_bp, 2006, 10)
                doPlayerRemoveMoney(cid, 1200)
                npcHandler:say('Thank you for buying.')
                talk_state = 0
            else
                npcHandler:say('You don\'t have enough money.')
                talk_state = 0
            end
    end

if msgcontains(msg, 'bp of mf') or msgcontains(msg, 'bp of manafluid') or msgcontains(msg, 'bp mf') then
    npcHandler:say('Do you want to buy a backpack of mana fluid for 2000 gold coins?')
    talk_state = 6
    
        elseif msgcontains(msg, 'yes') and talk_state == 6 then
            if getPlayerMoney(cid) >= 2000 then
                brown_bp = doPlayerAddItem(cid, 2001, 1)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doAddContainerItem(brown_bp, 2006, 7)
                doPlayerRemoveMoney(cid, 2000)
                npcHandler:say('Thank you for buying.')
                talk_state = 0
            else
                npcHandler:say('You don\'t have enough money.')
                talk_state = 0
            end
    end   
    
    if msgcontains(msg, 'bp of br') or msgcontains(msg, 'bp of blank rune') or msgcontains(msg, 'bp br') then
    npcHandler:say('Do you want to buy a backpack of blank rune for 200 gold coins?')
    talk_state = 7
    
        elseif msgcontains(msg, 'yes') and talk_state == 7 then
            if getPlayerMoney(cid) >= 200 then
                brown_bp = doPlayerAddItem(cid, 2003, 1)
                doAddContainerItem(brown_bp, 2260, 20)
                doPlayerRemoveMoney(cid, 200)
                npcHandler:say('Thank you for buying.')
                talk_state = 0
            else
                npcHandler:say('You don\'t have enough money.')
                talk_state = 0
            end
    end   
    return true
end

keywordHandler:addKeyword({'name'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "I'm Xodet, the owner of this shop."})
keywordHandler:addKeyword({'job'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "I'm sorcerer and trade with all kinds of magic items."})
keywordHandler:addKeyword({'sorcerer'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "There is a sorcerer guild in Thais. Just go in the east of the town, it is easly to find."})
keywordHandler:addKeyword({'offer'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "I'm selling life and mana fluids, runes, wands, rods and spellbooks."})
keywordHandler:addKeyword({'good'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "I'm selling life and mana fluids, runes, wands, rods and spellbooks."})
keywordHandler:addKeyword({'have'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "I'm selling life and mana fluids, runes, wands, rods and spellbooks."})


npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Lua:
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

local voices = { { text = "Runes and fluids! Have a look!" } }
npcHandler:addModule(VoiceModule:new(voices))

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

keywordHandler:addKeyword({ 'name' }, StdModule.say,
    { npcHandler = npcHandler, onlyFocus = true, text = "I'm Xodet, the owner of this shop." })
keywordHandler:addKeyword({ 'job' }, StdModule.say,
    { npcHandler = npcHandler, onlyFocus = true, text = "I'm sorcerer and trade with all kinds of magic items." })
keywordHandler:addKeyword({ 'sorcerer' }, StdModule.say,
    { npcHandler = npcHandler, onlyFocus = true,
        text = "There is a sorcerer guild in Thais. Just go in the east of the town, it is easly to find." })
keywordHandler:addKeyword({ 'offer' }, StdModule.say,
    { npcHandler = npcHandler, onlyFocus = true,
        text = "I'm selling life and mana fluids, runes, wands, rods and spellbooks." })
keywordHandler:addKeyword({ 'good' }, StdModule.say,
    { npcHandler = npcHandler, onlyFocus = true,
        text = "I'm selling life and mana fluids, runes, wands, rods and spellbooks." })
keywordHandler:addKeyword({ 'have' }, StdModule.say,
    { npcHandler = npcHandler, onlyFocus = true,
        text = "I'm selling life and mana fluids, runes, wands, rods and spellbooks." })

-- Life Fluid
shopModule:addBuyableItem({ 'life' }, 2006, 60, 10, 'life fluid')
shopModule:addBuyableItemContainer({ 'bp lf' }, 2000, 2006, 1200, 10, 'backpack of life fluids')

-- Mana Fluid
shopModule:addBuyableItem({ 'mana' }, 2006, 100, 7, 'mana fluid')
shopModule:addBuyableItemContainer({ 'bp mf' }, 2001, 2006, 1200, 7, 'backpack of mana fluids')

-- Spellbook
shopModule:addBuyableItem({ 'spellbook' }, 2175, 150, 'spellbook')

-- Blank Rune
shopModule:addBuyableItem({ 'blank' }, 2260, 10, 'blank rune')
shopModule:addBuyableItemContainer({ 'bp br' }, 2003, 2260, 200, 'backpack of blank runes')

npcHandler:addModule(FocusModule:new())
 
just had to add a number one at the end of certain phrases and te error was solved
('Do you want to buy a backpack of life fluid for 1200 gold coins?')
to ('Do you want to buy a backpack of life fluid for 1200 gold coins?', 1)
lol
 
Back
Top