Por
Garou
QUIZ
Fala, grande reino! Tudo beleza?
Eu estava aqui a deriva, sem nada para fazer, quando um colega me chamou no msn e pediu para eu revisar um código que ele havia feito para um NPC. A função era bem simples, o tal NPC iria fazer perguntas ao jogador que devia responder-las corretamente, caso errasse, duas criaturas configuráveis iriam aparecer.
Quando eu dei uma olhada no código, tomei um grande susto, era algo caótico, tudo embaralhado. Se você quer dar uma olhada, tenha certeza de ter um coração forte.
--[[
NPC de Perguntas e Respostas
Criado por Bruno Lopes / Lpz
© 2011 TibiaKing
]]--
local focuses = {}
local talk_start = 0
local topic = {}
local var = 0
local quiz = {
[1] = {"What is the ring of mana?", "energy ring"},
[2] = {"Who sells addons?", "raphael"}
}
local monster = {"Orc", 2}
local prize = {
question = 100,
all = 10000
}
function onCreatureSay(cid, type, msg)
local msg = msg:lower() or ""
if getNpcDistanceTo(cid) > 3 then
return false
end
if doMessageCheck(msg, {"hi", "hello"}) and not(isFocused(cid, focuses)) then
selfSay("Hello, ".. getCreatureName(cid) ..". Can you answer my questions? heh...", cid)
addFocus(cid, focuses)
selfFocus(cid)
topic[cid] = 100
talk_start = os.clock()
elseif doMessageCheck(msg, {"hi", "hello"}) and #focuses ~= 0 then
selfSay("Sorry, ".. getCreatureName(cid) ..". I am talking with another person, wait!", cid)
end
if doMessageCheck(msg, {"bye", "farewell", "goodbye"}) and isFocused(cid, focuses) then
selfSay("Bye-bye, hehe!", cid)
removeFocus(cid, focuses)
end
if topic[cid] == 100 then
if doMessageCheck(msg, "yes") then
selfSay("To start my challenge, just say {ready}. I will ask you some questions.", cid)
topic[cid] = 1
elseif doMessageCheck(msg, "no") then
selfSay("Huh? Why are you here then?", cid)
removeFocus(cid, focuses)
topic[cid] = 0
end
elseif topic[cid] == 1 then
if var == 0 then
if doMessageCheck(msg, "ready") then
var = 1
selfSay(quiz[var][1], cid)
end
elseif var >= 1 then
if var <= #quiz then
if doMessageCheck(msg, quiz[var][2]) then
selfSay("CORRECT!", cid)
doPlayerAddMoney(cid, prize.question)
var = var+1
if var > #quiz then
selfSay("CONGRATULATIONS! YOU HAVE FINISHED ALL QUESTIONS!", cid)
doPlayerAddMoney(cid, prize.all)
else
selfSay(quiz[var][1], cid)
end
else
selfSay("YOU HAVE WRONG MY QUESTION! GUARDS, COME HERE!", cid)
var = 0
topic[cid] = 0
removeFocus(cid, focuses)
for i = 1, monster[2] do
doCreateMonster(monster[1], getNpcPos())
end
end
end
end
end
return true
end
function onThink()
for _, cid in ipairs(focuses) do
if isPlayer(cid) and isFocused(cid, focuses) then
if os.clock() > (talk_start + 180) then
talk_start = 0
selfSay("Hmph!")
closeShopWindow(cid)
removeFocus(cid, focuses)
elseif getNpcDistanceTo(cid) > 3 then
talk_start = 0
selfSay("How Rude!")
closeShopWindow(cid)
removeFocus(cid, focuses)
end
end
end
lookAtFocus(focuses)
end
Bom, eu fiz o arquivo .lua que você iria associar a algum npc de seu servidor, deixo o arquivo .xml por sua conta.
Como é um NPC que faz perguntas, você pode configurar o seu NPC do jeito que você quiser, com as perguntas que você quiser. Veja abaixo como proceder:
local quiz = {
[1] = {"What is the ring of mana?", "energy ring"},
[2] = {"Who sells addons?", "raphael"}
}
Para adicionar novas perguntas, basta você colocar uma vírgula na última linha e criar uma nova linha conforme o modelo:
local quiz = {
[1] = {"What is the ring of mana?", "energy ring"},
[2] = {"Who sells addons?", "raphael"},
[3] = {"PERGUNTA", "RESPOSTA"},
[4] = {"PERGUNTA", "RESPOSTA"}
}
Há também algumas outras configurações básicas para você fazer, as criaturas que irão aparecer caso o jogador erre a pergunta e a quantidade. Também você pode configurar a quantidade de dinheiro que o jogador ganha quando acerta uma pergunta e a quantidade de dinheiro do prêmio final.
local monster = {"Orc", 2}
local prize = {
question = 100,
all = 10000
}
OBSERVAÇÕES
Para evitar quaisquer erros no script, substitua o conteúdo de npc.lua em data/npc/lib por este que estou passando abaixo:
É isso aê, galerinha do tibiaKing!
Até o próximo tópico.
Posts Recomendados
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.