Ir para conteúdo
  • Cadastre-se

(Resolvido)Um Script de um evento Diario


Ir para solução Resolvido por zipter98,

Posts Recomendados

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

Link para o post
Compartilhar em outros sites
  • Respostas 9
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

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 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

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

Link para o post
Compartilhar em outros sites

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

Link para o post
Compartilhar em outros sites
  • 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

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.

  • Estatísticas dos Fóruns

    96845
    Tópicos
    519606
    Posts



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo