Ir para conteúdo
  • Cadastre-se

(Resolvido)Sistema rare!


Ir para solução Resolvido por zipter98,

Posts Recomendados

Bom, o script que estou querendo, eu vi em um ot e achei muito bacana.

 

Funciona assim:

 

Há uma alavanca, e você precisa de x item e x quantidade desse item para apostar.

 

Apostando você perde essa quantidade de item necessária.

 

Por exemplo, você tem 12 desse x item, e você precisa de 6 para apostar. Ao apostar você irá perder 6 desse x item.

 

E o que ganha?

 

Você teria por exemplo x % de chance de conseguir uma arma, que seria a melhor arma. Ou seja o item mais valioso de se ganhar.

 

Ou poderia ganhar uma vip etc... E outros itens que eu queria colocar.

 

E se alguém fizer o script, e eu puder editar as chances de ganhar cada item ficaria muito agradecido!

 

Darei rep+

 

Abraços!

Link para o post
Compartilhar em outros sites

Sabe fazer a tag?

local price = {itemid, count}            --Troque itemid pelo ID do item que será cobrado, e count pela quantia.
local items = {
    --[itemid] = {chance, count},        >> Onde itemid é o ID do item, chance, obviamente, a chance dele ser sorteado, e count, a quantidade.
    --Exemplo:                           >> Para adicionar mais items, siga o modelo indicado acima. [itemid] = {chance, count},
    --[2160] = {50, 10},                 >> Assim, o item de ID 2160 teria 50% de chance de ser sorteado. Quantidade -> 10.
}
function onUse(cid)
    local _table = {}
    local number = math.random(1, 100)
    local item = 0
    if doPlayerRemoveItem(cid, price[1], price[2]) then
        for itemid, chance in pairs(items) do
            if item == 0 then
                item = itemid
                table.insert(_table, item)
            else
                if number <= chance[1] then
                    local new_chance = math.abs(chance[1] - number)
                    local old_chance = math.abs(items[item][1] - number)
                    if new_chance < old_chance then
                        if #_table > 0 then
                            _table = {}
                        end
                        table.insert(_table, itemid)
                        item = itemid
                    elseif new_chance == old_chance then
                        table.insert(_table, itemid)
                    end
                end
            end
        end
        if item ~= 0 then
            if #_table > 1 then
                item = _table[math.random(#_table)]
            end
            local count = items[item][2]
            if not isItemStackable(item) then
                if count > 1 then
                    for i = 1, count do
                        doPlayerAddItem(cid, item, 1)
                    end
                else
                    doPlayerAddItem(cid, item, 1)
                end
            else
                doPlayerAddItem(cid, item, count)
            end
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You received: "..count.."x "..getItemNameById(item)..(count > 1 and "s" or "")..".")
        end
    else
        return doPlayerSendCancel(cid, "You do not have "..price[2].." "..getItemNameById(price[1])..".")
    end
    return true
end
Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

qual seria a porcentagem ? 50% ? 10% ?..

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

a porcentagem vc coloca apenas o numero, como no exemplo pré descrito:

 

    --Exemplo:

    --[2160] = {50, 10},                

 

>> Assim, o item de ID 2160 teria 50% de chance de ser sorteado. Quantidade -> 10.

Atenciosamente, David Araujo

Meu Conteúdo

 

Fui útil? Gostou? 
Faça uma doação.

 
 
 

"É errando que se erra."

"Gambiarras resolvem instantemente, porém podem complicar em problemas futuros."

"Cada dia vivido é um aprendizado."

Link para o post
Compartilhar em outros sites

Bom, vou testar tudo certinho depois, pois não estou em casa.

 

@Caronte

 

No caso o item que é mais valioso eu queria que fosse 30% de chance para pega-ló.

 

E o resto dos itens 70%

 

Abraços!

 

E obrigado a todos, que estão ajudando.

Link para o post
Compartilhar em outros sites

a porcentagem vc coloca apenas o numero, como no exemplo pré descrito:

 

    --Exemplo:

    --[2160] = {50, 10},                

 

>> Assim, o item de ID 2160 teria 50% de chance de ser sorteado. Quantidade -> 10.

 

Eu perguntei para fazer o script, eu estava no celular fazendo...

mas o zipter já fez...

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

No seu caso (apenas um item com chance diferente), o script poderia ser escrito de maneira mais simples. Porém, como não postei este código apenas para você, mas também para qualquer um que queira usá-lo, optei por deixar assim. Espero que não se importe (a funcionalidade não será afetada).

E fiz uma pequena edição no código para itens com mesma chance. 

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

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Ok, já ajudou muito.

 

Não cheguei a testar tudo certinho, mas depois eu testo.

 

Se der algum erro eu falo com você.

 

Abraços!

Link para o post
Compartilhar em outros sites

@Zipter98

 

Então testei, eu coloquei lá tudo certinho, mas ao puxar a alavanca que sorteia o item ele apenas retira o item que precisa, mas não da nada em troca.

 

Ou seja se puxa alavanca gasta seu item, e não da nada em troca.

 

Poderia explicar certinho onde coloco as tags para ver se está tudo certo.

 

Obrigado!

Link para o post
Compartilhar em outros sites

To no cel, n da pra ajudar mto

Zipter, o do stackable:

doPlayerAddItem(cid, item, 1)
N seria i no lugar do 1?

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

^ Se o item não for stackable, a quantia adicionada será sempre 1, não importando o que você coloca no parâmetro.

 

@Kd meu arrozz

Testarei o código e verei o que pode estar causando tal erro. Se possível, poste o código com suas alterações. Talvez, na verdade, o erro esteja nas configurações.

EDIT: Testei o código, e está funcionando perfeitamente. Há algum erro no console? E, novamente: poste o código alterado por você, por favor.

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

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

 

local price = {6527, 6}            --Troque itemid pelo ID do item que será cobrado, e count pela quantia.

local items = {
    --[8303] = {70, 5},
--[8302] = {70, 5},
    --[7422] = {30, 1},        >> Onde itemid é o ID do item, chance, obviamente, a chance dele ser sorteado, e count, a quantidade.
    --Exemplo:                           >> Para adicionar mais items, siga o modelo indicado acima. [itemid] = {chance, count},
    --[2160] = {50, 10},                 >> Assim, o item de ID 2160 teria 50% de chance de ser sorteado. Quantidade -> 10.
}
function onUse(cid)
    local _table = {}
    local number = math.random(1, 100)
    local item = 0
    if doPlayerRemoveItem(cid, price[1], price[2]) then
        for itemid, chance in pairs(items) do
            if item == 0 then
                item = itemid
            else
                if number <= chance[1] then
                    local new_chance = chance[1] - number 
                    local old_chance = items[item][1] - number 
                    if new_chance < old_chance then
                        if #_table > 0 then
                            _table = {}
                        end
                        table.insert(_table, itemid)
                        item = itemid
                    elseif new_chance == old_chance then
                        table.insert(_table, itemid)
                    end
                end
            end
        end
        if item ~= 0 then
            if #_table > 1 then
                item = _table[math.random(#_table)]
            end
            local count = items[item][2]
            if not isItemStackable(item) then
                if count > 1 then
                    for i = 1, count do
                        doPlayerAddItem(cid, item, 1)
                    end
                else
                    doPlayerAddItem(cid, item, 1)
                end
            else
                doPlayerAddItem(cid, item, count)
            end
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You received: "..count.."x "..getItemNameById(item)..(count > 1 and "s" or "")..".")
        end
    else
        return doPlayerSendCancel(cid, "You do not have "..price[2].." "..getItemNameById(price[1])..".")
    end
    return true
end

 

 

Poderia postar as tags também, para saber se coloquei tudo certo.

 

Ah lembrando, acabei nem falando a versão do tfs é 0.3.6 pode ter algo haver com isso

Editado por Kd meu arrozz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Você usa duas travessões (--) apenas quando quer deixar um comentário no código. Assim, a parte que vier depois não será lida quando o script for executado.

Troque:

    --[8303] = {70, 5},
    --[8302] = {70, 5},
    --[7422] = {30, 1},        >> Onde itemid é o ID do item, chance, obviamente, a chance dele ser sorteado, e count, a quantidade.
por:
    [8303] = {70, 5},
    [8302] = {70, 5},
    [7422] = {30, 1},        
Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Deu certinho a unica coisa é que tipo, ele ta dando em troca apenas o mesmo item.

 

Eu coloquei para sortea 3 itens:

 

 [8303] = {70, 5},     <<<<apenas desse id está vindo
 [8302] = {70, 5},
 [7422] = {30, 1},

Link para o post
Compartilhar em outros sites

Hm, troca por esse código:

local price = {itemid, count}            --Troque itemid pelo ID do item que será cobrado, e count pela quantia.
local items = {
    --[itemid] = {chance, count},        >> Onde itemid é o ID do item, chance, obviamente, a chance dele ser sorteado, e count, a quantidade.
    --Exemplo:                           >> Para adicionar mais items, siga o modelo indicado acima. [itemid] = {chance, count},
    --[2160] = {50, 10},                 >> Assim, o item de ID 2160 teria 50% de chance de ser sorteado. Quantidade -> 10.
    [8303] = {70, 5},     
    [8302] = {70, 5},
    [7422] = {30, 1},
}
function onUse(cid)
    local _table = {}
    local number = math.random(1, 100)
    local item = 0
    if doPlayerRemoveItem(cid, price[1], price[2]) then
        for itemid, chance in pairs(items) do
            if item == 0 then
                table.insert(_table, itemid)
                item = itemid
            else
                local new_chance = math.abs(chance[1] - number)
                local old_chance = math.abs(items[item][1] - number)
                if new_chance < old_chance then
                    if #_table > 0 then
                        _table = {}
                    end
                    table.insert(_table, itemid)
                    item = itemid
                elseif new_chance == old_chance then
                    table.insert(_table, itemid)
                end
            end
        end
        if item ~= 0 then
            if #_table > 1 then
                item = _table[math.random(1, #_table)]
            end
            local count = items[item][2]
            if not isItemStackable(item) then
                if count > 1 then
                    for i = 1, count do
                        doPlayerAddItem(cid, item, 1)
                    end
                else
                    doPlayerAddItem(cid, item, 1)
                end
            else
                doPlayerAddItem(cid, item, count)
            end
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You received: "..count.."x "..getItemNameById(item)..(count > 1 and "s" or "")..".")
        end
    else
        return doPlayerSendCancel(cid, "You do not have "..price[2].." "..getItemNameById(price[1])..".")
    end
    return true
end

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Deu certinho valeu!

 

Rep+

 

A unica coisa é que eu deixei 30% um item e na maioria das vezes vem de primeira, mas isso depois eu tento arrumar.

 

@Edit

 

Então ta funcionando tudo certinho 100%, só gostaria de saber se é possível quando a pessoa apostar aparecer para todo mundo assim no meio da tela e no chat default.

 

Fulano apostou e ganhou (Rare staff).

Editado por Kd meu arrozz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

local price = {itemid, count}            --Troque itemid pelo ID do item que será cobrado, e count pela quantia.
local items = {
    --[itemid] = {chance, count},        >> Onde itemid é o ID do item, chance, obviamente, a chance dele ser sorteado, e count, a quantidade.
    --Exemplo:                           >> Para adicionar mais items, siga o modelo indicado acima. [itemid] = {chance, count},
    --[2160] = {50, 10},                 >> Assim, o item de ID 2160 teria 50% de chance de ser sorteado. Quantidade -> 10.
    [8303] = {70, 5},     
    [8302] = {70, 5},
    [7422] = {30, 1},
}
function onUse(cid)
    local _table = {}
    local number = math.random(1, 100)
    local item = 0
    if doPlayerRemoveItem(cid, price[1], price[2]) then
        for itemid, chance in pairs(items) do
            if item == 0 then
                table.insert(_table, itemid)
                item = itemid
            else
                local new_chance = math.abs(chance[1] - number)
                local old_chance = math.abs(items[item][1] - number)
                if new_chance < old_chance then
                    if #_table > 0 then
                        _table = {}
                    end
                    table.insert(_table, itemid)
                    item = itemid
                elseif new_chance == old_chance then
                    table.insert(_table, itemid)
                end
            end
        end
        if item ~= 0 then
            if #_table > 1 then
                item = _table[math.random(1, #_table)]
            end
            local count = items[item][2]
            if not isItemStackable(item) then
                if count > 1 then
                    for i = 1, count do
                        doPlayerAddItem(cid, item, 1)
                    end
                else
                    doPlayerAddItem(cid, item, 1)
                end
            else
                doPlayerAddItem(cid, item, count)
            end
            broadcastMessage(getCreatureName(cid).." apostou e ganhou "..getItemNameById(item)..".")
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You received: "..count.."x "..getItemNameById(item)..(count > 1 and "s" or "")..".")
        end
    else
        return doPlayerSendCancel(cid, "You do not have "..price[2].." "..getItemNameById(price[1])..".")
    end
    return true
end

não respondo pms solicitando suporte em programação/scripting

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