Ir para conteúdo
  • 0

TFS 0.3.6 8.60 - Buy & Sell Talkaction System Porem quando eu falo buy pra compra ele nao compra pelo valor item no market exemplo 1000000000 ele compra item sem ser valor do item código fui eu que desenvolvi deve servi 0.4 também


Muvuka

Pergunta

TFS 0.3.6 8.60 - Buy & Sell Talkaction System Porem quando eu falo buy pra compra ele nao compra pelo valor item no market exemplo 1000000000 ele compra item sem ser valor do item código fui eu que desenvolvi deve servi 0.4 também

BUY

-- Inicializar as tabelas globais para compras e vendas ativas
activeBuys = activeBuys or {}
activeSells = activeSells or {}

-- Configuração
local config = {
    validCurrencies = {9971, 2160, 2148, 2152, 2157, 2159}, -- Moedas válidas
    maxPrice = 1000000000, -- Preço máximo permitido
}

-- Função para verificar se uma moeda é válida
local function isValidCurrency(currencyId)
    for _, validId in ipairs(config.validCurrencies) do
        if validId == currencyId then
            return true
        end
    end
    return false
end

-- Função para listar itens à venda
function listItems(cid)
    if #activeSells == 0 then
        doPlayerSendCancel(cid, "No items are currently being sold.")
        return true
    end

    local message = "Items available for sale:\n"
    for i, sell in ipairs(activeSells) do
        message = message .. i .. ". " .. sell.itemName .. " (" .. sell.quantity .. "x) - Price: " .. sell.price .. " gold coins - Seller: " .. sell.seller .. "\n"
    end

    doPlayerPopupFYI(cid, message)
    return true
end

-- Função para comprar o item
function buyItem(cid, itemName, quantity, price, currencyId, sellerName)
    -- Verificar se o item está à venda
    for i, sell in ipairs(activeSells) do
        if sell.itemName == itemName and sell.seller == sellerName then
            -- Verificar se o jogador tem moeda suficiente
            if getPlayerItemCount(cid, currencyId) < price then
                doPlayerSendCancel(cid, "You don't have enough currency to buy this item.")
                return true
            end

            -- Verificar se há quantidade suficiente do item
            if sell.quantity < quantity then
                doPlayerSendCancel(cid, "Not enough items in stock.")
                return true
            end

            -- Realizar a compra
            -- Remover o dinheiro do comprador
            doPlayerRemoveItem(cid, currencyId, price)

            -- Adicionar o item ao comprador
            doPlayerAddItem(cid, getItemIdByName(itemName), quantity)

            -- Atualizar a quantidade do item à venda
            activeSells[i].quantity = activeSells[i].quantity - quantity

            -- Informar ao jogador sobre a compra
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have successfully bought " .. quantity .. "x " .. itemName .. " from " .. sellerName .. " for " .. price .. " currency.")

            -- Caso o item tenha acabado, remover a venda
            if activeSells[i].quantity <= 0 then
                table.remove(activeSells, i)
            end

            return true
        end
    end

    doPlayerSendCancel(cid, "Item not found in the market.")
    return true
end

-- Função para vender o item
function sellItem(cid, itemName, quantity, price, currencyId)
    -- Verificar se o jogador tem o item suficiente
    local itemId = getItemIdByName(itemName)
    if itemId == 0 or getPlayerItemCount(cid, itemId) < quantity then
        doPlayerSendCancel(cid, "You don't have enough of the item '" .. itemName .. "' to sell.")
        return true
    end

    -- Remover os itens do inventário do vendedor
    doPlayerRemoveItem(cid, itemId, quantity)

    -- Registrar a venda
    table.insert(activeSells, {
        itemName = itemName,
        quantity = quantity,
        price = price,
        currencyId = currencyId,
        seller = getPlayerName(cid),
    })

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your item '" .. itemName .. "' has been listed for sale.")
    return true
end

-- Função principal para lidar com os comandos
function onSay(cid, words, param)
    if words == "!sell" then
        if param == "" then
            doPlayerSendCancel(cid, "Use: !sell itemName, quantity, price, currencyId")
            return true
        end

        local t = string.explode(param, ",")
        if #t ~= 4 then
            doPlayerSendCancel(cid, "Invalid parameters. Use: !sell itemName, quantity, price, currencyId")
            return true
        end

        local itemName = t[1]:trim()
        local quantity = tonumber(t[2])
        local price = tonumber(t[3])
        local currencyId = tonumber(t[4])

        -- Chama a função para vender o item
        return sellItem(cid, itemName, quantity, price, currencyId)
    elseif words == "!buy" then
        if param == "" then
            doPlayerSendCancel(cid, "Use: !buy itemName, quantity, price, ID's 9971 - 2160 - 2148 - 2152 - 2157 - 2159, sellerName")
            return true
        end

        -- Separar os parâmetros fornecidos
        local t = string.explode(param, ",")
        if #t ~= 5 then
            doPlayerSendCancel(cid, "Invalid parameters. Use: !buy itemName, quantity, price, ID's 9971 - 2160 - 2148 - 2152 -2157 - 2159, sellerName")
            return true
        end

        local itemName = t[1]:trim()
        local quantity = tonumber(t[2])
        local price = tonumber(t[3])
        local currencyId = tonumber(t[4])
        local sellerName = t[5]:trim()

        -- Chama a função para comprar o item
        return buyItem(cid, itemName, quantity, price, currencyId, sellerName)
    elseif words == "!list" then
        -- Exibe os itens à venda
        return listItems(cid)
    end

    return false
