Ir para conteúdo

Traduzindo Npc's (Simples Tuto)


matamatama

Posts Recomendados

Olha já vi muita gente atras disso inclusive eu...mas eu não achava até que fui mexer nas npc e consegui

 

O Que Isso Vai Fazer "OBIVIO"

-Bom Tipow Vai De Sua Escolha Como Mudar Hi Pra Oi.. Etc..

Mão A Obra

Bom Primeiro Eu Queria Falar O Seguinte Que Não é Todos Os Npcs

 

Se o Npc For Assim dá :

 

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Akka Teleport" script="tst.lua" attackable="false" skull="0" emblem="0" walkinterval="5000" floorchange="false">
<health now="185" max="185"/>
<look type="152" head="73" body="82" legs="94" feet="49" addons="3" corpse="2212"/>
<parameters>
	<parameter key="travel" value="1" />
	<parameter key="travel_destinations" value="Temple,958,1018,7,0;" />
</parameters>
</npc>

 

Mas Se Tiver O Massage_Greet Nas Própria Xml Não dá:

 

<parameter key="message_greet" 

 

Bom Primeiro Vá Em Data>Npc>Lib>npcsystem>

Abra O npchandler.lua e avera algo Parecido Com Isso

-- Advanced NPC System (Created by Jiddo),
-- Modified by 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 conversation behaviors.
CONVERSATION_DEFAULT = 0 -- Conversation through default window, like it was before 8.2 update.
CONVERSATION_PRIVATE = 1 -- Conversation through NPCs chat window, as of 8.2 update. (Default)
	--Small Note: Private conversations also means the NPC will use multi-focus system.

-- Currently applied conversation behavior. CONVERSATION_PRIVATE is default.
NPCHANDLER_CONVBEHAVIOR = CONVERSATION_PRIVATE

-- 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_PLACEDINQUEUE		= 22 -- When the player has been placed in the costumer queue.

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

-- 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|'
TAG_QUEUESIZE = '|QUEUESIZE|'

NpcHandler = {
	keywordHandler = nil,
	focuses = nil,
	talkStart = nil,
	idleTime = 90,
	talkRadius = 4,
	talkDelayTime = 1, -- Seconds to delay outgoing messages.
	queue = nil,
	talkDelay = nil,
	callbackFunctions = nil,
	modules = nil,
	shopItems = nil, -- They must be here since ShopModule uses "static" functions
	messages = {
		-- These are the default replies of all npcs. They can/should be changed individually for each npc.
		[MESSAGE_GREET] 	= 'Eae, |PLAYERNAME|! Eu Ja Esperava Você.',
		[MESSAGE_FAREWELL] 	= 'Té Mais, |PLAYERNAME|!',
		[MESSAGE_BUY] 		= 'Você Quer Comprar |ITEMCOUNT| |ITEMNAME| por |TOTALCOST| gps?',
		[MESSAGE_ONBUY] 	= 'Espero Sua Compra.',
		[MESSAGE_BOUGHT] 	= 'Bought |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.',
		[MESSAGE_SELL] 		= 'Voce Realmente Quer Vender |ITEMCOUNT| |ITEMNAME| Por |TOTALCOST| gold coins?',
		[MESSAGE_ONSELL] 	= 'Obrigado |ITEMNAME|, |PLAYERNAME| gold.',
		[MESSAGE_SOLD]	 	= 'Sold |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.',
		[MESSAGE_MISSINGMONEY]	= 'Você Num Tem A Grana.',
		[MESSAGE_NEEDMONEY] 	= 'NEED.',
		[MESSAGE_MISSINGITEM] 	= 'Você não tem o tal item, |PLAYERNAME|!',
		[MESSAGE_NEEDITEM]	= 'Você não tem esse objeto.',
		[MESSAGE_NEEDSPACE]	= 'Você Não Tem Cap.',
		[MESSAGE_NEEDMORESPACE]	= 'Você Não Tem Cap Pra Todos Os Itens.',
		[MESSAGE_IDLETIMEOUT] 	= 'Proximo, Por Favor!',
		[MESSAGE_WALKAWAY] 	= 'Mal Educado Hunted (FOREVER)!',
		[MESSAGE_DECLINE]	= 'Not good enough, is it... ?',
		[MESSAGE_SENDTRADE]	= 'Esta E Minha Offerta, |PLAYERNAME|. Você Compra?',
		[MESSAGE_NOSHOP]	= 'Eu Não Estou Ofertando Nada.',
		[MESSAGE_ONCLOSESHOP]	= 'Obrigado,Volte Mais Tarde.',
		[MESSAGE_ALREADYFOCUSED]= '|PLAYERNAME|! Eu Estou Falando Com Você ...',
		[MESSAGE_PLACEDINQUEUE] = '|PLAYERNAME|, please wait for your turn. There are |QUEUESIZE| customers before you.'
	}
}

-- Creates a new NpcHandler with an empty callbackFunction stack.
function NpcHandler:new(keywordHandler)
	local obj = {}
	obj.callbackFunctions = {}
	obj.modules = {}
	if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
		obj.focuses = {}
		obj.talkStart = {}
	else
		obj.queue = Queue:new(obj)
		obj.focuses = 0
		obj.talkStart = 0
	end
	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(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
		if(self:isFocused(newFocus)) then
			return
		end

		table.insert(self.focuses, newFocus)
	else
		self.focuses = newFocus
	end

	self:updateFocus()
end
NpcHandler.changeFocus = NpcHandler.addFocus --"changeFocus" looks better for CONVERSATION_DEFAULT

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

		return false
	end

	return (self.focuses == focus)
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()
	if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
		for pos, focus in pairs(self.focuses) do
			if(focus ~= nil) then
				doNpcSetCreatureFocus(focus)
				return
			end
		end

		doNpcSetCreatureFocus(0)
	else
		doNpcSetCreatureFocus(self.focuses)
	end
end

-- Used when the npc should un-focus the player.
function NpcHandler:releaseFocus(focus)
	if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
		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.talkStart[focus] = nil
		closeShopWindow(focus) --Even if it can not exist, we need to prevent it.
		self:updateFocus()
	else
		closeShopWindow(focus)
		self:changeFocus(0)
	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(unpack(arg))
		elseif(id == CALLBACK_CREATURE_DISAPPEAR and module.callbackOnCreatureDisappear ~= nil) then
			tmpRet = module:callbackOnCreatureDisappear(unpack(arg))
		elseif(id == CALLBACK_CREATURE_SAY and module.callbackOnCreatureSay ~= nil) then
			tmpRet = module:callbackOnCreatureSay(unpack(arg))
		elseif(id == CALLBACK_PLAYER_ENDTRADE and module.callbackOnPlayerEndTrade ~= nil) then
			tmpRet = module:callbackOnPlayerEndTrade(unpack(arg))
		elseif(id == CALLBACK_PLAYER_CLOSECHANNEL and module.callbackOnPlayerCloseChannel ~= nil) then
			tmpRet = module:callbackOnPlayerCloseChannel(unpack(arg))
		elseif(id == CALLBACK_ONBUY and module.callbackOnBuy ~= nil) then
			tmpRet = module:callbackOnBuy(unpack(arg))
		elseif(id == CALLBACK_ONSELL and module.callbackOnSell ~= nil) then
			tmpRet = module:callbackOnSell(unpack(arg))
		elseif(id == CALLBACK_ONTHINK and module.callbackOnThink ~= nil) then
			tmpRet = module:callbackOnThink(unpack(arg))
		elseif(id == CALLBACK_GREET and module.callbackOnGreet ~= nil) then
			tmpRet = module:callbackOnGreet(unpack(arg))
		elseif(id == CALLBACK_FAREWELL and module.callbackOnFarewell ~= nil) then
			tmpRet = module:callbackOnFarewell(unpack(arg))
		elseif(id == CALLBACK_MESSAGE_DEFAULT and module.callbackOnMessageDefault ~= nil) then
			tmpRet = module:callbackOnMessageDefault(unpack(arg))
		elseif(id == CALLBACK_MODULE_RESET and module.callbackOnModuleReset ~= nil) then
			tmpRet = module:callbackOnModuleReset(unpack(arg))
		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
			if(self.queue == nil or not self.queue:greetNext()) then
				local msg = self:getMessage(MESSAGE_FAREWELL)
				local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid) }
				msg = self:parseMessage(msg, parseInfo)

				self:say(msg, cid)
				self:releaseFocus(cid)
				self:say(msg)
			end
		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)
				self:addFocus(cid)
				self:say(msg, cid)
			end
		end
	end
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, class, msg)
	local callback = self:getCallback(CALLBACK_CREATURE_SAY)
	if(callback == nil or callback(cid, class, msg)) then
		if(self:processModuleCallback(CALLBACK_CREATURE_SAY, cid, class, msg)) then
			if(not self:isInRange(cid)) then
				return
			end

			if(self.keywordHandler ~= nil) then
				if((self:isFocused(cid) and (class == TALKTYPE_PRIVATE_PN or NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT)) 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, class, msg)) then
							if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
								self.talkStart[cid] = os.time()
							else
								self.talkStart = os.time()
							end
						end
					else
						if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
							self.talkStart[cid] = os.time()
						else
							self.talkStart = os.time()
						end
					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, class, 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, class, 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 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
			if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) 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)
						self.talkDelay[cid] = nil
					end
				end
			elseif(self.talkDelay.time ~= nil and self.talkDelay.message ~= nil and os.time() >= self.talkDelay.time) then
				selfSay(self.talkDelay.message)
				self.talkDelay.time = nil
				self.talkDelay.message = nil
			end
		end

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

-- Tries to greet the player with the given cid.
function NpcHandler:onGreet(cid)
	if(self:isInRange(cid)) then
		if(NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE) then
			if(not self:isFocused(cid)) then
				self:greet(cid)
				return
			end
		elseif(NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT) then
			if(self.focuses == 0) then
				self:greet(cid)
			elseif(self.focuses == cid) then
				local msg = self:getMessage(MESSAGE_ALREADYFOCUSED)
				local parseInfo = { [TAG_PLAYERNAME] = getCreatureName(cid) }
				msg = self:parseMessage(msg, parseInfo)
				self:say(msg)
			else
				if(not self.queue:isInQueue(cid)) then
					self.queue:push(cid)
				end

				local msg = self:getMessage(MESSAGE_PLACEDINQUEUE)
				local parseInfo = { [TAG_PLAYERNAME] = getCreatureName(cid), [TAG_QUEUESIZE] = self.queue:getSize() }
				msg = self:parseMessage(msg, parseInfo)
				self:say(msg)
			end
		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
				if(self.queue == nil or not self.queue:greetNext()) then
					local msg = self:getMessage(MESSAGE_WALKAWAY)
					local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid) }
					msg = self:parseMessage(msg, parseInfo)

					self:say(msg, cid)
					self:releaseFocus(cid)
					self:say(msg)
				end
			end
		end
	end
end

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

	return (distance <= self.talkRadius)
end

-- Resets the npc into it's initial state (in regard of the keyrodhandler).
--	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

-- 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 false.
function NpcHandler:say(message, focus, shallDelay)
	local shallDelay = shallDelay or false
	if(NPCHANDLER_TALKDELAY == TALKDELAY_NONE or not shallDelay) then
		if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
			selfSay(message, focus)
			return
		else
			selfSay(message)
			return
		end
	end

	-- TODO: Add an event handling method for delayed messages
	if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
		self.talkDelay[focus] = {
			message = message,
			time = os.time() + self.talkDelayTime,
		}
	else
		self.talkDelay = {
			message = message,
			time = os.time() + self.talkDelayTime
		}
	end
end
end

Então Vamos Lá

 

Procure Por Esta Frase

-- These are the default replies of all npcs. They can/should be changed individually for each npc.

Abaixo Disso A Varias Opções Tipow

 

MESSAGE Great = Mensagem que o npc responde quando o player fala hi

 

[MESSAGE_FAREWELL] = Quando O Cara Fala Bye

 

E Por Ai Vai ... Mano Eu Nao Explico Tudo Por Como Eu Achei Isso Recentemente Nem Eu Sei...Mas Use O Tradutor e na

 

Frente Das MESSAGE Sempre Vai Ter Uma Frase Ai Você Tradus EX:

 

[MESSAGE_FAREWELL] = 'Bye,<< Traduza |PLAYERNAME|!',

Bom Nesse .lua e so as message feche e salve e ponha como somente leitura...

 

Mas Como Poim Somente Leitura ?

 

So Clikar Com O Botão Direito Do Mouse No Arquivo E Depois Propriedades...La Vai Ter Somente Leitura Marca Clike Em

 

Aplicar E Depois Em OK...

 

Bom Agora Na Mesma Pasta (npcsystem) Abra O npcsystem.lua

 

Bom La Vai Ter Algo Parecido A Isso:

 

-- Advanced NPC System (Created by Jiddo),
-- Modified by Talaturen.

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

-- Global npc constants:

-- Keyword nestling behavior. For more information look at the top of keywordhandler.lua
KEYWORD_BEHAVIOR = BEHAVIOR_NORMAL_EXTENDED

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

-- The word for requesting trade window. For more information look at the top of modules.lua
SHOP_TRADEREQUEST = {'offer', '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

-- Conversation behavior. For more information, look at the top of npchandler.lua.
NPCHANDLER_CONVBEHAVIOR = CONVERSATION_PRIVATE

-- 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|'
TAG_QUEUESIZE = '|QUEUESIZE|'

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_placedinqueue')
	if(ret ~= nil) then
		npcHandler:setMessage(MESSAGE_PLACEDINQUEUE, 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

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

Bom Como Acho Que Está Obivio...Mas Vamos A Explicação

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

Bom Em Hi,Hello,Hey São As Tres Palavras Do "Hi" para o npc

Ai Fica A Sua Escolha Eu Pus Oi,Ola,Eae

 

E No Bye,FareWell,Cya Palavras Do "bye" para o npc

Eu Pus Xau,Tchau,Flw

 

Na Linha

	-- 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'}

 

no yes e a resposta que o player da quando o npc pergunta

e o no para cancelar oque voce falo

 

O Resto Recomendo Não Mecher Porque Eu Não Sei...

Se Alguem Saber Mais Opções Me Avisa...

 

MSN: marcosocara18@hotmail.com

 

 

Desculpe Pelos Os Erros De Porugues E Que Eu Não Do Conta De Escrever Certo No PC... Me Irrita Escrever Certo

Editado por Foxspiker
Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...

Aprovado

 

Acho que é muito útil, para quests. Ou até mesmo, uma linguagem dos goblins, orcs, lizards..

 

1: Muintas Pessoas Conseguem Fazer Isso!!

 

2: Ageite um Pouco o Topico nao Entendi nada!

 

3: Reprovado :button_cancel:

 

Abraços..

 

@DevilMoon, na minha opnião, não estou afirmando nada, mais na minha opnião, muita gente sabe criar ótimos otservs, os tutoriais, são dessas pessoas, que querem passar pra quem não sabe.

Eu pessoalmente consegui entender, acho que está bom, mas dai essa é minha opnião..

 

Valeu, atenciosamente XJhoow

Link para o comentário
Compartilhar em outros sites

  • 1 month later...
×
×
  • Criar Novo...