Ir para conteúdo
  • Cadastre-se

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


Posts Recomendados

 

 

 

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 post
Compartilhar em outros sites

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo