Ir para conteúdo

Featured Replies

Postado

usa um math.randon(1,2) pra tirar cara ou coroa de empatados... ué...

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:


Mostrar conteúdo oculto

 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

  • Respostas 9
  • Visualizações 818
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Optei por fazer uma premiação justa - assim, é possível que haja mais de um ganhador em alguma(s) colocação(ões). Se isto ocorrer, o prêmio em dinheiro será dividido automaticamente entre os ganhadore

Postado

Tem que pensar muito bem, porque não poderia excluir outro voto que chegou perto à mesma "distância".

Seria mais interessante, pegar todos que acertaram "em cheio" e dividir o prêmio em questão pela quantidade de players.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Postado
  • Autor

re up desculpa a demora ent faça do jeito de vcs qal fica melhor eu do rep mas caso eu do rep nois 3 ;D agredeço des de ja estava sem tempo de entra

Postado
  • Solução

Optei por fazer uma premiação justa - assim, é possível que haja mais de um ganhador em alguma(s) colocação(ões). Se isto ocorrer, o prêmio em dinheiro será dividido automaticamente entre os ganhadores.

Ex.:

Número sorteado: 48

Jogadores participando do evento: {Fulano, escolheu número 32}, {Ciclano, número 47}, {Error, número 49}, {Troglodita, número 30}, {zipter, número 29}.

Assim, a colocação ficará:

[1 lugar] = Ciclano e Error (o dinheiro será dividido entre ambos)

[2 lugar] = Fulano

[3 lugar] = Troglodita

A configuração, como pode ver, é simples:

    winners = {
        [colocação] = {cash = prêmio_em_dinheiro, items = {ID do item prêmio, quantidade do item prêmio}},   
    },

Enfim, vamos ao código:

Talkaction:

local storages = {8932, 8931}
local price = 100000              --Preço para participar do sorteio.
function onSay(cid, words, param)
    if getGlobalStorageValue(storages[1]) < 1 then
        return doPlayerSendCancel(cid, "Event is not on.")
    elseif getPlayerStorageValue(cid, storages[2]) > -1 then
        return doPlayerSendCancel(cid, "You already chose your number.")
    elseif param == "" or not tonumber(param) or tonumber(param) < 1 or tonumber(param) > 100 then
        return doPlayerSendCancel(cid, "/sorteio 1-100")
    elseif getPlayerMoney(cid) < price then
        return doPlayerSendCancel(cid, "You do not have enough money ("..price..").")
    end
    setPlayerStorageValue(cid, storages[2], tonumber(param))
    doPlayerRemoveMoney(cid, price)
    doPlayerSendTextMessage(cid, 27, "Agora você está participando do evento, seu número: "..param..", Aguarde o resultado, Boa sorte!")
    return true
end
Tag:
<talkaction words="/sorteio" event="script" value="nome_do_arquivo.lua"/>
Globalevent:
local config = {
    days = {"Monday", "Tuesday", "Saturday"},                 --Dias que o evento ocorrerá.
    time = 5,                                                 --Tempo para o sorteio ocorrer.
    winners = {
        --[place] = {cash = xxx, items = {itemid, count}},   
    },
    storages = {8931, 8932},
}
function getRuffleNumbers(a)
    local z = {}
    local c = {}
    for _, cid in pairs(getPlayersOnline()) do
        if getPlayerStorageValue(cid, config.storages[1]) > -1 then
            table.insert(z, math.abs(getPlayerStorageValue(cid, config.storages[1]) - a))
        end
    end
    for i = 1, #config.winners do
        for j = 1, #z do
            if not table.find(c, z[j]) then
                if not c[i] then
                    c[i] = z[j]
                else
                    if z[j] < c[i] then
                        c[i] = z[j]
                    end
                end
            end
        end
    end
    return c
end
function onTime()
    if isInArray(config.days, os.date("%A")) then
        broadcastMessage("O evento do sorteio iniciou, diga /sorteio numero(de 1 a 100) para escolher seu numero, em aproximadamente 5 minutos saira o resultado!")
        setGlobalStorageValue(config.storages[2], 1)
        addEvent(function()
            local a = math.random(1, 100)
            if #getRuffleNumbers(a) < 1 then
                broadcastMessage("Ninguém participou do sorteio. :/")
                setGlobalStorageValue(config.storages[2], -1)
            else
                broadcastMessage("E o número sorteado foi... "..a.."! Os ganhadores foram:")
                local c = getRuffleNumbers(a)   
                for i = 1, #c do
                    local players, p, gold = {}, "", 0
                    gold = config.winners[i].cash
                    for _, cid in pairs(getPlayersOnline()) do
                        if getPlayerStorageValue(cid, config.storages[1]) > -1 then
                            if getPlayerStorageValue(cid, config.storages[1]) == math.abs(c[i] - a) or getPlayerStorageValue(cid, config.storages[1]) == math.abs(c[i] + a) then
                                table.insert(players, cid)
                                doPlayerAddItem(cid, config.winners[i].items[1], config.winners[i].items[2])
                            end
                            setPlayerStorageValue(cid, config.storages[1], -1)
                        end
                    end    
                    for j = 1, #players do
                        gold = math.floor(config.winners[i].cash / #players)
                        doPlayerAddMoney(players[j], gold)
                        if p == "" then
                            p = getCreatureName(players[j])
                        else
                            p = p..(j == #players and " and" or ",").." "..getCreatureName(players[j])
                        end
                    end
                    broadcastMessage(i.." lugar: "..p.." - cash: "..gold.." - item: "..config.winners[i].items[2].."x "..getItemNameById(config.winners[i].items[1])..".")
                end
            end
            local query = db.getResult("SELECT id, online FROM players")
            if query:getID() == -1 then
                return true
            end
            repeat
                local online = query:getDataInt("online")
                local i = query:getDataInt("id")
                if online < 1 then
                    db.executeQuery("UPDATE player_storage SET value = -1 WHERE key = "..config.storages[1].." AND value > -1 AND player_id = "..i)
                end
            until not query:next()
            query:free()
        end, config.time * 60 * 1000)
    end
    return true
end
Tag:
<!-- Coloque, em time, o horário 5 minutos antes do sorteio ser realizado. -->
<!-- Por exemplo, se colocar 19:55, o sorteio vai ser realizado as 20:00. -->
<globalevent name="Sorteio" time="19:55" event="script" value="nome_do_arquivo.lua"/>
OBS: Testei o código apenas em situações hipotéticas (como aquele exemplo no começo do post) num depurador de lua.

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

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

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.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo