• 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!

[NPC] Wont open NPC channel.

Talkie

New Member
Joined
Mar 8, 2009
Messages
18
Reaction score
0
when i talk to npc (Sam, thias armor shop) he wont open npc channel, but when i do it by my self and i say "trade" he open the trade list. what is wrong?
 
Lua:
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
	local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
	if(msgcontains(msg, "old backpack")) then
		if(getPlayerStorageValue(cid, 330) < 1) then
			npcHandler:say("What? Are you telling me you found my old adventurer's backpack that I lost years ago??", cid)
			talkState[talkUser] = 1
		end
	elseif(msgcontains(msg, "yes")) then
		if(talkState[talkUser] == 1) then
			if(getPlayerItemCount(cid, 3960) >= 1) then
				npcHandler:say("Thank you very much! This brings back good old memories! Please, as a reward, travel to Kazordoon and ask my old friend Kroox to provide you a special dwarven armor. ... Sam: I will mail him about you immediately. Just tell him, his old buddy Sam is sending you. ", cid)
				setPlayerStorageValue(cid, 330, 1)
				doPlayerRemoveItem(cid, 3960, 1)
			else
				npcHandler:say("You don't have it...", cid)
			end
			talkState[talkUser] = 0
		end
	elseif(msgcontains(msg, "no")) then
		if(talkState[talkUser] > 0) then
			npcHandler:say("Then no.", cid)
			talkState[talkUser] = 0
		end
	end
	return true
end

Sorry im new at this, this is the script what i use now.
 
Last edited:
Lua:
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

local t = {
    storage = 330,
}

function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
        return false
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
    if(msgcontains(msg, "old backpack")) then
        if(getPlayerStorageValue(cid, t.storage) < 1) then
            npcHandler:say("What? Are you telling me you found my old adventurer's backpack that I lost years ago??", cid)
            talkState[talkUser] = 1
        end
    elseif(msgcontains(msg, "yes") and talkState[talkUser] == 1) then
            if(getPlayerItemCount(cid, 3960) >= 1) and doPlayerRemoveItem(cid, 3960, 1) then
                npcHandler:say("Thank you very much! This brings back good old memories! Please, as a reward, travel to Kazordoon and ask my old friend Kroox to provide you a special dwarven armor. ... Sam: I will mail him about you immediately. Just tell him, his old buddy Sam is sending you. ", cid)
                setPlayerStorageValue(cid, t.storage, 1)
            else
                npcHandler:say("You don't have my backpack....", cid)
            end
        talkState[talkUser] = 0
    elseif(msgcontains(msg, "no") and isInArray({1}, talkState[talkUser])) then
            npcHandler:say("Then no.", cid)
            talkState[talkUser] = 0
        end
    return true
end 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Ninja realy thanks, but i got this with more real npc of my server. i dont know if you have all scripts? or what did you change? so i can change other npc to.

- - - Updated - - -

Sorry it doesnt work Ninja
 
Which TFS version are you using and have you tried to use different NPC libs?
 
Sure, i use TFS 9.6-9.8

Lua:
-- Including the Advanced NPC System
dofile('data/npc/lib/npcsystem/npcsystem.lua')

function getDistanceToCreature(id)
	if id == 0 or id == nil then
		selfGotoIdle()
	end

	local creaturePosition = getCreaturePosition(id)
	cx = creaturePosition.x
	cy = creaturePosition.y
	cz = creaturePosition.z
	if cx == nil then
		return nil
	end

	sx, sy, sz = selfGetPosition()
	return math.max(math.abs(sx - cx), math.abs(sy - cy))
end

function moveToPosition(x,y,z)
	selfMoveTo(x, y, z)
end

function moveToCreature(id)
	if id == 0 or id == nil then
		selfGotoIdle()
	end

	tx, ty, tz = getCreaturePosition(id)
	if tx == nil then
		selfGotoIdle()
	else
		moveToPosition(tx, ty, tz)
	end
end

function selfGotoIdle()
	following = false
	attacking = false
	selfAttackCreature(0)
	target = 0
end

function isPlayerPremiumCallback(cid)
	return isPremium(cid)
end

function msgcontains(message, keyword)
	local message, keyword = message:lower(), keyword:lower()
	if message == keyword then
		return true
	end

	return message:find(keyword) and not message:find('(%w+)' .. keyword)
end

function selfSayChannel(cid, message)
	return selfSay(message, cid, FALSE)
end

function doPosRemoveItem(_itemid, n, position)
	local thing = getThingfromPos({x = position.x, y = position.y, z = position.z, stackpos = 1})
	if thing.itemid == _itemid then
		doRemoveItem(thing.uid, n)
	else
		return false
	end
	return true
end

function doNpcSellItem(cid, itemid, amount, subType, ignoreCap, inBackpacks, backpack)
	local amount, subType, ignoreCap, item = amount or 1, subType or 0, ignoreCap and TRUE or FALSE, 0
	ignoreCap = FALSE
	if isItemStackable(itemid) then
		if(inBackpacks) then
			stuff = doCreateItemEx(backpack, 1)
			item = doAddContainerItem(stuff, itemid, math.min(100, amount))
		else
			stuff = doCreateItemEx(itemid, math.min(100, amount))
		end
		return doPlayerAddItemEx(cid, stuff, ignoreCap) ~= RETURNVALUE_NOERROR and 0 or amount, 0
	end

	local a = 0
	if(inBackpacks) then
		local container, b = doCreateItemEx(backpack, 1), 1
		for i = 1, amount do
			local item = doAddContainerItem(container, itemid, subType)
			if(isInArray({(getContainerCapById(backpack) * b), amount}, i) == TRUE) then
				if(doPlayerAddItemEx(cid, container, ignoreCap) ~= RETURNVALUE_NOERROR) then
					b = b - 1 --
					break
				end
				a = i -- a = a + i
				if(amount > i) then
					container = doCreateItemEx(backpack, 1)
					b = b + 1
				end
			end
		end
		return a, b
	end

	for i = 1, amount do -- normal method for non-stackable items
		local item = doCreateItemEx(itemid, subType)
		if(doPlayerAddItemEx(cid, item, ignoreCap) ~= RETURNVALUE_NOERROR) then
			break
		end
		a = i
	end
	return a, 0
