Ir para conteúdo

Featured Replies

Postado

Criei um NPC pra uma Quest com 5 tasks, mas não ta funcionando direito, e não consegui encontrar o erro no script. Provavelmente é algum erro nas talkState ou nas storage. Poderiam me ajudar?
Servidor 8.6.

Segue o lua do NPC:

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

local talkState = {}

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 storage = 5000

function creatureSayCallback(cid, type, msg)
    if not npcHandler:isFocused(cid) then
        if msg == "hi" or msg == "hello" then
            if getPlayerStorageValue(cid, storage) == -1 then
                selfSay("Hello " .. getPlayerName ..
                            ". I am kind of busy right now. But, 50 points to gryffindor, anyways.", cid)
                talkState[talkUser] = 1
            elseif getPlayerStorageValue(cid, storage) == 1 then
                selfSay("Did you find it already? By now, Mr Potter would've brought it to me already..", cid)
                talkState[talkUser] = 2
            elseif getPlayerStorageValue(cid, storage) == 3 then
                selfSay("Did you find it already? By now, Mr Potter would've brought it to me already..", cid)
                talkState[talkUser] = 3
            elseif getPlayerStorageValue(cid, storage) == 5 then
                selfSay("Did you find it already? By now, Mr Potter would've brought it to me already..", cid)
                talkState[talkUser] = 4
            elseif getPlayerStorageValue(cid, storage) == 7 then
                selfSay("Did you find it already? By now, Mr Potter would've brought it to me already..", cid)
                talkState[talkUser] = 5
            elseif getPlayerStorageValue(cid, storage) == 9 then
                selfSay("Did you find it already? By now, Mr Potter would've brought it to me already..", cid)
                talkState[talkUser] = 6
            else
                selfSay("Thank you for helping me, " .. getPlayerName .. ".", cid)
            end
            npcHandler:addFocus(cid)
        else
            return false
        end
    end

    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 1 or cid

    if msgcontains(msg, "job") or msgcontains(msg, "quest") or msgcontains(msg, "mission") or msgcontains(msg, "help") then
        if getPlayerStorageValue(cid, storage) == -1 then
            selfSay(
                "Ah, so you'd like to help me?! It looks like I misplaced some important items. Would you like to help me finding them?",
                cid)
            talkState[talkUser] = 1
        elseif getPlayerStorageValue(cid, storage) == 10 then
            selfSay("I don't have more missions for you right now.", cid)
            talkState[talkUser] = 1
        end
    elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
        if getPlayerStorageValue(cid, storage) == -1 then
            selfSay(
                "Good. The first item is Rowena Ravenclaw's Diadem. Look for the {Grey Lady} in Ravenclaw's Common Room and ask her about this {horcrux}, and she might help you. Come back once you have it",
                cid)
            setPlayerStorageValue(cid, storage, 1)
        else
            if doPlayerRemoveItem(cid, 2139, 1) then
                selfSay("You found it, " .. getPlayerName .. "! 50 points to your house. And... a few galeons too, so you can buy some candy at Honeydukes. Are you ready for the next task?",
                    cid)
                doPlayerAddItem(cid, 2160, 3)
                doPlayerAddExp(cid, 250000)
                setPlayerStorageValue(cid, storage, 2)
                talkState[talkUser] = 2

            end
        end
    elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then
        if getPlayerStorageValue(cid, storage) == 2 then
            selfSay(
                "The next artifact is Tom Riddle's Diary. Look for a statue in Slytheryn's Common Room, and it should lead you to it's location.",
                cid)
            setPlayerStorageValue(cid, storage, 3)
        else
            if doPlayerRemoveItem(cid, 10563, 1) then
                selfSay(
                    "Ah, about time! 50 more points to your house, and a few more galeons.. yada yada. Ready for the next task?",
                    cid)
                doPlayerAddItem(cid, 2160, 2)
                doPlayerAddItem(cid, 2152, 50)
                doPlayerAddExp(cid, 250000)
                setPlayerStorageValue(cid, storage, 4)
                talkState[talkUser] = 3

            end
        end
    elseif msgcontains(msg, "yes") and talkState[talkUser] == 3 then
        if getPlayerStorageValue(cid, storage) == 4 then
            selfSay(
                "The third item is Helga Hufflepuff's Cup. Maybe {Bogrod} knows something about it. You can find him at the Depot, to the west of the Castle.",
                cid)
            setPlayerStorageValue(cid, storage, 5)
        else
            if doPlayerRemoveItem(cid, 7369, 1) then
                selfSay("Great, " .. getPlayerName ..
                            "! Although.. I ran out of galeons... I'll give you a little more experience points this time. Ready for the next task?",
                    cid)
                doPlayerAddExp(cid, 500000)
                setPlayerStorageValue(cid, storage, 6)
                talkState[talkUser] = 4

            end
        end
    elseif msgcontains(msg, "yes") and talkState[talkUser] == 4 then
        if getPlayerStorageValue(cid, storage) == 6 then
            selfSay(
                "The fourth item is Salazar Slytherin's Locket. The {Bloody Baron} might have some information about it. You can find him at Slytherin's Common Room. Don't forget to ask him about the {horcrux}, or he won't give you any leads.",
                cid)
            setPlayerStorageValue(cid, storage, 7)
        else
            if doPlayerRemoveItem(cid, 7889, 1) then
                selfSay("Good, good. More galeons to your account, " .. getPlayerName .. ". Ready for the last task?",
                    cid)
                doPlayerAddItem(cid, 2160, 5)
                doPlayerAddItem(cid, 2152, 75)
                doPlayerAddExp(cid, 500000)
                setPlayerStorageValue(cid, storage, 8)
                talkState[talkUser] = 5

            end
        end
    elseif msgcontains(msg, "yes") and talkState[talkUser] == 5 then
        if getPlayerStorageValue(cid, storage) == 8 then
            selfsay(
                "The last item is Marvolo Gaunt's Ring. It's guarded by.. an.. creature. You might have to talk to Hagrid in order to locate it. Don't forget to ask him about the {horcrux}, or he won't give you any leads. And, " ..
                    getPlayerName .. ", good luck!", cid)
            setPlayerStorageValue(cid, storage, 9)
        else
            if doPlayerRemoveItem(cid, 2121, 1) then
                selfSay("" .. getPlayerName ..
                            ", you made it alive! I mean.. I knew you would. *coughs*. Thank you very much for helping me. 100 points to your house, " ..
                            getPlayerName .. ". And my last galeons too.", cid)
                doPlayerAddItem(cid, 2160, 10)
                doPlayerAddExp(cid, 7500)
                setPlayerStorageValue(cid, storage, 10)
                talkState[talkUser] = 6

            end
        end

    elseif msgcontains(msg, "no") and talkState[talkUser] == 1 then
        selfSay("Nevermind. -10 points to your house.", cid)
        talkState[talkUser] = 0
    end
    return true
end

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

 

Resolvido por Vodkart

Ir para solução

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo