Ir para conteúdo
Entre para seguir isso  
Eventide

oracle(funciona em qualquer versão 8.2+)

Recommended Posts

Eventide    7
Eventide

Nome do NPC: The Oracle

Protocolo: 8.2+

Servidor testado: TFS 0.3.3 (modificado por mim, mas isso não importa nesse caso)

Autor: Evesys

Descrição:

NPC oraculo igual o de rook, que muda vocação/town ID e teleporta o personagem, alem disso apresenta uma feature ainda não completa, que permite que o personagem recomesse a converça de onde parou caso o servidor caia ou o char seja kikado.

 

 

na pasta data/npc crie um arquivo chamado oracle.xml, e coloque isso dentro dele:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="The Oracle" floorchange="0" walkinterval="0" script="data/npc/scripts/oracle.lua">
<health now="150" max="150"/>
<look typeex="1448"/>
</npc>

 

na pasta data/npc/scripts/, crie um arquivo chamado oracle.lua, e coloque isso dentro dele:

-- area editavel
Oracle = {
Cities = { -- {id, 'nome', x, y, z, 'premium/free'}
{1, 'inittria', 5033, 5122, 7, 'free'},
{2,'excazian',5300,5268,7,'free'},
{3,'frizzo',5676,4883,7,'premium'}
},
Vocations = { -- {[id] = 'nome'}
[1] = 'sorcerer',
[2] = 'druid',
[3] = 'paladin',
[4] = 'knight'
},
frases = {
noLevel = 'CHILDREN! COME BACK WHEN YOU\'VE GROWN UP!',
hi = 'HELLO, CHILDREN. ARE YOU PREPARED TO FACE YOUR DESTINY?',
askVoc = 'WHAT VOCATION YOU WANT TO BE? ',
confirmVoc = 'ARE YOU SURE? THIS DECISION IS IRREVERSIBLE.',
askCity = 'DO YOU WANT TO LIVE IN ',
final = 'GOOD LUCK IN YOUR JOURNEY!',
bye = 'COME BACK WHEN YOU FEEL PREPARED'
},
talkStorage = 7897,
choos = {},
citiesLiberadas = {}
}
-- fim da area editavel
local function getVocations()
local ret = ""
for id,it in pairs(Oracle.Vocations) do
	if((id ~= #Oracle.Vocations - 1) and (id ~= #Oracle.Vocations)) then
		ret = ret.. it ..", "
	end
	if(id == #Oracle.Vocations) then
		ret = ret.. it .."?"
	elseif(id == #Oracle.Vocations - 1) then
		ret = ret.. it .." or "
	end
end
return ret
end


--[[>
                  npc por Evesys/Eventide
<------------------------------------- \m/ <[------]> \m/ ------------------------------------------->
<----> CONSERVE OS CREDITOS <---->
<--> 100% por Eventide, use e abuse deste NPC, mas não de seu dono! <-->->
<---> www.otserv.com.br <----><]]--

local focuses = {}
local function isFocused(cid)
for i, v in pairs(focuses) do
	if(v == cid) then
		return true
	end
end
return false
end

local function addFocus(cid)
if(not isFocused(cid)) then
	table.insert(focuses, cid)
end
end
local function removeFocus(cid)
for i, v in pairs(focuses) do
	if(v == cid) then
		table.remove(focuses, i)
		break
	end
end
end
local function lookAtFocus()
for i, v in pairs(focuses) do
	if(isPlayer(v) == TRUE) then
		doNpcSetCreatureFocus(v)
		return
	end
end
doNpcSetCreatureFocus(0)
end

function onCreatureAppear(cid)
end

function onCreatureDisappear(cid)
if(isFocused(cid)) then
	selfSay(Oracle.frases.bye, cid)
	removeFocus(cid)
end
end

function onCreatureSay(cid, type, msg)
talkstate = getPlayerStorageValue(cid, Oracle.talkStorage)
if((msg == "hi") and not (isFocused(cid))) then
	addFocus(cid)
	if(getPlayerLevel(cid) > 7) then
		selfSay(Oracle.frases.hi, cid)
	else
		selfSay(Oracle.frases.nolevel, cid)
	end
	setPlayerStorageValue(cid, Oracle.talkStorage, 1)
end
talkstate = getPlayerStorageValue(cid, Oracle.talkStorage)
if((talkstate == 1) and (msg == "yes") and (isFocused(cid))) then
	selfSay(" ".. Oracle.frases.askVoc .." ".. getVocations(), cid)
	setPlayerStorageValue(cid, Oracle.talkStorage, 2)
end
talkstate = getPlayerStorageValue(cid, Oracle.talkStorage)
if((talkstate == 2) and (isFocused(cid))) then
	for it = 1, #Oracle.Vocations do
		if(msg == Oracle.Vocations[it]) then
			selfSay(Oracle.frases.confirmVoc, cid)
			Oracle.choos.voc = it
			setPlayerStorageValue(cid, Oracle.talkStorage, 3)
			break
		end
	end
end
talkstate = getPlayerStorageValue(cid, Oracle.talkStorage)
if((talkstate == 3) and (isFocused(cid)) and (msg == "yes")) then
	for _,it in pairs(Oracle.Cities) do
		if((isPremium(cid)) and (it[6] == "premium")) then
			table.insert(Oracle.citiesLiberadas, it)
		elseif(it[6] == "free") then
			table.insert(Oracle.citiesLiberadas, it)
		end
	end
	ret = ""
	for id,it in pairs(Oracle.citiesLiberadas) do
		if((id ~= #Oracle.citiesLiberadas - 1) and (id ~= #Oracle.citiesLiberadas)) then
			ret = ret.. it[2] ..", "
		elseif(id == #Oracle.citiesLiberadas) then
			ret = ret.. it[2] .."?"
		elseif(id == #Oracle.citiesLiberadas - 1) then
			ret = ret.. it[2] .." or "
		end
	end
	selfSay(" ".. Oracle.frases.askCity .. ret .." ", cid)
	setPlayerStorageValue(cid, Oracle.talkStorage, 4)
end
talkstate = getPlayerStorageValue(cid, Oracle.talkStorage)
if((talkstate == 4) and (isFocused(cid)))then
	for id,it in pairs(Oracle.citiesLiberadas) do
		if(msg == it[2]) then
			Oracle.choos.city = it
			break
		end
	end
	selfSay("DO YOU CHOOSED TO BE A ".. Oracle.Vocations[Oracle.choos.voc] ..", AND TO BORN IN ".. Oracle.choos.city[2] ..". IT'S CORRECT?", cid)
	setPlayerStorageValue(cid, Oracle.talkStorage, 5)
end
talkstate = getPlayerStorageValue(cid, Oracle.talkStorage)
if((talkstate == 5) and (isFocused(cid)) and (msg == "yes")) then
	selfSay(Oracle.frases.final, cid)
	local goto = {x = Oracle.choos.city[3], y = Oracle.choos.city[4], z = Oracle.choos.city[5]}
	doTeleportThing(cid, goto)
	doPlayerSetTown(cid, Oracle.choos.city[1])
	doPlayerSetVocation(cid, Oracle.choos.voc)
	setPlayerStorageValue(cid, Oracle.talkStorage, -1)
	choos.city = 0
	choos.voc = 0
	removeFocus(cid)
end
talkstate = getPlayerStorageValue(cid, Oracle.talkStorage)
if((isFocused(cid)) and (msg == "bye") or not(isFocused(cid)) and (talkstate ~= -1) and (msg == bye)) then
	selfSay(Oracle.frases.bye, cid)
	setPlayerStorageValue(cid, Oracle.talkStorage, -1)
	Oracle.choos.city = 0
	Oracle.choos.voc = 0
	removeFocus(cid)	
end
end

function onPlayerCloseChannel(cid)
if(isFocused(cid)) then
	selfSay(frases.bye, cid)
	setPlayerStorageValue(cid, Oracle.talkStorage, -1)
	removeFocus(cid)
end
end

function onThink()
for i, focus in pairs(focuses) do
	if(isCreature(focus) == FALSE) then
		removeFocus(focus)
	else
		local distance = getDistanceTo(focus) or -1
		if((distance > 4) or (distance == -1)) then
			selfSay(Oracle.frases.bye, cid)
			removeFocus(focus)
		end
	end
end
lookAtFocus()
end

 

siga os comentários para editar.

 

espero ter ajudado, flws!

Editado por Eventide

Compartilhar este post


Link para o post
Gpwjhlkdcf    21
Gpwjhlkdcf

  • Aprovado e Movido para Download de NPCs.

 

Observação: Já temos um NPC assim, mas o seu está melhorado, então vou aprovar. :)

Compartilhar este post


Link para o post
masterc    1
masterc

muito bom

Compartilhar este post


Link para o post
kevens1    0
kevens1

Very good =D ficou ótimo evesys,continue a ssim =D

Compartilhar este post


Link para o post
Zephiroth.    0
Zephiroth.

Perfeito, Evesys.

Apesar de que hoje em dia não se vê muito rookgaard em OTs.

Compartilhar este post


Link para o post
ocaraal    0
ocaraal

coloquei esse no meu serv TFS 0.3.4 so que ta dando uns erros primeiro player lv 1 ja pode teleportar e mudar de classe fica dando uns erros de scipt no serv tem que deslogar e logar novamente acho que por causa dos itens que vai para o player pois quando deslogo e logo apos ter mudado os itens fica no chao

Compartilhar este post


Link para o post
rivcdrigo    0
rivcdrigo

8.5...

 

 

 

[25/07/2009 22:04:09] Lua Script Error: [Npc interface]

[25/07/2009 22:04:09] data/npc/scripts/oracle.lua:onCreatureSay

 

[25/07/2009 22:04:09] data/npc/scripts/oracle.lua:158: attempt to index global 'choos' (a nil value)

[25/07/2009 22:04:09] stack traceback:

[25/07/2009 22:04:09] data/npc/scripts/oracle.lua:158: in function <data/npc/scripts/oracle.lua:92>

 

[25/07/2009 22:04:09] Lua Script Error: [Npc interface]

[25/07/2009 22:04:09] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:09] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:09] stack traceback:

[25/07/2009 22:04:09] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:10] Lua Script Error: [Npc interface]

[25/07/2009 22:04:10] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:10] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:10] stack traceback:

[25/07/2009 22:04:10] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:10] Lua Script Error: [Npc interface]

[25/07/2009 22:04:10] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:10] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:10] stack traceback:

[25/07/2009 22:04:10] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:11] Lua Script Error: [Npc interface]

[25/07/2009 22:04:11] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:11] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:11] stack traceback:

[25/07/2009 22:04:11] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:12] Lua Script Error: [Npc interface]

[25/07/2009 22:04:12] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:12] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:12] stack traceback:

[25/07/2009 22:04:12] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:12] Lua Script Error: [Npc interface]

[25/07/2009 22:04:12] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:12] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:12] stack traceback:

[25/07/2009 22:04:12] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:13] Lua Script Error: [Npc interface]

[25/07/2009 22:04:13] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:13] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:13] stack traceback:

[25/07/2009 22:04:13] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:13] Lua Script Error: [Npc interface]

[25/07/2009 22:04:13] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:13] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:13] stack traceback:

[25/07/2009 22:04:13] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:14] Lua Script Error: [Npc interface]

[25/07/2009 22:04:14] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:14] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:14] stack traceback:

[25/07/2009 22:04:14] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:14] Lua Script Error: [Npc interface]

[25/07/2009 22:04:14] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:14] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:14] stack traceback:

[25/07/2009 22:04:14] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:15] Lua Script Error: [Npc interface]

[25/07/2009 22:04:15] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:15] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:15] stack traceback:

[25/07/2009 22:04:15] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:16] Lua Script Error: [Npc interface]

[25/07/2009 22:04:16] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:16] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:16] stack traceback:

[25/07/2009 22:04:16] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:16] Lua Script Error: [Npc interface]

[25/07/2009 22:04:16] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:16] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:16] stack traceback:

[25/07/2009 22:04:16] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:17] Lua Script Error: [Npc interface]

[25/07/2009 22:04:17] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:17] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:17] stack traceback:

[25/07/2009 22:04:17] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:17] Lua Script Error: [Npc interface]

[25/07/2009 22:04:17] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:17] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:17] stack traceback:

[25/07/2009 22:04:17] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:18] Lua Script Error: [Npc interface]

[25/07/2009 22:04:18] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:18] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:18] stack traceback:

[25/07/2009 22:04:18] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:18] Lua Script Error: [Npc interface]

[25/07/2009 22:04:18] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:18] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:18] stack traceback:

[25/07/2009 22:04:19] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

[25/07/2009 22:04:19] Lua Script Error: [Npc interface]

[25/07/2009 22:04:19] data/npc/scripts/oracle.lua:onThink

 

[25/07/2009 22:04:19] data/npc/scripts/oracle.lua:187: attempt to index global 'frases' (a nil value)

[25/07/2009 22:04:19] stack traceback:

[25/07/2009 22:04:19] data/npc/scripts/oracle.lua:187: in function <data/npc/scripts/oracle.lua:180>

 

 

