Não sei se existe um script igual, mas estou postando o meu.
Precisei de um npc que apresentasse um enigma.
Descrição:
Um npc que pode ser usado em quests. Pede ao player para resolver o enigma.
Função:
Se o player acertar a resposta poderá passar por um certo 'stone tile' ou porta.
Se o player errar a resposta será 'sumonado' um certo monstro em um certo SQM.
Vá até data/npc/ duplique um arquivo XML de algum npc.
Mude o nome para Servo e cole isto:
<?xml version="1.0" encoding="UTF-8"?><npc name="Servo" script="data/npc/scripts/port_inf.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="325" head="114" body="94" legs="114" feet="0" addons="2"/>
<parameters>
<parameter key="message_greet" value="Eai, soube que esta querendo entrar no {inferno}, para fazer uma quest."/>
</parameters>
</npc>
Legenda:
Na cor ◘: Nome do NPC que será mostrado no OT.
Vá até data/npc/scripts/ duplique um arquivo.lua de algum script de outro npc.
Mude o nome para port_inf e cole isto:
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, 'inferno') then
selfSay('Você não está com medo de mim? Para entrar terá que me responder uma pergunta. Quer tentar quando? Diga: {agora} ou {nunca}.', cid)
talkState[talkUser] = 2
elseif talkState[talkUser] == 2 then
if msgcontains(msg, 'agora') then
selfSay('Qual a cor do cavalo branco de napoleão?', cid)
talkState[talkUser] = 3
elseif msgcontains(msg, 'nunca') then
selfSay('Okay, então diga {bye}.', cid)
talkState[talkUser] = 1
end
elseif talkState[talkUser] == 3 then
if msgcontains(msg, 'branca') then
if getPlayerStorageValue(cid,313131) == -1 then
setPlayerStorageValue(cid,31313,1)
selfSay('Você acertou, continue a quest! Vá para o Sul!', cid)
else
selfSay('Você já pode entrar. Não precisava vir aqui denovo.', cid)
end
else
doSummonCreature("Apocalypse",{x=0,y=0,z=0})
selfSay('Você errou, mate esse monstro. Depois tente denovo! haha!', cid)
end
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Legenda:
Na cor ◘ : O enigma que será falado pelo NPC.
Na cor ◘ : A resposta correta.
Na cor ◘ : Número da storage: no caso, numero do actionid que terá que ser adicionado no tile/porta.
Na cor ◘ : Nome do monstro que será 'sumonado' se o player errar a resposta.
Na cor ◘ : Cordenadas de onde aparecerá o monstro.
Depois disso, adicione o actionid no tile/porta que o player poderá passar só após responder o enigma.
No meu caso adicionei o actionid: 313131 em uma Stone Tile.
Agora é só importar o NPC no seu RME ou seu outro Map Editor.
E mudar as falas do NPC se quiser ou se precisar. -Mas tome cuidado com as palavras que precisam ser faladas.
Meu primeiro tópico e também meu primeiro script. Podem me corrigir e me xingar se estiver um lixo.
Se tiver algo inútil no código, me avisem. É que foi tudo baseado no Henricus.
Dúvida: Alguém sabe se há uma possibilidade/script onde o npc faria perguntas variadas aleatoriamente?
Falow. Espero que tenha ajudado alguém.
Créditos: 50% para mim e 50% para o cara que fez o Henricus (npc da Inquisition).