-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.
-
Conteúdo Similar
-
- 0 respostas
- 883 visualizações
-
- 0 respostas
- 656 visualizações
-
- 1 resposta
- 1636 visualizações
-
- 0 respostas
- 1514 visualizações
-
- 0 respostas
- 764 visualizações
-
Pergunta
Lordfireot 16
Galera deu erro
[Error - Npc interface]
[01/05/2013 22:09:51] data/npc/scripts/Skjaar.lua:onCreatureSay
[01/05/2013 22:09:51] Description:
[01/05/2013 22:09:51] data/npc/scripts/Skjaar.lua:28: attempt to call global 'doSetItemActionId' (a nil value)
[01/05/2013 22:09:51] stack traceback:
[01/05/2013 22:09:51] data/npc/scripts/Skjaar.lua:28: in function 'callback'
[01/05/2013 22:09:51] data/npc/lib/npcsystem/keywordhandler.lua:40: in function 'processMessage'
[01/05/2013 22:09:51] data/npc/lib/npcsystem/keywordhandler.lua:168: in function 'processNodeMessage'
[01/05/2013 22:09:51] data/npc/lib/npcsystem/keywordhandler.lua:122: in function 'processMessage'
[01/05/2013 22:09:51] data/npc/lib/npcsystem/npchandler.lua:380: in function 'onCreatureSay'
[01/05/2013 22:09:51] data/npc/scripts/Skjaar.lua:7: in function <data/npc/scripts/Skjaar.lua:7>
meu data/npc/scripts/Skjaar.lua
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function key(cid, message, keywords, parameters, node)
if(not npcHandler:isFocused(cid)) then
return false
end
local player_gold = getPlayerItemCount(cid,2148)
local player_plat = getPlayerItemCount(cid,2152)*100
local player_crys = getPlayerItemCount(cid,2160)*10000
local player_money = player_gold + player_plat + player_crys
if player_money >= 1000 then
if doPlayerRemoveMoney(cid,1000) then
npcHandler:say('Here it is.', cid)
local playerID = getPlayerGUID(cid)
local item = doPlayerAddItem(cid, 2089, 1)
doSetItemActionId(item, 3142)
end
else
npcHandler:say('You do not have enough gold.', cid)
end
end
node1 = keywordHandler:addKeyword({'key'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I would sell you a key for 1000 gold, ok?'})
node1:addChildKeyword({'yes'}, key, {})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, then not.', reset = true})
node2 = keywordHandler:addKeyword({'mission'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I would sell you a key for 1000 gold, ok?'})
node2:addChildKeyword({'yes'}, key, {})
node2:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, then not.', reset = true})
npcHandler:addModule(FocusModule:new())
meu data/npc/lib/npcsystem/keywordhandler.lua
-- Advanced NPC System (Created by Jiddo),
-- Modified by Talaturen.
if(KeywordHandler == nil) then
BEHAVIOR_SIMPLE = 1 -- Does not support nested keywords. If you choose this setting you must use a variable such as 'talkState' to keep track of how to handle keywords.
BEHAVIOR_NORMAL = 2 -- Default behvaior. If a sub-keyword is not found, then the root is searched, not the parent hierarchy,
BEHAVIOR_NORMAL_EXTENDED = 3 -- Same as BEHAVIOR_NORMAL but it also searches through the last node's parent.
BEHAVIOR_COMPLEX = 4 -- Extended behavior. It a sub-keyword is not found, then the entire keyword hierarchy is searched upwards until root is reached.
-- BEHAVIOR_NORMAL_EXTENDED is recommended as it (probably) mimics the behavior of real Tibia's NPCs the most.
-- However, you are strongly recommended to test some (or all) other settings as well as it might suit you better.
-- Also note that not much difference can be seen with the different settings unless you have a npc with a quite heavy
-- nestled keyword hierarchy.
-- Note: BEHAVIOR_SIMPLE should not be used unless you have any special reason to do so as it forces you to keep track of talkStates etc.
-- This was pretty much the method used in the 2.0x versions of this system. It is here mainly for compability issues.
KEYWORD_BEHAVIOR = BEHAVIOR_NORMAL_EXTENDED
KeywordNode = {
keywords = nil,
callback = nil,
parameters = nil,
children = nil,
parent = nil
}
-- Created a new keywordnode with the given keywords, callback function and parameters and without any childNodes.
function KeywordNode:new(keys, func, param)
local obj = {}
obj.keywords = keys
obj.callback = func
obj.parameters = param
obj.children = {}
setmetatable(obj, self)
self.__index = self
return obj
end
-- Calls the underlying callback function if it is not nil.
function KeywordNode:processMessage(cid, message)
return (self.callback == nil or self.callback(cid, message, self.keywords, self.parameters, self))
end
-- Returns true if message contains all patterns/strings found in keywords.
function KeywordNode:checkMessage(message)
local ret = true
if(self.keywords.callback ~= nil) then
return self.keywords.callback(self.keywords, message)
end
for i,v in ipairs(self.keywords) do
if(type(v) == 'string') then
local a, b = string.find(message, v)
if(a == nil or b == nil) then
ret = false
break
end
end
end
return ret
end
-- Returns the parent of this node or nil if no such node exists.
function KeywordNode:getParent()
return self.parent
end
-- Returns an array of the callback function parameters assosiated with this node.
function KeywordNode:getParameters()
return self.parameters
end
-- Returns an array of the triggering keywords assosiated with this node.
function KeywordNode:getKeywords()
return self.keywords
end
-- Adds a childNode to this node. Creates the childNode based on the parameters (k = keywords, c = callback, p = parameters)
function KeywordNode:addChildKeyword(keywords, callback, parameters)
local new = KeywordNode:new(keywords, callback, parameters)
return self:addChildKeywordNode(new)
end
-- Adds a pre-created childNode to this node. Should be used for example if several nodes should have a common child.
function KeywordNode:addChildKeywordNode(childNode)
table.insert(self.children, childNode)
childNode.parent = self
return childNode
end
KeywordHandler = {
root = nil,
lastNode = nil
}
-- Creates a new keywordhandler with an empty rootnode.
function KeywordHandler:new()
local obj = {}
obj.root = KeywordNode:new(nil, nil, nil)
setmetatable(obj, self)
self.__index = self
return obj
end
-- Resets the lastNode field, and this resetting the current position in the node hierarchy to root.
function KeywordHandler:reset()
self.lastNode = nil
end
-- Makes sure the correct childNode of lastNode gets a chance to process the message.
-- The behavior of this function depends much on the KEYWORD_BEHAVIOR.
function KeywordHandler:processMessage(cid, message)
local node = self:getLastNode()
if(node == nil) then
error('No root node found.')
return false
end
if(KEYWORD_BEHAVIOR == BEHAVIOR_SIMPLE) then
local ret = self:processNodeMessage(node, cid, message)
if(ret) then
return true
end
elseif(KEYWORD_BEHAVIOR == BEHAVIOR_NORMAL or KEYWORD_BEHAVIOR == BEHAVIOR_NORMAL_EXTENDED) then
local ret = self:processNodeMessage(node, cid, message)
if(ret) then
return true
end
if(KEYWORD_BEHAVIOR == BEHAVIOR_NORMAL_EXTENDED and node:getParent()) then
node = node:getParent() -- Search through the parent.
local ret = self:processNodeMessage(node, cid, message)
if(ret) then
return true
end
end
if(node ~= self:getRoot()) then
node = self:getRoot() -- Search through the root.
local ret = self:processNodeMessage(node, cid, message)
if(ret) then
return true
end
end
elseif(KEYWORD_BEHAVIOR == BEHAVIOR_COMPLEX) then
while true do
local ret = self:processNodeMessage(node, cid, message)
if(ret) then
return true
end
if(node:getParent() ~= nil) then
node = node:getParent() -- Move one step upwards in the hierarchy.
else
break
end
end
else
error('Unknown keyword behavior.')
end
return false
end
-- Tries to process the given message using the node parameter's children and calls the node's callback function if found.
-- Returns the childNode which processed the message or nil if no such node was found.
function KeywordHandler:processNodeMessage(node, cid, message)
local messageLower = string.lower(message)
for i, childNode in pairs(node.children) do
if(childNode:checkMessage(messageLower)) then
local oldLast = self.lastNode
self.lastNode = childNode
childNode.parent = node -- Make sure node is the parent of childNode (as one node can be parent to several nodes).
if(childNode:processMessage(cid, message)) then
return true
else
self.lastNode = oldLast
end
end
end
return false
end
-- Returns the root keywordnode
function KeywordHandler:getRoot()
return self.root
end
-- Returns the last processed keywordnode or root if no last node is found.
function KeywordHandler:getLastNode()
if(KEYWORD_BEHAVIOR == BEHAVIOR_SIMPLE) then
return self:getRoot()
else
return self.lastNode or self:getRoot()
end
end
-- Adds a new keyword to the root keywordnode. Returns the new node.
function KeywordHandler:addKeyword(keys, callback, parameters)
return self:getRoot():addChildKeyword(keys, callback, parameters)
end
-- Moves the current position in the keyword hierarchy count steps upwards. Count defalut value = 1.
-- This function MIGHT not work properly yet. Use at your own risk.
function KeywordHandler:moveUp(count)
local steps = count
if(steps == nil) then
steps = 1
end
for i = 1, steps,1 do
if(self.lastNode == nil) then
break
else
self.lastNode = self.lastNode:getParent() or self:getRoot()
end
end
return self.lastNode
end
end
meu data/npc/lib/npcsystem/npchandler.lua
-- 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', 'hey'}
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
[01/05/2013 20:21:33] [Error - Action Interface]
[01/05/2013 20:21:33] data/actions/scripts/demonoak.lua:onUse
[01/05/2013 20:21:33] Description:
[01/05/2013 20:21:33] (luaDoRemoveItem) Item not found
[01/05/2013 20:21:35] [Error - Action Interface]
[01/05/2013 20:21:35] data/actions/scripts/demonoak.lua:onUse
[01/05/2013 20:21:35] Description:
[01/05/2013 20:21:35] (luaDoRemoveItem) Item not found
[01/05/2013 20:21:44] [Error - Action Interface]
[01/05/2013 20:21:44] data/actions/scripts/demonoak.lua:onUse
[01/05/2013 20:21:44] Description:
[01/05/2013 20:21:44] (luaDoRemoveItem) Item not found
meu data/actions/scripts/demonoak.lua
function onUse(cid, item, fromPosition, itemEx, toPosition)
treepos = {x=992, y=1029, z=7, stackpos=1}
treepos2 = {x=990, y=1036, z=7, stackpos=1} --- position of left arm
treepos3 = {x=992, y=1034, z=7, stackpos=1} --- position of crow
treepos4 = {x=992, y=1037, z=7, stackpos=1} --- position of mouth
monster1 = {x=992, y=1031, z=7}
monster2 = {x=997, y=1036, z=7}
monster3 = {x=992, y=1041, z=7}
monster4 = {x=988, y=1036, z=7}
tree = getThingfromPos(treepos).uid
tree2 = getThingfromPos(treepos2).uid
tree3 = getThingfromPos(treepos3).uid
tree4 = getThingfromPos(treepos4).uid
playerPos = getCreaturePosition(cid)
local randomizer = math.random(1,6)
queststatus = getPlayerStorageValue(cid,8181)
queststatus2 = getPlayerStorageValue(cid,8282)
queststatus3 = getPlayerStorageValue(cid,8383)
queststatus4 = getPlayerStorageValue(cid,8484)
Level = getPlayerLevel(cid)
if itemEx.itemid == 2709 and itemEx.actionid == 7787 and Level >= 130 then
doRemoveItem(tree)
doTeleportThing(cid, toPosition, TRUE)
setPlayerStorageValue(cid,8181,1)
else
doSendMagicEffect(toPosition, CONST_ME_POFF)
end
if itemEx.itemid == 2709 and itemEx.actionid == 7788 then
doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR, "A player is already doing this quest.")
end
if itemEx.itemid == 8289 and itemEx.actionid == 8181 and (randomizer == 1) and queststatus == 1 then
doSummonCreature("Demon", monster1)
doSummonCreature("Crypt Shambler", monster2)
doSummonCreature("Grim Reaper", monster3)
doSummonCreature("Undead Dragon", monster4)
elseif itemEx.itemid == 8289 and itemEx.actionid == 8181 and (randomizer == 2) and queststatus == 1 then
doSummonCreature("Demon", monster1)
doSummonCreature("Braindeath", monster2)
doSummonCreature("Demon", monster3)
doSummonCreature("Bone Beast", monster4)
elseif itemEx.itemid == 8289 and itemEx.actionid == 8181 and (randomizer == 3) and queststatus == 1 then
doSummonCreature("Orshabaal", monster1)
setPlayerStorageValue(cid,8181,-1)
setPlayerStorageValue(cid,8282,1)
elseif itemEx.itemid == 8289 and itemEx.actionid == 8181 and (randomizer >= 4) and queststatus == 1 then
doSendMagicEffect(playerPos, 45)
doCreatureAddHealth(cid, -1000)
doSendAnimatedText(playerPos, '1000', TEXTCOLOR_LIGHTGREEN)
end
if itemEx.itemid == 8289 and itemEx.actionid == 8181 and queststatus == -1 then
doSendMagicEffect(toPosition, CONST_ME_POFF)
end
if itemEx.itemid == 8288 and itemEx.actionid == 8282 and (randomizer == 1) and queststatus2 == 1 then
doSummonCreature("Demon", monster1)
doSummonCreature("Juggernaut", monster2)
doSummonCreature("Behemoth", monster3)
doSummonCreature("Crypt Shambler", monster4)
elseif itemEx.itemid == 8288 and itemEx.actionid == 8282 and (randomizer == 2) and queststatus2 == 1 then
doSummonCreature("Giant Spider", monster1)
doSummonCreature("Giant Spider", monster4)
elseif itemEx.itemid == 8288 and itemEx.actionid == 8282 and (randomizer == 3) and queststatus2 == 1 then
doSummonCreature("Blightwalker", monster1)
setPlayerStorageValue(cid,8282,-1)
setPlayerStorageValue(cid,8383,1)
elseif itemEx.itemid == 8288 and itemEx.actionid == 8282 and (randomizer >= 4) and queststatus2 == 1 then
doSendMagicEffect(playerPos, 45)
doCreatureAddHealth(cid, -1000)
doSendAnimatedText(playerPos, '1000', TEXTCOLOR_LIGHTGREEN)
end
if itemEx.itemid == 8288 and itemEx.actionid == 8282 and queststatus2 == -1 then
doSendMagicEffect(toPosition, CONST_ME_POFF)
end
if itemEx.itemid == 8290 and itemEx.actionid == 8383 and (randomizer == 1) and queststatus3 == 1 then
doSummonCreature("Demon", monster1)
doSummonCreature("Demon", monster2)
doSummonCreature("Demon", monster3)
doSummonCreature("Demon", monster4)
elseif itemEx.itemid == 8290 and itemEx.actionid == 8383 and (randomizer == 2) and queststatus3 == 1 then
doSummonCreature("Undead Dragon", monster1)
doSummonCreature("Lich", monster2)
doSummonCreature("Demon", monster3)
doSummonCreature("Massacre", monster4)
elseif itemEx.itemid == 8290 and itemEx.actionid == 8383 and (randomizer == 3) and queststatus3 == 1 then
doSummonCreature("Plaguesmith", monster1)
setPlayerStorageValue(cid,8383,-1)
setPlayerStorageValue(cid,8484,1)
elseif itemEx.itemid == 8290 and itemEx.actionid == 8383 and (randomizer >= 4) and queststatus3 == 1 then
doSendMagicEffect(playerPos, 45)
doCreatureAddHealth(cid, -1000)
doSendAnimatedText(playerPos, '1000', TEXTCOLOR_LIGHTGREEN)
end
if itemEx.itemid == 8290 and itemEx.actionid == 8383 and queststatus3 == -1 then
doSendMagicEffect(toPosition, CONST_ME_POFF)
end
if itemEx.itemid == 8291 and itemEx.actionid == 8484 and (randomizer == 1) and queststatus4 == 1 then
doSummonCreature("Hellgorak", monster1)
doSummonCreature("Demon", monster2)
doSummonCreature("Juggernaut", monster3)
doSummonCreature("Grim Reaper", monster4)
elseif itemEx.itemid == 8291 and itemEx.actionid == 8484 and (randomizer == 2) and queststatus4 == 1 then
doSummonCreature("Grim Reaper", monster1)
doSummonCreature("Demon", monster2)
doSummonCreature("Braindeath", monster2)
doSummonCreature("Giant Spider", monster3)
elseif itemEx.itemid == 8291 and itemEx.actionid == 8484 and (randomizer == 3) and queststatus4 == 1 then
doSummonCreature("Ghazbaran", monster1)
doSummonCreature("Juggernaut", monster2)
setPlayerStorageValue(cid,8484,-1)
setPlayerStorageValue(cid,8585,1)
elseif itemEx.itemid == 8291 and itemEx.actionid == 8484 and (randomizer >= 4) and queststatus4 == 1 then
doSendMagicEffect(playerPos, 45)
doCreatureAddHealth(cid, -1000)
doSendAnimatedText(playerPos, '1000', TEXTCOLOR_LIGHTGREEN)
end
if itemEx.itemid == 8291 and itemEx.actionid == 8484 and queststatus4 == -1 then
doSendMagicEffect(toPosition, CONST_ME_POFF)
end
end
Link para o comentário
https://xtibia.com/forum/topic/213526-erro-varias-coisas/Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados