Fiz um aqui, pelo que eu vi não tem bugs, mas da uma testada:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local sto = 14000
local itenstab = {
['death'] = {item = 2160, storage = 2, mg = "Parabéns, você escolheu o elemento death."},
['fire'] = {item = 2421, storage = 3, mg = "Parabéns, você escolheu o elemento fire."},
['ice'] = {item = 2422, storage = 4, mg = "Parabéns, você escolheu o elemento ice."},
['earth'] = {item = 2423, storage = 5, mg = "Parabéns, você escolheu o elemento earth."}
}
local voctab = {
['sorcerer'] = {msg = "Parabéns, agora você é um sorcerer.", id = 1},
['druid'] = {msg = "Parabéns, agora você é um druid.", id = 2},
['paladin'] = {msg = "Parabéns, agora você é um paladin.", id = 3},
['knight'] = {msg = "Parabéns, agora você é um knight.", id = 4}
}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg)
if getPlayerLevel(cid) < 8 then
return selfSay('Você ainda não esta preparado para seu destino.', cid)
end
if (msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) and talkUser == nil then
if getPlayerStorageValue(cid, sto) == -1 then
selfSay('Por favor, escolha sua vocação. [sorcerer],[Druid],[Paladin],[Knight]', cid)
talkState[cid] = 1
elseif getPlayerStorageValue(cid, sto) == 1 then
selfSay('Escolha seu elemento.', cid)
talkState[cid] = 30
elseif getPlayerStorageValue(cid, sto) > 1 and getPlayerStorageValue(cid, sto) < 6 then
selfSay('Olá, me lembro que você escolheu o elemento ' .. getName(getPlayerStorageValue(cid, sto)) .. ', então, você me trouxe o ' .. getItemNameById(itenstab[getName(getPlayerStorageValue(cid, sto))].item) .. ' ?', cid)
talkState[cid] = 20
end
end
end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = cid
if voctab[msg] and talkState[talkUser] == 1 then
selfSay('Você tem certeza disso?', cid)
voc = msg
talkState[talkUser] = 2
elseif msgcontains(msg, 'yes') and talkState[talkUser] == 2 then
doPlayerSetVocation(cid, voctab[voc].id)
setPlayerStorageValue(cid, sto, 1)
selfSay(voctab[voc].msg .. " Agora escolha seu elemento. [death],[ice],[Fire],[Earth]", cid)
talkState[talkUser] = 30
elseif msgcontains(msg, 'no') and talkState[talkUser] == 2 then
selfSay("Ok, then.", cid)
talkState[talkUser] = 1
end
if itenstab[msg] and talkState[talkUser] == 30 then
selfSay('Você tem certeza disso?', cid)
el = msg
talkState[talkUser] = 31
elseif msgcontains(msg, 'yes') and talkState[talkUser] == 31 then
setPlayerStorageValue(cid, sto, itenstab[el].storage)
selfSay(itenstab[el].mg, cid)
talkState[talkUser] = nil
elseif msgcontains(msg, 'no') and talkState[talkUser] == 31 then
selfSay("Ok, then.", cid)
talkState[talkUser] = 30
end
if msgcontains(msg, 'yes') and talkState[talkUser] == 20 then
if getPlayerItemCount(cid, itenstab[getName(getPlayerStorageValue(cid, sto))].item) >= 1 then
doPlayerRemoveItem(cid, itenstab[getName(getPlayerStorageValue(cid, sto))].item, 1)
selfSay('Parabéns, você ganhou seu elemento.', cid)
setPlayerStorageValue(cid, sto + 1, itenstab[getName(getPlayerStorageValue(cid, sto))].storage)
doTeleportThing(cid,{x = 1000,y = 1000, z = 6})
setPlayerStorageValue(cid, sto, 6)
talkState[talkUser] = nil
else
selfSay('Por favor, não minta, vá buscar o item para seu elemento.', cid)
end
elseif msgcontains(msg, 'no') and talkState[talkUser] == 20 then
selfSay('Certo, volte mais tarde.', cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
function getName(n)
for m, s in pairs(itenstab) do
for i, r in pairs(s) do
if i == 'storage' and r == n then
return m
end
end
end
end
Abraços.



info
Grupo: Visconde
Registrado: 12/09/10
Posts: 416
Reputação: +160
Char no Tibia: Draky Lucas
Bem, ja devem saber que sou um dos scripters que só fica no xtibia =P
Então, meu pedido:
OT: TFS 0.4 para 8.70
Npc: com falas azuis e separadas para varios players falarem junto.
Tipo: NPC
O que faz?
R:
player: hi \\ if getPlayerStorageValue(cid,14000) < 1 then Primeira conversa: npc: Ola [player], por favor escolha sua vocação. [sorcerer],[Druid],[Paladin],[Knight] player: knight npc: você tem certeza? [yes / no] player: yes // aqui ele vai virar knight + nao vai teleporta pa main setPlayerStorageValue(cid,14000,1) player: no // aqui ele vai retornar para a primeira pergunta npc: Parabens, você agora é um knight. \\ end OUTRO IF [nao pode ser else nem elseif, pois é pa continuar com a conversa] \\if getPlayerStorageValue(cid,14000) == 1 then npc:Por favor, escolha seu elemento elemento. [death],[ice],[Fire],[Earth] player: death npc: voce tem certeza disso? [yes/no] player: yes npc: me traga um demoniac essence para que eu possa lhe dar o elemento death [[ PS: cada elemento é um item diferente]] setPlayerStorageValue(cid,14000,2) [[2 = death,3 = ice,4 = fire, 5 = earth]] npc: Volte logo com meu elemento. [bye] end -- do if getPlayerStorage... == 1 \\ OUTRO IF, PARA O PROXIMO HI [O PLAYER VAI BUSCAR O ITEM TAL TAL] if getPlayerStorageValue(cid,14000) >= 2 and getPlayerStorageValue(cid,14000) <= 5 then npc: Ola, me lembro que voce escolheu o elemento Death [[verifica a storage 14000 em uma tabela pa sabe o elemento, juntamente ao item a ser recolhido]], então, voce me trouxe o demoniac essence? player: no npc: ok, volte mais tarde com o item para que possa promover seu elemento! [bye aqui] player: yes if getPlayerItemCount(cid,ID_DO_ITEM_DA_TABELA) < 1 then npc: Por favor, nao minta e vá buscar logo o demoniac essence. [bye aqui] else doPlayerRemoveItem(cid,ID_DO_ITEM_DA_TABELA,1) npc: Voce escolheu seu elemento!! congratz!! setPlayerStorageValue(cid,14000,6) setPlayerStorageValue(cid,14001,1) -- de 1 a 4, para death ice etc... doTeleportThing(cid,{x = 1000,y = 1000, z = 6}) end endPor que do pedido? simples, odeio fazer npc alem do que eles são bem diferente das action,talk etc... mas esse tem que ser em npc pa fica bem feito =s.
PS: só poderá escolher a vocação no level 8.
sei que é um texto mais é para o melhor entendimento do que eu quero =P
rep+ pa quem ajuda =P
Editado Junho 9 por DrakyLucas