Postado Fevereiro 24, 2015 10 anos 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 [FAQ] BBCODE [LIB] Constant [RME] Administrando bordas. [TALK] Broadcast Editável. [TALK] Sugest. [TALK] Checkpoint. [MOVE] Pântano pegajoso. [ACTION] Piggy Bank. (Cassino). [GLOBAL] Uptime Ad. [C0DE] Consertando 'Invalid Password' [PROGRAM] Quest Maker
Postado Fevereiro 24, 2015 10 anos 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.
Postado Fevereiro 25, 2015 10 anos 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 agredeço des de ja estava sem tempo de entra
Postado Fevereiro 25, 2015 10 anos 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 Fevereiro 26, 2015 10 anos 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.