end

local func = function(pars)
	if isPlayer(pars.pcid) == TRUE then
		doCreatureSay(pars.cid, pars.text, pars.type, false, pars.pcid, getCreaturePosition(pars.cid))
		pars.e.done = TRUE
	end
end

function doCreatureSayWithDelay(cid, text, type, delay, e, pcid)
	if isPlayer(pcid) == TRUE then
		e.done = FALSE
		e.event = addEvent(func, delay < 1 and 1000 or delay, {cid=cid, text=text, type=type, e=e, pcid=pcid})
	end
end

- - - Updated - - -

NPCSystem:

Lua:
-- Advanced NPC System (Created by Jiddo),
-- Modified by Cykotitan, Gesior and Talaturen.

shop_amount = {}
shop_cost = {}
shop_rlname = {}
shop_itemid = {}
shop_container = {}
shop_npcuid = {}
shop_eventtype = {}
shop_subtype = {}
shop_destination = {}
shop_premium = {}

npcs_loaded_shop = {}
npcs_loaded_travel = {}

if(NpcSystem == nil) then
	-- Loads the underlying classes of the npcsystem.
	dofile('data/npc/lib/npcsystem/keywordhandler.lua')
	dofile('data/npc/lib/npcsystem/npchandler.lua')
	dofile('data/npc/lib/npcsystem/modules.lua')

	-- Global npc constants:

	-- Greeting and unGreeting keywords. For more information look at the top of modules.lua
	FOCUS_GREETWORDS = {'hi', 'hello'}
	FOCUS_FAREWELLWORDS = {'bye', 'farewell'}

	-- The word for requesting trade window. For more information look at the top of modules.lua
	SHOP_TRADEREQUEST = {'trade'}

	-- The word for accepting/declining an offer. CAN ONLY CONTAIN ONE FIELD! For more information look at the top of modules.lua
	SHOP_YESWORD = {'yes'}
	SHOP_NOWORD = {'no'}

	-- Pattern used to get the amount of an item a player wants to buy/sell.
	PATTERN_COUNT = '%d+'

	-- Talkdelay behavior. For more information, look at the top of npchandler.lua.
	NPCHANDLER_TALKDELAY = TALKDELAY_ONTHINK

	-- Constant strings defining the keywords to replace in the default messages.
	--	For more information, look at the top of npchandler.lua...
	TAG_PLAYERNAME = '|PLAYERNAME|'
	TAG_ITEMCOUNT = '|ITEMCOUNT|'
	TAG_TOTALCOST = '|TOTALCOST|'
	TAG_ITEMNAME = '|ITEMNAME|'

	NpcSystem = {}

	-- Gets an npcparameter with the specified key. Returns nil if no such parameter is found.
	function NpcSystem.getParameter(key)
		local ret = getNpcParameter(tostring(key))
		if((type(ret) == 'number' and ret == 0) or ret == nil) then
			return nil
		else
			return ret
		end
	end

	-- Parses all known parameters for the npc. Also parses parseable modules.
	function NpcSystem.parseParameters(npcHandler)
		local ret = NpcSystem.getParameter('idletime')
		if(ret ~= nil) then
			npcHandler.idleTime = tonumber(ret)
		end
		local ret = NpcSystem.getParameter('talkradius')
		if(ret ~= nil) then
			npcHandler.talkRadius = tonumber(ret)
		end
		local ret = NpcSystem.getParameter('message_greet')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_GREET, ret)
		end
		local ret = NpcSystem.getParameter('message_farewell')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_FAREWELL, ret)
		end
		local ret = NpcSystem.getParameter('message_decline')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_DECLINE, ret)
		end
		local ret = NpcSystem.getParameter('message_needmorespace')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_NEEDMORESPACE, ret)
		end
		local ret = NpcSystem.getParameter('message_needspace')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_NEEDSPACE, ret)
		end
		local ret = NpcSystem.getParameter('message_sendtrade')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_SENDTRADE, ret)
		end
		local ret = NpcSystem.getParameter('message_noshop')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_NOSHOP, ret)
		end
		local ret = NpcSystem.getParameter('message_oncloseshop')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_ONCLOSESHOP, ret)
		end
		local ret = NpcSystem.getParameter('message_onbuy')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_ONBUY, ret)
		end
		local ret = NpcSystem.getParameter('message_onsell')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_ONSELL, ret)
		end
		local ret = NpcSystem.getParameter('message_missingmoney')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_MISSINGMONEY, ret)
		end
		local ret = NpcSystem.getParameter('message_needmoney')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_NEEDMONEY, ret)
		end
		local ret = NpcSystem.getParameter('message_missingitem')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_MISSINGITEM, ret)
		end
		local ret = NpcSystem.getParameter('message_needitem')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_NEEDITEM, ret)
		end
		local ret = NpcSystem.getParameter('message_idletimeout')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_IDLETIMEOUT, ret)
		end
		local ret = NpcSystem.getParameter('message_walkaway')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_WALKAWAY, ret)
		end
		local ret = NpcSystem.getParameter('message_alreadyfocused')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_ALREADYFOCUSED, ret)
		end
		local ret = NpcSystem.getParameter('message_buy')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_BUY, ret)
		end
		local ret = NpcSystem.getParameter('message_sell')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_SELL, ret)
		end
		local ret = NpcSystem.getParameter('message_bought')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_BOUGHT, ret)
		end
		local ret = NpcSystem.getParameter('message_sold')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_SOLD, ret)
		end
		local ret = NpcSystem.getParameter('message_walkaway_male')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_WALKAWAY_MALE, ret)
		end
		local ret = NpcSystem.getParameter('message_walkaway_female')
		if(ret ~= nil) then
			npcHandler:setMessage(MESSAGE_WALKAWAY_FEMALE, ret)
		end

		-- Parse modules.
		for parameter, module in pairs(Modules.parseableModules) do
			local ret = NpcSystem.getParameter(parameter)
			if(ret ~= nil) then
				local number = tonumber(ret)
				if(number ~= 0 and module.parseParameters ~= nil) then
					local instance = module:new()
					npcHandler:addModule(instance)
					instance:parseParameters()
				end
			end
		end
	end
