• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua Oracle script (Fast help please) = 0.3.6pl

Peroxide

Gone since January 2018
Senator
Joined
Aug 22, 2008
Messages
10,477
Reaction score
2,421
Location
New Zealand
Error:

[07/05/2010 19:47:18] [Error - Npc interface]
[07/05/2010 19:47:18] data/npc/scripts/oracle.lua
[07/05/2010 19:47:18] Description:
[07/05/2010 19:47:18] data/npc/scripts/oracle.lua:97: attempt to index global 'city1' (a nil value)
[07/05/2010 19:47:18] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/oracle.lua



Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

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 oracle(cid, message, keywords, parameters, node)
	if(not npcHandler:isFocused(cid)) then
		return false
	end

	local cityNode = node:getParent():getParent()
	local vocNode = node:getParent()

	local destination = cityNode:getParameters().destination
	local town = cityNode:getParameters().town
	local vocation = vocNode:getParameters().vocation

	if(destination ~= nil and vocation ~= nil and town ~= nil) then
		if(getPlayerLevel(cid) < parameters.level) then
			npcHandler:say('You must first reach level ' .. parameters.level .. '!', cid)
			npcHandler:resetNpc()
		else
			if(getPlayerVocation(cid) > 0) then
				npcHandler:say('Sorry, You already have a vocation!')
				npcHandler:resetNpc()
			else
				doPlayerSetVocation(cid, vocation)
				doPlayerSetTown(cid, town)
				npcHandler:resetNpc()

				local tmp = getCreaturePosition(cid)
				doTeleportThing(cid, destination)
				doSendMagicEffect(tmp, CONST_ME_POFF)
				doSendMagicEffect(destination, CONST_ME_TELEPORT)
			end
		end
	end

	return true
end

function greetCallback(cid)

--!!Config!!--

--Vocation setup
local vocation1 = {name = "sorcerer", id = 1,
text = "Are you sure that a "..vocation1.name.." is what you wish to become? This decision is irreversible!"}

local vocation2 = {name = "druid", id = 2,
text = "Are you sure that a "..vocation2.name.." is what you wish to become? This decision is irreversible!"}

local vocation3 = {name = "paladin", id = 3,
text = "Are you sure that a "..vocation3.name.." is what you wish to become? This decision is irreversible!"}

local vocation4 = {name = "knight", id = 4,
text = "Are you sure that a "..vocation4.name.." is what you wish to become? This decision is irreversible!"}

--Start Town setup
local city1 = {name = "avondale", townID = 1, destination = {x=702, y=1016, z=7},
text = "Avondale, eh? So what vocation do you wish to become? {"..vocation1.name .."}, {"..vocation2.name .."}, {"..vocation3.name .."} or {"..vocation4.name .."}?"}

local city2 = {name = "calria", townID = 2, destination = {x=1153, y=1139, z=7},
text = "Thais, eh? So what vocation do you wish to become? {"..vocation1.name .."}, {"..vocation2.name .."}, {"..vocation3.name .."} or {"..vocation4.name .."}?"}

local towntext = "What city do you wish to live in? {".. city1.name .."}, {".. city2.name .."}?"

--Text setup
local requiredlevel = 8
local greet = "Hello |PLAYERNAME|. Are you prepared to face your destiny?"
local lowlevel = "COME BACK WHEN YOU ARE LEVEL 8!"
local refuse = "Then come back when you are ready."
local refuse_voc = "Then what vocation do you want to become?"

---------

	if(getPlayerLevel(cid) < requiredlevel) then
		npcHandler:say(lowlevel)
		return false
	else
		return true
	end
end
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setMessage(MESSAGE_GREET, greet)

local yesNode = KeywordNode:new({'yes'}, oracle, {level = requiredlevel})
local noNode = KeywordNode:new({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = refuse_voc})

local node1 = keywordHandler:addKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = towntext})

	--City 1 control
	local node2 = node1:addChildKeyword(city1.name, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, town = city1.townID, destination = city1.destination, text = city1.text})
		local node3 = node2:addChildKeyword(vocation1.name, StdModule.say, {npcHandler = npcHandler, vocation = vocation1.id, onlyFocus = true, text = vocation1.text})
			node3:addChildKeywordNode(yesNode)
			node3:addChildKeywordNode(noNode)
		node3 = node2:addChildKeyword(vocation2.name, StdModule.say, {npcHandler = npcHandler, vocation = vocation2.id, onlyFocus = true, text = vocation2.text})
			node3:addChildKeywordNode(yesNode)
			node3:addChildKeywordNode(noNode)
		node3 = node2:addChildKeyword(vocation3.name, StdModule.say, {npcHandler = npcHandler, vocation = vocation3.id, onlyFocus = true, text = vocation3.text})
			node3:addChildKeywordNode(yesNode)
			node3:addChildKeywordNode(noNode)
		node3 = node2:addChildKeyword(vocation4.name, StdModule.say, {npcHandler = npcHandler, vocation = vocation4.id, onlyFocus = true, text = vocation4.text})
			node3:addChildKeywordNode(yesNode)
			node3:addChildKeywordNode(noNode)
			
	--City 2 control
	node2 = node1:addChildKeyword(city2.name, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, town = city2.townID, destination = city2.destination, text = city2.text})
		node3 = node2:addChildKeyword(vocation1.name, StdModule.say, {npcHandler = npcHandler, vocation = vocation1.id, onlyFocus = true, text = vocation1.text})
			node3:addChildKeywordNode(yesNode)
			node3:addChildKeywordNode(noNode)
		node3 = node2:addChildKeyword(vocation2.name, StdModule.say, {npcHandler = npcHandler, vocation = vocation2.id, onlyFocus = true, text = vocation2.text})
			node3:addChildKeywordNode(yesNode)
			node3:addChildKeywordNode(noNode)
		node3 = node2:addChildKeyword(vocation3.name, StdModule.say, {npcHandler = npcHandler, vocation = vocation3.id, onlyFocus = true, text = vocation3.text})
			node3:addChildKeywordNode(yesNode)
			node3:addChildKeywordNode(noNode)
		node3 = node2:addChildKeyword(vocation4.name, StdModule.say, {npcHandler = npcHandler, vocation = vocation4.id, onlyFocus = true, text = vocation4.text})
			node3:addChildKeywordNode(yesNode)
			node3:addChildKeywordNode(noNode)
			
			
	keywordHandler:addKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = refuse})

npcHandler:addModule(FocusModule:new())
 
I WIN! lol

Lua:
--!---------------------------------!
--!---Created by Teh Maverick-------!
--!-------www.otland.net------------!
--!---------------------------------!

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local talktopic, town, vocation, destination, voc = {}, {}, {}, {}, {}

--!!Config!!--

--Vocation setup
local vocation1 = {name = "sorcerer", id = 1,
text = "Are you sure that a Sorcerer is what you wish to become? This decision is irreversible!"}

local vocation2 = {name = "druid", id = 2,
text = "Are you sure that a Druid is what you wish to become? This decision is irreversible!"}

local vocation3 = {name = "paladin", id = 3,
text = "Are you sure that a Paladin is what you wish to become? This decision is irreversible!"}

local vocation4 = {name = "knight", id = 4,
text = "Are you sure that a Knight is what you wish to become? This decision is irreversible!"}

--local vocation4 = {name = "newvocation", id = 5,
--text = "Are you sure that a Newvocation is what you wish to become? This decision is irreversible!"}

--Item setup
local firstItems = {
  { -- sorcerer items
    {itemid=2457, count=1}, -- Steel Helmet
    {itemid=8819, count=1}, -- Magician's robe
    {itemid=2649, count=1}, -- Leather legs
    {itemid=2643, count=1}, -- Leather Boots
    {itemid=2521, count=1}, -- Dark Shield
    {itemid=2190, count=1}, -- Wand of vortex

    {itemid=2152, count=25}, -- Platinum Coins
    {itemid=2789, count=100}, -- Brown Mushrooms
  },
  { -- druid items
    {itemid=2457, count=1}, -- Steel Helmet
    {itemid=8819, count=1}, -- Magician's robe
    {itemid=2649, count=1}, -- Leather Legs
    {itemid=2643, count=1}, -- Leather Boots
    {itemid=2521, count=1}, -- Dark Shield
    {itemid=2182, count=1}, -- Snakebite Rod

    {itemid=2152, count=25}, -- Platinum Coins
    {itemid=2789, count=100}, -- Brown Mushrooms
  },
  { -- paladin items
    {itemid=2457, count=1}, -- Steel Helmet
    {itemid=2660, count=1}, -- Ranger's cloak
    {itemid=2507, count=1}, -- Ranger legs
    {itemid=2643, count=1}, -- Leather Boots
    {itemid=2521, count=1}, -- Dark Shield
    {itemid=2389, count=10}, -- Spears
	{itemid=2544, count=100}, -- Arrows
	{itemid=2456, count=1}, -- Bow

    {itemid=2152, count=25}, -- Platinum Coins
    {itemid=2789, count=100}, -- Brown Mushrooms
  },
  { -- knight items
    {itemid=2457, count=1}, -- Steel Helmet
    {itemid=2463, count=1}, -- Plate  Armor
    {itemid=2647, count=1}, -- Plate Legs
    {itemid=2643, count=1}, -- Leather Boots
    {itemid=2521, count=1}, -- Dark Shield
    {itemid=8602, count=1}, -- Jagged Sword
	{itemid=8601, count=1}, -- Steel Axe
	{itemid=2423, count=1}, -- Clerical Mace

    {itemid=2152, count=25}, -- Platinum Coins
    {itemid=2789, count=100}, -- Brown Mushrooms
  }--,
--{ -- newvocations items
--  {itemid=2457, count=1}, -- Steel Helmet
--  {itemid=2463, count=1}, -- Plate  Armor
--  {itemid=2647, count=1}, -- Plate Legs
--  {itemid=2643, count=1}, -- Leather Boots
--  {itemid=2521, count=1}, -- Dark Shield
--  {itemid=8602, count=1}, -- Jagged Sword
--	{itemid=8601, count=1}, -- Steel Axe
--	{itemid=2423, count=1}, -- Clerical Mace
--
--    {itemid=2152, count=25}, -- Platinum Coins
--    {itemid=2789, count=100}, -- Brown Mushrooms
--  }
}

--Home Town setup
local city1 = {name = "avondale", id = 1, destination = {x=702, y=1016, z=7},
text = "Avondale, eh? So what vocation do you wish to become? {"..vocation1.name .."}, {"..vocation2.name .."}, {"..vocation3.name .."} or {"..vocation4.name .."}?"}

local city2 = {name = "calria", id = 2, destination = {x=1153, y=1139, z=7},
text = "Calria, eh? So what vocation do you wish to become? {"..vocation1.name .."}, {"..vocation2.name .."}, {"..vocation3.name .."} or {"..vocation4.name .."}?"}

--local city3 = {name = "newcity", id = 3, destination = {x=1153, y=1139, z=7},
--text = "Newcity, eh? So what vocation do you wish to become? {"..vocation1.name .."}, {"..vocation2.name .."}, {"..vocation3.name .."} or {"..vocation4.name .."}?"}

local towntext = "What city do you wish to live in? {".. city1.name .."} or {".. city2.name .."}?"

--Text setup
	local requiredlevel = 8
	local lowlevel = "COME BACK WHEN YOU ARE LEVEL 8!"
	local refuse = "Then come back when you are ready."
	local refuse_voc = "Then what vocation do you want to become?"

----End Config-----

for _, items in ipairs(firstItems) do
	table.insert(items, item)
end

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 greetCallback(cid)

	if(getPlayerLevel(cid) < requiredlevel) then
		npcHandler:say(lowlevel, cid)
		return false
	else
		local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
		talktopic[talkUser], town[talkUser], vocation[talkUser], destination[talkUser], voc[talkUser] = 0, 0, 0, 0, 0
		return true
	end
end

function creatureSayCallback(cid, type, msg)

talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

	if(not npcHandler:isFocused(cid)) then
		return false
	end

	--Select Home Town control
		if talktopic[talkUser] == 0 and msgcontains(msg, "yes") then
			talktopic[talkUser] = 1 --question one, what city do you want?
			npcHandler:say(towntext, cid)
			
			elseif talktopic[talkUser] == 0 and msgcontains(msg, "no") then
				talktopic[talkUser] = 0
				npcHandler:unGreet(cid)
			
				elseif talktopic[talkUser] == 1 and msgcontains(msg, city1.name) then
					town[talkUser] = city1.id
					destination[talkUser] = city1.destination
					npcHandler:say(city1.text, cid)
					talktopic[talkUser] = 2 --question two, what vocation do you want?
					
				elseif talktopic[talkUser] == 1 and msgcontains(msg, city2.name) then
					town[talkUser] = city2.id
					destination[talkUser] = city2.destination
					npcHandler:say(city2.text, cid)
					talktopic[talkUser] = 2 --question two, what vocation do you want?
					
				--elseif talktopic[talkUser] == 1 and msgcontains(msg, city3.name) then
				--	town[talkUser] = city3.id
				--	destination[talkUser] = city3.destination
				--	npcHandler:say(city3.text, cid)
				--	talktopic[talkUser] = 3 --question two, what vocation do you want?
		end
		
	--Select Vocation control
		if talktopic[talkUser] == 2 and msgcontains(msg, vocation1.name) then
					talktopic[talkUser] = 3 --confirm dicision: are you sure you want to become...
					voc[talkUser] = vocation1.id
					npcHandler:say(vocation1.text, cid)
					
			elseif talktopic[talkUser] == 2 and msgcontains(msg, vocation2.name) then
					talktopic[talkUser] = 3 --confirm dicision: are you sure you want to become...
					voc[talkUser] = vocation2.id
					npcHandler:say(vocation2.text, cid)
					
			elseif talktopic[talkUser] == 2 and msgcontains(msg, vocation3.name) then
					talktopic[talkUser] = 3 --confirm dicision: are you sure you want to become...
					voc[talkUser] = vocation3.id
					npcHandler:say(vocation3.text, cid)
					
			elseif talktopic[talkUser] == 2 and msgcontains(msg, vocation4.name) then
					talktopic[talkUser] = 3 --confirm dicision: are you sure you want to become...
					voc[talkUser] = vocation4.id
					npcHandler:say(vocation4.text, cid)
					
			--elseif talktopic[talkUser] == 2 and msgcontains(msg, vocation5.name) then
			--		talktopic[talkUser] = 3 --confirm dicision: are you sure you want to become...
			--		voc[talkUser] = vocation5.id
			--		npcHandler:say(vocation5.text, cid)
		end
		
	--Confirm your choice control
		if talktopic[talkUser] == 3 and msgcontains(msg, 'yes') then
			talktopic[talkUser] = 4
			vocation[talkUser] = voc[talkUser]
			
		elseif talktopic[talkUser] == 3 and msgcontains(msg, 'no') then
			talktopic[talkUser] = 2
			npcHandler:say(refuse_voc, cid)
			voc[talkUser] = 0
		end
	
		if(destination[talkUser] ~= 0 and vocation[talkUser] ~= 0 and town[talkUser] ~= 0 and talktopic[talkUser] == 4) then
			if(getPlayerLevel(cid) < requiredlevel) then
				npcHandler:say('You must first reach level ' .. requiredlevel .. '!', cid)
				npcHandler:resetNpc()
			else
				if(getPlayerVocation(cid) > 0) then
					npcHandler:say('Sorry, You already have a vocation!', cid)
					npcHandler:resetNpc()
				else
					doPlayerSetVocation(cid, vocation[talkUser])
					doPlayerSetTown(cid, town[talkUser])
					npcHandler:resetNpc()

					local tmp = getCreaturePosition(cid)
					doTeleportThing(cid, destination[talkUser])
					doSendMagicEffect(tmp, CONST_ME_POFF)
					doSendMagicEffect(destination, CONST_ME_TELEPORT)
					
					local backpack = doCreateItemEx(1988, 1)
					local giveItems = firstItems[vocation[talkUser]]
					if giveItems ~= nil then
						for _, v in ipairs(giveItems) do
							doAddContainerItem(backpack, v.itemid, v.count or 1)
						end
						doPlayerAddItemEx(cid, backpack, 0)
					end
				end
			end
		end
	return true
end

npcHandler:setMessage(MESSAGE_GREET, "Hello |PLAYERNAME|. Are you prepared to face your destiny?")
npcHandler:setMessage(MESSAGE_WALKAWAY, "Goodbye adventurer!")
npcHandler:setMessage(MESSAGE_FAREWELL, "come back when you are ready!")

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Last edited:
Back
Top