Ir para conteúdo

Featured Replies

Postado
  • 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 por CarlosHenrique7457 (veja o histórico de edições)

Ajudei? da um Rep+, não custa nada. ;D:P

 

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

  • Respostas 41
  • Visualizações 2.8k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • 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    

  • Globalevent: local config = {     cash = xxx,                                    --Valor inicial da loteria.     limit = {1, 200},                              --Número mínimo e máximo da loteria.  

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

Postado
  • 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 por zipter98 (veja o histórico de edições)

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

Postado
  • 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. ;D:P

 

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

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:
212trwm.png

Uso versão 8.6 distro 0.4

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

Postado
  • 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 por CarlosHenrique7457 (veja o histórico de edições)

Ajudei? da um Rep+, não custa nada. ;D:P

 

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.

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

Informação Importante

Confirmação de Termo