Ir para conteúdo

[Npc] Oraculo Br (8.60 A 8.70)


rodrigoup

Posts Recomendados

E ae galera!! Blz? Bom... Esse eh meu primeiro post, então espero q gostem.

Esse eh o Oraculo q eu mesmo fiz. Tah ae:

 

Nome: Oraculo

Versão Testada: 8.60 e 8.70

Servidor Testado: The Forgotten Server (Não lembro a versão)

 

 

 

Tutorial e Scripts

 

Arquivo .xml:

 

 

 

 

Certo... Primeiro, veja se na pasta "data/npc" tem o The Oracle original. Se tiver, (Com certeza deve ter) vc abre o arquivo dele com o bloco de notas... ( Eu uso o Notepad++. Eh melhor pra entender as coisas. Deve tar escrito "oracle.xml" ou outra coisa parecida.) Apaga tudo q tiver la dentro e coloca isso:


<?xml version="1.0"?>
<npc name="Oraculo" script="data/npc/scripts/oraculo.lua" access="1" monster="1" speed="0" lookdir="2" pushable="0" level="100">
<health now="150" max="150"/>
<look typeex="1448" head="0" body="0" legs="0" feet="0" corpse="0"/>
<parameters>
<parameter key="message_greet" value="Ola |PLAYERNAME|. Em que posso ser ultil?"/>
<parameter key="message_farewell" value="Adeus."/>
<parameter key="message_walkaway" value="Ate logo entao..." />
</parameters>
</npc>

Se não tiver o arquivo do The Oracle original, eh soh vc copiar um qualquer lá, apagar tudo q tiver dentro, colar esse código ai em cima e renomear o arquivo pra "Oraculo.xml".

 

Arquivo .lua:

 

Certo... Depois de fazer isso, vc vai la em "data/npc/scripts" e procura pelo arquivo original do oraculo tbm. Se tiver lá, vc abre ele, apaga tudo q tiver dentro e coloca isso:

 

---- Oraculo Criado por Rodrigo Santos ----

 

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

 

if msgcontains(msg, "destino") and getPlayerStorageValue(cid, oraculo) - 1 then

selfSay("Hum... Destino? Vc quer encarar seu destino?", cid)

talkState[cid] = 1

 

elseif msgcontains(msg, "destino") and getPlayerStorageValue(cid, oraculo) == 1 then

selfSay("Rs... Vc de novo... E entao? Conseguiu ficar mais forte para encarar seu destino?", cid)

talkState[cid] = 1

end

 

if msgcontains(msg, 'sim') and talkState[cid] == 0 and getPlayerLevel(cid) >= 8 then

selfSay("Hum... Otimo... Entao vc quer sair da ilha de Rookgaard e ir para o Continente Principal?", cid)

talkState[cid] = 1

 

else

if talkState[cid] == 0 and msgcontains(msg, 'sim') and getPlayerLevel(cid) < 8 then

selfSay("Voce acha q isso eh uma brincadeira? Volte quando estiver forte.", cid)

setPlayerStorageValue(cid, oraculo, 1)

return true

end

 

if msgcontains(msg, 'sim') and talkState[cid] == 1 then

selfSay("Tudo bem. Mas para ir ao Continente Pricipal vc, primeiro, devera escolher uma profissao, {ok}?", cid)

talkState[cid] = 2

end

 

if msgcontains(msg, 'ok') and talkState[cid] == 2 then

selfSay("Otimo... As profissoes q vc pode escolher sao: {Feiticeiro}, {Druida}, {Paladino} e {Cavaleiro}.", cid)

selfSay("Qual delas vc deseja exercer?", cid)

talkState[cid] = 3

end

 

if msgcontains(msg, 'feiticeiro') and talkState[cid] == 3 then

selfSay("Tem certeza q deseja ser um(a) Feiticeiro(a)?", cid)

selfSay("Saiba q qualquer decisao q tome eh irrevogavel. Portanto pense bem...", cid)

talkState[cid] = 4

elseif msgcontains(msg, 'druida') and talkState[cid] == 3 then

selfSay("Tem certeza q deseja ser um(a) Druida?", cid)

selfSay("Saiba q qualquer decisao q tome eh irrevogavel. Portanto pense bem...", cid)

talkState[cid] = 5

elseif msgcontains(msg, 'paladino') and talkState[cid] == 3 then

selfSay("Tem certeza q deseja ser um(a) Paladino(a)?", cid)

selfSay("Saiba q qualquer decisao q tome eh irrevogavel. Portanto pense bem...", cid)

talkState[cid] = 6

elseif msgcontains(msg, 'cavaleiro') and talkState[cid] == 3 then

selfSay("Tem certeza q deseja ser um(a) Cavaleiro(a)?", cid)

selfSay("Saiba q qualquer decisao q tome eh irrevogavel. Portanto pense bem...", cid)

talkState[cid] = 7

end

 

if msgcontains(msg, 'sim') and talkState[cid] == 4 then

doPlayerSetVocation(cid, 1)

doSendMagicEffect(getPlayerPosition(cid), 10)

doPlayerSendTextMessage(cid, 22,"Agora vc eh um(a) Feiticeiro(a)")

talkState[cid] = 8

elseif msgcontains(msg, 'sim') and talkState[cid] == 5 then

doPlayerSetVocation(cid, 2)

doSendMagicEffect(getPlayerPosition(cid), 10)

doPlayerSendTextMessage(cid, 22,"Agora vc eh um(a) Druida")

talkState[cid] = 9

elseif msgcontains(msg, 'sim') and talkState[cid] == 6 then

doPlayerSetVocation(cid, 3)

doSendMagicEffect(getPlayerPosition(cid), 10)

doPlayerSendTextMessage(cid, 22,"Agora vc eh um(a) Paladino(a)")

talkState[cid] = 10

elseif msgcontains(msg, 'sim') and talkState[cid] == 7 then

doPlayerSetVocation(cid, 4)----------------------------------------------------------ID da vocação escolhida (Conferida em "data/XML/vocations")

doSendMagicEffect(getPlayerPosition(cid), 10)

doPlayerSendTextMessage(cid, 22,"Agora vc eh um(a) Cavaleiro(a)")

talkState[cid] = 11

end

 

if talkState[cid] == 8 or talkState[cid] == 9 or talkState[cid] == 10 or talkState[cid] == 11 then

selfSay("Otimo agora, q vc ja escolheu sua vocacao, vc pode escolher sua nova cidade... {Ok}?", cid)

talkState[cid] = 12

end

 

if msgcontains(msg, "ok") and talkState[cid] == 12 then

selfSay("Otimo! As cidades q vc pode escolher {PARA MORAR} sao: {Carlin}, {Thais} e {Venore}.", cid)

selfSay("Em qual delas vc deseja {viver}?", cid)

talkState[cid] = 13

end

 

if msgcontains(msg, "carlin") and talkState[cid] == 13 then

selfSay("Tem certeza q deseja {VIVER} em Carlin?", cid)

talkState[cid] = 14

elseif msgcontains(msg, "thais") and talkState[cid] == 13 then

selfSay("Tem certeza q deseja {VIVER} em Thais?", cid)

talkState[cid] = 15

elseif msgcontains(msg, "venore") and talkState[cid] == 13 then

selfSay("Tem certeza q deseja {VIVER} em Venore?", cid)

talkState[cid] = 16

end

 

if msgcontains(msg, "sim") and talkState[cid] == 14 then

selfSay("Boa viagem e tome cuidado", cid)

doPlayerSetTown(cid, 2)-------------------------------------------------------ID da nova cidade (Conferido pelo map editor)

doTeleportThing(cid, {x=32360, y=31782, z=7, stackpos=253})-------------------coordenadas da nova cidade

doSendMagicEffect({x=32360, y=31782, z=7, stackpos=253}, 10)------------------coordenadas do efeito de teleporte

doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Carlin")

elseif msgcontains(msg, "sim") and talkState[cid] == 15 then

selfSay("Boa viagem e tome cuidado", cid)

doPlayerSetTown(cid, 5)-------------------------------------------------------ID da nova cidade (Conferido pelo map editor)

doTeleportThing(cid, {x=32369, y=32241, z=7, stackpos=253})-------------------coordenadas da nova cidade

doSendMagicEffect({x=32369, y=32241, z=7, stackpos=253}, 10)------------------coordenadas do efeito de teleporte

doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Thais")

elseif msgcontains(msg, "sim") and talkState[cid] == 16 then

selfSay("Boa viagem e tome cuidado", cid)

doPlayerSetTown(cid, 6)-------------------------------------------------------ID da nova cidade (Conferido pelo map editor)

doTeleportThing(cid, {x=32957, y=32076, z=7, stackpos=253})-------------------coordenadas da nova cidade

doSendMagicEffect({x=32957, y=32076, z=7, stackpos=253}, 10)------------------coordenadas do efeito de teleporte

doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Venore")

end

return true

end

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

 

Isso ae... Despois de colar, salve, feche e renomeie o arquivo para "oraculo.lua". Se não tiver o arquivo original do oraculo lá, eh soh vc copiar um qualquer lá, apagar tudo q tiver dentro, colar isso q ta ai em cima e renomear o arquivo para "oraculo.lua".

 

 

 

 

 

Como Edita-lo

 

 

Certo... Agora vou ensinar como editar ele ao seu gosto. Preste atenção pq vc tem q fazer do jeito q eu ensinar! Eu vou dizer tudo q vcs devem saber para edita-lo. Mesmo q seja dificil, se vc fizer do jeito q eu ensinar, vai funcionar direitinho. Afinal, esse eh o script q eu uso no meu servidor. E, no meu, ele funciona direitinho. Aí vai:

 

Adicionando Novas Cidades:

 

Para adicionar novas cidade, eh simples. Basta vc copiar oq tah de verde e colar antes do end q esta em negrito. Tem um end la em cima, q eh onde o player diz o nome da cidade e um end ali em baixo, q eh pra onde o player vai ser levado. As partes em laranja são os lugares q vc pode editar de acordo com a cidade q v vai adicionar. Veja o Exemplo:

 

Digamos q eu queira adicionar uma cidade chamada "Alabasta". (Lol... Cidade do One Piece) Basta vc fazer o seguinte:

 

Antes:

elseif msgcontains(msg, "venore") and talkState[cid] == 13 then

selfSay("Tem certeza q deseja {VIVER} em Venore?", cid)

talkState[cid] = 16

end

 

 

Depois:

elseif msgcontains(msg, "venore") and talkState[cid] == 13 then

selfSay("Tem certeza q deseja {VIVER} em Venore?", cid)

talkState[cid] = 16

elseif msgcontains(msg, "alabasta") and talkState[cid] == 13 then

selfSay("Tem certeza q deseja {VIVER} em Alabasta?",cid)

talkState[cid] = 17

 

end

 

Repare oq eu mudei: Onde estava "venore" eu coloquei o nome da cidade q eu qria adicionar, "alabasta". E isso eh oq o player vai ter q falar pro oraculo saber q ele quer viver em alabasta. Depois eu mudei a frase q o oraculo diz. Fazendo com q ele diga "Tem certeza q deseja {VIVER} em Alabasta?". E por ultimo e o mais importante, eu mudei o talkState. Pq, se o player disser q qr viver em alabasta, o talkState dele vai ser 17. Isso ajuda na outra parte. Mais em baixo. Era assim:

 

Antes:

elseif msgcontains(msg, "sim") and talkState[cid] == 16 then

selfSay("Boa viagem e tome cuidado", cid)

doPlayerSetTown(cid, 6)

doTeleportThing(cid, {x=32957, y=32076, z=7, stackpos=253})

doSendMagicEffect({x=32957, y=32076, z=7, stackpos=253}, 10)

doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Venore")

end

 

 

Depois:

elseif msgcontains(msg, "sim") and talkState[cid] == 16 then

selfSay("Boa viagem e tome cuidado", cid)

doPlayerSetTown(cid, 6)

doTeleportThing(cid, {x=32957, y=32076, z=7, stackpos=253})

doSendMagicEffect({x=32957, y=32076, z=7, stackpos=253}, 10)

doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Venore")

 

elseif msgcontains(msg, "sim") and talkState[cid] == 17 then

selfSay("Boa viagem e tome cuidado", cid)

doPlayerSetTown(cid, 10)

doTeleportThing(cid, {x=?????, y=?????, z=7, stackpos=253})

doSendMagicEffect({x=?????, y=?????, z=7, stackpos=253}, 10)

doPlayerSendTextMessage(cid, 22,"Bem vindo. Agora vc eh um cidadao de Alabasta")

end

 

Viu soh? Akele 17 q foi colocado la em cima, foi usado bem ali. Se fosse 16 o player teria sido mandado pra Venore, mesmo q ele tivesse dito q qira ir pra Alabasta. E repare tbm q tudo isso foi colocado antes do end.

 

 

Adicionando Novas Classes:

 

Certo... Pra adicionar novas classes eh soh fazer a mesma coisa q eu ensinei em "Adicionando Novas Cidades". Primeiro vc copia oq ta de azul. (La em cima gente, no script. Esse aki foi soh uma explicação.) E edita oq ta de laranja tbm. Num vô nem dá exemplo pq, depois de ver a explicação de como adicionar as cidades, vc ja deve saber oq fazer. Soh vou explicar uma coisa importantíssima, nesse caso. Se vc adicionar uma nova classe, vc vai ter q arrumar Todos os outros talkStates. Pq elas tem q ficar na ordem. Repare, no script, q os numeros q estão em roxo são os numeros das talkStates. Eles sao os q vc vai ter q arrumar primeiro. Depois vc arruma os q estao em azul claro.

Os numeros q estão em vermelho são apenas pra lembras vcs qual eh o talkState q vc vai ter q mudar na hora de adicionar uma cidade ou uma profissao nova. Aí, eu mudei a cor dos outros talkStates pra vc saber qual sao os outros talkStates q vc vai ter q arrumar, caso adicione uma PROFISSÃO nova. Se vc for adicionar soh uma cidade nova, nao precisa arrumar todos os outros talkStates.

 

 

Retirando Cidades e/ou Profissões:

 

Ahhhh.... Essa eh a parte mais facil, neh? Num precisava nem eu ter colocado... Rsrsrs... Mas vou colocar pq tem uma coisa q eh preciso saber tbm. Caso vc RETIRE uma PROFISSÃO, vai ser necessário arrumar as outras talkStates tbm... Eh, eu sei... Vc deve tar pensando: "Mas ki P*** eh essa q tudo q eu vou fazer tem q arrumar essa P*** de talkState..." Rsrsrs... Mas eh isso mesmo. Se vc quiser q o script funcione, vai ter q arrumar sim. Caso vc queira retirar uma cidade não será preciso arrumar nada nao. Soh nos lugares onde estão em laranja. Ah, eh... Pra retirar uma cidade ou profissao, eh soh vc apagar oq ta de azul, ou de verde.

 

 

Agradecimentos:

 

Bom.. Num tenho q agradecer a ninguem, pois o script eh todinho meu. Soh agradecer a vc por ter lido esse post enorme (Espero q me desculpe) e... Q se o meu script, por algum milagre da ciência, não funcionar no seu servidor, espero q vc encontre um q funcione. Eu tentei, neh? Mas eh isso aí... Por favor, comentem, critiquem, ensinem e me digam se tem alguma coisa q eu poderia melhorar, tanto no script, qto no post. (Esse eh meu primeiro post, então... Peguem leve. xD) Flws e até a próxima!

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...