end

NPChandler:
Lua:
-- Advanced NPC System (Created by Jiddo),
-- Modified by Cykotitan and Talaturen.

if(NpcHandler == nil) then
	-- Constant talkdelay behaviors.
	TALKDELAY_NONE = 0 -- No talkdelay. Npc will reply immedeatly.
	TALKDELAY_ONTHINK = 1 -- Talkdelay handled through the onThink callback function. (Default)
	TALKDELAY_EVENT = 2 -- Not yet implemented

	-- Currently applied talkdelay behavior. TALKDELAY_ONTHINK is default.
	NPCHANDLER_TALKDELAY = TALKDELAY_ONTHINK

	-- Constant indexes for defining default messages.
	MESSAGE_GREET 			= 1 -- When the player greets the npc.
	MESSAGE_FAREWELL 		= 2 -- When the player unGreets the npc.
	MESSAGE_BUY 			= 3 -- When the npc asks the player if he wants to buy something.
	MESSAGE_ONBUY 			= 4 -- When the player successfully buys something via talk.
	MESSAGE_BOUGHT			= 5 -- When the player bought something through the shop window.
	MESSAGE_SELL 			= 6 -- When the npc asks the player if he wants to sell something.
	MESSAGE_ONSELL 			= 7 -- When the player successfully sells something via talk.
	MESSAGE_SOLD			= 8 -- When the player sold something through the shop window.
	MESSAGE_MISSINGMONEY		= 9 -- When the player does not have enough money.
	MESSAGE_NEEDMONEY		= 10 -- Same as above, used for shop window.
	MESSAGE_MISSINGITEM		= 11 -- When the player is trying to sell an item he does not have.
	MESSAGE_NEEDITEM		= 12 -- Same as above, used for shop window.
	MESSAGE_NEEDSPACE 		= 13 -- When the player don't have any space to buy an item
	MESSAGE_NEEDMORESPACE		= 14 -- When the player has some space to buy an item, but not enough space
	MESSAGE_IDLETIMEOUT		= 15 -- When the player has been idle for longer then idleTime allows.
	MESSAGE_WALKAWAY		= 16 -- When the player walks out of the talkRadius of the npc.
	MESSAGE_DECLINE			= 17 -- When the player says no to something.
	MESSAGE_SENDTRADE		= 18 -- When the npc sends the trade window to the player
	MESSAGE_NOSHOP			= 19 -- When the npc's shop is requested but he doesn't have any
	MESSAGE_ONCLOSESHOP		= 20 -- When the player closes the npc's shop window
	MESSAGE_ALREADYFOCUSED		= 21 -- When the player already has the focus of this npc.
	MESSAGE_WALKAWAY_MALE		= 22 -- When a male player walks out of the talkRadius of the npc.
	MESSAGE_WALKAWAY_FEMALE		= 23 -- When a female player walks out of the talkRadius of the npc.

	-- Constant indexes for callback functions. These are also used for module callback ids.
	CALLBACK_CREATURE_APPEAR 	= 1
	CALLBACK_CREATURE_DISAPPEAR	= 2
	CALLBACK_CREATURE_SAY 		= 3
	CALLBACK_ONTHINK 		= 4
	CALLBACK_GREET 			= 5
	CALLBACK_FAREWELL 		= 6
	CALLBACK_MESSAGE_DEFAULT 	= 7
	CALLBACK_PLAYER_ENDTRADE 	= 8
	CALLBACK_PLAYER_CLOSECHANNEL	= 9
	CALLBACK_ONBUY			= 10
	CALLBACK_ONSELL			= 11
	CALLBACK_ONADDFOCUS		= 18
	CALLBACK_ONRELEASEFOCUS		= 19
	CALLBACK_ONTRADEREQUEST		= 20

	-- Addidional module callback ids
	CALLBACK_MODULE_INIT		= 12
	CALLBACK_MODULE_RESET		= 13

	-- Constant strings defining the keywords to replace in the default messages.
	TAG_PLAYERNAME = "|PLAYERNAME|"
	TAG_ITEMCOUNT = "|ITEMCOUNT|"
	TAG_TOTALCOST = "|TOTALCOST|"
	TAG_ITEMNAME = "|ITEMNAME|"

	NpcHandler = {
		keywordHandler = nil,
		focuses = nil,
		talkStart = nil,
		idleTime = 86400,
		talkRadius = 3,
		talkDelayTime = 1, -- Seconds to delay outgoing messages.
		talkDelay = nil,
		callbackFunctions = nil,
		modules = nil,
		shopItems = nil, -- They must be here since ShopModule uses 'static' functions
		eventSay = nil,
		eventDelayedSay = nil,
		topic = nil,
		messages = {
			-- These are the default replies of all npcs. They can/should be changed individually for each npc.
			[MESSAGE_GREET]		= "Greetings, |PLAYERNAME|.",
			[MESSAGE_FAREWELL] 	= "Good bye, |PLAYERNAME|.",
			[MESSAGE_BUY] 		= "Do you want to buy |ITEMCOUNT| |ITEMNAME| for |TOTALCOST| gold coins?",
			[MESSAGE_ONBUY]		= "Here you are.",
			[MESSAGE_BOUGHT] 	= "Bought |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.",
			[MESSAGE_SELL] 		= "Do you want to sell |ITEMCOUNT| |ITEMNAME| for |TOTALCOST| gold coins?",
			[MESSAGE_ONSELL] 	= "Here you are, |TOTALCOST| gold.",
			[MESSAGE_SOLD]	 	= "Sold |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.",
			[MESSAGE_MISSINGMONEY]	= "You don't have enough money.",
			[MESSAGE_NEEDMONEY] 	= "You don't have enough money.",
			[MESSAGE_MISSINGITEM] 	= "You don't have so many.",
			[MESSAGE_NEEDITEM]	= "You do not have this object.",
			[MESSAGE_NEEDSPACE]	= "You do not have enough capacity.",
			[MESSAGE_NEEDMORESPACE]	= "You do not have enough capacity for all items.",
			[MESSAGE_IDLETIMEOUT] 	= "Good bye.",
			[MESSAGE_WALKAWAY] 	= "Good bye.",
			[MESSAGE_DECLINE]	= "Then not.",
			[MESSAGE_SENDTRADE]	= "Of course, just browse through my wares.",
			[MESSAGE_NOSHOP]	= "Sorry, I'm not offering anything.",
			[MESSAGE_ONCLOSESHOP]	= "Thank you, come back whenever you're in need of something else.",
			[MESSAGE_ALREADYFOCUSED]= "|PLAYERNAME|, I am already talking to you.",
			[MESSAGE_WALKAWAY_MALE]	= "Good bye.",
			[MESSAGE_WALKAWAY_FEMALE] 	= "Good bye."
		}
	}

	-- Creates a new NpcHandler with an empty callbackFunction stack.
	function NpcHandler:new(keywordHandler)
		local obj = {}
		obj.callbackFunctions = {}
		obj.modules = {}
		obj.eventSay = {}
		obj.eventDelayedSay = {}
		obj.topic = {}
		obj.focuses = {}
		obj.talkStart = {}
		obj.talkDelay = {}
		obj.keywordHandler = keywordHandler
		obj.messages = {}
		obj.shopItems = {}

		setmetatable(obj.messages, self.messages)
		self.messages.__index = self.messages

		setmetatable(obj, self)
		self.__index = self
		return obj
	end

	-- Re-defines the maximum idle time allowed for a player when talking to this npc.
	function NpcHandler:setMaxIdleTime(newTime)
		self.idleTime = newTime
	end

	-- Attackes a new keyword handler to this npchandler
	function NpcHandler:setKeywordHandler(newHandler)
		self.keywordHandler = newHandler
	end

	-- Function used to change the focus of this npc.
	function NpcHandler:addFocus(newFocus)
		if(self:isFocused(newFocus)) then
			return
		end

		table.insert(self.focuses, newFocus)
		self.topic[newFocus] = 0
		local callback = self:getCallback(CALLBACK_ONADDFOCUS)
		if(callback == nil or callback(newFocus)) then
			self:processModuleCallback(CALLBACK_ONADDFOCUS, newFocus)
		end
		self:updateFocus()
	end

	-- Function used to verify if npc is focused to certain player
	function NpcHandler:isFocused(focus)
		for k,v in pairs(self.focuses) do
			if v == focus then
				return true
			end
		end
		return false
	end

	-- This function should be called on each onThink and makes sure the npc faces the player it is talking to.
	--	Should also be called whenever a new player is focused.
	function NpcHandler:updateFocus()
		for pos, focus in pairs(self.focuses) do
			if(focus ~= nil) then
				doNpcSetCreatureFocus(focus)
				return
			end
		end
		doNpcSetCreatureFocus(0)
	end

	-- Used when the npc should un-focus the player.
	function NpcHandler:releaseFocus(focus)
		if(shop_cost[focus] ~= nil) then
			table.remove(shop_amount, focus)
			table.remove(shop_cost, focus)
			table.remove(shop_rlname, focus)
			table.remove(shop_itemid, focus)
			table.remove(shop_container, focus)
			table.remove(shop_npcuid, focus)
			table.remove(shop_eventtype, focus)
			table.remove(shop_subtype, focus)
			table.remove(shop_destination, focus)
			table.remove(shop_premium, focus)
		end

		if self.eventDelayedSay[focus] then
			self:cancelNPCTalk(self.eventDelayedSay[focus])
		end

		if(not self:isFocused(focus)) then
			return
		end

		local pos = nil
		for k,v in pairs(self.focuses) do
			if v == focus then
				pos = k
			end
		end
		table.remove(self.focuses, pos)

		self.eventSay[focus] = nil
		self.eventDelayedSay[focus] = nil
		self.talkStart[focus] = nil
		self.topic[focus] = nil

		local callback = self:getCallback(CALLBACK_ONRELEASEFOCUS)
		if(callback == nil or callback(focus)) then
			self:processModuleCallback(CALLBACK_ONRELEASEFOCUS, focus)
		end

		if isPlayer(focus) == TRUE then
			closeShopWindow(focus) --Even if it can not exist, we need to prevent it.
			self:updateFocus()
		end
	end

	-- Returns the callback function with the specified id or nil if no such callback function exists.
	function NpcHandler:getCallback(id)
		local ret = nil
		if(self.callbackFunctions ~= nil) then
			ret = self.callbackFunctions[id]
		end
		return ret
	end

	-- Changes the callback function for the given id to callback.
	function NpcHandler:setCallback(id, callback)
		if(self.callbackFunctions ~= nil) then
			self.callbackFunctions[id] = callback
		end
	end

	-- Adds a module to this npchandler and inits it.
	function NpcHandler:addModule(module)
		if(self.modules ~= nil) then
			table.insert(self.modules, module)
			module:init(self)
		end
	end

	-- Calls the callback function represented by id for all modules added to this npchandler with the given arguments.
	function NpcHandler:processModuleCallback(id, ...)
		local ret = true
		for i, module in pairs(self.modules) do
			local tmpRet = true
			if(id == CALLBACK_CREATURE_APPEAR and module.callbackOnCreatureAppear ~= nil) then
				tmpRet = module:callbackOnCreatureAppear(...)
			elseif(id == CALLBACK_CREATURE_DISAPPEAR and module.callbackOnCreatureDisappear ~= nil) then
				tmpRet = module:callbackOnCreatureDisappear(...)
			elseif(id == CALLBACK_CREATURE_SAY and module.callbackOnCreatureSay ~= nil) then
				tmpRet = module:callbackOnCreatureSay(...)
			elseif(id == CALLBACK_PLAYER_ENDTRADE and module.callbackOnPlayerEndTrade ~= nil) then
				tmpRet = module:callbackOnPlayerEndTrade(...)
			elseif(id == CALLBACK_PLAYER_CLOSECHANNEL and module.callbackOnPlayerCloseChannel ~= nil) then
				tmpRet = module:callbackOnPlayerCloseChannel(...)
			elseif(id == CALLBACK_ONBUY and module.callbackOnBuy ~= nil) then
				tmpRet = module:callbackOnBuy(...)
			elseif(id == CALLBACK_ONSELL and module.callbackOnSell ~= nil) then
				tmpRet = module:callbackOnSell(...)
			elseif(id == CALLBACK_ONTRADEREQUEST and module.callbackOnTradeRequest ~= nil) then
				tmpRet = module:callbackOnTradeRequest(...)
			elseif(id == CALLBACK_ONADDFOCUS and module.callbackOnAddFocus ~= nil) then
				tmpRet = module:callbackOnAddFocus(...)
			elseif(id == CALLBACK_ONRELEASEFOCUS and module.callbackOnReleaseFocus ~= nil) then
				tmpRet = module:callbackOnReleaseFocus(...)
			elseif(id == CALLBACK_ONTHINK and module.callbackOnThink ~= nil) then
				tmpRet = module:callbackOnThink(...)
			elseif(id == CALLBACK_GREET and module.callbackOnGreet ~= nil) then
				tmpRet = module:callbackOnGreet(...)
			elseif(id == CALLBACK_FAREWELL and module.callbackOnFarewell ~= nil) then
				tmpRet = module:callbackOnFarewell(...)
			elseif(id == CALLBACK_MESSAGE_DEFAULT and module.callbackOnMessageDefault ~= nil) then
				tmpRet = module:callbackOnMessageDefault(...)
			elseif(id == CALLBACK_MODULE_RESET and module.callbackOnModuleReset ~= nil) then
				tmpRet = module:callbackOnModuleReset(...)
			end
			if(not tmpRet) then
				ret = false
				break
			end
		end
		return ret
	end

	-- Returns the message represented by id.
	function NpcHandler:getMessage(id)
		local ret = nil
		if(self.messages ~= nil) then
			ret = self.messages[id]
		end
		return ret
	end

	-- Changes the default response message with the specified id to newMessage.
	function NpcHandler:setMessage(id, newMessage)
		if(self.messages ~= nil) then
			self.messages[id] = newMessage
		end
	end

	-- Translates all message tags found in msg using parseInfo
	function NpcHandler:parseMessage(msg, parseInfo)
		local ret = msg
		for search, replace in pairs(parseInfo) do
			ret = string.gsub(ret, search, replace)
		end
		return ret
	end

	-- Makes sure the npc un-focuses the currently focused player
	function NpcHandler:unGreet(cid)
		if(not self:isFocused(cid)) then
			return
		end

		local callback = self:getCallback(CALLBACK_FAREWELL)
		if(callback == nil or callback()) then
			if(self:processModuleCallback(CALLBACK_FAREWELL)) then
				local msg = self:getMessage(MESSAGE_FAREWELL)
				local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid) }
				msg = self:parseMessage(msg, parseInfo)
				self:say(msg, cid, true)
				self:releaseFocus(cid)
			end
		end
	end

	-- Greets a new player.
	function NpcHandler:greet(cid)
		if(cid ~= 0) then
			local callback = self:getCallback(CALLBACK_GREET)
			if(callback == nil or callback(cid)) then
				if(self:processModuleCallback(CALLBACK_GREET, cid)) then
					local msg = self:getMessage(MESSAGE_GREET)
					local parseInfo = { [TAG_PLAYERNAME] = getCreatureName(cid) }
					msg = self:parseMessage(msg, parseInfo)
					self:say(msg, cid, true)
				else
					return
				end
			else
				return
			end
		end
		self:addFocus(cid)
	end

	-- Handles onCreatureAppear events. If you with to handle this yourself, please use the CALLBACK_CREATURE_APPEAR callback.
	function NpcHandler:onCreatureAppear(cid)
		local callback = self:getCallback(CALLBACK_CREATURE_APPEAR)
		if(callback == nil or callback(cid)) then
			if(self:processModuleCallback(CALLBACK_CREATURE_APPEAR, cid)) then
				--
			end
		end
	end

	-- Handles onCreatureDisappear events. If you with to handle this yourself, please use the CALLBACK_CREATURE_DISAPPEAR callback.
	function NpcHandler:onCreatureDisappear(cid)
		local callback = self:getCallback(CALLBACK_CREATURE_DISAPPEAR)
		if(callback == nil or callback(cid)) then
			if(self:processModuleCallback(CALLBACK_CREATURE_DISAPPEAR, cid)) then
				if(self:isFocused(cid)) then
					self:unGreet(cid)
				end
			end
		end
	end

	-- Handles onCreatureSay events. If you with to handle this yourself, please use the CALLBACK_CREATURE_SAY callback.
	function NpcHandler:onCreatureSay(cid, msgtype, msg)
		local callback = self:getCallback(CALLBACK_CREATURE_SAY)
		if(callback == nil or callback(cid, msgtype, msg)) then
			if(self:processModuleCallback(CALLBACK_CREATURE_SAY, cid, msgtype, msg)) then
				if(not self:isInRange(cid)) then
					return
				end

				if(self.keywordHandler ~= nil) then
					if(self:isFocused(cid) and (msgtype == TALKTYPE_PRIVATE_PN) or (not self:isFocused(cid))) then
						local ret = self.keywordHandler:processMessage(cid, msg)
						if(not ret) then
							local callback = self:getCallback(CALLBACK_MESSAGE_DEFAULT)
							if(callback ~= nil and callback(cid, msgtype, msg)) then
								self.talkStart[cid] = os.time()
							end
						else
							self.talkStart[cid] = os.time()
						end
					end
				end
			end
		end
	end

	-- Handles onPlayerEndTrade events. If you wish to handle this yourself, use the CALLBACK_PLAYER_ENDTRADE callback.
	function NpcHandler:onPlayerEndTrade(cid)
		local callback = self:getCallback(CALLBACK_PLAYER_ENDTRADE)
		if(callback == nil or callback(cid)) then
			if(self:processModuleCallback(CALLBACK_PLAYER_ENDTRADE, cid, msgtype, msg)) then
				if(self:isFocused(cid)) then
					local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid) }
					local msg = self:parseMessage(self:getMessage(MESSAGE_ONCLOSESHOP), parseInfo)
					self:say(msg, cid)
				end
			end
		end
	end

	-- Handles onPlayerCloseChannel events. If you wish to handle this yourself, use the CALLBACK_PLAYER_CLOSECHANNEL callback.
	function NpcHandler:onPlayerCloseChannel(cid)
		local callback = self:getCallback(CALLBACK_PLAYER_CLOSECHANNEL)
		if(callback == nil or callback(cid)) then
			if(self:processModuleCallback(CALLBACK_PLAYER_CLOSECHANNEL, cid, msgtype, msg)) then
				if(self:isFocused(cid)) then
					self:unGreet(cid)
				end
			end
		end
	end

	-- Handles onBuy events. If you wish to handle this yourself, use the CALLBACK_ONBUY callback.
	function NpcHandler:onBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks)
		local callback = self:getCallback(CALLBACK_ONBUY)
		if(callback == nil or callback(cid, itemid, subType, amount, ignoreCap, inBackpacks)) then
			if(self:processModuleCallback(CALLBACK_ONBUY, cid, itemid, subType, amount, ignoreCap, inBackpacks)) then
				--
			end
		end
	end

	-- Handles onSell events. If you wish to handle this yourself, use the CALLBACK_ONSELL callback.
	function NpcHandler:onSell(cid, itemid, subType, amount, ignoreCap, inBackpacks)
		local callback = self:getCallback(CALLBACK_ONSELL)
		if(callback == nil or callback(cid, itemid, subType, amount, ignoreCap, inBackpacks)) then
			if(self:processModuleCallback(CALLBACK_ONSELL, cid, itemid, subType, amount, ignoreCap, inBackpacks)) then
				--
			end
		end
	end

	-- Handles onTradeRequest events. If you wish to handle this yourself, use the CALLBACK_ONTRADEREQUEST callback.
	function NpcHandler:onTradeRequest(cid)
		local callback = self:getCallback(CALLBACK_ONTRADEREQUEST)
		if(callback == nil or callback(cid)) then
			if(self:processModuleCallback(CALLBACK_ONTRADEREQUEST, cid)) then
				return true
			end
		end
		return false
	end

	-- Handles onThink events. If you wish to handle this yourself, please use the CALLBACK_ONTHINK callback.
	function NpcHandler:onThink()
		local callback = self:getCallback(CALLBACK_ONTHINK)
		if(callback == nil or callback()) then
			if(NPCHANDLER_TALKDELAY == TALKDELAY_ONTHINK) then
				for cid, talkDelay in pairs(self.talkDelay) do
					if(talkDelay.time ~= nil and talkDelay.message ~= nil and os.time() >= talkDelay.time) then
						selfSay(talkDelay.message, cid, talkDelay.publicize and TRUE or FALSE)
						self.talkDelay[cid] = nil
					end
				end
			end

			if(self:processModuleCallback(CALLBACK_ONTHINK)) then
				for pos, focus in pairs(self.focuses) do
					if(focus ~= nil) then
						if(not self:isInRange(focus)) then
							self:onWalkAway(focus)
						elseif(self.talkStart[focus] ~= nil and (os.time() - self.talkStart[focus]) > self.idleTime) then
							self:unGreet(focus)
						else
							self:updateFocus()
						end
					end
				end
			end
		end
	end

	-- Tries to greet the player with the given cid.
	function NpcHandler:onGreet(cid)
		if(self:isInRange(cid)) then
			if(not self:isFocused(cid)) then
				self:greet(cid)
				return
			end
		end
	end

	-- Simply calls the underlying unGreet function.
	function NpcHandler:onFarewell(cid)
		self:unGreet(cid)
	end

	-- Should be called on this npc's focus if the distance to focus is greater then talkRadius.
	function NpcHandler:onWalkAway(cid)
		if(self:isFocused(cid)) then
			local callback = self:getCallback(CALLBACK_CREATURE_DISAPPEAR)
			if(callback == nil or callback()) then
				if(self:processModuleCallback(CALLBACK_CREATURE_DISAPPEAR, cid)) then
					local msg = self:getMessage(MESSAGE_WALKAWAY)
					local playerName = getPlayerName(cid)
					if not playerName then
						playerName = -1
					end

					local parseInfo = { [TAG_PLAYERNAME] = playerName }
					local message = self:parseMessage(msg, parseInfo)

					local msg_male = self:getMessage(MESSAGE_WALKAWAY_MALE)
					local message_male = self:parseMessage(msg_male, parseInfo)
					local msg_female = self:getMessage(MESSAGE_WALKAWAY_FEMALE)
					local message_female = self:parseMessage(msg_female, parseInfo)
					if message_female ~= message_male then
						if getPlayerSex(cid) == 0 then
							selfSay(message_female)
						else
							selfSay(message_male)
						end
					elseif message ~= "" then
						selfSay(message)
					end
					self:releaseFocus(cid)
				end
			end
		end
	end

	-- Returns true if cid is within the talkRadius of this npc.
	function NpcHandler:isInRange(cid)
		local distance = isPlayer(cid) == TRUE and getDistanceTo(cid) or -1
		if distance == -1 then
			return false
		end

		return (distance <= self.talkRadius)
	end

	-- Resets the npc into its initial state (in regard of the keywordhandler).
	--	All modules are also receiving a reset call through their callbackOnModuleReset function.
	function NpcHandler:resetNpc()
		if(self:processModuleCallback(CALLBACK_MODULE_RESET)) then
			self.keywordHandler:reset()
		end
	end

	function NpcHandler:cancelNPCTalk(events)
		for aux = 1, #events do
			stopEvent(events[aux].event)
		end
		events = nil
	end

	function NpcHandler:doNPCTalkALot(msgs, interval, pcid)
		if self.eventDelayedSay[pcid] then
			self:cancelNPCTalk(self.eventDelayedSay[pcid])
		end

		self.eventDelayedSay[pcid] = {}
		local ret = {}
		for aux = 1, #msgs do
			self.eventDelayedSay[pcid][aux] = {}
			doCreatureSayWithDelay(getNpcCid(), msgs[aux], TALKTYPE_PRIVATE_NP, ((aux-1) * (interval or 10000)) + 1000, self.eventDelayedSay[pcid][aux], pcid)
			table.insert(ret, self.eventDelayedSay[pcid][aux])
		end
		return(ret)
	end

	-- Makes the npc represented by this instance of NpcHandler say something.
	--	This implements the currently set type of talkdelay.
	--	shallDelay is a boolean value. If it is false, the message is not delayed. Default value is true.
	function NpcHandler:say(message, focus, publicize, shallDelay, delay)
		if(type(message) == "table") then
			return self:doNPCTalkALot(message, delay or 10000, focus)
		end

		if self.eventDelayedSay[focus] then
			self:cancelNPCTalk(self.eventDelayedSay[focus])
		end

		local shallDelay = not shallDelay and true or shallDelay
		if(NPCHANDLER_TALKDELAY == TALKDELAY_NONE or shallDelay == false) then
			selfSay(message, focus, publicize and TRUE or FALSE)
			return
		end

		self.eventSay[focus] = addEvent(function(x) if isPlayer(x[3]) then doCreatureSay(x[1], x[2], TALKTYPE_PRIVATE_NP, false, x[3], getCreaturePosition(x[1])) end end, self.talkDelayTime * 1000, {getNpcCid(), message, focus})
	end
end

- - - Updated - - -

Npc Libs?
 
PHP:
[07/07/2013 13:34:41] >> Loading config
[07/07/2013 13:34:41] >> Loading database driver... SQLite 3.7.7.1
[07/07/2013 13:34:41] >> Running database manager
[07/07/2013 13:34:41] > Optimized database.
[07/07/2013 13:34:41] >> Loading bans
[07/07/2013 13:34:41] >> Loading vocations
[07/07/2013 13:34:41] >> Loading commands
[07/07/2013 13:34:41] >> Loading items
[07/07/2013 13:34:41] >> Loading script systems
[07/07/2013 13:34:43] Warning: [Event::checkScript] Can not load script. /scripts/raidCommands.lua
[07/07/2013 13:34:43] cannot open data/talkactions/scripts/raidCommands.lua: No such file or directory
[07/07/2013 13:34:43] Warning: [Event::checkScript] Can not load script. /scripts/raidCommands.lua
[07/07/2013 13:34:43] cannot open data/talkactions/scripts/raidCommands.lua: No such file or directory
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:43] Warning: [MoveEvents::addEvent] Duplicate move event found: 0
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] Warning: [Event::checkScript] Can not load script. /scripts/pits of inferno quest/pitsOfInfernoQuestTileTeleports.lua
[07/07/2013 13:34:44] ...its of inferno quest/pitsOfInfernoQuestTileTeleports.lua:2: unexpected symbol near ','
[07/07/2013 13:34:44] >> Loading monsters
[07/07/2013 13:34:44] [Warning - Monsters::loadMonster] Unknown race type . data/monster/Update 9.1/Honour Guard.xml
[07/07/2013 13:34:45] Warning: [Monsters::deserializeSpell] - Deepling Master Librarian - Unknown shootEffect: smallplants
[07/07/2013 13:34:45] Warning: [Monsters::deserializeSpell] - Deepling Master Librarian - Unknown shootEffect: smallplants
[07/07/2013 13:34:45] Error: [Monsters::deserializeSpell] - Deepling Master Librarian - Unknown spell name: 
[07/07/2013 13:34:45] [Warning - Monsters::loadMonster] Cant load spell. data/monster/Deeplings/Deepling Master Librarian.xml
[07/07/2013 13:34:45] Warning: [Monsters::deserializeSpell] - Deepling Spellsinger - Unknown shootEffect: smallplants
[07/07/2013 13:34:45] Warning: [Monsters::deserializeSpell] - Deepling Spellsinger - Unknown shootEffect: smallplants
[07/07/2013 13:34:45] Error: [Monsters::deserializeSpell] - Deepling Spellsinger - Unknown spell name: 
[07/07/2013 13:34:45] [Warning - Monsters::loadMonster] Cant load spell. data/monster/Deeplings/Deepling Spellsinger.xml
[07/07/2013 13:34:45] Error: [Monsters::deserializeSpell] - Hideous Fungus - Unknown spell name: 
[07/07/2013 13:34:45] [Warning - Monsters::loadMonster] Cant load spell. data/monster/Gnomegate/Hideous Fungus.xml
[07/07/2013 13:34:45] Error: [Monsters::deserializeSpell] - Stone Devourer - Unknown spell name: 
[07/07/2013 13:34:45] [Warning - Monsters::loadMonster] Cant load spell. data/monster/Gnomegate/Stone Devourer.xml
[07/07/2013 13:34:45] Warning: [Monsters::deserializeSpell] - Stone Devourer - Unknown shootEffect: 
[07/07/2013 13:34:45] Error: [Monsters::deserializeSpell] - Stone Devourer - Unknown spell name: stones
[07/07/2013 13:34:45] [Warning - Monsters::loadMonster] Cant load spell. data/monster/Gnomegate/Stone Devourer.xml
[07/07/2013 13:34:45] Error: [Monsters::deserializeSpell] - Stone Devourer - Unknown spell name: 
[07/07/2013 13:34:45] [Warning - Monsters::loadMonster] Cant load spell. data/monster/Gnomegate/Stone Devourer.xml
[07/07/2013 13:34:46] Warning: [Monsters::deserializeSpell] - Hellgorak - Unknown areaEffect: 
[07/07/2013 13:34:46] Warning: [Monsters::deserializeSpell] - Zugurosh - Unknown areaEffect: blue
[07/07/2013 13:34:47] Warning: [Monsters::deserializeSpell] - Phantasm Summon - Unknown shootEffect: 
[07/07/2013 13:34:47] Warning: [Monsters::deserializeSpell] - Phantasm - Unknown shootEffect: 
[07/07/2013 13:34:47] Warning: [Monsters::deserializeSpell] - Spectre - Unknown shootEffect: redshimmer
[07/07/2013 13:34:47] Warning: [Monsters::deserializeSpell] - Mahrdis - Unknown shootEffect: explosionarea
[07/07/2013 13:34:47] Warning: [Monsters::deserializeSpell] - Thalas - Unknown shootEffect: 
[07/07/2013 13:34:48] >> Loading outfits
[07/07/2013 13:34:48] >> Loading admin protocol config
[07/07/2013 13:34:48] >> Loading experience stages
[07/07/2013 13:34:48] >> Using plaintext passwords
[07/07/2013 13:34:48] >> Checking world type... PVP
[07/07/2013 13:34:48] >> Loading map
[07/07/2013 13:34:51] > Map size: 65000x65000.
[07/07/2013 13:35:00] Duplicate uniqueId 3028
[07/07/2013 13:35:02] Duplicate uniqueId 2086
[07/07/2013 13:35:06] > Map loading time: 17.476 seconds.
[07/07/2013 13:35:08] [Warning - NpcScript::NpcScript] Can not load script: data/npc/scripts/Karith.lua
[07/07/2013 13:35:08] data/npc/scripts/Karith.lua:129: unexpected symbol near ','
[07/07/2013 13:35:08] [Warning - NpcScript::NpcScript] Can not load script: data/npc/scripts/Grizzly Adams.lua
[07/07/2013 13:35:08] data/npc/scripts/Grizzly Adams.lua:36: unexpected symbol near ','
[07/07/2013 13:35:08] [Warning - NpcScript::NpcScript] Can not load script: data/npc/scripts/Reed.lua
[07/07/2013 13:35:08] data/npc/scripts/Reed.lua:36: unexpected symbol near ','
[07/07/2013 13:35:08] [Warning - NpcScript::NpcScript] Can not load script: data/npc/scripts/Bruce.lua
[07/07/2013 13:35:08] data/npc/scripts/Bruce.lua:34: '=' expected near 'elseif'
[07/07/2013 13:35:08] [Warning - NpcScript::NpcScript] Can not load script: data/npc/scripts/Ajax.lua
[07/07/2013 13:35:08] data/npc/scripts/Ajax.lua:120: ')' expected near 'then'
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Butterfly
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Butterfly
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Butterfly
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find midnight warrior
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find midnight warrior
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find berrypest
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Flame Pillar
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Flame Pillar
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Flame Pillar
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Flame Pillar
[07/07/2013 13:35:08] [Spawn::addMonster] Can not find Flame Pillar
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Flame Pillar
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Flame Pillar
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Flame Pillar
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Poisonthrower
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Poisonthrower
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Poisonthrower
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Poisonthrower
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Poisonthrower
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find manta ray
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:09] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:35:10] [Spawn::addMonster] Can not find Defiler
[07/07/2013 13:36:48] Notice: Map load (relational) took: 98.491 s
[07/07/2013 13:36:48] >> Initializing gamestate
[07/07/2013 13:36:50] >> Loaded all modules, server starting up...
[07/07/2013 13:36:51] >> Forgotten Server Online!

I know its alot, we need alot to fix but first the npc's
 
Back
Top