Aew pessoal... Lembrando que qualquer dúvida só perguntar... ![]()
- Fórum
- OTServ
- Recursos
- Scripting
- NPCs, monsters e raids
- [Npc] - Gemeos Briguentos
3
1.8k
19 de janeiro de 2010 às 11:55
1 ano depois...
Aew pessoal... Lembrando que qualquer dúvida só perguntar... ![]()
info
Grupo: Campones
Registrado: 18/08/07
Posts: 4
Reputação: -1
Revirei a web procurando por um NPC que nos enviasse em uma missão atrás de um item, não sei se os membros daqui acham isso fácil, mas eu tive que me desdobrar durante uma tarde inteira!!! >_<'
Espero que curtam... ._.
Vamos ao que interessa:
A idéia é simples: Criar 2 NPCs gêmeos, um buscando por um item, outro o tirando do irmão.
No caso nosso item será uma pá.
Os chamei, respectivamente, de Jaum e Adaum pois o cenário no qual eles ficam é campestre, mas fiquem a vontade para alterar pelo que quiserem, tanto os nomes, quanto os objetos envolvidos.
Duplique um .xml da pasta \npc e apague tudo o que estiver nele. Cole o código abaixo e nomeie o arquivo como Jaum
Faça o mesmo, usando o código abaixo, e nomeio o arquivo de Adaum.
Agora, na pasta \npc\scripts crie dois arquivos.lua, Jaum e Adaum e use os códigos abaixo, respectivamente, para eles:
EXPLICAÇÃO POR PARTES (ou você achou que ia ficar no vácuo?):
PARTE I - O básico para funcionar
Essa parte eu não sei do que trata, não a ponto de explicar pelo menos. E, confesso, não me fez falta alguma. xDDD Se alguém estiver interessado em complementar a explicação, fique a vontade. 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 endPARTE II - Chamar números de palavras mais convenientes facilita a compreensão
PARTE III - PRESTEM MUITA ATENÇÃO ONDE AS CONDIÇÕES SE (IF) COMEÇAM E ONDE TERMINAM
if msgcontains(msg, 'shovel') then -- se vc disser 'shovel' e if getstorage == 1 then -- se tem o storage igual a 1 (ou seja, se já entregou a shovel) então npcHandler:say("Voce jah completou o trabalho!", cid) -- npc diz elseif getstorage < 1 then -- senão, caso tenha o storage abaixo de 1 (não tenha dado a shovel), então npcHandler:say("Encontrou-a?", cid) --npc diz talkState[talkUser] = 1 -- ativa fala1 end elseif msgcontains(msg, 'trabalho') then -- se vc disser 'trabalho' e if getstorage < 1 then -- tiver o storage abaixo de 1 npcHandler:say("Meu irmao gemeo escondeu minha {shovel} de novo. ", cid) -- npc diz elseif getstorage == 1 then -- senão, caso tenha o storage igual a 1 npcHandler:say("Voce completou o trabalho, obrigado.", cid) -- npc diz end elseif msgcontains(msg, 'sim') then -- se disser 'sim' e if talkState[talkUser] == 1 then -- se a fala1 estiver ativa (olhe mais acima, ter a fala1 ativa significa que o npc está perguntando se encontrou a shovel e vc acabou de dizer que sim) if getstorage < 1 then -- se storage for menor que 1 (novamente: se não entregou a SHOVEL) if doPlayerRemoveItem(cid, shovelid, 1) == TRUE then -- e se for possível remover a shovelid (olhe no início, verá que shovelid = 2554) do seu char, então npcHandler:say("Voce me trouxe a shovel, agora posso cavar em paz...", cid) -- npc diz setPlayerStorageValue(cid, storage, 1) -- ativa o storage valendo 1 (Isso significará que você entregou a SHOVEL) doPlayerAddExp(cid, 200) -- adiciona 200 exp pro teu char talkState[talkUser] = 0 -- desativa fala1 elseif doPlayerRemoveItem(cid, shovelid, 1) == FALSE then -- se não for possível remover a shovel (ou seja, se não estiver carregando uma) então npcHandler:say(sorrymessage, cid) -- npc diz a 'sorrymessage' (leia no início qual é a sorrymessage) talkState[talkUser] = 0 -- desativa fala1 end end end elseif(msgcontains(msg, 'nao') and talkState[talkUser] == 1) then -- se vc disser que 'não' com a fala1 ativa respondeu negativamente a pergunta 'Encontrou-a?') npcHandler:say("Tudo bem... Volte ao concluir o trabalho.", cid) -- e o npc dirá isso talkState[talkUser] = 0 -- e desativa a fala1 endPARTE IV - Mais comandos indispensáveis (TEM QUE TER) mas dispensáveis de compreender (ao menos eu penso assim)
-- OBS: PARTE I e IV idênticas ao evento anterior
PARTE II - Só muda a sorrymsg
PARTE III - Gêmeo sacana! XD (Continue prestando atenção onde os IF começam e acabam
if msgcontains(msg, 'duvido') then -- se disser 'duvido' (olha a msg_greet do segundo quote <parameter key="message_greet" value="Opa |PLAYERNAME|! Duvida eu roubar a shovel do meu irmao e a esconder soh de sacanagem?" /> e if getstorage < 1 then -- o storage estiver abaixo de um (ou seja, a SHOVEL foi entregue pro Jaum e roubada pelo Adaum já) npcHandler:say("Jah te entreguei a shovel rapah...", cid) -- npc diz elseif getstorage == 1 then -- senão, caso o storage seja igual a 1 (ou seja, caso a SHOVEL ainda esteja com o Jaum) então npcHandler:say("Duvida mesmo? Ele tah me olhando, esconde por mim?", cid) -- npc diz talkState[talkUser] = 1 -- ativa fala1 end elseif msgcontains(msg, 'sim') then -- se disser 'sim' e if talkState[talkUser] == 1 then -- se a fala1 estiver ativa (ou seja, se estiver dizendo sim para a pergunta: "Duvida mesmo? Ele tah me olhando, esconde por mim?") if getstorage == 1 then -- se storage for igual a 1 (ou seja... se a SHOVEL estiver com o Jaum) npcHandler:say("Tome, escolha um lugar dificil hein.", cid) -- npc diz setPlayerStorageValue(cid, storage, 0) -- storage passa a valer zero agora! (A SHOVEL EH RETIRADA DO JAUM!) doPlayerAddItem(cid, 2554, 1) -- o Adaum passa a Shovel pra vc esconder! talkState[talkUser] = 0 -- desativa fala1 elseif getstorage == 0 then -- se storage for igual a zero... (ou seja, se o Jaum não tiver Shovel nehuma ainda) então npcHandler:say(sorrymessage, cid) -- ...o Adaum dirá a sorrymessage dele (olhe mais acima aew que vc acha) talkState[talkUser] = 0 -- desativa fala1 end end elseif(msgcontains(msg, 'nao') and talkState[talkUser] == 1) then -- se disser 'nao' e a fala1 estiver ativa estará dizendo negando a pergunta "Duvida mesmo? Ele tah me olhando, esconde por mim?") npcHandler:say("Tah com medo de uma brincadeira boba eh?", cid) -- e npc dirá isso talkState[talkUser] = 0 -- depois cancelará a fala1 endÉ isso aew. Foi meu primeiro tutorial, espero ter ajudado... O fiz porque, sinceramente, é uma droga encontrar tutoriais ensinando como fazer NPC's aceitando itens de quest. Esse aqui aceita e rouba o item também, dá pra fazer a quest quantas vezes quiser fazer... Aí vai da imaginação de cada um colocar os irmãos longe um do outro, trocar a shovel por um item mais legal... Por bichos fortes no caminho pra esse item, aumentar a experiência da missão... Enfim. Mudem a vontade
Se gostou, comente. ^-^ Se não gostou, por favor, comente dizendo os motivos. ^^
Adoro críticas, são elas, unidas à nossa força de vontade, que nos fazem evoluir.
______________________________
Att. Cough
Orkut: Cough
Msn: fernando._.fsb@hotmail.com