tibiafanmaster 0 #1 Postado 26 Junho, 2009 Nome do NPC: The Oracle Protocolo: 8.1+ Servidor testado: TFS 0.3.3 Autor: Tibiafanmaster Descrição: NPC The Oracle, mais muito mais eficiênte e criativo que os demais, ele teleporta para a cidade que você escolher, muda o town id e ja te deixa com os equips, dependendo da vocação, fis para o meu OT, e axei muito egoismo nao postar aqui na OTNet! Dentro da pasta data/npc crie um arquivo chamado The Oracle.xml e cole isso dentro do arquivo: <?xml version="1.0" encoding="UTF-8"?><npc name="The Oracle" floorchange="0" walkinterval="0" script="data/npc/scripts/oracle.lua"> <look typeex="1448"/> </npc> Salve e feche. Agora na pasta data/npc/scripts crie um arquivo chamado oracle.lua e cole isso dentro: -- Não mude nada aqui focus = 0 talk_start = 0 target = 0 following = false attacking = false talk_state = 0 cname = '' vocation = 0 function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Mais?...') focus = 0 talk_start = 0 end end function onCreatureTurn(creature) end function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end function onCreatureSay(cid, type, msg) cname = getCreatureName(cid) msg = string.lower(msg) if ((string.find(msg, '(%a*)hi(%a*)')) and (focus == 0)) and getDistanceToCreature(cid) < 4 then selfSay('Saudações ' .. cname .. '! Você está preparado para encarar o seu destino?') talk_state = 0 focus = cid talk_start = os.clock() elseif string.find(msg, '(%a*)hi(%a*)') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then selfSay('Paciência, ' .. cname .. 'Paciência.') elseif string.find(msg, '(%a*)bye(%a*)') and getDistanceToCreature(cid) < 4 then selfSay('Adeus, ' .. cname .. '!') talk_state = 0 focus = 0 talk_start = 0 elseif focus == cid then talk_start = os.clock() if talk_state == 0 then if msgcontains(msg, 'yes') then if getPlayerLevel(cid) >= 8 then -- aqui você muda o lvl nescessário selfSay('Magnífico! O que você quer ser? um Knight, um Paladin, um Sorcerer ou um Druid?') talk_state = 1 else selfSay('Lamento, voce precisa de level 8 para sair de Rook.') talk_state = 0 end else selfSay('Então volte quando estiver preparado.') talk_state = 0 end elseif talk_state == 1 then talk_state = 2 if msgcontains(msg, 'sorcerer') then selfSay('Um mistico Sorcerer! Tem certeza?') vocation = 1 elseif msgcontains(msg, 'druid') then selfSay('Um misterioso Druid! Tem certeza?') vocation = 2 elseif msgcontains(msg, 'paladin') then selfSay('Um rápido Paladin! Tem certeza?') vocation = 3 elseif msgcontains(msg, 'knight') then selfSay('Um incrível Knight! Tem certeza?') vocation = 4 else selfSay('Desculpe, esta vocação não existe.') vocation = 0 talk_state = 1 end elseif talk_state == 2 then if msgcontains(msg, 'CITY') then selfSay('Explendido! você quer mesmo ir para CITY?') talk_state = 3 else selfSay('Certo... qual vocação você deseja?') talk_state = 1 end elseif talk_state == 3 then if msgcontains(msg, 'yes') then doPlayerSetTown(cid, 1) doPlayerSetVocation(cid,vocation) selfSay('Boa sorte, jovem aventureiro!') doTeleportThing(cid,{x=000, y=000, z=0}) COLOR="Lime"]-- coordenadas do templo[/color] doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Parabéns agora você está em CITY.') doPlayerRemoveItem(cid,2397,1) -- items a remover do player doPlayerRemoveItem(cid,2511,1) doPlayerRemoveItem(cid,2125,1) doPlayerRemoveItem(cid,2458,1) doPlayerRemoveItem(cid,2464,1) doPlayerRemoveItem(cid,2648,1) doPlayerRemoveItem(cid,2643,1) doPlayerRemoveItem(cid,2398,1) doPlayerRemoveItem(cid,2376,1) doPlayerRemoveItem(cid,2412,1) doPlayerRemoveItem(cid,2388,1) doPlayerRemoveItem(cid,2473,1) doPlayerRemoveItem(cid,2050,1) doPlayerRemoveItem(cid,2480,1) doPlayerRemoveItem(cid,2530,1) doPlayerAddItem(cid,2152,50) -- 50 platinum coins o player recebe if getPlayerVocation(cid) == 4 then doPlayerAddItem(cid,2532,1) -- Items que o knight irá receber doPlayerAddItem(cid,2661,1) doPlayerAddItem(cid,2457,1) doPlayerAddItem(cid,2463,1) doPlayerAddItem(cid,2647,1) doPlayerAddItem(cid,2641,1) elseif getPlayerVocation(cid) == 3 then doPlayerAddItem(cid,2532,1) -- Items que o paladin irá receber doPlayerAddItem(cid,2661,1) doPlayerAddItem(cid,8923,1) doPlayerAddItem(cid,2664,1) doPlayerAddItem(cid,8872,1) doPlayerAddItem(cid,2641,1) elseif getPlayerVocation(cid) == 2 or getPlayerVocation(cid) == 1 then doPlayerAddItem(cid,2532,1) -- Items que o druid ou sorcerer irá receber doPlayerAddItem(cid,2661,1) doPlayerAddItem(cid,2663,1) doPlayerAddItem(cid,8870,1) doPlayerAddItem(cid,7730,1) doPlayerAddItem(cid,2641,1) end talk_state = 0 focus = 0 talk_start = 0 else selfSay('Desculpe, por enquanto apenas posso te mandar a uma city.') talk_state = 3 end end end end function onCreatureChangeOutfit(creature) end function onThink() if (os.clock() - talk_start) > 45 then if focus > 0 then selfSay('Alguem mais?') end focus = 0 end if focus ~= 0 then if getDistanceToCreature(focus) > 5 then selfSay('Até logo... então') focus = 0 end end end Salve e feche. Explicação: doPlayerXItem(cid,2641,1) os doRemove e doAdd é obvio, lá vc configura os ids e quantos do itens serão adds e removeds ID Quantidade Mude o templo, no meu caso o Oraculo remove: Chain Armor, Chain Legs, Chain Helmet, Brass Shield, Longsword, Crystal Necklace e Leather Boots. E Loots dos bixos de Rook EX: Katana, Mace e Hatchet. E Adiciona conforme as Vocações: Knight: Plate Armor, Plate Legs, Steel Helmet, Ancient Shield, Trapper Boots e Scarf. Paladin: Belted Cape, Cowl, Ranger Legs, Trapper Boots, Ancient Shield e Scarf. Druid e Sorc: Mystic Truban, Spirit Cloak, Blue Legs, Trapper Boots, Ancient Shield e Scarf. Os Weapons no meu ot copiei a AnihhiChest mudei os uids os storages os Items etc e fiz um bau com o item de cada vocação no templo. ATENÇÃO: MUDE OS ITEMS QUE IRÃO COMEÇAR COM SEU PLAYER NA PASTA DATA/CREATURESCRIPTS/FIRSTITEMS.LUA Obrigado pela atenção! (Y) Compartilhar este post Link para o post
Gpwjhlkdcf 21 #2 Postado 28 Junho, 2009 Aprovado e Movido para Download de NPCs. Observação: Só estarei aprovando porque o seu NPC tem coisas a mais, mas já temos varios NPCs como esse. Compartilhar este post Link para o post
KwiiBy~ 0 #3 Postado 1 Julho, 2009 Valew tava a um bom tempo procurando isto! Compartilhar este post Link para o post
2585120000 0 #4 Postado 7 Julho, 2009 Não funciona cara... TFS 90% dos NPCs em .lua não funcionam, mais valeu! Compartilhar este post Link para o post
tibiafanmaster 0 #5 Postado 7 Julho, 2009 (editado) Aqui funcionou, perfeitamente, use configure direito, teste e depois comente aqui. NPCs em LUA funcionam como antes nos tfs, as vezes algumas das funções ficam ultrapassadas EX: Lua; creatureGetName, (Ultrapassada deve ser substituida por: getCreatureName) no caso do meu npc, ele usa as mais atuais funções. Sem Mais: Tibiafanmaster Editado 7 Julho, 2009 por tibiafanmaster Compartilhar este post Link para o post
Eventide 7 #6 Postado 12 Julho, 2009 Eu lembro quando creatureGetName era obsoleto em 8.0 e passou a não existir em 8.1 se não me engano.. ;o~ Ai alguns sub-distros mais fraquinhos continuavam usando isso, e quando nego ia usar o NPC tinha que substituir as funções tudo, e não era só essa que nego deixava pra traz, era um tanto, mo trabalheira! mas enfim, faltou uma identação nesse NPC ai eim, e se poderia fazer uma configuração bem fácil pra quem for instalar também. ;]~ E curti a ideia de já colocar os items pro jogador pelo Oracle! old times... IUEHUAIEAIUEH @numeros estranhos se você falar o erro que da talvez agente possa ajudar, não acha? ;/ Compartilhar este post Link para o post
Mock 32 #7 Postado 12 Julho, 2009 quanto tempo nao vejo um npc da forma antiga. você desenterrou isso o.o' Compartilhar este post Link para o post
rivcdrigo 0 #8 Postado 26 Julho, 2009 Ei aqui tá aparecendo isso.. [26/07/2009 15:45:54] Lua Script Error: [Npc interface] [26/07/2009 15:45:54] data/npc/scripts/oracle.lua:onCreatureSay [26/07/2009 15:45:54] data/npc/scripts/oracle.lua:44: attempt to compare nil with number [26/07/2009 15:45:54] stack traceback: [26/07/2009 15:45:54] data/npc/scripts/oracle.lua:44: in function <data/npc/scripts/oracle.lua:40> como resolvo? vlw Compartilhar este post Link para o post
kako_loko 0 #9 Postado 28 Julho, 2009 muito bom...Bom pra queles que Curtem Mapa Full e Tenha RookGuard aii é uma boa idéia colocar o The Oracle para passar de city e de Voc Compartilhar este post Link para o post
Elys Zarox 0 #10 Postado 30 Julho, 2009 Nossa deve ser o milesimo oracle que vejo aqui...qual a diferença desse pros outros? Só vi o negocio de dar itens dependendo da voc =p Compartilhar este post Link para o post
Gorgulf 0 #13 Postado 12 Setembro, 2009 isso é bom que n precisa fik enchendo de bau pros cara pega os itens muito bom! Compartilhar este post Link para o post