Bom, primeiramente temos que ler e entender o script.
Oq ele faz?
Quando o player usa as palavras "ninja" ou "promotion" e depois "yes" com esse NPC, o script checa o level e a vocação do player. Se o player tiver vocação diferente de 2 e level maior ou igual 8, sua vocação passará a ser 2.
Para adicionar mais opções, você deverá dar ao player a possibilidade de usar outras palavras (Exemplo: "ninja", "chunin", "jounin") e fazer o script atuar baseado nessas palavras.
Para fazer isso de forma mais curta e bonita, nós usariamos um loop. Mas vamos fazer o jeito mais simples mesmo, que é assim:
Para facilitar, crie uma tabela para encurtar o script, exemplo:
local tabela = {"chunin", "jounin", "hokage", "senin", "sanin"}
Depois, você irá fazer várias checagens com if e elseif, exemplo:
if msgcontains(msg, "chunin") then
doPlayerSetVocation(cid, x)
elseif msgcontains(msg, "jounin") then
doPlayerSetVocatio(cid, y)
E ir continuando.Vou deixar aqui o início do código para você
local tabela = {"chunin", "jounin", "hokage", "senin", "sanin"}
if (msgcontains(msg, 'promotion')) then
talkState[talkUser] = 1
selfSay('Wich vocation do you choose? chunin, jounin, hokage, sanin or senin?', cid)
end
if isInArray(tabela, msg) then
if getPlayerLevel(cid) >= 8 then
if msgcontains(msg, 'chunin') and talkState[talkUser] == 1 then
doPlayerSetVocation(cid, 1)
doSendMagicEffect(getThingPos(cid), 1)
elseif msgcontains(msg, 'jounin') and talkState[talkUser] == 1 then
doPlayerSetVocation(cid, 2)
doSendMagicEffect(getThingPos(uid), 1)
Para fazer um NPC do 0, digamos que existe um molde:
O início do seu script deve conter isso no início:
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
E isso no final:
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Existem também outros moldes, mas pode usar sempre esse.
Depois basta construir um script normalmente usando
if msgcontains(msg, "blablabla")
para checar oq o player fala e
talkState para ajudar na organização (ordem em que as palavras devem ser ditas pelo player).
Como usar o talkState?
Basicamente, você pode pensar que ele é uma variável global à qual pode-se atribuir qualquer valor. Vou usar seu NPC como exemplo de uso do talkUser:
if (msgcontains(msg, 'promotion')) then
talkState[talkUser] = 1
selfSay('Wich vocation do you choose? chunin, jounin, hokage, sanin or senin?', cid)
end
Essa parte faz o seguinte: Se o jogador disser "promotion" ao NPC, talkState[talkUser] ganhará valor 1.
if msgcontains(msg, 'chunin') and talkState[talkUser] == 1 then
Essa parte vai checar duas coisas: Se a palavra dita foi "chunin" e se o valor de talkState[talkUser] é 1. Se o valor não for 1, não adiantará nada dizer a palavra certa e vice-versa.
É basicamente isso, vc pode ir dando os valores para talkState[talkUser] conforme vc quer que seja a ordem das falas.
Espero que tenha dado para entender, ainda não sou muito bom explicando =S