Ir para conteúdo
  • 0

[Pedido] Npc Oracle Incrementado


drakylucas

Pergunta

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
end

 

 

 

 

Por 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 por DrakyLucas
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

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.

Editado por Demonbholder
Link para o comentário
Compartilhar em outros sites

  • 0

demonbholder ta errado...

nem testei + ja vi uns erros aparentes.

1º ele não pede para buscar os itens, apenas verifica se ele ja tem com ele

2º ele sempre vira sorcerer em qualquer maneira

 

 

vou tentar concertar aqui..

quando eu consegui certim usando sua base te rou rep+

vlw por ajuda msmo assim =P

 

EDIT: pedir parabuscar o itens era só a msg que tu nao tinha colocado la em cima.. a vocation eu adicionei-a na tabela =P

 

só esses os erros msmo.. ja arrumei..

rep+ por ajuda =P

Editado por DrakyLucas
Link para o comentário
Compartilhar em outros sites

  • 0

Ahhh sim, quanto a ele virar sorcerer é porque eu estava testando e editei a table e depois eu ia arrumar e esqueci. Já edito.

 

Quanto a ele pegar os itens ele pede sim, nessa parte:

 

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

 

Já edito.

 

--

 

Outra coisa, posso mover para seção de dúvidas sanadas aquela dúvida sua da função?

 

--

 

Script editado.

Editado por Demonbholder
Link para o comentário
Compartilhar em outros sites

  • 0

a msg que digo é dps que ele pega a vocação.. la nao fala nada de item, vc tm que fala bye e hi dnv =p

mais diboa ja arrumei

 

sim pode sim, todo topico que eu criar e responder dps pode move viu kkk [tomara que se lembre].

geralmente eu respondo, se aquela eu nao respondi é pq nao tive tempo mal mais pode mover sim, me desculpe tb por nao avisar kk

 

pode mover esse tb para os pedidos atendidos =P

Editado por DrakyLucas
Link para o comentário
Compartilhar em outros sites

  • 0

Beleza, quanto ao de avisar só se falar bye e hi de novo, eu fiz assim porque tu falou que é como se ele fosse buscar o item, então ele iria ter que se afastar do npc e sair, mas se tu já arrumou ta beleza. Qualquer coisa posta ai.

 

Movido para sub-seção de pedidos atendidos, abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

ow demonbholder.. da uma ajuda? =s

tipo esse npc ateh ta funcionando belezinha tal, mais temuns bugs que achu que é no xml n sei

 

tipo eu kerio deixar sem message_greet, tem como faze isso? sem falar expected in you..?

otra coisa, pa dexa o player só fala com 3 sqm de distancia.. esse npc to do otro ladoda tela e ele fala comigo..

 

por favor ajuda ae com xml ou no script msm nao sei =ss

npc é uma disgraça di mexe!

Editado por DrakyLucas
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...