rodrigoup 25 Postado Janeiro 2, 2012 Share Postado Janeiro 2, 2012 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 https://xtibia.com/forum/topic/176867-npc-oraculo-br-860-a-870/ Compartilhar em outros sites More sharing options...
masquente 15 Postado Janeiro 7, 2012 Share Postado Janeiro 7, 2012 Olá amigo, primeiramente seja bem vindo ao fórum. O script funcionou perfeitamente aqui, script simples e funcional. Espero que traga mais scripts para nosso fórum abraços! Link para o comentário https://xtibia.com/forum/topic/176867-npc-oraculo-br-860-a-870/#findComment-1170929 Compartilhar em outros sites More sharing options...
rodrigoup 25 Postado Janeiro 9, 2012 Autor Share Postado Janeiro 9, 2012 Valeu pelo comentário... xD É sempre bom saber que gostaram do que eu fiz. Valeu mesmo. =) Link para o comentário https://xtibia.com/forum/topic/176867-npc-oraculo-br-860-a-870/#findComment-1171813 Compartilhar em outros sites More sharing options...
Posts Recomendados