Postado Maio 12, 2015 10 anos Use o novo código, como informei no meu comentário anterior. Testei o sistema como foi pedido pelo autor, e funcionou perfeitamente. Poderia dar mais detalhes sobre a personalização que você pediu do código? Irei refazer tudo de novo aqui então. Seguinte, eu queria que cada jogo tivesse um preço fixo (1kk) para usar o comando !apostar. O player não iria escolher o valor que quisesse, pois seria fixo o valor de 1kk por jogo. E o comando seria direto, sem o valor. Por exemplo: !apostar 1 2 3 4
Postado Maio 12, 2015 10 anos Globalevent: local config = { cash = xxx, --Valor inicial da loteria. limit = {1, 200}, --Número mínimo e máximo da loteria. numbers = 3, --Quantos números o player deve escolher. startTime = 5, --Tempo para as apostas serem fechadas/anunciar vencedor, em minutos. messages = { --Mensagens. "A loteria está aberta, façam suas apostas! Tempo até fechar: %d minuto(s).\nDinheiro acumulado até agora: %s.", "A loteria está fechada!\nPrêmio (individual): %s gold. Vencedor%s: %s.", "Sem vencedores na loteria!\nDinheiro acumulado [total]: %s gold.", }, storages = {9571, 9572, 9573}, } function onThink() setGlobalStorageValue(config.storages[1], 1) if getGlobalStorageValue(config.storages[2]) < 0 then setGlobalStorageValue(config.storages[2], config.cash) end broadcastMessage(config.messages[1]:format(config.startTime, pointNumber(getGlobalStorageValue(config.storages[2]))), MESSAGE_INFO_DESCR) for i = 1, config.startTime do addEvent(function() if i ~= config.startTime then broadcastMessage(config.messages[1]:format(config.startTime - i), MESSAGE_INFO_DESCR) else local sortedNumbers = {} for i = 1, config.numbers do local value = math.random(config.limit[1], config.limit[2]) if isInArray(sortedNumbers, value) then while isInArray(sortedNumbers, value) do value = math.random(config.limit[1], config.limit[2]) end end table.insert(sortedNumbers, value) end setGlobalStorageValue(config.storages[1], -1) local winners, str = getLotteryWinners(sortedNumbers, config.numbers), "" local prize = math.floor(getGlobalStorageValue(config.storages[2]) / #winners) if #winners > 0 then for i = 1, #winners do if str == "" then str = getCreatureName(winners[i]) else str = str..(i == #winners and " e " or ", ")..getCreatureName(winners[i]) end end end if str == "" then broadcastMessage(config.messages[3]:format(pointNumber(getGlobalStorageValue(config.storages[2]))), MESSAGE_INFO_DESCR) else broadcastMessage(config.messages[2]:format(pointNumber(prize), #winners > 1 and "es" or "", str), MESSAGE_INFO_DESCR) setGlobalStorageValue(config.storages[2], -1) for i = 1, #winners do if isPlayer(winners[i]) then doPlayerDepositMoney(winners[i], prize) doPlayerSendTextMessage(winners[i], MESSAGE_STATUS_CONSOLE_ORANGE, "Por vencer a loteria, você recebeu: "..prize.." gold.") end end end resetStorage(config.storages[3], config.numbers) end end, i * 60 * 1000) end return true end Talkaction: local config = { limit = {1, 200}, --Número mínimo e máximo da loteria. numbers = 3, --Quantos números o player deve escolher. price = xxx, --Preço para participar da loteria. storages = {9571, 9572, 9573}, } function onSay(cid, words, param) if getGlobalStorageValue(config.storages[1]) < 1 then doPlayerSendCancel(cid, "A loteria está fechada.") elseif getPlayerStorageValue(cid, config.storages[3]) ~= -1 then doPlayerSendCancel(cid, "Você já fez sua aposta.") elseif param == "" then doPlayerSendCancel(cid, "!apostar number1 number2 number3") elseif getPlayerMoney(cid) < config.price then doPlayerSendCancel(cid, "Você precisa de, no mínimo, "..config.price.." gold para apostar.") else local numbers = param:explode(" ") if #numbers ~= config.numbers then doPlayerSendCancel(cid, "Escolha "..config.numbers.." números, entre "..config.limit[1].." - "..config.limit[2]..".") else local str = "" for i = 1, #numbers do numbers[i] = tonumber(numbers[i]) if not numbers[i] or numbers[i] < config.limit[1] or numbers[i] > config.limit[2] then return doPlayerSendCancel(cid, "Escolha números válidos ["..config.limit[1].." - "..config.limit[2].."].") end if str == "" then str = numbers[i] else str = str..(i == #numbers and " e " or ", ")..numbers[i] end end doPlayerRemoveMoney(cid, config.price) doPlayerSendTextMessage(cid, 27, "Você escolheu os números: "..str..".") for i = 0, config.numbers - 1 do setPlayerStorageValue(cid, config.storages[3] + i, numbers[i + 1]) end addGlobalStorageValue(config.storages[2], config.price) end end return true end Em 050-function.lua (data/lib), adicione mais esta função: function pointNumber(number) if not number or not tonumber(number) then return false end local d = tostring(number):reverse() local z = {} for i = 1, d:len(), 3 do table.insert(z, d:sub(i, i + 2)) end return table.concat(z, "."):reverse() end Editado Maio 14, 2015 10 anos por zipter98 (veja o histórico de edições) não respondo pms solicitando suporte em programação/scripting
Postado Maio 12, 2015 10 anos Globalevent: local config = { cash = xxx, --Valor inicial da loteria. limit = {1, 200}, --Número mínimo e máximo da loteria. numbers = 3, --Quantos números o player deve escolher. startTime = 5, --Tempo para as apostas serem fechadas/anunciar vencedor, em minutos. messages = { --Mensagens. "A loteria está aberta, façam suas apostas! Tempo até fechar: %d minuto(s).", "A loteria está fechada!\nPrêmio (individual): %d gold. Vencedor%s: %s.", "Sem vencedores na loteria!\nDinheiro acumulado [total]: %d gold.", }, storages = {9571, 9572, 9573}, } function onThink() broadcastMessage(config.messages[1]:format(config.startTime), MESSAGE_INFO_DESCR) setGlobalStorageValue(config.storages[1], 1) if getGlobalStorageValue(config.storages[2]) < 0 then setGlobalStorageValue(config.storages[2], config.cash) end for i = 1, config.startTime do addEvent(function() if i ~= config.startTime then broadcastMessage(config.messages[1]:format(config.startTime - i), MESSAGE_INFO_DESCR) else local sortedNumbers = {} for i = 1, config.numbers do local value = math.random(config.limit[1], config.limit[2]) if isInArray(sortedNumbers, value) then while isInArray(sortedNumbers, value) do value = math.random(config.limit[1], config.limit[2]) end end table.insert(sortedNumbers, value) end setGlobalStorageValue(config.storages[1], -1) local winners, str = getLotteryWinners(sortedNumbers, config.numbers), "" local prize = math.floor(getGlobalStorageValue(config.storages[2]) / #winners) if #winners > 0 then for i = 1, #winners do if str == "" then str = getCreatureName(winners[i]) else str = str..(i == #winners and " e " or ", ")..winners[i] end end end if str == "" then broadcastMessage(config.messages[3]:format(getGlobalStorageValue(config.storages[2])), MESSAGE_INFO_DESCR) else broadcastMessage(config.messages[2]:format(prize, #winners > 1 and "es" or "", str), MESSAGE_INFO_DESCR) setGlobalStorageValue(config.storages[2], -1) for i = 1, #winners do if isPlayer(winners[i]) then doPlayerAddMoney(winners[i], prize) doPlayerSendTextMessage(winners[i], MESSAGE_STATUS_CONSOLE_ORANGE, "Por vencer a loteria, você recebeu: "..prize.." gold.") end end end resetStorage(config.storages[3], config.numbers) end end, i * 60 * 1000) end return true end Talkaction: local config = { limit = {1, 200}, --Número mínimo e máximo da loteria. numbers = 3, --Quantos números o player deve escolher. price = xxx, --Preço para participar da loteria. storages = {9571, 9572, 9573}, } function onSay(cid, words, param) if getGlobalStorageValue(config.storages[1]) < 1 then doPlayerSendCancel(cid, "A loteria está fechada.") elseif getPlayerStorageValue(cid, config.storages[3]) ~= -1 then doPlayerSendCancel(cid, "Você já fez sua aposta.") elseif param == "" then doPlayerSendCancel(cid, "!apostar number1 number2 number3") elseif getPlayerMoney(cid) < config.price then doPlayerSendCancel(cid, "Você precisa de, no mínimo, "..config.minCash.." gold para apostar.") else local numbers = param:explode(" ") if #numbers ~= config.numbers then doPlayerSendCancel(cid, "Escolha "..config.numbers.." números, entre "..config.limit[1].." - "..config.limit[2]..".") else local str = "" for i = 1, #numbers do numbers[i] = tonumber(numbers[i]) if not numbers[i] or numbers[i] < config.limit[1] or numbers[i] > config.limit[2] then return doPlayerSendCancel(cid, "Escolha números válidos ["..config.limit[1].." - "..config.limit[2].."].") end if str == "" then str = numbers[i] else str = str..(i == #numbers and " e " or ", ")..numbers[i] end end doPlayerRemoveMoney(cid, config.price) doPlayerSendTextMessage(cid, 27, "Você escolheu os números: "..str..".") for i = 0, config.numbers - 1 do setPlayerStorageValue(cid, config.storages[3] + i, numbers[i + 1]) end addGlobalStorageValue(config.storages[2], config.price) end end return true end Perfeito !!!!!!! Nessa parte faltou o nome dos players, que veio em numeros::: Prêmio (individual): 5000000 gold. Vencedores: [ ADMIN ], 268446773 e 268446775. Outra coisa, teria como o valor ser enviado pro banco? Pois se acumula de mais corre o risco de nao ter espaço na backpack!! Teria como simplificar: "1000000 gold" para "1kk" , pois os numeros podem confundi os players, se nao, tudo bem.. Na primeira mensagem, tem como falar o total que ja esta acumulado?
Postado Maio 12, 2015 10 anos Ops, como testei a loteria com apenas um vencedor, não presenciei este erro. Enfim, corrigido. Sobre as outras alterações, as farei e editarei os códigos. EDIT: Pronto, códigos alterados. Não se esqueça de adicionar a nova função. Editado Maio 12, 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.