Introdução:
Primeiramente, vou explicar, a forma em que eu comecei aprender a criar npcs mais complexos, e digo uma coisa.. sozinho se você reparar bem nos detalhes, creio eu que você pode criar coisas impressionantes, utilizando da sua criatividade. Então, ando tentando me virar sozinho, sempre. Por isso, caso ajam functions que não precisam ser postas, quero que alguém que saiba mais que eu corrija-me por favor!
O começo:
Cansado, de não ser respondido, em um outro fórum, que hoje em dia já abandonei, eu fui atrás, de uma forma independente. Baixei vários Otservers, e comecei a prestar atenção em casa function declarada, cada situação. E como já estudei um pouco de PHP, e Javascript, tinha uma base da tal programação, que por fim é muito diferente, mas como toda programação, tem suas semelhanças.
Então, primeiramente, notei no começo dos Scripts tais codes:
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
Certo, então como isso é um tutorial, eu acabei de lhe ensinar a primeira parte do script em si. Logo após, eu comecei a prestar muita atenção nos "do" que é o que "faz" uma ação. Então vou passar a vocês alguns "do" que eu lembro.
doPlayerSetVocation(cid,iddavocation) // Adiciona uma vocação no player
doPlayerAddItem(cid,iddoitem) // Adiciona um item no player
doPlayerSetStorageValue(cid,storage,partedaquest) //Adiciona um storage ao player
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,'message') //Manda uma mensagem em cor laranja no default
doPlayerAddExperience(cid,experience) // Adiciona Experiência ao player
playerLearnInstantSpell(cid, 'Nome da spell') // Não é "do" mas ensina a fazer uma magia
doTeleportThing(cid,{x=xpostion,y=ypostion,z=zpostion}) //Teleporta o Player a um certo "local".
http://tibiaking.com...de-funcoes-lua/ Uma lista de funções!
Essas foram quais eu lembrei agora, devo ter esquecido MUITAS, mas enfim, conforme forem me lembrando, e eu for me lembrando, vou adicionando ao Tutorial. Ok, depois disso aprendi que um SelfSay('Faz a pessoa falar',cid).
Com a gloriosa programação, ou com um inglês básico, você vai saber o que é "if" (se, caso..) ,else (senão).
Com isso junto, você pode criar um "se player falar". Que se daria com esse código:
if(msgcontains(msg, 'quest')) then
selfSay('Você tem x quests, desejas saber alguma de {suas quests?}',cid)
else
selfSay('Isso não me interessa agora',cid)
Aportugueisando ou Traduzindo pro que você entende:
caso(contenha(mensagem, 'quest')) então
diga('Você tem x quests, desejas saber alguma de {suas quests?}',cid)
senão
diga('Isso não me interessa agora',cid)
Deu pra entender né?
Então montando uma estrutura em português.
Isso vai ficar assim:
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(getPlayerStorageValue(cid,9005)==1) then
selfSay('Você já fez essa quest',cid)
else
if(msgcontains(msg, 'Jhonatan') then
selfSay('Olá Jhonatan, obrigado por fazer esse tutorial! Receba 100 de experiência por isso!',cid)
doPlayerAddExperience(cid,100)
doPlayerSetStorageValue(cid,9005,1)
else
selfSay('Seu lugar não é aqui.',cid)
end
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
if(getPlayerStorageValue(cid,9005)==1)
Isso eu não expliquei ainda, 'get' é igual a 'ter' na programação aqui. Então se ele ter a storage value 9005 == 1 (1 é o que a gente adicionou depois da Storage vejam) então ele vai dizer aquilo, se ele não ter essa storage.. ele vai continuar o código.
end
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Tudo que se abre, se fecha, a cada 'If' dito, é um 'end' que tem que ser dado.
E aquilo ali no final, sempre vai no final!
Bom por enquanto é isso, vou ver se lembro mais alguma coisa pra por aqui.. Qualquer dúvida, só falar..
Se você gostou, olha, é algo que vai melhorar MUITO seu OT! Então, se puder dar +REP, eu gostaria muito!
Abraços!