Renatogold7,
Testei o script abaixo na distribuição The Forgotten Server 0.3.6pl1, veja se funciona,
local config = {
storage = 8002 --Coloque o storage que você irá usar
}
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
function greetCallback(cid)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if (getPlayerStorageValue(cid, config.storage) == -1) then
npcHandler:setMessage(MESSAGE_GREET, "Olá ".. getCreatureName(cid) ..". Estou precisando de {ajuda}!")
elseif (getPlayerStorageValue(cid, config.storage) == 0) then
npcHandler:setMessage(MESSAGE_GREET, "Já trouxe minhas Worms?")
talkState[talkUser] = 2
elseif (getPlayerStorageValue(cid, config.storage) == 1) then
npcHandler:setMessage(MESSAGE_GREET, "Olá novamente ".. getCreatureName(cid) ..", meu amigo e eu abrimos um comércio de minhocas, mas estamos meio que sem estoque. Estou precisando de 100 Worms, será que você poderia me ajudar novamente?")
talkState[talkUser] = 3
elseif (getPlayerStorageValue(cid, config.storage) == 2) then
npcHandler:setMessage(MESSAGE_GREET, "Conseguiu as Worms?")
talkState[talkUser] = 4
else
npcHandler:setMessage(MESSAGE_GREET, "Olá ".. getCreatureName(cid) ..". Não estou precisando de ajuda por enquanto!")
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
return true
end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if (msgcontains(msg, 'ajuda')) then
npcHandler:say("Eu preciso de 30 Worms para ir pescar hoje com um grande amigo, prometi a ele que as levaria. Você poderia me ajudar?", cid)
talkState[talkUser] = 1
end
if (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
npcHandler:say("Obrigado! Estarei te esperando aqui!", cid)
setPlayerStorageValue(cid, config.storage, 0)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
elseif (msgcontains(msg, 'no') and talkState[talkUser] == 1) then
npcHandler:say("Er, ok... Acho que não vou poder pescar hoje...", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
if (msgcontains(msg, 'yes') and talkState[talkUser] == 2) then
if (doPlayerRemoveItem(cid, 3976, 30)) then
npcHandler:say("Hmm, bom, bom... Aqui está a sua recompensa!", cid)
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você recebeu 1000 exp e 500 gps")
doPlayerAddExperience(cid, 1000)
doPlayerAddMoney(cid, 500)
setPlayerStorageValue(cid, config.storage, 1)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
else
npcHandler:say("Ei! Eu sei contar, você só tem ".. getPlayerItemCount(cid, 3976) .." Worms", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
elseif (msgcontains(msg, 'no') and talkState[talkUser] == 2) then
npcHandler:say("O que você está esperando? Vá logo, por favor!", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
if (msgcontains(msg, 'yes') and talkState[talkUser] == 3) then
npcHandler:say("Você não sabe como está me ajudando. Estarei esperando por aqui.", cid)
setPlayerStorageValue(cid, config.storage, 2)
npcHandler:releaseFocus(cid)
talkState[talkUser] = 0
elseif (msgcontains(msg, 'no') and talkState[talkUser] == 3) then
npcHandler:say("Er... ok! Estou arruinado!", cid)
npcHandler:releaseFocus(cid)
talkState[talkUser] = 0
end
if (msgcontains(msg, 'yes') and talkState[talkUser] == 4) then
if (doPlayerRemoveItem(cid, 3976, 100)) then
npcHandler:say("Brigadão! Eu sabia que você era confiável! Pensou que não ganharia nada em troca, não é?", cid)
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você recebeu 2500 exp e 1500 gps")
doPlayerAddExperience(cid, 2500)
doPlayerAddMoney(cid, 1500)
setPlayerStorageValue(cid, config.storage, 3)
npcHandler:releaseFocus(cid)
talkState[talkUser] = 0
else
npcHandler:say("Você tem apenas ".. getPlayerItemCount(cid, 3976) .." Worms!", cid)
npcHandler:releaseFocus(cid)
talkState[talkUser] = 0
end
elseif (msgcontains(msg, 'no') and talkState[talkUser] == 4) then
npcHandler:say("Estou esperando as Worms...", cid)
npcHandler:releaseFocus(cid)
talkState[talkUser] = 0
end
return true
end
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Cya






info
Grupo: Campones
Registrado: 26/06/10
Posts: 16
Reputação: 0
[NPC] Npc de quest Alfredo
Desculpa se postei no lugar errado, se for preciso mover ou deletar o topico fiquem a vontade.
Continuando o meu script de npc, queria que ele foce um pouco mais complexo, mais não consigo acertar algumas coisas nele, ja que sou iniciante em scripts:
-quando você fala "no" para algo ele não responde a fala que eu quero que ele responda.
Ah Vodkart ja me ajudou neste script, fico muito grato, mais queria algumas coisas a mais nele, mais não consigo fazer que isto de certo...
O que eu quero ao certo é mais ou menos este dialogo quando você ja iniciou a converssa:
Player: ajuda
NPC: Eu preciso de 30 worms para ir pescar hoje com um grande amigo, prometi a ele que levaria elas. Você poderia me ajudar?
Agora você teria duas opções:
Player: yes
NPC: Obrigado! Estarei te esperando aqui!
A outra:
Player: no
NPC: Er, ok.. Acho que não vou poder ir pescar hoje..
Até ai deu certo, mais as outras partes que você tem a opção de falar "yes" ou "no" não deu certo...
Mais em geral é um npc que vai te dando várias quests conforme você vai completando outras quests ja propostas por ele, seguindo uma história... So quero saber como deixar mais opções de respostas para o player, como "yes" e "no" e que dependendo desta ação o npc dirá algo, e que também se você não tiver as "30 worms" ele dirá algo, como: "Vá logo pegar as worms, estou esperando!".
Se der para ver os erros e corrigirem ele para mim fico agradecido.. Com isso acho que minha dúvida nisto acabará.
Obrigado!
Script 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 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'ajuda') then if (getPlayerStorageValue(cid,8002) == -1) then selfSay('Eu preciso de 30 worms para ir pescar hoje com um grande amigo, prometi a ele que levaria elas. Você poderia me ajudar?', cid) talkState[talkUser] = 1 elseif (getPlayerStorageValue(cid,8002) == 1) then selfSay('Ja trouxe minhas worms?', cid) talkState[talkUser] = 2 elseif (getPlayerStorageValue(cid,8002) == 2) then selfSay('Hmm, agora abri um negocio de venda de minhocas, mas estou meio sem estoque, agora preciso de 100 worms, sera que você poderia me ajudar novamente?', cid) talkState[talkUser] = 3 elseif (getPlayerStorageValue(cid,8002) == 3) then selfSay('Conseguiu as worms?', cid) talkState[talkUser] = 4 else selfSay('Por enquanto não preciso mais de sua ajuda..', cid) talkState[talkUser] = 0 end elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then selfSay('Obrigado! Estarei te esperando aqui!', cid) setPlayerStorageValue(cid, 8002, 1) talkState[talkUser] = 0 else selfSay('Er, ok.. Acho que não vou poder ir pescar hoje..', cid) talkState[talkUser] = 0 end elseif talkState[talkUser] == 3 then if msgcontains(msg, 'yes') then selfSay('Você é demais! Estarei esperando as worms.', cid) setPlayerStorageValue(cid, 8002, 3) talkState[talkUser] = 0 else selfSay('Er, ok.. Estou arruinado..', cid) talkState[talkUser] = 0 end elseif talkState[talkUser] == 2 and getPlayerItemCount(cid, 3976) >= 30 then if msgcontains(msg, 'yes') then selfSay('Hmm, bom bom, aqui esta sua recompença! {Você recebeu 1000 exp e 500 gps}.', cid) if (doPlayerRemoveItem(cid, 3976, 30) == TRUE) then doPlayerAddExp(cid,1000) doPlayerAddMoney(cid, 500) setPlayerStorageValue(cid, 8002, 2) talkState[talkUser] = 0 elseif msgcontains(msg, 'no') then selfSay('O que esta esperando? Vá logo porfavor.', cid) talkState[talkUser] = 0 else talkState[talkUser] = 0 end end elseif talkState[talkUser] == 4 and getPlayerItemCount(cid, 3976) >= 100 then if msgcontains(msg, 'yes') then selfSay('Brigadão! Eu sabia que você era confiavel! Pensou que você não ganharia nada em troca né? {Você recebeu 2500 exp e 1500 gps}.', cid) if (doPlayerRemoveItem(cid, 3976, 100) == TRUE) then doPlayerAddExp(cid,2500) doPlayerAddMoney(cid, 1500) setPlayerStorageValue(cid, 8002, 4) talkState[talkUser] = 0 elseif msgcontains(msg, 'no') then selfSay('Estou esperando as worms...', cid) talkState[talkUser] = 0 else talkState[talkUser] = 0 end end talkState[talkUser] = 0 elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())Editado Julho 12 por Renatogold7