como resolve??

Compartilhar este post


Link para o post
Eventide    7
Eventide

você deve ter copiado algo errado, as linhas que está acusando ai não batem com o script..

Compartilhar este post


Link para o post
Mock    32
Mock

Quanto tempo nao vejo um npc tão bem fieto assim, evesys achei estranho usar as falas em tabelas ._.'

Compartilhar este post


Link para o post
rivcdrigo    0
rivcdrigo

REFIZ TUDO, AGORA APARECEU ISSO

 

 

[25/07/2009 22:43:33] Lua Script Error: [Npc interface]

[25/07/2009 22:43:33] data/npc/scripts/oracle.lua:onCreatureSay

 

[25/07/2009 22:43:33] data/npc/scripts/oracle.lua:162: attempt to index global 'choos' (a nil value)

[25/07/2009 22:43:33] stack traceback:

[25/07/2009 22:43:33] data/npc/scripts/oracle.lua:162: in function <data/npc/scripts/oracle.lua:96>

 

igual ao q vc mandou..

 

ele mudou a voc, mas nao teleportou para onde eu queria!

 

e depois eu fui tentar refazer completamente o passo, daí agora ele faz tudo certo, porem no log do server fica aparecendo sem parar (isso sem ninguem falar com o oraculo)

 

[26/07/2009 14:15:33] Lua Script Error: [Npc interface]

[26/07/2009 14:15:33] data/npc/scripts/oracle.lua:onCreatureSay

 

[26/07/2009 14:15:33] data/npc/scripts/oracle.lua:155: attempt to index global 'choos' (a nil value)

[26/07/2009 14:15:33] stack traceback:

[26/07/2009 14:15:33] data/npc/scripts/oracle.lua:155: in function <data/npc/scripts/oracle.lua:89>

 

[26/07/2009 14:15:33] Lua Script Error: [Npc interface]

[26/07/2009 14:15:33] data/npc/scripts/oracle.lua:onThink

 

[26/07/2009 14:15:33] data/npc/scripts/oracle.lua:184: attempt to index global 'frases' (a nil value)

[26/07/2009 14:15:33] stack traceback:

[26/07/2009 14:15:33] data/npc/scripts/oracle.lua:184: in function <data/npc/scripts/oracle.lua:177>

 

[26/07/2009 14:15:34] Lua Script Error: [Npc interface]

[26/07/2009 14:15:34] data/npc/scripts/oracle.lua:onThink

 

[26/07/2009 14:15:34] data/npc/scripts/oracle.lua:184: attempt to index global 'frases' (a nil value)

[26/07/2009 14:15:34] stack traceback:

[26/07/2009 14:15:34] data/npc/scripts/oracle.lua:184: in function <data/npc/scripts/oracle.lua:177>

 

[26/07/2009 14:15:35] Lua Script Error: [Npc interface]

[26/07/2009 14:15:35] data/npc/scripts/oracle.lua:onThink

 

[26/07/2009 14:15:35] data/npc/scripts/oracle.lua:184: attempt to index global 'frases' (a nil value)

[26/07/2009 14:15:35] stack traceback:

[26/07/2009 14:15:35] data/npc/scripts/oracle.lua:184: in function <data/npc/scripts/oracle.lua:177>

 

[26/07/2009 14:15:35] Lua Script Error: [Npc interface]

[26/07/2009 14:15:35] data/npc/scripts/oracle.lua:onThink

 

e uma dúvida bônus, como eu faço para só poderem sair de lá lvl 10?

valeu

Editado por rivcdrigo
adicionado

Compartilhar este post


Link para o post
Kuma Bear    33
Kuma Bear

Parabéns.

Mais tem um grande erro.

Players level 8- Conseguem escolher sua Voc.

Tem como arrumar?

Editado por bolotabunito

Compartilhar este post


Link para o post
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×