end

 

SELL


-- Inicializar a tabela global para vendas ativas
activeBuys = activeBuys or {}
activeSells = activeSells or {}

-- Configuração
local config = {
    validCurrencies = {9971, 2160, 2148, 2157, 2152, 2159}, -- Moedas válidas
    maxPrice = 1000000000, -- Preço máximo permitido
}

-- Verificar se uma moeda é válida
local function isValidCurrency(currencyId)
    for _, validId in ipairs(config.validCurrencies) do
        if validId == currencyId then
            return true
        end
    end
    return false
end

function onSay(cid, words, param)
    if param == "" then
        doPlayerSendCancel(cid, "Use: !sell itemName, quantity, price, currencyId")
        return true
    end

    local t = string.explode(param, ",")
    if #t ~= 4 then
        doPlayerSendCancel(cid, "Invalid parameters. Use: !sell itemName, quantity, price, currencyId")
        return true
    end

    local itemName = t[1]:trim()
    local quantity = tonumber(t[2])
    local price = tonumber(t[3])
    local currencyId = tonumber(t[4])

    if not quantity or quantity <= 0 then
        doPlayerSendCancel(cid, "Invalid quantity.")
        return true
    end

    if not price or price <= 0 or price > config.maxPrice then
        doPlayerSendCancel(cid, "Invalid price. Maximum allowed: " .. config.maxPrice)
        return true
    end

    if not isValidCurrency(currencyId) then
        doPlayerSendCancel(cid, "Invalid currency. Valid currencies: " .. table.concat(config.validCurrencies, ", "))
        return true
    end

    -- Verificar se o jogador tem o item suficiente no inventário
    local itemId = getItemIdByName(itemName)
    if itemId == 0 or getPlayerItemCount(cid, itemId) < quantity then
        doPlayerSendCancel(cid, "You don't have enough of the item '" .. itemName .. "' to sell.")
        return true
    end

    -- Remover os itens do inventário do vendedor
    doPlayerRemoveItem(cid, itemId, quantity)

    -- Registrar a venda
    table.insert(activeSells, {
        itemName = itemName,
        quantity = quantity,
        price = price,
        currencyId = currencyId,
        seller = getPlayerName(cid),
    })

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your item '" .. itemName .. "' has been listed for sale.")
    return true
end

 

checkselllist

-- Inicializar activeSells como tabela, se ainda não foi
activeBuys = activeBuys or {}
activeSells = activeSells or {}

-- Função onSay para mostrar os itens à venda
function onSay(cid, words, param)
    if #activeSells == 0 then
        doPlayerSendCancel(cid, "No items are currently being sold.")
        return true
    end

    local message = "Items available for sale:\n"
    for i, sell in ipairs(activeSells) do
        -- Substituindo a exibição de gold coins pelo ID da moeda
        local currencyName = getCurrencyName(sell.currencyId)
        message = message .. i .. ". " .. sell.itemName .. " (" .. sell.quantity .. "x) - Price: " .. sell.price .. " " .. currencyName .. " - Seller: " .. sell.seller .. "\n"
    end

    doPlayerPopupFYI(cid, message)
    return true
end

-- Função para obter o nome da moeda baseado no ID
function getCurrencyName(currencyId)
    local currencyNames = {
        [9971] = "- 9971 - [VIP] Coin's",
        [2160] = "- 2160 - Crystal Coin's",
        [2148] = "- 2148 - Gold Coin's",
        [2152] = "- 2152 - Platinum Coins",
        [2159] = "- 2159 - Donate Coin's",
        [2157] = "- 2157 - KK Coin's"
    }

    -- Retorna o nome da moeda correspondente ao ID ou "Unknown Currency" se não for encontrado
    return currencyNames[currencyId] or "Unknown Currency"
end
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
-- Inicializar as tabelas globais para compras e vendas ativas
activeBuys = activeBuys or {}
activeSells = activeSells or {}

-- Configuração
local config = {
    validCurrencies = {9971, 2160, 2148, 2152, 2157, 2159}, -- Moedas válidas
    maxPrice = 1000000000, -- Preço máximo permitido
}

-- Função para verificar se uma moeda é válida
local function isValidCurrency(currencyId)
    for _, validId in ipairs(config.validCurrencies) do
        if validId == currencyId then
            return true
        end
    end
    return false
end

-- Função para listar itens à venda
function listItems(cid)
    if #activeSells == 0 then
        doPlayerSendCancel(cid, "No items are currently being sold.")
        return true
    end
    local message = "Items available for sale:\n"
    for i, sell in ipairs(activeSells) do
        message = message .. i .. ". " .. sell.itemName .. " (" .. sell.quantity .. "x) - Price: " .. sell.price .. " gold coins - Seller: " .. sell.seller .. "\n"
    end
    doPlayerPopupFYI(cid, message)
    return true
end

-- Função para comprar o item
function buyItem(cid, itemName, quantity, price, currencyId, sellerName)
    -- Verificar se o item está à venda
    for i, sell in ipairs(activeSells) do
        if sell.itemName == itemName and sell.seller == sellerName then
            -- Calcular o preço total pelo número de itens
            local totalPrice = sell.price * quantity
            -- Verificar se o jogador tem moeda suficiente
            if getPlayerItemCount(cid, currencyId) < totalPrice then
                doPlayerSendCancel(cid, "You don't have enough currency to buy this item.")
                return true
            end
            -- Verificar se há quantidade suficiente do item
            if sell.quantity < quantity then
                doPlayerSendCancel(cid, "Not enough items in stock.")
                return true
            end
            -- Realizar a compra
            -- Remover o dinheiro do comprador
            doPlayerRemoveItem(cid, currencyId, totalPrice)
            -- Adicionar o item ao comprador
            doPlayerAddItem(cid, getItemIdByName(itemName), quantity)
            -- Atualizar a quantidade do item à venda
            activeSells[i].quantity = activeSells[i].quantity - quantity
            -- Informar ao jogador sobre a compra
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have successfully bought " .. quantity .. "x " .. itemName .. " from " .. sellerName .. " for " .. totalPrice .. " currency.")
            -- Caso o item tenha acabado, remover a venda
            if activeSells[i].quantity <= 0 then
                table.remove(activeSells, i)
            end
            return true
        end
    end
    doPlayerSendCancel(cid, "Item not found in the market.")
    return true
end

-- Função para vender o item
function sellItem(cid, itemName, quantity, price, currencyId)
    -- Verificar se o jogador tem o item suficiente
    local itemId = getItemIdByName(itemName)
    if itemId == 0 or getPlayerItemCount(cid, itemId) < quantity then
        doPlayerSendCancel(cid, "You don't have enough of the item '" .. itemName .. "' to sell.")
        return true
    end
    -- Remover os itens do inventário do vendedor
    doPlayerRemoveItem(cid, itemId, quantity)
    -- Registrar a venda
    table.insert(activeSells, {
        itemName = itemName,
        quantity = quantity,
        price = price,
        currencyId = currencyId,
        seller = getPlayerName(cid),
    })
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your item '" .. itemName .. "' has been listed for sale.")
    return true
end

-- Função principal para lidar com os comandos
function onSay(cid, words, param)
    if words == "!sell" then
        if param == "" then
            doPlayerSendCancel(cid, "Use: !sell itemName, quantity, price, currencyId")
            return true
        end
        local t = string.explode(param, ",")
        if #t ~= 4 then
            doPlayerSendCancel(cid, "Invalid parameters. Use: !sell itemName, quantity, price, currencyId")
            return true
        end
        local itemName = t[1]:trim()
        local quantity = tonumber(t[2])
        local price = tonumber(t[3])
        local currencyId = tonumber(t[4])
        -- Chama a função para vender o item
        return sellItem(cid, itemName, quantity, price, currencyId)
    elseif words == "!buy" then
        if param == "" then
            doPlayerSendCancel(cid, "Use: !buy itemName, quantity, price, ID's 9971 - 2160 - 2148 - 2152 - 2157 - 2159, sellerName")
            return true
        end
        -- Separar os parâmetros fornecidos
        local t = string.explode(param, ",")
        if #t ~= 5 then
            doPlayerSendCancel(cid, "Invalid parameters. Use: !buy itemName, quantity, price, ID's 9971 - 2160 - 2148 - 2152 - 2157 - 2159, sellerName")
            return true
        end
        local itemName = t[1]:trim()
        local quantity = tonumber(t[2])
        local price = tonumber(t[3])
        local currencyId = tonumber(t[4])
        local sellerName = t[5]:trim()
        -- Chama a função para comprar o item
        return buyItem(cid, itemName, quantity, price, currencyId, sellerName)
    elseif words == "!list" then
        -- Exibe os itens à venda
        return listItems(cid)
    end
    return false
end

 

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...