Ir para conteúdo
  • Cadastre-se

11.x [WIP] OTXServer 12.31 Global Full + Kilmaresh (Issavi) + BESTIARY - QUICKLOOT


Posts Recomendados

24 minutos atrás, ADM Argel disse:

@Strix Seran aqui a pasta de NPCS ta bugando tudo quando executo o servidor.

vários npcs bugando quando carrega.

  Ocultar conteúdo

Lua Script Error: [Npc interface]
data/npc/lib/npc.lua
data/npc/lib/npcsystem/modules.lua:3: '(' expected near '.'
stack traceback:
        [C]: at 0x014c4e20
        [C]: in function 'dofile'
        data/npc/lib/npcsystem/npcsystem.lua:21: in main chunk
        [C]: in function 'dofile'
        data/npc/lib/npc.lua:2: in main chunk
[Warning - NpcScriptInterface::loadNpcLib] Can not load data/npc/lib/npc.lua

Lua Script Error: [Npc interface]
data/npc/scripts/UzonE.lua
data/npc/scripts/UzonE.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/UzonE.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: UzonE.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Gewen.lua
data/npc/scripts/Gewen.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Gewen.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Gewen.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Ulala.lua
data/npc/scripts/Ulala.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Ulala.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Ulala.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Melian.lua
data/npc/scripts/Melian.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Melian.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Melian.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Chief Grarkharok.lua
data/npc/scripts/Chief Grarkharok.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Chief Grarkharok.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Chief Grarkharok.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Thanita.lua
data/npc/scripts/Thanita.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Thanita.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Thanita.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Caramellia.lua
data/npc/scripts/Caramellia.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Caramellia.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Caramellia.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Spectulus.lua
data/npc/scripts/Spectulus.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Spectulus.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Spectulus.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Kasmir.lua
data/npc/scripts/Kasmir.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Kasmir.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Kasmir.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Gabel.lua
data/npc/scripts/Gabel.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Gabel.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Gabel.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Malor.lua
data/npc/scripts/Malor.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Malor.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Malor.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Chrak.lua
data/npc/scripts/Chrak.lua:4: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Chrak.lua:4: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Chrak.lua


Lua Script Error: [Npc interface]
data/npc/scripts/An Old Dragonlord.lua
data/npc/scripts/An Old Dragonlord.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/An Old Dragonlord.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: An Old Dragonlord.lua


Lua Script Error: [Npc interface]
data/npc/scripts/Edala.lua
data/npc/scripts/Edala.lua:3: attempt to index global 'NpcSystem' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Edala.lua:3: in main chunk
[Warning - NpcScript::NpcScript] Can not load script: Edala.lua

 

o erro ta no arquivo modules.lua... ta faltando uma ( na linha 3 por isso ele não carrega os npcs...

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
  • Respostas 5k
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

OTXServer Global Full Kilmaresh by Malucooo   [CLIENTS COMPATÍVEIS]   http://www.gitlab.com/guilhermesidney/cliente10/   [DOWNLOAD] BAIXEM EM: https://github.com/malucooo

Adicionado Imbuing System, Inspection System por Charles (Eternal-Scripts) Corrigido e atualizado Prey System por Charles (Eternal-Scripts)   Obrigado pela colaboração, acredito que no

Atualizações de Médio Porte:   - Items.otb 11.31 (adicionado os novos barris de potion e mais uns 700 items adicionado..) - Client 10 Atualizado - Adicionado a categoria carpet...

Posted Images

14 minutos atrás, malucooo disse:

o erro ta no arquivo modules.lua... ta faltando uma ( na linha 3 por isso ele não carrega os npcs...

Onde coloco a "(" ? 

tentei aqui colocar e não consegui

 

local function player.removeMoneyNpc(self, amount)
    if not player:isPremium() then
        return self:removeMoney(amount)
    end

Link para o post
Compartilhar em outros sites
9 minutos atrás, ADM Argel disse:

Onde coloco a "(" ? 

tentei aqui colocar e não consegui

 

local function player.removeMoneyNpc(self, amount)
    if not player:isPremium() then
        return self:removeMoney(amount)
    end

manda o modules.lua pra a gente ver aqui

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
Agora, malucooo disse:

manda o modules.lua pra a gente ver aqui

Spoiler

-- Advanced NPC System by Jiddo

local function Player.removeMoneyNpc(self, amount)
    if not player:isPremium() then
        return self:removeMoney(amount)
    end

    local moneyCount = self:getMoney()
    local bankCount = self:getBankBalance()
    if amount > moneyCount + bankCount then
        return false
    end

    self:removeMoney(math.min(amount, moneyCount))
    if amount > moneyCount then
        self:setBankBalance(bankCount - math.max(amount - moneyCount, 0))
        if moneyCount == 0 then
            self:sendTextMessage(MESSAGE_INFO_DESCR, ("Paid %d gold from bank account. Your account balance is now %d gold."):format(amount, self:getBankBalance()))
        else
            self:sendTextMessage(MESSAGE_INFO_DESCR, ("Paid %d from inventory and %d gold from bank account. Your account balance is now %d gold."):format(moneyCount, amount - moneyCount, self:getBankBalance()))
        end
    end
    return true
end

if Modules == nil then
    -- default words for greeting and ungreeting the npc. Should be a table containing all such words.
    FOCUS_GREETWORDS = {"hi", "hello"}
    FOCUS_FAREWELLWORDS = {"bye", "farewell"}

    -- The words for requesting trade window.
    SHOP_TRADEREQUEST = {"trade"}

    -- The word for accepting/declining an offer. CAN ONLY CONTAIN ONE FIELD! Should be a table with a single string value.
    SHOP_YESWORD = {"yes"}
    SHOP_NOWORD = {"no"}

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

    -- Constants used to separate buying from selling.
    SHOPMODULE_SELL_ITEM = 1
    SHOPMODULE_BUY_ITEM = 2
    SHOPMODULE_BUY_ITEM_CONTAINER = 3

    -- Constants used for shop mode. Notice: addBuyableItemContainer is working on all modes
    SHOPMODULE_MODE_TALK = 1 -- Old system used before client version 8.2: sell/buy item name
    SHOPMODULE_MODE_TRADE = 2 -- Trade window system introduced in client version 8.2
    SHOPMODULE_MODE_BOTH = 3 -- Both working at one time

    -- Used shop mode
    SHOPMODULE_MODE = SHOPMODULE_MODE_BOTH

    Modules = {
        parseableModules = {}
    }

    StdModule = {}

    -- These callback function must be called with parameters.npcHandler = npcHandler in the parameters table or they will not work correctly.
    -- Notice: The members of StdModule have not yet been tested. If you find any bugs, please report them to me.
    -- Usage:
        -- keywordHandler:addKeyword({"offer"}, StdModule.say, {npcHandler = npcHandler, text = "I sell many powerful melee weapons."})
    function StdModule.say(cid, message, keywords, parameters, node)
        local npcHandler = parameters.npcHandler
        if npcHandler == nil then
            error("StdModule.say called without any npcHandler instance.")
        end

        if parameters.onlyFocus == true and parameters.onlyUnfocus == true then
            error("StdModule.say conflicting parameters 'onlyFocus' and 'onlyUnfocus' both true")
        end

        local onlyFocus = (parameters.onlyFocus == nil and parameters.onlyUnfocus == nil or parameters.onlyFocus == true)
        if not npcHandler:isFocused(cid) and onlyFocus then
            return false
        end

        if npcHandler:isFocused(cid) and parameters.onlyUnfocus == true then
            return false
        end

        local player = Player(cid)
        local cost, costMessage = parameters.cost, '%d gold coins'
        if cost and cost > 0 then
            if parameters.discount then
                cost = cost - StdModule.travelDiscount(player, parameters.discount)
            end

            costMessage = cost > 0 and string.format(costMessage, cost) or 'free'
        else
            costMessage = 'free'
        end

        local parseInfo = {[TAG_PLAYERNAME] = player:getName(), [TAG_TIME] = getTibianTime(), [TAG_BLESSCOST] = getBlessingsCost(player:getLevel()), [TAG_PVPBLESSCOST] = getPvpBlessingCost(player:getLevel()), [TAG_TRAVELCOST] = costMessage}
        if parameters.text then
            npcHandler:say(npcHandler:parseMessage(parameters.text, parseInfo), cid, parameters.publicize and true)
        end

        if parameters.ungreet then
            npcHandler:resetNpc(cid)
            npcHandler:releaseFocus(cid)
        elseif parameters.reset then
            npcHandler:resetNpc(cid)
        elseif parameters.moveup ~= nil then
            npcHandler.keywordHandler:moveUp(cid, parameters.moveup)
        end

        return true
    end

    --Usage:
        -- local node1 = keywordHandler:addKeyword({"promot"}, StdModule.say, {npcHandler = npcHandler, text = "I can promote you for 20000 gold coins. Do you want me to promote you?"})
        --         node1:addChildKeyword({"yes"}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 20000, level = 20}, text = "Congratulations! You are now promoted.")
        --         node1:addChildKeyword({"no"}, StdModule.say, {npcHandler = npcHandler, text = "Allright then. Come back when you are ready."}, reset = true)
    function StdModule.promotePlayer(cid, message, keywords, parameters, node)
        local npcHandler = parameters.npcHandler
        if npcHandler == nil then
            error("StdModule.promotePlayer called without any npcHandler instance.")
        end
        if not npcHandler:isFocused(cid) then
            return false
        end

        local player = Player(cid)
        if player:isPremium() then
            if player:getStorageValue(Storage.Promotion) == 1 then
                npcHandler:say("You are already promoted!", cid)
            elseif player:getLevel() < parameters.level then
                npcHandler:say("I am sorry, but I can only promote you once you have reached level " .. parameters.level .. ".", cid)
            elseif not player:removeMoneyNpc(parameters.cost) then
                npcHandler:say("You do not have enough money!", cid)
            else
                player:setStorageValue(Storage.Promotion, 1)
                player:setVocation(player:getVocation():getPromotion())
                player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
                npcHandler:say(parameters.text or "Congratulations! You are now promoted.", cid)
            end
        else
            npcHandler:say("You need a premium account in order to get promoted.", cid)
        end
        npcHandler:resetNpc(cid)
        return true
    end

    function StdModule.learnSpell(cid, message, keywords, parameters, node)
        local npcHandler = parameters.npcHandler
        if npcHandler == nil then
            error("StdModule.learnSpell called without any npcHandler instance.")
        end

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

        local player = Player(cid)
        if player:hasLearnedSpell(parameters.spellName) then
            npcHandler:say("You already know how to cast this spell.", cid)
        elseif player:getLevel() < parameters.level then
            npcHandler:say("You have to be level " .. parameters.level .. " to learn this spell.", cid)
        elseif not player:removeMoneyNpc(parameters.price) then
            npcHandler:say("Return when you have enough gold.", cid)
        else
            npcHandler:say("Here you are. Look in your spellbook for the pronunciation of this spell.", cid)
            player:learnSpell(parameters.spellName)
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
        end

        npcHandler:resetNpc(cid)
        return true
    end

    function StdModule.bless(cid, message, keywords, parameters, node)
        local npcHandler = parameters.npcHandler
        if npcHandler == nil then
            error("StdModule.bless called without any npcHandler instance.")
        end

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

        local player = Player(cid)
        local parseInfo = {[TAG_BLESSCOST] = getBlessingsCost(player:getLevel()), [TAG_PVPBLESSCOST] = getPvpBlessingCost(player:getLevel())}
        if player:hasBlessing(parameters.bless) then
            npcHandler:say("You already possess this blessing.", cid)
        elseif parameters.bless == 4 and player:getStorageValue(Storage.KawillBlessing) ~= 1 then
            npcHandler:say("You need the blessing of the great geomancer first.", cid)
        elseif parameters.bless == 6 and player:getBlessings() == 0 and not player:getItemById(2173, true) then
            npcHandler:say("You don't have any of the other blessings nor an amulet of loss, so it wouldn't make sense to bestow this protection on you now. Remember that it can only protect you from the loss of those!", cid)
        elseif not player:removeMoneyNpc(type(parameters.cost) == "string" and npcHandler:parseMessage(parameters.cost, parseInfo) or parameters.cost) then
            npcHandler:say("Oh. You do not have enough money.", cid)
        else
            npcHandler:say(parameters.text or "You have been blessed by one of the five gods!", cid)
            if parameters.bless == 4 then
                player:setStorageValue(Storage.KawillBlessing, 0)
            end
            player:addBlessing(parameters.bless)
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
        end

        npcHandler:resetNpc(cid)
        return true
    end

    function StdModule.travel(cid, message, keywords, parameters, node)
        local npcHandler = parameters.npcHandler
        if npcHandler == nil then
            error("StdModule.travel called without any npcHandler instance.")
        end

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

        local player = Player(cid)
        local cost = parameters.cost
        if cost and cost > 0 then
            if parameters.discount then
                cost = cost - StdModule.travelDiscount(player, parameters.discount)

                if cost < 0 then
                    cost = 0
                end
            end
        else
            cost = 0
        end
        
        local exhausts
        
        if parameters.premium and not player:isPremium() then
            npcHandler:say("I'm sorry, but you need a premium account in order to travel onboard our ships.", cid)
        elseif parameters.level and player:getLevel() < parameters.level then
            npcHandler:say("You must reach level " .. parameters.level .. " before I can let you go there.", cid)
        elseif player:isPzLocked() then
            npcHandler:say("First get rid of those blood stains! You are not going to ruin my vehicle!", cid)
        elseif not player:removeMoneyNpc(cost) then
            npcHandler:say("You don't have enough money.", cid)
        elseif os.time() < getPlayerStorageValue(cid, exhausts) then
            npcHandler:say('Sorry, but you need to wait three seconds before travel again.', cid)
            player:getPosition():sendMagicEffect(CONST_ME_POFF)
        else
            npcHandler:releaseFocus(cid)
            npcHandler:say(parameters.text or "Set the sails!", cid)
            player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)

            local destination = parameters.destination
            if type(destination) == 'function' then
                destination = destination(player)
            end

            player:teleportTo(destination)
            destination:sendMagicEffect(CONST_ME_TELEPORT)

            setPlayerStorageValue(cid, exhausts, 3 + os.time()) 
            player:teleportTo(destination)
            destination:sendMagicEffect(CONST_ME_TELEPORT)
            
            -- What a foolish Quest - Mission 3
            if player:getStorageValue(Storage.WhatAFoolishQuest.PieBoxTimer) > os.time() then
                if destination ~= Position(32660, 31957, 15) then -- kazordoon steamboat
                    player:setStorageValue(Storage.WhatAFoolishQuest.PieBoxTimer, 1)
                end
            end
        end

        npcHandler:resetNpc(cid)
        return true
    end

    FocusModule = {
        npcHandler = nil,
        greetWords = nil,
        farewellWords = nil,
        greetCallback = nil,
        farewellCallback = nil
    }

    -- Creates a new instance of FocusModule without an associated NpcHandler.
    function FocusModule:new()
        local obj = {}
        setmetatable(obj, self)
        self.__index = self
        return obj
    end

    -- Inits the module and associates handler to it.
    function FocusModule:init(handler)
        self.npcHandler = handler

        local greetWords = self.greetWords or FOCUS_GREETWORDS
        for _, word in pairs(greetWords) do
            local obj = {}
            obj[#obj + 1] = word
            obj.callback = self.greetCallback or FocusModule.messageMatcherDefault
            handler.keywordHandler:addKeyword(obj, FocusModule.onGreet, {module = self})
        end

        local farewellWords = self.farewellWords or FOCUS_FAREWELLWORDS
        for _, word in pairs(farewellWords) do
            local obj = {}
            obj[#obj + 1] = word
            obj.callback = self.farewellCallback or FocusModule.messageMatcherDefault
            handler.keywordHandler:addKeyword(obj, FocusModule.onFarewell, {module = self})
        end

        return true
    end

    -- Set custom greeting messages
    function FocusModule:addGreetMessage(message)
        if not self.greetWords then
            self.greetWords = {}
        end


        if type(message) == 'string' then
            table.insert(self.greetWords, message)
        else
            for i = 1, #message do
                table.insert(self.greetWords, message)
            end
        end
    end

    -- Set custom farewell messages
    function FocusModule:addFarewellMessage(message)
        if not self.farewellWords then
            self.farewellWords = {}
        end

        if type(message) == 'string' then
            table.insert(self.farewellWords, message)
        else
            for i = 1, #message do
                table.insert(self.farewellWords, message)
            end
        end
    end

    -- Set custom greeting callback
    function FocusModule:setGreetCallback(callback)
        self.greetCallback = callback
    end

    -- Set custom farewell callback
    function FocusModule:setFarewellCallback(callback)
        self.farewellCallback = callback
    end

    -- Greeting callback function.
    function FocusModule.onGreet(cid, message, keywords, parameters)
        parameters.module.npcHandler:onGreet(cid, message)
        return true
    end

    -- UnGreeting callback function.
    function FocusModule.onFarewell(cid, message, keywords, parameters)
        if parameters.module.npcHandler:isFocused(cid) then
            parameters.module.npcHandler:onFarewell(cid)
            return true
        else
            return false
        end
    end

    -- Custom message matching callback function for greeting messages.
    function FocusModule.messageMatcherDefault(keywords, message)
        for _, word in pairs(keywords) do
            if type(word) == "string" then
                if string.find(message, word) and not string.find(message, "[%w+]" .. word) and not string.find(message, word .. "[%w+]") then
                    return true
                end
            end
        end
        return false
    end

    function FocusModule.messageMatcherStart(keywords, message)
        for _, word in pairs(keywords) do
            if type(word) == "string" then
                if string.starts(message, word) then
                    return true
                end
            end
        end
        return false
    end

    KeywordModule = {
        npcHandler = nil
    }
    -- Add it to the parseable module list.
    Modules.parseableModules["module_keywords"] = KeywordModule

    function KeywordModule:new()
        local obj = {}
        setmetatable(obj, self)
        self.__index = self
        return obj
    end

    function KeywordModule:init(handler)
        self.npcHandler = handler
        return true
    end

    -- Parses all known parameters.
    function KeywordModule:parseParameters()
        local ret = NpcSystem.getParameter("keywords")
        if ret ~= nil then
            self:parseKeywords(ret)
        end
    end

    function KeywordModule:parseKeywords(data)
        local n = 1
        for keys in string.gmatch(data, "[^;]+") do
            local i = 1

            local keywords = {}
            for temp in string.gmatch(keys, "[^,]+") do
                keywords[#keywords + 1] = temp
                i = i + 1
            end

            if i ~= 1 then
                local reply = NpcSystem.getParameter("keyword_reply" .. n)
                if reply ~= nil then
                    self:addKeyword(keywords, reply)
                else
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Parameter '" .. "keyword_reply" .. n .. "' missing. Skipping...")
                end
            else
                print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "No keywords found for keyword set #" .. n .. ". Skipping...")
            end

            n = n + 1
        end
    end

    function KeywordModule:addKeyword(keywords, reply)
        self.npcHandler.keywordHandler:addKeyword(keywords, StdModule.say, {npcHandler = self.npcHandler, text = reply, reset = true})
    end

    TravelModule = {
        npcHandler = nil,
        destinations = nil,
        yesNode = nil,
        noNode = nil,
    }

    -- Add it to the parseable module list.
    Modules.parseableModules["module_travel"] = TravelModule

    function TravelModule:new()
        local obj = {}
        setmetatable(obj, self)
        self.__index = self
        return obj
    end

    function TravelModule:init(handler)
        self.npcHandler = handler
        self.yesNode = KeywordNode:new(SHOP_YESWORD, TravelModule.onConfirm, {module = self})
        self.noNode = KeywordNode:new(SHOP_NOWORD, TravelModule.onDecline, {module = self})
        self.destinations = {}
        return true
    end

    -- Parses all known parameters.
    function TravelModule:parseParameters()
        local ret = NpcSystem.getParameter("travel_destinations")
        if ret ~= nil then
            self:parseDestinations(ret)

            self.npcHandler.keywordHandler:addKeyword({"destination"}, TravelModule.listDestinations, {module = self})
            self.npcHandler.keywordHandler:addKeyword({"where"}, TravelModule.listDestinations, {module = self})
            self.npcHandler.keywordHandler:addKeyword({"travel"}, TravelModule.listDestinations, {module = self})

        end
    end

    function TravelModule:parseDestinations(data)
        for destination in string.gmatch(data, "[^;]+") do
            local i = 1

            local name = nil
            local x = nil
            local y = nil
            local z = nil
            local cost = nil
            local premium = false

            for temp in string.gmatch(destination, "[^,]+") do
                if i == 1 then
                    name = temp
                elseif i == 2 then
                    x = tonumber(temp)
                elseif i == 3 then
                    y = tonumber(temp)
                elseif i == 4 then
                    z = tonumber(temp)
                elseif i == 5 then
                    cost = tonumber(temp)
                elseif i == 6 then
                    premium = temp == "true"
                else
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Unknown parameter found in travel destination parameter.", temp, destination)
                end
                i = i + 1
            end

            if name ~= nil and x ~= nil and y ~= nil and z ~= nil and cost ~= nil then
                self:addDestination(name, {x=x, y=y, z=z}, cost, premium)
            else
                print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Parameter(s) missing for travel destination:", name, x, y, z, cost, premium)
            end
        end
    end

    function TravelModule:addDestination(name, position, price, premium)
        self.destinations[#self.destinations + 1] = name

        local parameters = {
            cost = price,
            destination = position,
            premium = premium,
            module = self
        }
        local keywords = {}
        keywords[#keywords + 1] = name

        local keywords2 = {}
        keywords2[#keywords2 + 1] = "bring me to " .. name
        local node = self.npcHandler.keywordHandler:addKeyword(keywords, TravelModule.travel, parameters)
        self.npcHandler.keywordHandler:addKeyword(keywords2, TravelModule.bringMeTo, parameters)
        node:addChildKeywordNode(self.yesNode)
        node:addChildKeywordNode(self.noNode)

        if npcs_loaded_travel[getNpcCid()] == nil then
            npcs_loaded_travel[getNpcCid()] = getNpcCid()
            self.npcHandler.keywordHandler:addKeyword({'yes'}, TravelModule.onConfirm, {module = self})
            self.npcHandler.keywordHandler:addKeyword({'no'}, TravelModule.onDecline, {module = self})
        end
    end

    function TravelModule.travel(cid, message, keywords, parameters, node)
        local module = parameters.module
        if not module.npcHandler:isFocused(cid) then
            return false
        end

        local npcHandler = module.npcHandler

        shop_destination[cid] = parameters.destination
        shop_cost[cid] = parameters.cost
        shop_premium[cid] = parameters.premium
        shop_npcuid[cid] = getNpcCid()

        local cost = parameters.cost
        local destination = parameters.destination
        local premium = parameters.premium

        module.npcHandler:say("Do you want to travel to " .. keywords[1] .. " for " .. cost .. " gold coins?", cid)
        return true
    end

    function TravelModule.onConfirm(cid, message, keywords, parameters, node)
        local module = parameters.module
        if not module.npcHandler:isFocused(cid) then
            return false
        end

        if shop_npcuid[cid] ~= getNpcCid() then
            return false
        end

        local npcHandler = module.npcHandler

        local parentParameters = node:getParent():getParameters()
        local cost = shop_cost[cid]
        local destination = shop_destination[cid]
        local premium = shop_premium[cid]

        local player = Player(cid)
        if not isPlayerPremiumCallback or isPlayerPremiumCallback(player) or shop_premium[cid] ~= true then
            if not player:removeMoneyNpc(cost) then
                npcHandler:say("You do not have enough money!", cid)
            elseif player:isPzLocked() then
                npcHandler:say("Get out of there with this blood.", cid)
            else
                npcHandler:say("It was a pleasure doing business with you.", cid)
                npcHandler:releaseFocus(cid)
                -- Todo convert all destionation parameters to Position(x, y, z) instead of lua tables
                player:teleportTo(destination)
                Position(destination):sendMagicEffect(CONST_ME_TELEPORT)
            end
        else
            npcHandler:say("I can only allow premium players to travel there.", cid)
        end

        npcHandler:resetNpc(cid)
        return true
    end

    -- onDecline keyword callback function. Generally called when the player sais "no" after wanting to buy an item.
    function TravelModule.onDecline(cid, message, keywords, parameters, node)
        local module = parameters.module
        if not module.npcHandler:isFocused(cid) or shop_npcuid[cid] ~= getNpcCid() then
            return false
        end
        local parentParameters = node:getParent():getParameters()
        local parseInfo = { [TAG_PLAYERNAME] = Player(cid):getName() }
        local msg = module.npcHandler:parseMessage(module.npcHandler:getMessage(MESSAGE_DECLINE), parseInfo)
        module.npcHandler:say(msg, cid)
        module.npcHandler:resetNpc(cid)
        return true
    end

    function TravelModule.bringMeTo(cid, message, keywords, parameters, node)
        local module = parameters.module
        if not module.npcHandler:isFocused(cid) then
            return false
        end

        local cost = parameters.cost
        local destination = parameters.destination
        local premium = parameters.premium

        if(not isPlayerPremiumCallback or isPlayerPremiumCallback(cid) or parameters.premium ~= true) then
            local player = Player(cid)
            if player:removeMoneyNpc(cost) then
                player:teleportTo(destination)
                Position(destination):sendMagicEffect(CONST_ME_TELEPORT)
            end
        end
        return true
    end

    function TravelModule.listDestinations(cid, message, keywords, parameters, node)
        local module = parameters.module
        if not module.npcHandler:isFocused(cid) then
            return false
        end

        local msg = "I can bring you to "
        --local i = 1
        local maxn = #module.destinations
        for i, destination in pairs(module.destinations) do
            msg = msg .. destination
            if i == maxn - 1 then
                msg = msg .. " and "
            elseif i == maxn then
                msg = msg .. "."
            else
                msg = msg .. ", "
            end
            i = i + 1
        end

        module.npcHandler:say(msg, cid)
        module.npcHandler:resetNpc(cid)
        return true
    end

    ShopModule = {
        npcHandler = nil,
        yesNode = nil,
        noNode = nil,
        noText = "",
        maxCount = 100,
        amount = 0
    }

    -- Add it to the parseable module list.
    Modules.parseableModules["module_shop"] = ShopModule

    -- Creates a new instance of ShopModule
    function ShopModule:new()
        local obj = {}
        setmetatable(obj, self)
        self.__index = self
        return obj
    end

    -- Parses all known parameters.
    function ShopModule:parseParameters()
        local ret = NpcSystem.getParameter("shop_buyable")
        if ret ~= nil then
            self:parseBuyable(ret)
        end

        local ret = NpcSystem.getParameter("shop_sellable")
        if ret ~= nil then
            self:parseSellable(ret)
        end

        local ret = NpcSystem.getParameter("shop_buyable_containers")
        if ret ~= nil then
            self:parseBuyableContainers(ret)
        end
    end

    -- Parse a string contaning a set of buyable items.
    function ShopModule:parseBuyable(data)
        for item in string.gmatch(data, "[^;]+") do
            local i = 1

            local name = nil
            local itemid = nil
            local cost = nil
            local subType = nil
            local realName = nil

            for temp in string.gmatch(item, "[^,]+") do
                if i == 1 then
                    name = temp
                elseif i == 2 then
                    itemid = tonumber(temp)
                elseif i == 3 then
                    cost = tonumber(temp)
                elseif i == 4 then
                    subType = tonumber(temp)
                elseif i == 5 then
                    realName = temp
                else
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Unknown parameter found in buyable items parameter.", temp, item)
                end
                i = i + 1
            end

            if SHOPMODULE_MODE == SHOPMODULE_MODE_TRADE then
                if itemid ~= nil and cost ~= nil then
                    if subType == nil and ItemType(itemid):isFluidContainer() then
                        print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "SubType missing for parameter item:", item)
                    else
                        self:addBuyableItem(nil, itemid, cost, subType, realName)
                    end
                else
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Parameter(s) missing for item:", itemid, cost)
                end
            else
                if name ~= nil and itemid ~= nil and cost ~= nil then
                    if subType == nil and ItemType(itemid):isFluidContainer() then
                        print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "SubType missing for parameter item:", item)
                    else
                        local names = {}
                        names[#names + 1] = name
                        self:addBuyableItem(names, itemid, cost, subType, realName)
                    end
                else
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Parameter(s) missing for item:", name, itemid, cost)
                end
            end
        end
    end

    -- Parse a string contaning a set of sellable items.
    function ShopModule:parseSellable(data)
        for item in string.gmatch(data, "[^;]+") do
            local i = 1

            local name = nil
            local itemid = nil
            local cost = nil
            local realName = nil
            local subType = nil

            for temp in string.gmatch(item, "[^,]+") do
                if i == 1 then
                    name = temp
                elseif i == 2 then
                    itemid = tonumber(temp)
                elseif i == 3 then
                    cost = tonumber(temp)
                elseif i == 4 then
                    realName = temp
                elseif i == 5 then
                    subType = tonumber(temp)
                else
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Unknown parameter found in sellable items parameter.", temp, item)
                end
                i = i + 1
            end

            if SHOPMODULE_MODE == SHOPMODULE_MODE_TRADE then
                if itemid ~= nil and cost ~= nil then
                    self:addSellableItem(nil, itemid, cost, realName, subType)
                else
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Parameter(s) missing for item:", itemid, cost)
                end
            else
                if name ~= nil and itemid ~= nil and cost ~= nil then
                    local names = {}
                    names[#names + 1] = name
                    self:addSellableItem(names, itemid, cost, realName, subType)
                else
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Parameter(s) missing for item:", name, itemid, cost)
                end
            end
        end
    end

    -- Parse a string contaning a set of buyable items.
    function ShopModule:parseBuyableContainers(data)
        for item in string.gmatch(data, "[^;]+") do
            local i = 1

            local name = nil
            local container = nil
            local itemid = nil
            local cost = nil
            local subType = nil
            local realName = nil

            for temp in string.gmatch(item, "[^,]+") do
                if i == 1 then
                    name = temp
                elseif i == 2 then
                    itemid = tonumber(temp)
                elseif i == 3 then
                    itemid = tonumber(temp)
                elseif i == 4 then
                    cost = tonumber(temp)
                elseif i == 5 then
                    subType = tonumber(temp)
                elseif i == 6 then
                    realName = temp
                else
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Unknown parameter found in buyable items parameter.", temp, item)
                end
                i = i + 1
            end

            if name ~= nil and container ~= nil and itemid ~= nil and cost ~= nil then
                if subType == nil and ItemType(itemid):isFluidContainer() then
                    print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "SubType missing for parameter item:", item)
                else
                    local names = {}
                    names[#names + 1] = name
                    self:addBuyableItemContainer(names, container, itemid, cost, subType, realName)
                end
            else
                print("[Warning : " .. Npc():getName() .. "] NpcSystem:", "Parameter(s) missing for item:", name, container, itemid, cost)
            end
        end
    end

    -- Initializes the module and associates handler to it.
    function ShopModule:init(handler)
        self.npcHandler = handler
        self.yesNode = KeywordNode:new(SHOP_YESWORD, ShopModule.onConfirm, {module = self})
        self.noNode = KeywordNode:new(SHOP_NOWORD, ShopModule.onDecline, {module = self})
        self.noText = handler:getMessage(MESSAGE_DECLINE)

        if SHOPMODULE_MODE ~= SHOPMODULE_MODE_TALK then
            for _, word in pairs(SHOP_TRADEREQUEST) do
                local obj = {}
                obj[#obj + 1] = word
                obj.callback = SHOP_TRADEREQUEST.callback or ShopModule.messageMatcher
                handler.keywordHandler:addKeyword(obj, ShopModule.requestTrade, {module = self})
            end
        end

        return true
    end

    -- Custom message matching callback function for requesting trade messages.
    function ShopModule.messageMatcher(keywords, message)
        for _, word in pairs(keywords) do
            if type(word) == "string" then
                if string.find(message, word) and not string.find(message, "[%w+]" .. word) and not string.find(message, word .. "[%w+]") then
                    return true
                end
            end
        end

        return false
    end

    -- Resets the module-specific variables.
    function ShopModule:reset()
        self.amount = 0
    end

    -- Function used to match a number value from a string.
    function ShopModule:getCount(message)
        local ret = 1
        local b, e = string.find(message, PATTERN_COUNT)
        if b ~= nil and e ~= nil then
            ret = tonumber(string.sub(message, b, e))
        end

        if ret <= 0 then
            ret = 1
        elseif ret > self.maxCount then
            ret = self.maxCount
        end

        return ret
    end

    -- Adds a new buyable item.
    --    names = A table containing one or more strings of alternative names to this item. Used only for old buy/sell system.
    --    itemid = The itemid of the buyable item
    --    cost = The price of one single item
    --    subType - The subType of each rune or fluidcontainer item. Can be left out if it is not a rune/fluidcontainer. Default value is 1.
    --    realName - The real, full name for the item. Will be used as ITEMNAME in MESSAGE_ONBUY and MESSAGE_ONSELL if defined. Default value is nil (getName will be used)
    function ShopModule:addBuyableItem(names, itemid, cost, itemSubType, realName)
        if SHOPMODULE_MODE ~= SHOPMODULE_MODE_TALK then
            if itemSubType == nil then
                itemSubType = 1
            end

            local shopItem = self:getShopItem(itemid, itemSubType)
            if shopItem == nil then
                self.npcHandler.shopItems[#self.npcHandler.shopItems + 1] = {id = itemid, buy = cost, sell = -1, subType = itemSubType, name = realName or ItemType(itemid):getName()}
            else
                shopItem.buy = cost
            end
        end

        if names ~= nil and SHOPMODULE_MODE ~= SHOPMODULE_MODE_TRADE then
            for _, name in pairs(names) do
                local parameters = {
                    itemid = itemid,
                    cost = cost,
                    eventType = SHOPMODULE_BUY_ITEM,
                    module = self,
                    realName = realName or ItemType(itemid):getName(),
                    subType = itemSubType or 1
                }

                keywords = {}
                keywords[#keywords + 1] = "buy"
                keywords[#keywords + 1] = name
                local node = self.npcHandler.keywordHandler:addKeyword(keywords, ShopModule.tradeItem, parameters)
                node:addChildKeywordNode(self.yesNode)
                node:addChildKeywordNode(self.noNode)
            end
        end

        if npcs_loaded_shop[getNpcCid()] == nil then
            npcs_loaded_shop[getNpcCid()] = getNpcCid()
            self.npcHandler.keywordHandler:addKeyword({'yes'}, ShopModule.onConfirm, {module = self})
            self.npcHandler.keywordHandler:addKeyword({'no'}, ShopModule.onDecline, {module = self})
        end
    end

    function ShopModule:getShopItem(itemId, itemSubType)
        if ItemType(itemId):isFluidContainer() then
            for i = 1, #self.npcHandler.shopItems do
                local shopItem = self.npcHandler.shopItems
                if shopItem.id == itemId and shopItem.subType == itemSubType then
                    return shopItem
                end
            end
        else
            for i = 1, #self.npcHandler.shopItems do
                local shopItem = self.npcHandler.shopItems
                if shopItem.id == itemId then
                    return shopItem
                end
            end
        end
        return nil
    end

    -- Adds a new buyable container of items.
    --    names = A table containing one or more strings of alternative names to this item.
    --    container = Backpack, bag or any other itemid of container where bought items will be stored
    --    itemid = The itemid of the buyable item
    --    cost = The price of one single item
    --    subType - The subType of each rune or fluidcontainer item. Can be left out if it is not a rune/fluidcontainer. Default value is 1.
    --    realName - The real, full name for the item. Will be used as ITEMNAME in MESSAGE_ONBUY and MESSAGE_ONSELL if defined. Default value is nil (getName will be used)
    function ShopModule:addBuyableItemContainer(names, container, itemid, cost, subType, realName)
        if names ~= nil then
            for _, name in pairs(names) do
                local parameters = {
                        container = container,
                        itemid = itemid,
                        cost = cost,
                        eventType = SHOPMODULE_BUY_ITEM_CONTAINER,
                        module = self,
                        realName = realName or ItemType(itemid):getName(),
                        subType = subType or 1
                    }

                keywords = {}
                keywords[#keywords + 1] = "buy"
                keywords[#keywords + 1] = name
                local node = self.npcHandler.keywordHandler:addKeyword(keywords, ShopModule.tradeItem, parameters)
                node:addChildKeywordNode(self.yesNode)
                node:addChildKeywordNode(self.noNode)
            end
        end
    end

    -- Adds a new sellable item.
    --    names = A table containing one or more strings of alternative names to this item. Used only by old buy/sell system.
    --    itemid = The itemid of the sellable item
    --    cost = The price of one single item
    --    realName - The real, full name for the item. Will be used as ITEMNAME in MESSAGE_ONBUY and MESSAGE_ONSELL if defined. Default value is nil (getName will be used)
    function ShopModule:addSellableItem(names, itemid, cost, realName, itemSubType)
        if SHOPMODULE_MODE ~= SHOPMODULE_MODE_TALK then
            if itemSubType == nil then
                itemSubType = 0
            end

            local shopItem = self:getShopItem(itemid, itemSubType)
            if shopItem == nil then
                table.insert(self.npcHandler.shopItems, {id = itemid, buy = -1, sell = cost, subType = itemSubType, name = realName or ItemType(itemid):getName()})
            else
                shopItem.sell = cost
            end
        end

        if (names ~= nil and SHOPMODULE_MODE ~= SHOPMODULE_MODE_TRADE) then
            for i = 1, #names do
                local parameters = {
                    itemid = itemid,
                    cost = cost,
                    eventType = SHOPMODULE_SELL_ITEM,
                    module = self,
                    realName = realName or ItemType(itemid):getName()
                }

                keywords = {}
                table.insert(keywords, "sell")
                table.insert(keywords, name)
                local node = self.npcHandler.keywordHandler:addKeyword(keywords, ShopModule.tradeItem, parameters)
                node:addChildKeywordNode(self.yesNode)
                node:addChildKeywordNode(self.noNode)
            end
        end
    end

    -- onModuleReset callback function. Calls ShopModule:reset()
    function ShopModule:callbackOnModuleReset()
        self:reset()
        return true
    end

    -- Callback onBuy() function. If you wish, you can change certain Npc to use your onBuy().
    function ShopModule:callbackOnBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks)
        local shopItem = self:getShopItem(itemid, subType)
        if shopItem == nil then
            error("[ShopModule.onBuy] shopItem == nil")
            return false
        end

        if shopItem.buy == -1 then
            error("[ShopModule.onSell] attempt to buy a non-buyable item")
            return false
        end

        local backpack = 23782
        local totalCost = amount * shopItem.buy
        if inBackpacks then
            totalCost = ItemType(itemid):isStackable() and totalCost + 20 or totalCost + (math.max(1, math.floor(amount / ItemType(backpack):getCapacity())) * 20)
        end

        local player = Player(cid)
        local parseInfo = {
            [TAG_PLAYERNAME] = player:getName(),
            [TAG_ITEMCOUNT] = amount,
            [TAG_TOTALCOST] = totalCost,
            [TAG_ITEMNAME] = shopItem.name
        }

        if player:getMoney() + player:getBankBalance() < totalCost then
            local msg = self.npcHandler:getMessage(MESSAGE_NEEDMONEY)
            msg = self.npcHandler:parseMessage(msg, parseInfo)
            player:sendCancelMessage(msg)
            return false
        end

        local subType = shopItem.subType or 1
        local a, b = doNpcSellItem(cid, itemid, amount, subType, ignoreCap, inBackpacks, backpack)
        if a < amount then
            local msgId = MESSAGE_NEEDMORESPACE
            if a == 0 then
                msgId = MESSAGE_NEEDSPACE
            end

            local msg = self.npcHandler:getMessage(msgId)
            parseInfo[TAG_ITEMCOUNT] = a
            msg = self.npcHandler:parseMessage(msg, parseInfo)
            player:sendCancelMessage(msg)
            self.npcHandler.talkStart[cid] = os.time()

            if a > 0 then
                player:removeMoneyNpc((a * shopItem.buy) + (b * 20))
                return true
            end

            return false
        else
            local msg = self.npcHandler:getMessage(MESSAGE_BOUGHT)
            msg = self.npcHandler:parseMessage(msg, parseInfo)
            player:sendTextMessage(MESSAGE_INFO_DESCR, msg)
            player:removeMoneyNpc(totalCost)
            self.npcHandler.talkStart[cid] = os.time()
            return true
        end
    end

    -- Callback onSell() function. If you wish, you can change certain Npc to use your onSell().
    function ShopModule:callbackOnSell(cid, itemid, subType, amount, ignoreEquipped, _)
        local shopItem = self:getShopItem(itemid, subType)
        if shopItem == nil then
            error("[ShopModule.onSell] items[itemid] == nil")
            return false
        end

        if shopItem.sell == -1 then
            error("[ShopModule.onSell] attempt to sell a non-sellable item")
            return false
        end

        local player = Player(cid)
        local parseInfo = {
            [TAG_PLAYERNAME] = player:getName(),
            [TAG_ITEMCOUNT] = amount,
            [TAG_TOTALCOST] = amount * shopItem.sell,
            [TAG_ITEMNAME] = shopItem.name
        }

        if not ItemType(itemid):isFluidContainer() then
            subType = -1
        end

        if player:removeItem(itemid, amount, subType, ignoreEquipped) then
            local msg = self.npcHandler:getMessage(MESSAGE_SOLD)
            msg = self.npcHandler:parseMessage(msg, parseInfo)
            player:sendTextMessage(MESSAGE_INFO_DESCR, msg)
            player:addMoney(amount * shopItem.sell)
            self.npcHandler.talkStart[cid] = os.time()
            return true
        else
            local msg = self.npcHandler:getMessage(MESSAGE_NEEDITEM)
            msg = self.npcHandler:parseMessage(msg, parseInfo)
            player:sendCancelMessage(msg)
            self.npcHandler.talkStart[cid] = os.time()
            return false
        end
    end

    -- Callback for requesting a trade window with the NPC.
    function ShopModule.requestTrade(cid, message, keywords, parameters, node)
        local module = parameters.module
        if not module.npcHandler:isFocused(cid) then
            return false
        end

        if not module.npcHandler:onTradeRequest(cid) then
            return false
        end

        local itemWindow = {}
        for i = 1, #module.npcHandler.shopItems do
            itemWindow[#itemWindow + 1] = module.npcHandler.shopItems
        end

        if itemWindow[1] == nil then
            local parseInfo = { [TAG_PLAYERNAME] = Player(cid):getName() }
            local msg = module.npcHandler:parseMessage(module.npcHandler:getMessage(MESSAGE_NOSHOP), parseInfo)
            module.npcHandler:say(msg, cid)
            return true
        end

        local parseInfo = { [TAG_PLAYERNAME] = Player(cid):getName() }
        local msg = module.npcHandler:parseMessage(module.npcHandler:getMessage(MESSAGE_SENDTRADE), parseInfo)
        openShopWindow(cid, itemWindow,
            function(cid, itemid, subType, amount, ignoreCap, inBackpacks) module.npcHandler:onBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks) end,
            function(cid, itemid, subType, amount, ignoreCap, inBackpacks) module.npcHandler:onSell(cid, itemid, subType, amount, ignoreCap, inBackpacks) end)
        module.npcHandler:say(msg, cid)
        return true
    end

    -- onConfirm keyword callback function. Sells/buys the actual item.
    function ShopModule.onConfirm(cid, message, keywords, parameters, node)
        local module = parameters.module
        if not module.npcHandler:isFocused(cid) or shop_npcuid[cid] ~= getNpcCid() then
            return false
        end
        shop_npcuid[cid] = 0

        local parentParameters = node:getParent():getParameters()
        local parseInfo = {
            [TAG_PLAYERNAME] = Player(cid):getName(),
            [TAG_ITEMCOUNT] = shop_amount[cid],
            [TAG_TOTALCOST] = shop_cost[cid] * shop_amount[cid],
            [TAG_ITEMNAME] = shop_rlname[cid]
        }

        if shop_eventtype[cid] == SHOPMODULE_SELL_ITEM then
            local ret = doPlayerSellItem(cid, shop_itemid[cid], shop_amount[cid], shop_cost[cid] * shop_amount[cid])
            if ret then
                local msg = module.npcHandler:getMessage(MESSAGE_ONSELL)
                msg = module.npcHandler:parseMessage(msg, parseInfo)
                module.npcHandler:say(msg, cid)
            else
                local msg = module.npcHandler:getMessage(MESSAGE_MISSINGITEM)
                msg = module.npcHandler:parseMessage(msg, parseInfo)
                module.npcHandler:say(msg, cid)
            end
        elseif shop_eventtype[cid] == SHOPMODULE_BUY_ITEM then
            local cost = shop_cost[cid] * shop_amount[cid]
            if Player(cid):getMoney() + player:getBankBalance() < cost then
                local msg = module.npcHandler:getMessage(MESSAGE_MISSINGMONEY)
                msg = module.npcHandler:parseMessage(msg, parseInfo)
                module.npcHandler:say(msg, cid)
                return false
            end

            local a, b = doNpcSellItem(cid, shop_itemid[cid], shop_amount[cid], shop_subtype[cid], false, false, 1988)
            if a < shop_amount[cid] then
                local msgId = MESSAGE_NEEDMORESPACE
                if a == 0 then
                    msgId = MESSAGE_NEEDSPACE
                end

                local msg = module.npcHandler:getMessage(msgId)
                msg = module.npcHandler:parseMessage(msg, parseInfo)
                module.npcHandler:say(msg, cid)
                if a > 0 then
                    Player(cid):removeMoneyNpc(a * shop_cost[cid])
                    if shop_itemid[cid] == ITEM_PARCEL then
                        doNpcSellItem(cid, ITEM_LABEL, shop_amount[cid], shop_subtype[cid], true, false, 1988)
                    end
                    return true
                end
                return false
            else
                local msg = module.npcHandler:getMessage(MESSAGE_ONBUY)
                msg = module.npcHandler:parseMessage(msg, parseInfo)
                module.npcHandler:say(msg, cid)
                Player(cid):removeMoneyNpc(cost)
                if shop_itemid[cid] == ITEM_PARCEL then
                    doNpcSellItem(cid, ITEM_LABEL, shop_amount[cid], shop_subtype[cid], true, false, 1988)
                end
                return true
            end
        elseif shop_eventtype[cid] == SHOPMODULE_BUY_ITEM_CONTAINER then
            local ret = doPlayerBuyItemContainer(cid, shop_container[cid], shop_itemid[cid], shop_amount[cid], shop_cost[cid] * shop_amount[cid], shop_subtype[cid])
            if ret then
                local msg = module.npcHandler:getMessage(MESSAGE_ONBUY)
                msg = module.npcHandler:parseMessage(msg, parseInfo)
                module.npcHandler:say(msg, cid)
            else
                local msg = module.npcHandler:getMessage(MESSAGE_MISSINGMONEY)
                msg = module.npcHandler:parseMessage(msg, parseInfo)
                module.npcHandler:say(msg, cid)
            end
        end

        module.npcHandler:resetNpc(cid)
        return true
    end

    -- onDecline keyword callback function. Generally called when the player sais "no" after wanting to buy an item.
    function ShopModule.onDecline(cid, message, keywords, parameters, node)
        local module = parameters.module
        if not module.npcHandler:isFocused(cid) or shop_npcuid[cid] ~= getNpcCid() then
            return false
        end
        shop_npcuid[cid] = 0

        local parentParameters = node:getParent():getParameters()
        local parseInfo = {
            [TAG_PLAYERNAME] = Player(cid):getName(),
            [TAG_ITEMCOUNT] = shop_amount[cid],
            [TAG_TOTALCOST] = shop_cost[cid] * shop_amount[cid],
            [TAG_ITEMNAME] = shop_rlname[cid]
        }

        local msg = module.npcHandler:parseMessage(module.noText, parseInfo)
        module.npcHandler:say(msg, cid)
        module.npcHandler:resetNpc(cid)
        return true
    end

    -- tradeItem callback function. Makes the npc say the message defined by MESSAGE_BUY or MESSAGE_SELL
    function ShopModule.tradeItem(cid, message, keywords, parameters, node)
        local module = parameters.module
        if not module.npcHandler:isFocused(cid) then
            return false
        end

        if not module.npcHandler:onTradeRequest(cid) then
            return true
        end

        local count = module:getCount(message)
        module.amount = count

        shop_amount[cid] = module.amount
        shop_cost[cid] = parameters.cost
        shop_rlname[cid] = parameters.realName
        shop_itemid[cid] = parameters.itemid
        shop_container[cid] = parameters.container
        shop_npcuid[cid] = getNpcCid()
        shop_eventtype[cid] = parameters.eventType
        shop_subtype[cid] = parameters.subType

        local parseInfo = {
            [TAG_PLAYERNAME] = Player(cid):getName(),
            [TAG_ITEMCOUNT] = shop_amount[cid],
            [TAG_TOTALCOST] = shop_cost[cid] * shop_amount[cid],
            [TAG_ITEMNAME] = shop_rlname[cid]
        }

        if shop_eventtype[cid] == SHOPMODULE_SELL_ITEM then
            local msg = module.npcHandler:getMessage(MESSAGE_SELL)
            msg = module.npcHandler:parseMessage(msg, parseInfo)
            module.npcHandler:say(msg, cid)
        elseif shop_eventtype[cid] == SHOPMODULE_BUY_ITEM then
            local msg = module.npcHandler:getMessage(MESSAGE_BUY)
            msg = module.npcHandler:parseMessage(msg, parseInfo)
            module.npcHandler:say(msg, cid)
        elseif shop_eventtype[cid] == SHOPMODULE_BUY_ITEM_CONTAINER then
            local msg = module.npcHandler:getMessage(MESSAGE_BUY)
            msg = module.npcHandler:parseMessage(msg, parseInfo)
            module.npcHandler:say(msg, cid)
        end
        return true
    end
end
 

 

Link para o post
Compartilhar em outros sites

outros erros:

Spoiler

[Warning - InstantSpell::loadFunction] Function "Illusion" does not exist.
[Warning - InstantSpell::loadFunction] Function "searchPlayer" does not exist.
[Warning - InstantSpell::loadFunction] Function "summonMonster" does not exist.
[Warning - InstantSpell::loadFunction] Function "editHouseGuest" does not exist.
[Warning - InstantSpell::loadFunction] Function "editHouseSubOwner" does not exist.
[Warning - InstantSpell::loadFunction] Function "editHouseDoor" does not exist.
[Warning - InstantSpell::loadFunction] Function "houseKick" does not exist.
[Warning - Actions::registerEvent] Duplicate registered item with id: 24739
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.
[Warning - Action::loadFunction] Function "increaseItemId" does not exist.
[Warning - Action::loadFunction] Function "decreaseItemId" does not exist.

Lua Script Error: [Test Interface]
data/talkactions/scripts/looktype.lua
data/talkactions/scripts/looktype.lua:25: attempt to call global 'isInArray' (a nil value)
stack traceback:
        [C]: in function 'isInArray'
        data/talkactions/scripts/looktype.lua:25: in function 'doInterval'
        data/talkactions/scripts/looktype.lua:42: in main chunk
[Warning - Event::checkScript] Can not load script: scripts/looktype.lua

[Warning - Events::load] Can not load script: player.lua
data/events/scripts/player.lua:1771: '<eof>' expected near 'end'
>> Loading monsters
>> Loading outfits
>> Checking world type... PVP
>> Loading map
> Map size: 34143x33812.
> Map loading time: 25.176 seconds.
> Loaded house items in: 0.045 s
>> Initializing gamestate
[Warning - Commands::loadFromXml] Unknown command /reload
[Warning - Commands::loadFromXml] Unknown command /raid
>> Loaded 865 npcs and spawned 64412 monsters.
>> Loaded 27 towns with 1038 houses in total.
>> Loaded all modules, server starting up...
>> OTXGLOBAL Server Online!

Still Exequtter has logged in.

Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/others/login.lua:onLogin
data/creaturescripts/scripts/others/login.lua:123: attempt to call global 'isInArray' (a nil value)
stack traceback:
        [C]: in function 'isInArray'
        data/creaturescripts/scripts/others/login.lua:123: in function <data/creaturescripts/scripts/others/login.lua:73>
Still Exequtter has logged out.

 

 

babydoll2.gif

Link para o post
Compartilhar em outros sites
32 minutos atrás, malucooo disse:

Servidor atualizado e re-upado no github...

 

bugs acima corrigidos parcialmente...

 

Download testado baixando tudo sem bug de arquivo corrompido, lembrando que o mapa vem zipado descompacte antes de rodar o servidor!

 

link: http://www.github.com/malucooo/otxserver-global/

 

Meu amigo @malucooo acabo de testar e o erro de carregar os NPCS, continua nesse pack.

o problema é no modules.lua da pasta npcs.

troquei por um antigo de versão bem antiga seu e funcionou.

mas quero usar esse corrigido, dar uma força ai

Editado por ADM Argel
tt (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
6 minutos atrás, ADM Argel disse:

 

Meu amigo @malucooo acabo de testar e o erro de carregar os NPCS, continua nesse pack.

 

 

tenta agora e diz o que houve!

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
1 hora atrás, malucooo disse:

 

 

tenta agora e diz o que houve!

esse problema pode considerar resolvido!! Vlw malucoo...

 

encontrei outro bug


[Warning - Events::load] Can not load script: player.lua
data/events/scripts/player.lua:1771: <eof> expected near 'end'

Link para o post
Compartilhar em outros sites

Servidor rodando sem erros de console até então!

Config: Pentium D [email protected] 775 2gb ddr2 kkkk é que temos pra hj

58c1a89d944b6_Semerrosdeconsole.thumb.png.e18aa084e3c4692cb72971e138ff5eda.png

- Pré-adaptado ao TFS 1.3

- Rodando em OTX 3.9

- Maxspeed ré-ajustado

- Bugs relacionados aparentemente removidos

 

Preciso que testem e me reportem os bugs persistentes para que sejam removidos um a um...

 

Confiram as atualizações em http://www.github.com/malucooo/otxserver-global/

 

Grato!

 

Erick Nunes

10 minutos atrás, brunolamonato disse:

esse problema pode considerar resolvido!! Vlw malucoo...

 

encontrei outro bug


[Warning - Events::load] Can not load script: player.lua
data/events/scripts/player.lua:1771: <eof> expected near 'end'

to upando aqui... fica de olho no github!

1 hora atrás, FlavioHulk disse:

As sources são as mesmas do antigo pack da github?
Esse pack tem o quê de novo?
Qual a versão do antigo TFS? Esse pack possui a nova versão TFS 1.3?

putz... novidades só remoção de bug mesmo... to voltando agora a mexer nele então só corrigindo falhas do passado antes de adicionar alguma coisa!

Editado por malucooo (veja o histórico de edições)

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
1 minuto atrás, brunolamonato disse:

BUG DO PLAYER.LUA RESOLVIDO!!!

 

mais um.. Esse é o ultimo kkkk


[Warning - InstantSpell::loadFunction] Function "Illusion" does not exist.
[Warning - InstantSpell::loadFunction] Function "searchPlayer" does not exist.
[Warning - InstantSpell::loadFunction] Function "summonMonster" does not exist.
[Warning - InstantSpell::loadFunction] Function "editHouseGuest" does not exist.
[Warning - InstantSpell::loadFunction] Function "editHouseSubOwner" does not exist.
[Warning - InstantSpell::loadFunction] Function "editHouseDoor" does not exist.
[Warning - InstantSpell::loadFunction] Function "houseKick" does not exist.

 

 

 baixa denovo no github... já ajeitei tudo isso

 

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
3 horas atrás, malucooo disse:

 baixa denovo no github... já ajeitei tudo isso

 

Foi mal brother, depois que eu ajeitei o outro que vi no github que tb tinha atualizado as spells..
só agradece msm..

qualquer coisa posto aqui

 

 

EDITANDO _---------------------------

 

BUG NO BANK SYSTEM..

Os players podem comprar qualquer item que a grana nao sai do banco..

Por exemplo, tenho 100k no banco..

Vou no djinn e compro 100 ssa, continuo com 100k no banco e ainda recebo os ssa..

 

 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/SOLUÇÃO ALGUNS POSTS ABAIXO \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/

Editado por brunolamonato (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
1 hora atrás, malucooo disse:

Servidor rodando sem erros de console até então!

Config: Pentium D [email protected] 775 2gb ddr2 kkkk é que temos pra hj

58c1a89d944b6_Semerrosdeconsole.thumb.png.e18aa084e3c4692cb72971e138ff5eda.png

- Pré-adaptado ao TFS 1.3

- Rodando em OTX 3.9

- Maxspeed ré-ajustado

- Bugs relacionados aparentemente removidos

 

Preciso que testem e me reportem os bugs persistentes para que sejam removidos um a um...

 

Confiram as atualizações em http://www.github.com/malucooo/otxserver-global/

 

Grato!

 

Erick Nunes

to upando aqui... fica de olho no github!

putz... novidades só remoção de bug mesmo... to voltando agora a mexer nele então só corrigindo falhas do passado antes de adicionar alguma coisa!

 

Agora ficou topo de linha! mas e o npc Naji os bugs de crashar por ele voce descobriu e removeu?

Link para o post
Compartilhar em outros sites
39 minutos atrás, ADM Argel disse:

 

Agora ficou topo de linha! mas e o npc Naji os bugs de crashar por ele voce descobriu e removeu?

Não sei se tem em muitos npcs, vou verificar um por um mais tarde...

Mas pelo visto o @malucooo já resolveu (pelo menos no Naji não tem..)
 

To no aguarde pra arrumar o bank system...

Sei que os erros estão no /data/npc/lib/npcsystem/ --> customModules.lua, modules.lua e npcsystem.lua

Agora arrumar já é outra historia kkkkk

malucaoo ajuda nois mais uma vez irmao..

Link para o post
Compartilhar em outros sites
1 hora atrás, brunolamonato disse:

Não sei se tem em muitos npcs, vou verificar um por um mais tarde...

Mas pelo visto o @malucooo já resolveu (pelo menos no Naji não tem..)
 

To no aguarde pra arrumar o bank system...

Sei que os erros estão no /data/npc/lib/npcsystem/ --> customModules.lua, modules.lua e npcsystem.lua

Agora arrumar já é outra historia kkkkk

malucaoo ajuda nois mais uma vez irmao..

 

 Abre o arquivo customModules.lua (data\npc\lib\npcsystem\customModules.lua)

e no final do mesmo adicione o seguinte:

 

function Player.removeMoneyNpc(self, amount)
    local moneyCount = self:getMoney()
    local bankCount = self:getBankBalance()
    if amount > moneyCount + bankCount then
        return false
    end
    self:removeMoney(math.min(amount, moneyCount))
    if amount > moneyCount then
        self:setBankBalance(bankCount - math.max(amount - moneyCount, 0))
        if moneyCount == 0 then
            self:sendTextMessage(MESSAGE_INFO_DESCR, ("Paid %d gold from bank account. Your account balance is now %d gold."):format(amount, self:getBankBalance()))
        else
            self:sendTextMessage(MESSAGE_INFO_DESCR, ("Paid %d from inventory and %d gold from bank account. Your account balance is now %d gold."):format(moneyCount, amount - moneyCount, self:getBankBalance()))
        end
    end
    return true
end
local function getPlayerMoney(cid)
    local player = Player(cid)
    if player then
        return player:getMoney() + player:getBankBalance()
    end
    return 0
end
local function doPlayerRemoveMoney(cid, amount)
    local player = Player(cid)
    if player then
        return player:removeMoneyNpc(amount)
    end
    return false
end

 

Link para o post
Compartilhar em outros sites
16 minutos atrás, rexxton disse:

 

 Abre o arquivo customModules.lua (data\npc\lib\npcsystem\customModules.lua)

e no final do mesmo adicione o seguinte:

 


function Player.removeMoneyNpc(self, amount)
    local moneyCount = self:getMoney()
    local bankCount = self:getBankBalance()
    if amount > moneyCount + bankCount then
        return false
    end
    self:removeMoney(math.min(amount, moneyCount))
    if amount > moneyCount then
        self:setBankBalance(bankCount - math.max(amount - moneyCount, 0))
        if moneyCount == 0 then
            self:sendTextMessage(MESSAGE_INFO_DESCR, ("Paid %d gold from bank account. Your account balance is now %d gold."):format(amount, self:getBankBalance()))
        else
            self:sendTextMessage(MESSAGE_INFO_DESCR, ("Paid %d from inventory and %d gold from bank account. Your account balance is now %d gold."):format(moneyCount, amount - moneyCount, self:getBankBalance()))
        end
    end
    return true
end
local function getPlayerMoney(cid)
    local player = Player(cid)
    if player then
        return player:getMoney() + player:getBankBalance()
    end
    return 0
end
local function doPlayerRemoveMoney(cid, amount)
    local player = Player(cid)
    if player then
        return player:removeMoneyNpc(amount)
    end
    return false
end

 

 

 

 

 Funcionou irmão!!! vlw mesmo..

Link para o post
Compartilhar em outros sites
  • Erimyth pinned this tópico
  • Erimyth featured this tópico
  • Erimyth unfeatured e unpinned this tópico

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Johncore
      Olá galera, é com muita dedicação que trago para este forum uma exclusividade que só eu tinha.
      Mapa Dragonsouls 11x 99%, tem alguns detalhes de sqm ou borda que você possa precisar fazer,
      Dragonsouls é um servidor ATS Custom, baseado em senhor dos aneis. via muita gente perguntando por esse mapa e eu tinha a muitos anos, resolvi converter.
      mas ele está 99% pronto para uso.
       
      Esse mapa é 100% compativel para rodar na Datapack Otg Server 11,
      Otg Server é um projeto que trabalha com varias datapacks de tibia rl e ATS Custom.
       
      Github:
      https://github.com/otg-br/
       
      Participe do grupo Otg Server:  
      https://chat.whatsapp.com/EWV3dVvS6nt1em7q23FGu7
       
       
      MAPA:
       
      INICIAL ISLAND

       
      CARLIN

       
      CIDADE TIRITH

       
      CIDADE BREE

       
       
       
       
      world.zip
    • Por Johncore
      Olá pessoas, estou disponibilizando aqui mais uma exclusividade que é o Mapa Evolunia, ele é baseado no servidor Evolunia.net
       
      Esse mapa é 100% compativel para rodar na Datapack Otg Server 11x,
      Otg Server é um projeto que trabalha com varias datapacks de tibia rl e ATS Custom.
       
      Participe do grupo Otg Server:  
      https://chat.whatsapp.com/EWV3dVvS6nt1em7q23FGu7
       
      Creditos:
      evolunia
      world.zip
    • Por Johncore
      Otg Server é um projeto fork do The Forgotten Server 1.3, feito por brasileiros que visam sempre por estabilidade, um código mais clean, temos no projeto várias Datapacks como
      Global 11.0, Global 8.6, Global 8.0, RadBR 11.0, Evolutions 11.0, Yurots Classic 11.0, nossa base também é excelente para rodar projetos que são mapa Baiak ou ATS Custom pelo baixissimo uso de cpu e fix do Decay de itens.

      Todos são bem vindos para colaborar com o projeto... que não visa nenhum lucro financeiro, queremos apenas colaborar com a comunidade OTSERV,
      temos ouvido de muitas pessoas que procuram uma base estável, limpa, esse é o nosso objetivo nesse projeto.
       
      Estamos a procura de programadores/dev/webmaster que queiram ajudar / que tenham tempo e serão recompensados por isso.
       
      Nossa Datapack principal Global 11.00 contem as seguintes features:
      CAST SYSTEM ✅
      AUTOLOOT ✅
      WINTER UPDATE 2023 ✅
      SUMMER UPDATE 2023 ✅
      ADDONS 13.22 UPDATE ✅
      MONTARIAS 13.22 UPDATE ✅
      ITEMS 13.22 UPDATE ✅
      DAILY REWARD ✅
      IMBUEMENTS ✅
      PREY ✅
      EXERCISE WEAPONS ✅
      HIRELINGS NPCS ✅
      ANTI ROLLBACK ✅
       
       
      Github Global 11x:  💾
      https://github.com/otg-br/global-11x
      Clients e outras ferramentas:  💾
      https://github.com/otg-br/tools
      Github Otg Gesior:  💾
      https://github.com/otg-br/gesior
      Github Otg Otclientv8:  💾
      https://github.com/otg-br/otclientv8
      Wiki Otg:  💾
      https://github.com/otg-br/global-11x/wiki
       
       
      Creditos:
      TFS Team Erick Nunes Gui Bruxo Worthdavi LuSKT Leo Pereira Luan Luciano Cjaker Comedinhas Nekiro OTG Colaborators
    • Por Dnzk21
      COMO POSSO IMPORTAR UMA CITY EMCIMA DE OUTRA CITY SEM PERDER AS HOUSES
      ALGUEM PODE M,E AJUDAR 
      E A MESMA CITY MJAIS QUANDO IMPORTO PERDE TODAS CASAS QUANDO SALVA E ABRE O SERVIDOR
    • Por Johncore
      Arcadia é uma cidade custom bem bonita que pode ser encontrada no servidor AureraGlobal,
      Por ter esse conteudo aqui em primeira mão, resolvi disponibilizar para a comunidade.
       


       
      Creditos:
      Aurera Team
      Johncorex
      Arcadia-spawn.xml Arcadia-house.xml Arcadia.otbm

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo