-
Total de itens
65 -
Registro em
-
Última visita
Tipo de Conteúdo
Perfis
Fóruns
Calendário
Publique
Posts postados por axebruno
-
-
Meus npc nao respondem, todos estao nos lugares corretos e etc, porem quando falo com os npcs todos dao algum tipo de erro.
[1:15:51.563] [Error - NpcScript Interface]
[1:15:51.566] data/npc/scripts/boat_vip.lua:onCreatureSay
[1:15:51.567] Description:
[1:15:51.570] data/npc/lib/npcsystem/npchandler.lua:558: attempt to call global 'getDistanceTo' (a nil value)
[1:15:51.571] stack traceback:
[1:15:51.573] data/npc/lib/npcsystem/npchandler.lua:558: in function 'isInRange'
[1:15:51.577] data/npc/lib/npcsystem/npchandler.lua:381: in function 'onCreatureSay'
[1:15:51.582] data/npc/scripts/boat_vip.lua:10: in function <data/npc/scripts/boat_vip.lua:10>
NPCCHANDLER.LUA
-- Advanced NPC System (Created by Jiddo),
-- Modified by TheForgottenServer Team.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 = 300,
talkRadius = 3,
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] = 'Welcome, |PLAYERNAME|! I have been expecting you.',
[MESSAGE_FAREWELL] = 'Good bye, |PLAYERNAME|!',
[MESSAGE_BUY] = 'Do you want to buy |ITEMCOUNT| |ITEMNAME| for |TOTALCOST| gold coins?',
[MESSAGE_ONBUY] = 'It was a pleasure doing business with you.',
[MESSAGE_BOUGHT] = 'Bought |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.',
[MESSAGE_SELL] = 'Do you want to sell |ITEMCOUNT| |ITEMNAME| for |TOTALCOST| gold coins?',
[MESSAGE_ONSELL] = 'Thank you for this |ITEMNAME|, |PLAYERNAME| gold.',
[MESSAGE_SOLD] = 'Sold |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.',
[MESSAGE_MISSINGMONEY] = 'Sorry, you don\'t have enough money.',
[MESSAGE_NEEDMONEY] = 'You do not have enough money.',
[MESSAGE_MISSINGITEM] = 'You don\'t even have that item, |PLAYERNAME|!',
[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] = 'Next, please!',
[MESSAGE_WALKAWAY] = 'How rude!',
[MESSAGE_DECLINE] = 'Not good enough, is it... ?',
[MESSAGE_SENDTRADE] = 'Here\'s my offer, |PLAYERNAME|. Don\'t you like it?',
[MESSAGE_NOSHOP] = 'Sorry, I\'m not offering anything.',
[MESSAGE_ONCLOSESHOP] = 'Thank you, come back when you want something more.',
[MESSAGE_ALREADYFOCUSED]= '|PLAYERNAME|! I am already talking to you...',
[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.messagessetmetatable(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
endtable.insert(self.focuses, newFocus)
else
self.focuses = newFocus
endself: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
endreturn false
endreturn (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
enddoNpcSetCreatureFocus(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
endlocal 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]
endreturn 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 or module == nil) then
return false
endmodule:init(self)
if(module.parseParameters ~= nil) then
module:parseParameters()
endtable.insert(self.modules, module)
return true
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))
endif(not tmpRet) then
ret = false
break
end
endreturn ret
end-- Returns the message represented by id.
function NpcHandler:getMessage(id)
local ret = nil
if(self.messages ~= nil) then
ret = self.messages[id]
endreturn 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)
endreturn ret
end-- Makes sure the npc un-focuses the currently focused player
function NpcHandler:unGreet(cid)
if(not self:isFocused(cid)) then
return
endlocal callback = self:getCallback(CALLBACK_FAREWELL)
if(callback == nil or callback(cid)) 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
endif(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
endif(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)
endlocal 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(cid)) 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
endreturn (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
-
boa noite, nao sei qual area correta entao por favor movam para la, obrigado!
meu servidor esta dando debug, por exemplo, fiz uma conta com varios chares,eu logo o knight nao da debug, logo paladin nao da debug, porem se logar o druid ou sorcerer, da debug,
so que o estranho e que eu fiz outra conta com apenas um druid, e consigo logar normalmente, so comeca dar debug se eu criar mais de 1 char na mesma acc, e um desses charesfor druid ou sorcerer, caso alguem logue um druid q tenha mais de 1 char na acc, todos q estao perto tomam debug, alguem sabe como arrumar?
obrigado desde ja!!!
meu servidor e Mysql - Gesrior.versao 8.60
-
salve galera, estou colocando um novo gold no servidor special coin, aquele blue eye....
peguei um script aqui no tibiaking, e adicionei no meu certinho,
fui fazer o teste comprei 1 item de 5kk pela alavanca, ele está comprando normalmente, remove 5 special coins e pego o item,
porem tem um bug, ele está transformando de crystal coin para special coin mas nao esta de special coin para crystal.. alguem pode me ajudar?
vou postar tudo aqui em baixo!
changegold.lua
local coins = {
[2148] = {
to = 2152, effect = 210
},
[2152] = {
from = 2148, to = 2160, effect = 130
},
[2160] = {
from = 2152, to = 10559, effect = 65
},
[10559] = {
from = 2160, effect = 198
}
}function onUse(cid, item, fromPosition, itemEx, toPosition)
if(getPlayerFlagValue(cid, PLAYERFLAG_CANNOTPICKUPITEM)) then
return false
endlocal coin = coins[item.itemid]
if(not coin) then
return false
endif(coin.to ~= nil and item.type == ITEMCOUNT_MAX) then
doChangeTypeItem(item.uid, item.type - item.type)
doPlayerAddItem(cid, coin.to, 1)
doSendAnimatedText(fromPosition, "+ $$$", coins[coin.to].effect)
elseif(coin.from ~= nil) then
doChangeTypeItem(item.uid, item.type - 1)
doPlayerAddItem(cid, coin.from, ITEMCOUNT_MAX)
doSendAnimatedText(fromPosition, "- $$$", coins[coin.from].effect)
endreturn true
end- Cat reagiu a isso
-
boa tarde não sei se criei na area certa, caso esteja errado por favor mova-o!
fiz um npc, para vender itens vips enquanto estou ajeitando meu servidor, porém
meu npc esta com todos os itens quando eu falo "hi, trade"mas coloco para comprar e o npc não vende o item! e nem cobra o dinheiro!
5 minutos atrás, axebruno disse:boa tarde não sei se criei na area certa, caso esteja errado por favor mova-o!
fiz um npc, para vender itens vips enquanto estou ajeitando meu servidor, porém
meu npc esta com todos os itens quando eu falo "hi, trade"mas coloco para comprar e o npc não vende o item! e nem cobra o dinheiro!
quando eu compro ele mostra no tfs do servidor
shopmodule.onbuy - item not found on shopitems list -
BOM DIA , BOA TARDE, BOA NOITE,
PRECISO DE AJUDA URGENTE, TENHO UM SERVIDOR 8.54 NÃO ESTÁ ONLINE NO MOMENTO POIS ESTÁ 8.54.PRECISO DE AJUDA PARA MUDAR ELE PARA 8.60, COMO CONSIGO FAZER ISSO?
ALGUEM PODE ME AJUDAR? OBRIGADO! -
-
accountManager = "yes"
namelockManager = "no"
newPlayerChooseVoc = "yes"
newPlayerSpawnPosX = 160
newPlayerSpawnPosY = 54
newPlayerSpawnPosZ = 7
newPlayerTownId = 1
newPlayerLevel = 8
newPlayerMagicLevel = 0
generateAccountNumber = "no"
redSkullLength = 180 * 60 * 1000
blackSkullLength = 240 * 60 * 1000
dailyFragsToRedSkull = 10
weeklyFragsToRedSkull = 100
monthlyFragsToRedSkull = 300
dailyFragsToBlackSkull = 20
weeklyFragsToBlackSkull = 120
monthlyFragsToBlackSkull = 480
dailyFragsToBanishment = 0
weeklyFragsToBanishment = 0
monthlyFragsToBanishment = 0
blackSkulledDeathHealth = 40
blackSkulledDeathMana = 0
useBlackSkull = true
useFragHandler = true
advancedFragList = falsenotationsToBan = 3
warningsToFinalBan = 1
warningsToDeletion = 5
banLength = 3 * 24 * 60 * 60
killsBanLength = 1 * 24 * 60 * 60
finalBanLength = 5 * 24 * 60 * 60
ipBanishmentLength = 9999 * 24 * 60 * 60
broadcastBanishments = false
maxViolationCommentSize = 200
violationNameReportActionType = 2
autoBanishUnknownBytes = falseworldType = "open"
protectionLevel = 100
pvpTileIgnoreLevelAndVocationProtection = true
pzLocked = 30 * 1000
huntingDuration = 45 * 1000
criticalHitChance = 7
criticalHitMultiplier = 1
displayCriticalHitNotify = false
removeWeaponAmmunition = false
removeWeaponCharges = false
removeRuneCharges = "false"
whiteSkullTime = 2 * 60 * 1000
noDamageToSameLookfeet = false
showHealingDamage = false
showHealingDamageForMonsters = false
fieldOwnershipDuration = 5 * 1000
stopAttackingAtExit = false
oldConditionAccuracy = false
loginProtectionPeriod = 0 * 1000
deathLostPercent = 10
stairhopDelay = 0 * 1000
pushCreatureDelay = 0 * 500
deathContainerId = 1987
gainExperienceColor = 18
addManaSpentInPvPZone = true
squareColor = 0
allowFightback = trueworldId = 0
ip = "127.0.0.1"
bindOnlyConfiguredIpAddress = false
loginPort = 7171
gamePort = 7172
adminPort = 7171
statusPort = 7171
loginTries = 10
retryTimeout = 2 * 1000
loginTimeout = 5 * 1000
maxPlayers = 1000
motd = "*Bem Vindo ao Hardbaiak.*"
displayOnOrOffAtCharlist = true
onePlayerOnlinePerAccount = false
allowClones = false
serverName = "Hardbaiak"
loginMessage = "Bem-Vindo ao Hardbaiak Server!"
statusTimeout = 10 * 100
replaceKickOnLogin = true
forceSlowConnectionsToDisconnect = false
loginOnlyWithLoginServer = false
premiumPlayerSkipWaitList = falsesqlType = "mysql"
sqlHost = "localhost"
sqlPort = 3306
sqlUser = "root"
sqlPass = ""
sqlDatabase = "database"
sqlFile = "forgottenserver.s3db"
sqlKeepAlive = 0
mysqlReadTimeout = 5000
mysqlWriteTimeout = 5000
encryptionType = "sha1"deathListEnabled = true
deathListRequiredTime = 1 * 60 * 1000
deathAssistCount = 19
maxDeathRecords = 5ingameGuildManagement = true
levelToFormGuild = 100
premiumDaysToFormGuild = 0
guildNameMinLength = 4
guildNameMaxLength = 20highscoreDisplayPlayers = 100
updateHighscoresAfterMinutes = 2buyableAndSellableHouses = true
houseNeedPremium = false
bedsRequirePremium = false
levelToBuyHouse = 100
housesPerAccount = 1
houseRentAsPrice = false
housePriceAsRent = false
housePriceEachSquare = 10000
houseRentPeriod = "weekly"
houseCleanOld = 0
guildHalls = falsetimeBetweenActions = 200
timeBetweenExActions = 1000
checkCorpseOwner = false
hotkeyAimbotEnabled = true
maximumDoorLevel = 500mapName = "Baiak Yurots.otbm"
mapAuthor = "Maracaot"
randomizeTiles = true
useHouseDataStorage = false
storeTrash = true
cleanProtectedZones = true
mailboxDisabledTowns = "-1"defaultPriority = "high"
niceLevel = 5
coresUsed = "-1"
optimizeDatabaseAtStartup = true
removePremiumOnInit = true
confirmOutdatedVersion = falsemaxMessageBuffer = 10
bufferMutedOnSpellFailure = falsedataDirectory = "data/"
allowChangeOutfit = true
allowChangeColors = true
allowChangeAddons = true
disableOutfitsForPrivilegedPlayers = false
bankSystem = true
saveGlobalStorage = true
displaySkillLevelOnAdvance = false
spellNameInsteadOfWords = false
emoteSpells = true
promptExceptionTracerErrorBox = true
storePlayerDirection = false
monsterLootMessage = 3
monsterLootMessageType = 25
separateViplistPerCharacter = falseghostModeInvisibleEffect = true
ghostModeSpellEffects = trueidleWarningTime = 1 * 60 * 1000
idleKickTime = 2 * 60 * 1000
expireReportsAfterReads = 1
playerQueryDeepness = 2
maxItemsPerPZTile = 0
maxItemsPerHouseTile = 0freePremium = true
premiumForPromotion = falseblessingOnlyPremium = false
blessingReductionBase = 30
blessingReductionDecreament = 5
eachBlessReduction = 8experienceStages = true
rateExperience = 250
rateExperienceFromPlayers = 0
rateSkill = 100
rateMagic = 80
rateLoot = 7
rateSpawn = 4rateMonsterHealth = 1.0
rateMonsterMana = 1.0
rateMonsterAttack = 1.0
rateMonsterDefense = 1.0minLevelThresholdForKilledPlayer = 0.9
maxLevelThresholdForKilledPlayer = 1.1rateStaminaLoss = 0
rateStaminaGain = 10
rateStaminaThresholdGain = 12
staminaRatingLimitTop = 40 * 60
staminaRatingLimitBottom = 14 * 60
rateStaminaAboveNormal = 1.0
rateStaminaUnderNormal = 1.0
staminaThresholdOnlyPremium = falseexperienceShareRadiusX = 30
experienceShareRadiusY = 30
experienceShareRadiusZ = 1
experienceShareLevelDifference = 2 / 3
extraPartyExperienceLimit = 20
extraPartyExperiencePercent = 5
experienceShareActivity = 2 * 60 * 1000globalSaveEnabled = false
globalSaveHour = 24
shutdownAtGlobalSave = true
cleanMapAtGlobalSave = falsedeSpawnRange = 2
deSpawnRadius = 50maxPlayerSummons = 2
teleportAllSummons = false
teleportPlayerSummons = falseownerName = "Hardbaiak World OT Server"
ownerEmail = ""
url = "
location = "Brazil"
displayGamemastersWithOnlineCommand = falseadminLogsEnabled = true
displayPlayersLogging = true
prefixChannelLogs = ""
runFile = ""
outLogName = ""
errorLogName = ""
truncateLogsOnStartup = false
-
-
-
-
onde eu coloco esses comandos? onde fica essa ( Troca toda a função AddPlayerStats por essa: )
-
olá, gostaria de ajuda quanto a crianção de nomes de criaturas, eu criei bixos novos, gostaria de saber como eu tiro para as pessoas nao poderem criar personagem com o nome dos mesmos.
-
ola boa tarde, minhas exp potion nao estão funcionando, fala q nao e possivel usar o item. nenhuma delas.
-
Ola, preciso de ajuda quanto a um bug, meu ot server esta bugado, estava tudo normal, ai baixei cliente mc, e quandoa abri o rme, deu erro to load spawn e houses como arrumo ??
-
não não, ja está show monsters, e os monsters não aparecem, deu erro mesmo, todos os monstros e npcs q estavam sumiram do mapa, porem ainda da pra adicionar.
-
Sumiram todos os monstros e npcs q estavam no meu mapa, nem quando abro o mapa no rme, nem quando abro o otserver, como arrumo isso
-
como eu adiciono imagens dos itens ao meu shop?
o meu comando de adicionar pontos no site, tem add points e back, quando adiciono pontos nao acontece nada.
-
nao faço a menor ideia, peguei so o htdocs de uma pessoa
-
obrigado, funciona como dinheiro, mas tem um problema, ele nao esta trocando quando tem 100 crystal coins para gold nugget, e nem de gold nugget para crystal coins.
ta dando you cannot use this objective.
na verdade, nao está trocando nenhum, nem de gold para platinum, nem de platinum para crystal, nem de crystal para gold nugget.
-
CARA TOP implantei aqui e deu tudo certo !! REP MAIS!!!!
gostaria de saber se vc consegue fazer, ou tem, sistema de critical stone... -
Boa tarde, as contas criadas pelo account manager logam no tibia, porem nao logam no site, as duas estão como SHA1, porem nao loga no site.
-
boa tarde, meu servidor tem sistema donate, porem a pessoal clica la em doaçao, coloca o valor desejado, preenche tudo no pagueseguro e quando paga da operaçao cancelada, como concerto isso?
ja alterei o status da minha conta para vendedor.
-
Obrigado a todos, consegui, rep + pra todos!
-
mas eu mudei sim, mandei antes como tava, olha preciso criar outro no duc so estou com o ip do ot no duc.
Dezon OT Admin [restarter]
em Ferramentas OpenTibia
Postado
boa tarde, o dezon ot nao esta abrindo na minha maquina, eu abro ele, ele aparece o icone ali na barra de tarefas quando passo o mouse ele some e nao abre!
pode me ajudar? utilizo windowns 10.