Ir para conteúdo

Featured Replies

  • Respostas 20
  • Visualizações 1.9k
  • Created
  • Última resposta

Top Posters In This Topic

Posted Images

Postado
local config = {
    levelRequiredToAdd = 20,
    maxOffersPerPlayer = 5,
    SendOffersOnlyInPZ = true,
    blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933}
}
function onSay(player, words, param)
    if param == '' then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
        return true
    end

    local t = param:split(",")
    if t[1] == "add" then
        if not t[2] or not t[3] or not t[4] then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
            return true
        end

        if not tonumber (t[3]) or not tonumber(t[4]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.")
            return true
        end

        if string.len(t[3]) > 7 or string.len(t[4]) > 3 then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.")
            return true
        end

        local item = getItemIdByName(t[2])
        if not item then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.")
            return true
        end

        if player:getLevel() < config.levelRequiredToAdd then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.")
            return true
        end

        if table.contains(config.blocked_items, item) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.")
            return true
        end

        if player:getItemCount(item) < tonumber(t[4]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).")
            return true
        end

        local check = db.storeQuery("SELECT `id` FROM `auction_system` WHERE `player` = " .. player:getGuid() .. ";")
        if check:getID() == -1 then
            elseif check:getRows(true) >= config.maxOffersPerPlayer then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")")
            return true
        end

        if config.SendOffersOnlyInPZ then  
            if not Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.")
                return true
            end
        end

        if tonumber(t[4]) < 1 or tonumber(t[3]) < 1 then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.")
            return true
        end

        local itemcount, costgp = math.floor(t[4]), math.floor(t[3])
        player:removeItem(item, itemcount)
        db.query("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. player:getGuid() .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")")
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.")
    end

    if t[1] == "buy" then
        if not tonumber(t[2]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
            return true
        end

        local buy = db.storeQuery("SELECT * FROM `auction_system` WHERE `id` = " .. tonumber(t[2]) .. ";")
        if buy:getID() ~= -1 then
            if player:getMoney() < buy:getNumber("cost") then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.")
                buy:free()
                return true
            end

            if player:getName() == getPlayerNameByGUID(buy:getNumber("player")) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.")
                buy:free()
                return true
            end

            if player:getFreeCapacity() < getItemWeightById(buy:getNumber("item_id"), buy:getNumber("count")))then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getString("item_name") .. ". It weight " .. getItemWeightById(buy:getNumber("item_id"), buy:getNumber("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.")
                buy:free()
                return true
            end

            local itemStacks = ItemType(buy:getString("item_id")):isStackable()
            if itemStacks then
                player:addItem(buy:getString("item_id"), buy:getNumber("count"))
            else
                for i = 1, buy:getNumber("count") do
                    player:addItem(buy:getString("item_id"), 1)
                end
            end

            player:removeMoney(buy:getNumber("cost"))
            db.query("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You bought " .. buy:getNumber("count") .. " ".. buy:getString("item_name") .. " for " .. buy:getNumber("cost") .. " gps!")
            db.query("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getNumber("cost") .. " WHERE `id` = " .. buy:getNumber("player") .. ";")
            buy:free()
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
        end
    end

    if t[1] == "remove" then
        if not tonumber(t[2]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
            return true
        end

        if config.SendOffersOnlyInPZ then  
            if not Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.")
                return true
            end
        end

        local delete = db.storeQuery("SELECT * FROM `auction_system` WHERE `id` = " .. tonumber(t[2]) .. ";")      
        if delete:getID() ~= -1 then
            if player:getGuid() == delete:getNumber("player")) then
                db.query("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
                local itemStack = ItemType(delete:getString("item_id")):isStackable()
                if itemStack then
                    player:addItem(delete:getString("item_id"), delete:getNumber("count"))
                else
                    for i = 1, delete:getNumber("count") do
                         player:addItem(delete:getString("item_id"), 1)
                    end
                end
                player:sendTextMessage(MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.")
            else
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!")
            end
            delete:free()
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
        end
    end

    if t[1] == "withdraw" then
        local balance = db.storeQuery("SELECT `auction_balance` FROM `players` WHERE `id` = " .. player:getGuid() .. ";")
        if balance:getNumber("auction_balance") < 1 then
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You don't have money on your auction balance.")
            balance:free()
            return true
        end

        player:sendTextMessage(MESSAGE_INFO_DESCR, "You got " .. balance:getNumber("auction_balance") .. " gps from auction system!")
        player:addMoney(balance:getNumber("auction_balance"))
        db.query("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. player:getGuid() .. ";")
        balance:free()
    end

    if t[1] == "list" then
        local result = db.storeQuery("SELECT * FROM `auction_system` ORDER BY `auction_system`.`id` ASC")
        if result:getID() == -1 then
            return true
        end

        local msg = "Trade Offline:\n\n!offer buy, ID\n!offer remove, ID\n!offer add, ItemName, ItemPrice, ItemCount\n\n"
        while true do
            local id = result:getString("id")
            local name = getPlayerNameByGUID(result:getString("player"))
            local item_name = getItemNameById(result:getString("item_id"))
            local count = result:getString("count")
            local custo = result:getString("cost")/1000
            local custo2 = result:getString("cost")
            if isPlayer() then
                msg = ""..msg.."ID : "..id.."\nItem Name : "..item_name.." - Item Count : "..count.." - Item Cust : "..custo.."k("..custo2.."GP) - Dono : "..name.."\n"
            end
            if not result:next() then
                break
            end
        end
        player:popupFYI(msg)
        return true
    end
    return true
end

 

Postado
12 horas atrás, FlavioHulk disse:

local config = {
    levelRequiredToAdd = 20,
    maxOffersPerPlayer = 5,
    SendOffersOnlyInPZ = true,
    blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933}
}
function onSay(player, words, param)
    if param == '' then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
        return true
    end

    local t = param:split(",")
    if t[1] == "add" then
        if not t[2] or not t[3] or not t[4] then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
            return true
        end

        if not tonumber (t[3]) or not tonumber(t[4]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.")
            return true
        end

        if string.len(t[3]) > 7 or string.len(t[4]) > 3 then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.")
            return true
        end

        local item = getItemIdByName(t[2])
        if not item then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.")
            return true
        end

        if player:getLevel() < config.levelRequiredToAdd then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.")
            return true
        end

        if table.contains(config.blocked_items, item) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.")
            return true
        end

        if player:getItemCount(item) < tonumber(t[4]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).")
            return true
        end

        local check = db.storeQuery("SELECT `id` FROM `auction_system` WHERE `player` = " .. player:getGuid() .. ";")
        if check:getID() == -1 then
            elseif check:getRows(true) >= config.maxOffersPerPlayer then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")")
            return true
        end

        if config.SendOffersOnlyInPZ then  
            if not Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.")
                return true
            end
        end

        if tonumber(t[4]) < 1 or tonumber(t[3]) < 1 then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.")
            return true
        end

        local itemcount, costgp = math.floor(t[4]), math.floor(t[3])
        player:removeItem(item, itemcount)
        db.query("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. player:getGuid() .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")")
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.")
    end

    if t[1] == "buy" then
        if not tonumber(t[2]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
            return true
        end

        local buy = db.storeQuery("SELECT * FROM `auction_system` WHERE `id` = " .. tonumber(t[2]) .. ";")
        if buy:getID() ~= -1 then
            if player:getMoney() < buy:getNumber("cost") then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.")
                buy:free()
                return true
            end

            if player:getName() == getPlayerNameByGUID(buy:getNumber("player")) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.")
                buy:free()
                return true
            end

            if player:getFreeCapacity() < getItemWeightById(buy:getNumber("item_id"), buy:getNumber("count")))then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getString("item_name") .. ". It weight " .. getItemWeightById(buy:getNumber("item_id"), buy:getNumber("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.")
                buy:free()
                return true
            end

            local itemStacks = ItemType(buy:getString("item_id")):isStackable()
            if itemStacks then
                player:addItem(buy:getString("item_id"), buy:getNumber("count"))
            else
                for i = 1, buy:getNumber("count") do
                    player:addItem(buy:getString("item_id"), 1)
                end
            end

            player:removeMoney(buy:getNumber("cost"))
            db.query("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You bought " .. buy:getNumber("count") .. " ".. buy:getString("item_name") .. " for " .. buy:getNumber("cost") .. " gps!")
            db.query("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getNumber("cost") .. " WHERE `id` = " .. buy:getNumber("player") .. ";")
            buy:free()
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
        end
    end

    if t[1] == "remove" then
        if not tonumber(t[2]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
            return true
        end

        if config.SendOffersOnlyInPZ then  
            if not Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.")
                return true
            end
        end

        local delete = db.storeQuery("SELECT * FROM `auction_system` WHERE `id` = " .. tonumber(t[2]) .. ";")      
        if delete:getID() ~= -1 then
            if player:getGuid() == delete:getNumber("player")) then
                db.query("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
                local itemStack = ItemType(delete:getString("item_id")):isStackable()
                if itemStack then
                    player:addItem(delete:getString("item_id"), delete:getNumber("count"))
                else
                    for i = 1, delete:getNumber("count") do
                         player:addItem(delete:getString("item_id"), 1)
                    end
                end
                player:sendTextMessage(MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.")
            else
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!")
            end
            delete:free()
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
        end
    end

    if t[1] == "withdraw" then
        local balance = db.storeQuery("SELECT `auction_balance` FROM `players` WHERE `id` = " .. player:getGuid() .. ";")
        if balance:getNumber("auction_balance") < 1 then
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You don't have money on your auction balance.")
            balance:free()
            return true
        end

        player:sendTextMessage(MESSAGE_INFO_DESCR, "You got " .. balance:getNumber("auction_balance") .. " gps from auction system!")
        player:addMoney(balance:getNumber("auction_balance"))
        db.query("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. player:getGuid() .. ";")
        balance:free()
    end

    if t[1] == "list" then
        local result = db.storeQuery("SELECT * FROM `auction_system` ORDER BY `auction_system`.`id` ASC")
        if result:getID() == -1 then
            return true
        end

        local msg = "Trade Offline:\n\n!offer buy, ID\n!offer remove, ID\n!offer add, ItemName, ItemPrice, ItemCount\n\n"
        while true do
            local id = result:getString("id")
            local name = getPlayerNameByGUID(result:getString("player"))
            local item_name = getItemNameById(result:getString("item_id"))
            local count = result:getString("count")
            local custo = result:getString("cost")/1000
            local custo2 = result:getString("cost")
            if isPlayer() then
                msg = ""..msg.."ID : "..id.."\nItem Name : "..item_name.." - Item Count : "..count.." - Item Cust : "..custo.."k("..custo2.."GP) - Dono : "..name.."\n"
            end
            if not result:next() then
                break
            end
        end
        player:popupFYI(msg)
        return true
    end
    return true
end

 

Testei aqui e deu erro

asdasd.jpg

Postado
local config = {
    levelRequiredToAdd = 20,
    maxOffersPerPlayer = 5,
    SendOffersOnlyInPZ = true,
    blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933}
}
function onSay(player, words, param)
    if param == '' then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
        return true
    end

    local t = param:split(",")
    if t[1] == "add" then
        if not t[2] or not t[3] or not t[4] then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
            return true
        end

        if not tonumber (t[3]) or not tonumber(t[4]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.")
            return true
        end

        if string.len(t[3]) > 7 or string.len(t[4]) > 3 then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.")
            return true
        end

        local item = getItemIdByName(t[2])
        if not item then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.")
            return true
        end

        if player:getLevel() < config.levelRequiredToAdd then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.")
            return true
        end

        if table.contains(config.blocked_items, item) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.")
            return true
        end

        if player:getItemCount(item) < tonumber(t[4]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).")
            return true
        end

        local check = db.storeQuery("SELECT `id` FROM `auction_system` WHERE `player` = " .. player:getGuid() .. ";")
        if check:getID() == -1 then
            elseif check:getRows(true) >= config.maxOffersPerPlayer then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")")
            return true
        end

        if config.SendOffersOnlyInPZ then  
            if not Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.")
                return true
            end
        end

        if tonumber(t[4]) < 1 or tonumber(t[3]) < 1 then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.")
            return true
        end

        local itemcount, costgp = math.floor(t[4]), math.floor(t[3])
        player:removeItem(item, itemcount)
        db.query("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. player:getGuid() .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")")
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.")
    end

    if t[1] == "buy" then
        if not tonumber(t[2]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
            return true
        end

        local buy = db.storeQuery("SELECT * FROM `auction_system` WHERE `id` = " .. tonumber(t[2]) .. ";")
        if buy:getID() ~= -1 then
            if player:getMoney() < buy:getNumber("cost") then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.")
                buy:free()
                return true
            end

            if player:getName() == getPlayerGUIDByName(buy:getNumber("player")) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.")
                buy:free()
                return true
            end

            if player:getFreeCapacity() < getItemWeightById(buy:getNumber("item_id"), buy:getNumber("count")))then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getString("item_name") .. ". It weight " .. getItemWeightById(buy:getNumber("item_id"), buy:getNumber("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.")
                buy:free()
                return true
            end

            local itemStacks = ItemType(buy:getString("item_id")):isStackable()
            if itemStacks then
                player:addItem(buy:getString("item_id"), buy:getNumber("count"))
            else
                for i = 1, buy:getNumber("count") do
                    player:addItem(buy:getString("item_id"), 1)
                end
            end

            player:removeMoney(buy:getNumber("cost"))
            db.query("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You bought " .. buy:getNumber("count") .. " ".. buy:getString("item_name") .. " for " .. buy:getNumber("cost") .. " gps!")
            db.query("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getNumber("cost") .. " WHERE `id` = " .. buy:getNumber("player") .. ";")
            buy:free()
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
        end
    end

    if t[1] == "remove" then
        if not tonumber(t[2]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
            return true
        end

        if config.SendOffersOnlyInPZ then  
            if not Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.")
                return true
            end
        end

        local delete = db.storeQuery("SELECT * FROM `auction_system` WHERE `id` = " .. tonumber(t[2]) .. ";")      
        if delete:getID() ~= -1 then
            if player:getGuid() == delete:getNumber("player")) then
                db.query("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
                local itemStack = ItemType(delete:getString("item_id")):isStackable()
                if itemStack then
                    player:addItem(delete:getString("item_id"), delete:getNumber("count"))
                else
                    for i = 1, delete:getNumber("count") do
                         player:addItem(delete:getString("item_id"), 1)
                    end
                end
                player:sendTextMessage(MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.")
            else
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!")
            end
            delete:free()
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
        end
    end

    if t[1] == "withdraw" then
        local balance = db.storeQuery("SELECT `auction_balance` FROM `players` WHERE `id` = " .. player:getGuid() .. ";")
        if balance:getNumber("auction_balance") < 1 then
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You don't have money on your auction balance.")
            balance:free()
            return true
        end

        player:sendTextMessage(MESSAGE_INFO_DESCR, "You got " .. balance:getNumber("auction_balance") .. " gps from auction system!")
        player:addMoney(balance:getNumber("auction_balance"))
        db.query("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. player:getGuid() .. ";")
        balance:free()
    end

    if t[1] == "list" then
        local result = db.storeQuery("SELECT * FROM `auction_system` ORDER BY `auction_system`.`id` ASC")
        if result:getID() == -1 then
            return true
        end

        local msg = "Trade Offline:\n\n!offer buy, ID\n!offer remove, ID\n!offer add, ItemName, ItemPrice, ItemCount\n\n"
        while true do
            local id = result:getString("id")
            local name = getPlayerNameByGUID(result:getString("player"))
            local item_name = getItemNameById(result:getString("item_id"))
            local count = result:getString("count")
            local custo = result:getString("cost")/1000
            local custo2 = result:getString("cost")
            if isPlayer() then
                msg = ""..msg.."ID : "..id.."\nItem Name : "..item_name.." - Item Count : "..count.." - Item Cust : "..custo.."k("..custo2.."GP) - Dono : "..name.."\n"
            end
            if not result:next() then
                break
            end
        end
        player:popupFYI(msg)
        return true
    end
    return true
end

 

Postado
8 horas atrás, FlavioHulk disse:

local config = {
    levelRequiredToAdd = 20,
    maxOffersPerPlayer = 5,
    SendOffersOnlyInPZ = true,
    blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933}
}
function onSay(player, words, param)
    if param == '' then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
        return true
    end

    local t = param:split(",")
    if t[1] == "add" then
        if not t[2] or not t[3] or not t[4] then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
            return true
        end

        if not tonumber (t[3]) or not tonumber(t[4]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.")
            return true
        end

        if string.len(t[3]) > 7 or string.len(t[4]) > 3 then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.")
            return true
        end

        local item = getItemIdByName(t[2])
        if not item then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.")
            return true
        end

        if player:getLevel() < config.levelRequiredToAdd then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.")
            return true
        end

        if table.contains(config.blocked_items, item) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.")
            return true
        end

        if player:getItemCount(item) < tonumber(t[4]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).")
            return true
        end

        local check = db.storeQuery("SELECT `id` FROM `auction_system` WHERE `player` = " .. player:getGuid() .. ";")
        if check:getID() == -1 then
            elseif check:getRows(true) >= config.maxOffersPerPlayer then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")")
            return true
        end

        if config.SendOffersOnlyInPZ then  
            if not Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.")
                return true
            end
        end

        if tonumber(t[4]) < 1 or tonumber(t[3]) < 1 then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.")
            return true
        end

        local itemcount, costgp = math.floor(t[4]), math.floor(t[3])
        player:removeItem(item, itemcount)
        db.query("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. player:getGuid() .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")")
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.")
    end

    if t[1] == "buy" then
        if not tonumber(t[2]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
            return true
        end

        local buy = db.storeQuery("SELECT * FROM `auction_system` WHERE `id` = " .. tonumber(t[2]) .. ";")
        if buy:getID() ~= -1 then
            if player:getMoney() < buy:getNumber("cost") then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.")
                buy:free()
                return true
            end

            if player:getName() == getPlayerGUIDByName(buy:getNumber("player")) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.")
                buy:free()
                return true
            end

            if player:getFreeCapacity() < getItemWeightById(buy:getNumber("item_id"), buy:getNumber("count")))then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getString("item_name") .. ". It weight " .. getItemWeightById(buy:getNumber("item_id"), buy:getNumber("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.")
                buy:free()
                return true
            end

            local itemStacks = ItemType(buy:getString("item_id")):isStackable()
            if itemStacks then
                player:addItem(buy:getString("item_id"), buy:getNumber("count"))
            else
                for i = 1, buy:getNumber("count") do
                    player:addItem(buy:getString("item_id"), 1)
                end
            end

            player:removeMoney(buy:getNumber("cost"))
            db.query("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You bought " .. buy:getNumber("count") .. " ".. buy:getString("item_name") .. " for " .. buy:getNumber("cost") .. " gps!")
            db.query("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getNumber("cost") .. " WHERE `id` = " .. buy:getNumber("player") .. ";")
            buy:free()
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
        end
    end

    if t[1] == "remove" then
        if not tonumber(t[2]) then
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
            return true
        end

        if config.SendOffersOnlyInPZ then  
            if not Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.")
                return true
            end
        end

        local delete = db.storeQuery("SELECT * FROM `auction_system` WHERE `id` = " .. tonumber(t[2]) .. ";")      
        if delete:getID() ~= -1 then
            if player:getGuid() == delete:getNumber("player")) then
                db.query("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")
                local itemStack = ItemType(delete:getString("item_id")):isStackable()
                if itemStack then
                    player:addItem(delete:getString("item_id"), delete:getNumber("count"))
                else
                    for i = 1, delete:getNumber("count") do
                         player:addItem(delete:getString("item_id"), 1)
                    end
                end
                player:sendTextMessage(MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.")
            else
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!")
            end
            delete:free()
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")
        end
    end

    if t[1] == "withdraw" then
        local balance = db.storeQuery("SELECT `auction_balance` FROM `players` WHERE `id` = " .. player:getGuid() .. ";")
        if balance:getNumber("auction_balance") < 1 then
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You don't have money on your auction balance.")
            balance:free()
            return true
        end

        player:sendTextMessage(MESSAGE_INFO_DESCR, "You got " .. balance:getNumber("auction_balance") .. " gps from auction system!")
        player:addMoney(balance:getNumber("auction_balance"))
        db.query("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. player:getGuid() .. ";")
        balance:free()
    end

    if t[1] == "list" then
        local result = db.storeQuery("SELECT * FROM `auction_system` ORDER BY `auction_system`.`id` ASC")
        if result:getID() == -1 then
            return true
        end

        local msg = "Trade Offline:\n\n!offer buy, ID\n!offer remove, ID\n!offer add, ItemName, ItemPrice, ItemCount\n\n"
        while true do
            local id = result:getString("id")
            local name = getPlayerNameByGUID(result:getString("player"))
            local item_name = getItemNameById(result:getString("item_id"))
            local count = result:getString("count")
            local custo = result:getString("cost")/1000
            local custo2 = result:getString("cost")
            if isPlayer() then
                msg = ""..msg.."ID : "..id.."\nItem Name : "..item_name.." - Item Count : "..count.." - Item Cust : "..custo.."k("..custo2.."GP) - Dono : "..name.."\n"
            end
            if not result:next() then
                break
            end
        end
        player:popupFYI(msg)
        return true
    end
    return true
end

 

Deu mesmo erro na linha 96 e 136 eu arrumei (), porém não funciona.

 

 

in.jpg

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo