Postado Maio 10, 2015 10 anos Autor Há uma quantia mínima para apostar? E, num mesmo comando, o jogador escolheria os 3 números + a quantia que pretende apostar? Ou o dinheiro que deve ser apostado é constante? Digo, o mesmo para todos? Ele deve escolher uma quantia. Acima de 5k Sim no mesmo comando, tipo: !apostar 500,5 Ou se der pra aparecer uma aba quando ele falar !apostar Ae la aparece quantia$ e numero em baixo e ele coloca. igual ao do otp ne Eu nunca joguei esse Ot ai Se tem eu nao sei. So pensei na ideia. Editado Maio 10, 2015 10 anos por CarlosHenrique7457 (veja o histórico de edições) Ajudei? da um Rep+, não custa nada. Servidor de PokeTibia ja online. Pagina: https://www.facebook.com/PokemonxStore?ref=bookmarks Grupo: https://www.facebook.com/groups/257989224406246/ Site: http://pokexstore.wix.com/pokexstore
Postado Maio 11, 2015 10 anos Este é um post popular. Em data/lib/050-function.lua, coloque as seguintes funções: function compareTables(c, d) for i = 1, #c do if not isInArray(d, c[i]) then return false end end return true end function addGlobalStorageValue(key, addValue) local result = db.getResult("SELECT value FROM global_storage WHERE key = "..key) setGlobalStorageValue(key, getGlobalStorageValue(key) + addValue) if result:getID() ~= -1 then db.executeQuery("UPDATE global_storage SET value = value + "..addValue.." WHERE key = "..key) result:free() else db.executeQuery("INSERT INTO global_storage VALUES ("..key..", 0, "..addValue..")") end end function resetStorage(key, count) local result = db.getResult("SELECT id FROM players WHERE online < 1") if result:getID() ~= -1 then repeat for i = 0, count - 1 do db.executeQuery("UPDATE player_storage SET value = -1 WHERE key = "..key + i.." AND player_id = "..result:getDataInt("id").." AND value != -1") end until not result:next() result:free() end for _, pid in pairs(getPlayersOnline()) do for i = 0, count - 1 do if getPlayerStorageValue(pid, key + i) ~= -1 then setPlayerStorageValue(pid, key + i, -1) end end end end function getLotteryWinners(n, count) local baseStorage, winners, cidNumbers = 9573, {}, {} for _, cid in pairs(getPlayersOnline()) do if getPlayerStorageValue(cid, baseStorage) ~= -1 then cidNumbers[cid] = {} for i = 0, count - 1 do table.insert(cidNumbers[cid], getPlayerStorageValue(cid, baseStorage + i)) end if compareTables(cidNumbers[cid], n) then table.insert(winners, cid) end end end return winners end Depois, em data/globalevents/scripts: local config = { 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], 0) 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 ", ")..getCreatureName(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 Tag: <globalevent name="Loteria" interval="10800" event="script" value="nome_do_arquivo.lua"/> Já em data/talkactions/scripts: local config = { limit = {1, 200}, --Número mínimo e máximo da loteria. numbers = 3, --Quantos números o player deve escolher. minCash = 5000, --Quantia mínima para apostar. 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 cash,number1 number2 number3") elseif getPlayerMoney(cid) < config.minCash then doPlayerSendCancel(cid, "Você precisa de, no mínimo, "..config.minCash.." gold para apostar.") else param = param:explode(",") if #param ~= 2 then doPlayerSendCancel(cid, "!apostar cash,number1 number2 number3") else local cash, numbers = tonumber(param[1]), param[2]:explode(" ") if not cash then doPlayerSendCancel(cid, "Aposte uma quantia númerica.") elseif cash < config.minCash then doPlayerSendCancel(cid, "Esta quantia é muito pequena. Min. gold: "..config.minCash..".") elseif getPlayerMoney(cid) < cash then doPlayerSendCancel(cid, "Aposte uma quantia que você tenha.") else if not numbers or #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, cash) doPlayerSendTextMessage(cid, 27, "Você apostou "..cash.." gold e 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], cash) end end end end return true end Tag: <talkaction words="!apostar" event="script" value="nome_do_arquivo.lua"/> Comando: !apostar cash,number1 number2 number3 Ex.: !apostar 450000,78 43 185 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
Postado Maio 12, 2015 10 anos Autor Em data/lib/050-function.lua, coloque as seguintes funções: function compareTables(c, d) for i = 1, #c do if not isInArray(d, c[i]) then return false end end return true end function addGlobalStorageValue(key, addValue) local result = db.getResult("SELECT value FROM global_storage WHERE key = "..key) setGlobalStorageValue(key, getGlobalStorageValue(key) + addValue) if result:getID() ~= -1 then db.executeQuery("UPDATE global_storage SET value = value + addValue WHERE key = "..key) result:free() else db.executeQuery("INSERT INTO global_storage VALUES ("..key..", 0, "..addValue..")") end end function resetStorage(key) local result = db.getResult("SELECT id FROM players WHERE online < 1") if result:getID() ~= -1 then repeat db.executeQuery("UPDATE player_storage SET value = -1 WHERE key = "..key.." AND player_id = "..result:getDataInt("id")) until not result:next() result:free() end for _, pid in pairs(getPlayersOnline()) do setPlayerStorageValue(pid, key, -1) end end function getLotteryWinners(n) local winners = {} for _, cid in pairs(getPlayersOnline()) do if type(getPlayerStorageValue(cid, config.storages[3])) == "string" then local playerChose = getPlayerStorageValue(cid, config.storages[3]):explode("/") if compareTables(playerChose, n) then table.insert(winners, cid) end end end return winners end Depois, em data/globalevents/scripts: local config = { 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", "A loteria está fechada!\nPrêmio (individual): %d. Vencedor%s:%s.", "Sem vencedores na loteria!\nDinheiro acumulado [total]: %d.", }, 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], 0) end for i = 1, config.startTime do addEvent(function() if i ~= config.startTime then broadcastMessage(config.messages[1]:format(config.startTime - 1), 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), "" 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(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Por vencer a loteria, você recebeu: "..prize.." gold.") end end end resetStorage(config.storages[3]) end end, i * 60 * 1000) end return true end Tag: <globalevent name="Loteria" interval="10800" event="script" value="nome_do_arquivo.lua"/> Já em data/talkactions/scripts: local config = { limit = {1, 200}, --Número mínimo e máximo da loteria. numbers = 3, --Quantos números o player deve escolher. minCash = 5000, --Quantia mínima para apostar. storages = {9571, 9572, 9573}, } function onSay(cid, words, param) if getGlobalStorageValue(config.storages[1]) < 1 then doPlayerSendCancel(cid, "A loteria está fechada.") elseif type(getPlayerStorageValue(cid, config.storages[3])) ~= "string" then doPlayerSendCancel(cid, "Você já fez sua aposta.") elseif param == "" then doPlayerSendCancel(cid, "!apostar cash,number1 number2 number3") elseif getPlayerMoney(cid) < config.minCash then doPlayerSendCancel(cid, "Você precisa de, no mínimo, "..config.minCash.." gold para apostar.") else param = param:explode(",") local cash, numbers = tonumber(param[1]), param[2]:explode(" ") if not cash then doPlayerSendCancel(cid, "Aposte uma quantia númerica.") elseif getPlayerMoney(cid) < cash then doPlayerSendCancel(cid, "Aposte uma quantia que você tenha.") else if not numbers or #numbers < config.numbers or #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, cash) doPlayerSendTextMessage(cid, 27, "Você apostou "..cash.." gold e escolheu os números: "..str..".") setPlayerStorageValue(cid, config.storages[3], table.concat(numbers, "/")) addGlobalStorageValue(config.storages[2], cash) end end end return true end Tag: <talkaction words="!apostar" event="script" value="nome_do_arquivo.lua"/> Comando: !apostar cash,number1 number2 number3 Ex.: !apostar 450000,78 43 185 Deu esse erro. [11/05/2015 23:51:24] [Error - GlobalEvent Interface] [11/05/2015 23:51:24] data/globalevents/scripts/sorteio.lua [11/05/2015 23:51:24] Description: [11/05/2015 23:51:24] data/globalevents/scripts/sorteio.lua:5: table index is nil [11/05/2015 23:51:24] [Warning - Event::loadScript] Cannot load script (data/globalevents/scripts/sorteio.lua) Foi algo que fiz de errado? Ajudei? da um Rep+, não custa nada. Servidor de PokeTibia ja online. Pagina: https://www.facebook.com/PokemonxStore?ref=bookmarks Grupo: https://www.facebook.com/groups/257989224406246/ Site: http://pokexstore.wix.com/pokexstore
Postado Maio 12, 2015 10 anos Coloquei aqui no meu Serv e não deu nenhum erro!!! zipter98, seria possível a loteria começar com 10kk? Pois assim iria incentivar os outros a apostar. Me tira um duvida tb, tem 3 storages certo? storages = {9571, 9572, 9573} essas storages é para cada numero escolhido? Ou so conhecidencia? Pois quero deixar 4 numero e fiquei com essa duvida !? Teria como mudar essa Talkactions para cobra por cada jogo? Por exemplo: o cara falava !apostar 1 2 3 4 aí teria o preço fixo(configuravel) de cada aposta. E queria adicionar uma mensagem dizendo em verde que a loteria foi fechada e abrirá em tal horas, como eu faço ? Dei um rep+ pelo belo script, parabéns! @edit Ao finalizar sem ninguem jogar e não ter vencedor, a distro menciona este erro: Uso versão 8.6 distro 0.4 Editado Maio 12, 2015 10 anos por brendoonh (veja o histórico de edições)
Postado Maio 12, 2015 10 anos Autor Funcionou Vlw Mas deu um erro quando tava executando [12/05/2015 00:38:43] [Error - GlobalEvent Interface] [12/05/2015 00:38:43] In a timer event called from: [12/05/2015 00:38:44] data/globalevents/scripts/loteria.lua:onThink [12/05/2015 00:38:44] Description: [12/05/2015 00:38:44] data/lib/050-function.lua:708: attempt to index global 'config' (a nil value) [12/05/2015 00:38:44] stack traceback: [12/05/2015 00:38:44] data/lib/050-function.lua:708: in function 'getLotteryWinners' [12/05/2015 00:38:45] data/globalevents/scripts/loteria.lua:34: in function <data/globalevents/scripts/loteria.lua:19> E nao esta mandando mensagem se o cara nao tiver a grana. So fala voce ja fez sua aposta, e do ms geito quando vc tem a grana so fala isso. Mas nao some dinheiro nem nada. Editado Maio 12, 2015 10 anos por CarlosHenrique7457 (veja o histórico de edições) Ajudei? da um Rep+, não custa nada. Servidor de PokeTibia ja online. Pagina: https://www.facebook.com/PokemonxStore?ref=bookmarks Grupo: https://www.facebook.com/groups/257989224406246/ Site: http://pokexstore.wix.com/pokexstore
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.