Ir para conteúdo
  • Cadastre-se

Posts Recomendados

<img  data-cke-saved-src="/images/5/56/SemImagem.gif" src="/images/5/56/SemImagem.gif" /> Evento Loteria <img  data-cke-saved-src="/images/5/56/SemImagem.gif" src="/images/5/56/SemImagem.gif" />

 

 

Esse evento loteria é diferente dos demais que existem hoje nos servidores, é baseado em cima de um evento que ocorre no CraftLandia (um servidor de Minecraft).

Quando o evento for iniciado o jogador poderá pagar um valor (configurável) para tentar acertar o número premiado (que vai de 1 até o número configurado). O evento tem um tempo de duração (configurável) e o primeiro jogador a acertar qual é o número premiado levará um premio em dinheiro (configurável) e o evento será encerrado.

 

Demonstrações:

 

Spoiler

initlottery.thumb.gif.d9632c0440ea2ca88f6b067535b02f92.gif

 

Spoiler

nowinner.thumb.gif.8d419e4a96b16f62ed5bbe9ba0cdb671.gif

 

Spoiler

win.thumb.gif.c17237340354a09778e416847ea0871f.gif

 

Comandos:

 

Spoiler

!lottery start - Inicia o evento a qualquer momento durante o jogo.

!lottery forcestop - Faz o evento loteria ativo ser cancelado a força. Recomendável usar apenas quando o servidor travar.

!lottery info - Exibe o valor do premio da loteria e a valor de cada tentativa.

!lottery X - Faz uma tentativa, onde X é o número desejado.

 

Configuração:

 

Spoiler

LOTTERY_REWARD_TYPE_ONLYMONEY    -- Prêmio somente em dinheiro
LOTTERY_REWARD_TYPE_ONLYITEM     -- Prêmio somente em item
LOTTERY_REWARD_TYPE_MONEYANDITEM -- Prêmio em dinheiro E item
LOTTERY_REWARD_TYPE_MONEYORITEM  -- Prêmio em dinheiro OU item

Lottery.config = {
    bet = 1,                                   -- Valor pago por cada aposta
    reward = LOTTERY_REWARD_TYPE_MONEYORITEM,  -- Tipo da recompensa para o ganhador
    range = 1000,                              -- Quantidade máxima de números
    duration = 2                               -- Duração do evento em minutos
}

Lottery.rewards = {
    money = 5000,    -- Dinheiro a ser entregue ao jogador
    items = {        -- Itens a serem entregues ao jogados (aleatoriamente)
        {id = 2147, count = 59}, -- Count só ira funcionar para itens não acumuláveis
        {id = 10521, count = 3},
        {id = 9692, count = 4}
    }
}

 

 

Caso queira implementar este evento em seu servidor, crie os arquivos abaixo.

 

data/lib/lottery/event.lua (as configurações ficam neste arquivo)

 

Spoiler

LOTTERY_MESSAGE_START = 1
LOTTERY_MESSAGE_FINISH = 2
LOTTERY_MESSAGE_TRY_AGAIN = 3
LOTTERY_MESSAGE_WINNER_MONEY = 4
LOTTERY_MESSAGE_WINNER_ITEM = 5
LOTTERY_MESSAGE_WINNER_MONEY_AND_ITEM = 6
LOTTERY_MESSAGE_CONGRATULATION_MONEY = 7
LOTTERY_MESSAGE_CONGRATULATION_ITEM = 8
LOTTERY_MESSAGE_CONGRATULATION_MONEY_AND_ITEM = 9
LOTTERY_MESSAGE_NOTICE = 10
LOTTERY_MESSAGE_INSUFFICIENT_MONEY = 11
LOTTERY_MESSAGE_INFO = 12
LOTTERY_MESSAGE_ERROR_ACTIVE = 13
LOTTERY_MESSAGE_ERROR_NO_ACTIVE = 14
LOTTERY_MESSAGE_NUMBER_TOO_BIG = 15
LOTTERY_MESSAGE_NUMBER_NOT_FOUND = 16
LOTTERY_REWARD_TYPE_ONLYMONEY = 17
LOTTERY_REWARD_TYPE_ONLYITEM = 18
LOTTERY_REWARD_TYPE_MONEYANDITEM = 19
LOTTERY_REWARD_TYPE_MONEYORITEM = 20

Lottery = {}
Lottery.__index = Lottery

Lottery.config = {
    bet = 1,                                   -- Valor pago por cada aposta
    reward = LOTTERY_REWARD_TYPE_MONEYORITEM,  -- Tipo da recompensa para o ganhador
    range = 1000,                              -- Quantidade máxima de números
    duration = 2                               -- Duração do evento em minutos
}

Lottery.rewards = {
    money = 5000,    -- Dinheiro a ser entregue ao jogador
    items = {        -- Items a serem entregues ao jogados (aleatoriamente)
        {id = 2147, count = 59},
        {id = 10521, count = 3},
        {id = 9692, count = 4}
    }
}

Lottery.storages = {
    started = 172836
}

Lottery.messages = {
    prefix = "[LOTTERY]",
    start  = "The event has started, type '!lottery X', where X is a number from 1 to %d. Good luck!",
    finish = "The event ended without winners.",
    try_again = "Not this time, try again!",
    winner_money = "Congratulations, %s won %s gold coins!",
    winner_item = "Congratulations, %s won %d %s!",
    winner_money_and_item = "Congratulations, %s won %d gold coins and %s %s!",
    congratulation_money = "Congratulations, you won %d gold coins!",
    congratulation_item = "Congratulations, you won %s %s!",
    congratulation_money_and_item = "Congratulations, you won %d gold coins and %s %s!",
    notice = "The event ends in %d minute(s).",
    insufficient_money = "You do not have enough money.",
    info = "Info:\nBet: %s gold coins\nRewards: %s",
    error_active = "The Lottery is active.",
    error_no_active = "The Lottery is not active.",
    error_number_too_big = "Sorry, you can bet from 1 to %d.",
    error_number_not_found = "Sorry, you need to enter a number between 1 and %d."
}

function Lottery:start()
    print("> [LOTTERY] Event started.")
    Lottery:turnOn()
    Lottery:reset()
    Lottery:setWinningNumber()
    print("> [LOTTERY] Number: " .. Lottery:getWinningNumber())
    local message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_START), Lottery:getRange())
    Lottery:broadcast(message)
    Lottery:notice(Lottery.config.duration - 1, 1)

    addEvent(function()
        if Lottery:isStarted() then
            Lottery:finish()
        end
    end, Lottery:getDurationInMS())
end

function Lottery:finish()
    print("> [LOTTERY] Event finalized.")
    Lottery:turnOff()
    local message

    if Lottery:getWinner() then
        print("> [LOTTERY] Winner: " .. Lottery:getWinner())

        if Lottery:getRewardType() == LOTTERY_REWARD_TYPE_ONLYMONEY then
            message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_WINNER_MONEY), Lottery:getWinner(), Lottery:getReward())
        elseif Lottery:getRewardType() == LOTTERY_REWARD_TYPE_ONLYITEM then
            message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_WINNER_ITEM), Lottery:getWinner(), Lottery:getReward():getCount(), Lottery:getReward():getName())
        elseif Lottery:getRewardType() == LOTTERY_REWARD_TYPE_MONEYANDITEM then
            message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_WINNER_MONEY_AND_ITEM), Lottery:getWinner(), Lottery:getReward()[1], Lottery:getReward()[2]:getCount(), Lottery:getReward()[2]:getName())
        elseif Lottery:getRewardType() == LOTTERY_REWARD_TYPE_MONEYORITEM then
            if tonumber(reward) then
                message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_WINNER_MONEY), Lottery:getWinner(), Lottery:getReward())
            else
                message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_WINNER_ITEM), Lottery:getWinner(), Lottery:getReward():getCount(), Lottery:getReward():getName())
            end
        end
    else
        print("> [LOTTERY] Winner: Nobody")
        message = Lottery:getMsg(LOTTERY_MESSAGE_FINISH)
    end

    Lottery:broadcast(message)
end

function Lottery:isStarted()
    if Game.getStorageValue(Lottery.storages.started) ~= -1 then
        return true
    end
    return false
end

function Lottery:getRange()
    return Lottery.config.range
end

function Lottery:getDurationInMS()
    return Lottery.config.duration * 60 * 1000
end

function Lottery:getBetPrice()
    return Lottery.config.bet
end

function Lottery:broadcast(message)
    for _, targetPlayer in ipairs(Game.getPlayers()) do
        targetPlayer:sendTextMessage(MESSAGE_STATUS_WARNING, message)
    end
end

function Lottery:bet(player, number)
    if tonumber(number) == nil then
        local message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_NUMBER_NOT_FOUND), Lottery:getRange())
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, message)
        return false
    end

    if tonumber(number) > Lottery:getRange() then
        local message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_NUMBER_TOO_BIG), Lottery:getRange())
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, message)
        return false
    end

    if Lottery:getBetPrice() > 0 then
        if not player:removeMoney(Lottery:getBetPrice()) then
            local message = Lottery:getMsg(LOTTERY_MESSAGE_INSUFFICIENT_MONEY)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, message)
            return false
        end
    end

    if tonumber(number) == Lottery:getWinningNumber() then
        local reward = Lottery:getReward()
        local message

        if Lottery:getRewardType() == LOTTERY_REWARD_TYPE_ONLYMONEY then
            message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_CONGRATULATION_MONEY), reward)
        elseif Lottery:getRewardType() == LOTTERY_REWARD_TYPE_ONLYITEM then
            message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_CONGRATULATION_ITEM), reward:getCount(), reward:getName())
        elseif Lottery:getRewardType() == LOTTERY_REWARD_TYPE_MONEYANDITEM then
            message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_CONGRATULATION_MONEY_AND_ITEM), reward[1], reward[2]:getCount(), reward[2]:getName())
        elseif Lottery:getRewardType() == LOTTERY_REWARD_TYPE_MONEYORITEM then
            if tonumber(reward) then
                message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_CONGRATULATION_MONEY), reward)
            else
                message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_CONGRATULATION_ITEM), reward:getCount(), reward:getName())
            end
        end
        
        Lottery:addReward(player, reward)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, message)
        Lottery:setWinner(player:getName())
        Lottery:finish()
    else
        local message = Lottery:getMsg(LOTTERY_MESSAGE_TRY_AGAIN)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, message)
    end
end

function Lottery:setWinner(name)
    Lottery.winner = name
end

function Lottery:addReward(player, reward)
    if tonumber(reward) then
        player:addMoney(reward)
    elseif reward[1] ~= nil and reward[2] ~= nil then
        player:addMoney(reward[1])
        player:addItemEx(reward[2])
    else
        player:addItemEx(reward)
    end
end

function Lottery:getRewardType()
    return Lottery.config.reward
end

function Lottery:getWinner()
    return Lottery.winner
end

function Lottery:getReward()
    if Lottery.reward then
        return Lottery.reward
    else
        Lottery:setReward()
        return Lottery.reward
    end
end

function Lottery:getRewardsName()
    local rewards = ""

    if Lottery.rewards.money ~= nil then
        rewards = rewards .. Lottery.rewards.money .. " gold coins"
    end

    for i = 1, #Lottery.rewards.items do
        if i ~= #Lottery.rewards.items then
            rewards = rewards .. ", " .. Lottery.rewards.items[i].count .. "x " .. ItemType(Lottery.rewards.items[i].id):getName()
        else
            rewards = rewards .. ", " .. Lottery.rewards.items[i].count .. "x " .. ItemType(Lottery.rewards.items[i].id):getName() .. "."
        end
    end

    return rewards
end

function Lottery:setReward()
    if Lottery:getRewardType() == LOTTERY_REWARD_TYPE_ONLYMONEY then
        reward = Lottery.rewards.money
    elseif Lottery:getRewardType() == LOTTERY_REWARD_TYPE_ONLYITEM then
        print(#Lottery.rewards.items)
        local rand = math.random(1, #Lottery.rewards.items)
        print(rand)
        reward = Game.createItem(Lottery.rewards.items[rand].id, Lottery.rewards.items[rand].count)
    elseif Lottery:getRewardType() == LOTTERY_REWARD_TYPE_MONEYANDITEM then
        local rand = math.random(1, #Lottery.rewards.items)
        reward = {Lottery.rewards.money, Game.createItem(Lottery.rewards.items[rand].id, Lottery.rewards.items[rand].count)}
    elseif Lottery:getRewardType() == LOTTERY_REWARD_TYPE_MONEYORITEM then
        local rand = math.random(1, 2)

        if rand == 1 then
            reward = Lottery.rewards.money
        else
            rand = math.random(1, #Lottery.rewards.items)
            reward = Game.createItem(Lottery.rewards.items[rand].id, Lottery.rewards.items[rand].count)
        end
    end

    Lottery.reward = reward
end

function Lottery:setWinningNumber()
    Lottery.number = math.random(1, Lottery:getRange())
end

function Lottery:getWinningNumber()
    return Lottery.number
end

function Lottery:reset()
    Lottery.reward = nil
    Lottery.winner = nil
    Lottery.number = nil
end

function Lottery:notice(minutes, i)
    if minutes == 0 then
        return false
    end

    addEvent(function()
        if Lottery:isStarted() then
            local message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_NOTICE), Lottery.config.duration - i)
            Lottery:broadcast(message)
            Lottery:notice(minutes - 1, i + 1)
        end
    end, i * 60 * 1000)
end

function Lottery:turnOn()
    Game.setStorageValue(Lottery.storages.started, 1)
end

function Lottery:turnOff()
    Game.setStorageValue(Lottery.storages.started, -1)
end

function Lottery:getMsg(TYPE)
    if TYPE == LOTTERY_MESSAGE_START then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.start
    elseif TYPE == LOTTERY_MESSAGE_FINISH then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.finish
    elseif TYPE == LOTTERY_MESSAGE_TRY_AGAIN then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.try_again
    elseif TYPE == LOTTERY_MESSAGE_WINNER_MONEY then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.winner_money
    elseif TYPE == LOTTERY_MESSAGE_WINNER_ITEM then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.winner_item
    elseif TYPE == LOTTERY_MESSAGE_WINNER_MONEY_AND_ITEM then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.winner_money_and_item
    elseif TYPE == LOTTERY_MESSAGE_CONGRATULATION_MONEY then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.congratulation_money
    elseif TYPE == LOTTERY_MESSAGE_CONGRATULATION_ITEM then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.congratulation_item
    elseif TYPE == LOTTERY_MESSAGE_CONGRATULATION_MONEY_AND_ITEM then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.congratulation_money_and_item
    elseif TYPE == LOTTERY_MESSAGE_NOTICE then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.notice
    elseif TYPE == LOTTERY_MESSAGE_INSUFFICIENT_MONEY then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.insufficient_money
    elseif TYPE == LOTTERY_MESSAGE_INFO then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.info
    elseif TYPE == LOTTERY_MESSAGE_ERROR_ACTIVE then
        return Lottery.messages.error_active
    elseif TYPE == LOTTERY_MESSAGE_ERROR_NO_ACTIVE then
        return Lottery.messages.error_no_active
    elseif TYPE == LOTTERY_MESSAGE_NUMBER_TOO_BIG then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.error_number_too_big
    elseif TYPE == LOTTERY_MESSAGE_NUMBER_NOT_FOUND then
        return Lottery.messages.prefix .. ' ' .. Lottery.messages.error_number_not_found
    end
end

 

 

data/globalevents/scripts/lottery.lua

 

Spoiler

dofile('data/lib/lottery/event.lua')

function onTime(interval)
    Lottery:start()
    return true
end

 

 

data/globalevents/globalevents.xml

 

você pode por com um intervalo de tempo

 

Spoiler

<globalevent name="Lottery" interval="3600000" script="lottery.lua" />

 

 

ou horário fixo

 

Spoiler

<globalevent name="Lottery" time="19:00:00" script="lottery.lua" />

 

 

data/talkactions/scripts/lottery.lua

 

Spoiler

dofile('data/lib/lottery/event.lua')

function onSay(player, words, param)
    if param == 'start' then
        if not verifyPermissions(player) then 
            return true
        end
        
        if Lottery:isStarted() then
            player:sendCancelMessage(Lottery:getMsg(LOTTERY_MESSAGE_ERROR_ACTIVE))
        else
            Lottery:start()
        end
    elseif param == 'forcestop' then
        if not verifyPermissions(player) then 
            return true 
        end
        
        Lottery:turnOff()
    elseif param == 'info' then
        local message = string.format(Lottery:getMsg(LOTTERY_MESSAGE_INFO), Lottery:getBetPrice(), Lottery:getRewardsName())
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, message)
    else
        if Lottery:isStarted() then
            Lottery:bet(player, param)
        else
            player:sendCancelMessage(Lottery:getMsg(LOTTERY_MESSAGE_ERROR_NO_ACTIVE))
        end
    end
    
    return false
end

function verifyPermissions(player)
    if not player:getGroup():getAccess() then
        return false
    end
    
    if player:getAccountType() < ACCOUNT_TYPE_GOD then
        return false
    end
    
    return true
end

 

 

data/talkactions/talkactions.xml

 

Spoiler

<talkaction words="!lottery" separator=" " script="lottery.lua" hidden="yes" />

 

 

Tradução para PT-BR!

 

Caso deseje traduzir o evento, substitua o Lottery.messages inteiro em data/lib/lottery/event.lua por este

 

Spoiler

Lottery.messages = {
    prefix = "[LOTERIA]",
    start  = "O evento acaba de começar, digite '!lottery X', onde X é um número de 1 a %d. Boa sorte!",
    finish = "O evento acabou sem nenhum vencedor.",
    try_again = "Não foi dessa vez, tente novamente!",
    winner_money = "Parabéns, %s ganhou %s moedas de ouro!",
    winner_item = "Parabéns, %s ganhou %s %s!",
    winner_money_and_item = "Parabéns, %s ganhou %s moedas de ouro e %s %s!",
    congratulation_money = "Parabéns, você ganhou %s moedas de ouro!",
    congratulation_item = "Parabéns, você ganhou %s %s!",
    congratulation_money_and_item = "Parabéns, você ganhou %s moedas de ouro e %s %s!",
    notice = "O evento acaba em %d minuto(s).",
    insufficient_money = "Você não possui dinheiro suficiente.",
    info = "Info:\nAposta: %d moedas de ouro\nPrêmio: %s",
    error_active = "A Loteria está ativa.",
    error_no_active = "A Loteria não está ativa.",
    error_number_too_big = "Desculpe, você só pode apostar de 1 a %d.",
    error_number_not_found = "Desculpe, você precisa entrar com um número entre 1 e %d."
}

 

 

Qualquer problema, sugestão, bug ou dúvida utilize este tópico!!!

Editado por Leohige
Buf (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

Poderia deixara opção para outros items na loteria fora dinheiro tambem. Ou uma forma randomica entre items e dinheiro. Pois se for analisar nos dias de hoje dinheiro em OT é quase valido de nada.

Link para o post
Compartilhar em outros sites
3 horas atrás, Andreeyyy disse:

Poderia deixara opção para outros items na loteria fora dinheiro tambem. Ou uma forma randomica entre items e dinheiro. Pois se for analisar nos dias de hoje dinheiro em OT é quase valido de nada.

 

Adicionado a sua sugestão no evento.

Link para o post
Compartilhar em outros sites
Em 05/01/2018 em 21:34, Leohige disse:

 

Adicionado a sua sugestão no evento.

 

Agora ficou show e mais próximo da realidade dos servidores atuais! Parabéns pelo script! 

Link para o post
Compartilhar em outros sites
  • 2 months later...
  • 1 month later...

Não funcional! testei em TFS 1.3 OTX 3.10 

E aparece o seguinte erro no distro: 

Lua Script Error: [Test Interface] 
data/talkactions/scripts/lottery.lua
data/lib/lottery/event.lua:35: '}' expected near 'count'
stack traceback:
	[C]: in ?
	[C]: in function 'dofile'
	data/talkactions/scripts/lottery.lua:1: in main chunk
[Warning - Event::checkScript] Can not load script: scripts/lottery.lua
cannot open data/talkactions/scripts/warPrivate_talkactions.lua: No such file or directory

Lua Script Error: [Test Interface] 
data/globalevents/scripts/lottery.lua
data/lib/lottery/event.lua:35: '}' expected near 'count'
stack traceback:
	[C]: in ?
	[C]: in function 'dofile'
	data/globalevents/scripts/lottery.lua:1: in main chunk
[Warning - Event::checkScript] Can not load script: scripts/lottery.lua

Alguém sabe como arrumar isso? queria mt esse sistema :/

Link para o post
Compartilhar em outros sites
  • 1 year later...

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.


  • Conteúdo Similar

    • Por luanluciano93
      Bom, como o nome ja diz, é uma loteria, no(s) horario(s) que for definir, é sorteado para algum player um determinado item dentre os items configurados no script, por fim aparece uma mensagem no servidor dizendo quem ganhou e o que recebeu ...

      Crie um arquivo em globalevents/scripts/ com o nome loteria.lua e dentro coloque o código: 
      -- <globalevent name="Loteria1" time="09:00:00" script="loteria.lua" /> local rewards = { {2494, 1}, {2472, 1}, {2160, 22}, {5809, 1}, } function onTime(interval) local players = Game.getPlayers() if #players > 0 and #rewards > 0 then local uid, n = math.random(1, #players), math.random(1, #rewards) local ganhador = players[uid] local reward, count = rewards[n][1], rewards[n][2] if ganhador and reward and count then ganhador:addItem(reward, count) Game.broadcastMessage('O player '.. ganhador:getName()..' recebeu '.. count .. ' '..ItemType(reward):getName()..' na loteria.', MESSAGE_STATUS_WARNING) end end return true end A tag do globalevents.xml esta no script como comentario, basta adiciona-la. Você pode tbem adicionar outras tags para outros horarios, mas sempre mudando o nome. Por exemplo: 
      <globalevent name="Loteria1" time="09:00:00" script="loteria.lua" /> <globalevent name="Loteria2" time="10:00:00" script="loteria.lua" /> E para editar os items, basta coloca o item_id e quantidade, como na sequencia: 
      local rewards = { {2494, 1}, {2472, 1}, {2160, 22}, {5809, 1}, } É isso pessoal, espero ter ajudado.
    • Por Xagah
      Olá, bom dia a todos.
       
      Como tenho visto muitíssimos pedidos neste sentido, lhes apresento o LMS - Last Man Standing com BroadCast




       
    • Por Killua
      Últimas atualizações:
       
      16/12/2013:
       
       


       
       
      Introdução:
       
       
      Este é o meu já conhecido evento Blood Castle Automático que estava em outro fórum que acabou. Estou trazendo ele aqui para que ele não "morra".
       
       
       
       
      Informações:  
       
      #Dica: Acho que fica legal o premio do evento ser um item que da double exp por um tempo.
       
       
      Atualização [12/04/2014]
       
       
      Resolvi refazer o código, para facilitar a instalação e melhorar o funcionamento do evento.
       
       
      O que mudou?
       
       
       
       
       
      Instalando o evento:
       
      Lib:
       


       
       
      Movements: 
       


       
       
       
      Creaturescripts: 
       


       
      Monsters: 
       

          O evento pode acontecer de duas maneiras: automática ou manualmente. Vou por as duas possibilidades:     Automática:   

       
       
      Manual:
       


       
       
      Como Configurar:
       
       
      * Se você for colocar, dentro do evento, um teleporte para as pessoas que não quiserem mais participar, coloque o Action ID 9371 nele.
       
       
      * Lembre-se de por NO-LOGOUT tool e NO-PVP tool em toda área do evento!!
       
       
      Todas as demais explicações estão na lib, mas vou demonstrar como configurar os mais "confusos".
       
       
      No modo automático, você configura de quanto em quanto o tempo o evento vai acontecer. Nessa tag:
      <globalevent name="Blood Castle" interval="3600" event="script" value="BloodGlobalEvent.lua"/> Aqui está 3600 segundos, ou seja, 1 hora.
      * Se seu servidor for em milisegundos, multiplique o número por 1000, assim: 3600 segundos * 1000 = 3600000 milisegundos = 1 hora.
       
      No modo manual, para iniciar o evento, basta usar a talkaction /blood-start com seu god.
       
       
      Em posGuarda, vc deve colocar a posicao do Guarda do Portao, como mostrado abaixo:  
        As posPedras são onde ficam as pedras que tampam a passagem enquanto o evento não esta aberto, conforme na imagem abaixo:  
        Em estátua, vc deve colocar a posição em que o arcanjo vai ser criado, conforme na imagem abaixo:  

        Nas posParedes, vc deve por a posição das paredes que bloqueiam a entrada do castelo e que são removidas quando o guarda morre, conforme abaixo:  
        Em fromPos e toPos, você vai por o canto superior esquerdo e o canto inferior direito do mapa do seu evento, respectivamente. Dessa maneira:  
        As outras configurações eu acredito que já estejam bem explicadas.     Espero que gostem dessa nova versão. Recomendo a todos que já usam o evento, reinstalar com essa nova versão.   Qualquer dúvida ou bug, postem que irei responder.
    • Por King Laker
      Olá, passei um tempo procurando este script até que um amigo do TK disponibilizou (credito no fim do post)
      Edit1: O evento funciona assim, o evento começa as 14:00:00 para inscrições realizando as inscrições você é levado para sala de espera (coloque no-logout e protection) onde você tera de esperar 5 minutos passado os 5 minutos todos na sala de espera serão teleportados para uma arena que você pode fazer facilmente e configurar conforme explicado na script --> apenas lembre de colocar o no-logout e pvp tool na arena.
      (As 13:59:00 vai aparecer um broadcast dizendo que o Npc PvP irá aparecer em 1 minutos que você terá então 5 minutos para se inscrever com o custo de 10k (configurável na script do actions) a área onde o npc nasce é configurável, o npc sumirá após 6 minutos (1 minuto depois do inicio da matança)-) 
      O ultimo vivo na arena terá de clicar na alavanca e será teleportado para o templo (coordenadas configuráveis) ganhando o devido premio do evento (configuravel na script do actions).
      Vamos lá:

      data/lib adicione um arquivo .lua e renomeie para Torneio.lua e coloque dentro
       
      vai em Globalevents adicione Torneio.lua e dentro dele coloque
       
      (se sua versão é em millisegundos então mude para)
       
      Adicione a tag em globalevents.xml
       
      se seu servidor for em millisegundos:
       
      vai em Actions adicione Torneio.lua e dentro:
      Atenção: Voce faz uma area do Torneio no Map editor e Coloca PVP-Zone e no-logout no Mapa editor e coloca uma Alavanca com a uniqueid "18279" e actionid "18279" antes verifique se não tem a action e unique id no seu servidor com o mesmo numero (18279) [ a alavanca serve para quando o ultimo player vivo no evento volte para o templo e receba os premios]
       
      Em Actions.xml adcione a tag 
       
      Agora o NPC TORNEIO em  data/NPC adicione um xml, renomeie para o nome torneio.xml (pode mudar mais tarde, se não souber oque esta fazendo não mexa)
       
      em NPC/SCRIPTS/torneio.lua
       
      LEIA:
       
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      aqui um script que achei no TK que você pode usar no seu evento, ele faz o npc aparecer 1 minuto depois do horario marcado na posição que você quiser, com um broadcast dizendo que ele esta chegando. (é bom para dizer que o evento esta começando)
      vá em globalevents.xml e adicione a tag
      Dica: Coloque 1 minuto antes do inicio do evento (configuravel no lib/torneio.lua) no meu caso seria as 12:00:00 hrs (meio dia)
       
      se o seu servidor não for millisegundos use
       
      va em globalevents/scripts e crie um arquivo .lua com o nome de npcpvp
       
      se o seu servidor não for em millisegundos use assim:
       

      Creditos:
      @J.L por disponibilizar os script do Evento PvP.
      @Stigal por disponibilizar o script do Npc que aparece sozinho na hr marcada.
      @King Laker por editar e mesclar os scripts.
    • Por Absolute
      Fala galera do TIBIAKING!
      Trago hoje um sistema fácil de adaptação, ou seja apenas um arquivo MOD!
       
       
       
       
      Sem mimimi vamos ao que interessa:
       
      Crie um arquivo com o nome de Loterry.xml na pasta data/mods do seu servidor e dentro do arquivo adicione:
      <mod name="Lottery System" version="1.5" author="Absolute" contact="[email protected]" enabled="yes"> <config name="lottery_config"><![CDATA[ config = { lottery_hour = "2 hour", -- Time to next lottery (only for broadcast message, real time you can set on globalevents.xml) rewards_id = {2160}, -- Rewards ID crystal_counts = 10, -- Used only if on rewards_id is crystal coin (ID: 2160). website = "no" -- Only if you have php scripts and table `lottery` in your database! } ]]></config> <globalevent name="lottery" interval="3600000" event="script"><![CDATA[ domodlib('lottery_config') function onThink(interval, lastExecution) if(getWorldCreatures(0) == 0)then return true end local list = {} for i, tid in ipairs(getPlayersOnline()) do list[i] = tid end local winner = list[math.random(1, #list)] local random_item = config.rewards_id[math.random(1, #config.rewards_id)] if(random_item == 2160) then doPlayerAddItem(winner, random_item, config.crystal_counts) doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. config.crystal_counts .. " " .. getItemNameById(random_item) .. "s! Congratulations! (Next Lottery in " .. config.lottery_hour .. ")") else doBroadcastMessage("[Loteria Automatica] Ganhador: " .. getCreatureName(winner) .. ", Reward: " .. getItemNameById(random_item) .. "! Parabens (Next Lottery in " .. config.lottery_hour .. ")") doPlayerAddItem(winner, random_item, 1) end if(config.website == "yes") then db.executeQuery("INSERT INTO `lottery` (`name`, `item`) VALUES ('".. getCreatureName(winner) .."', '".. getItemNameById(random_item) .."');") end return true end ]]></globalevent> </mod> No seu PHPMYADMIN, execute a seguinte query:
      CREATE TABLE `lottery` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `item` varchar(255) NOT NULL, `world_id` tinyint(2) unsigned NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Depois:
      INSERT INTO `lottery` (`id`, `name`, `item`, `world_id`) VALUES (NULL, 'Nobody', 'nothing', 0); Agora na pasta do seu site, htdocs ou www crie um arquivo com o nome de loteria.php e dentro adicione:
      <?PHP $main_content .= '<center><h1>Lottery</h1><h3>As loterias acontecem todo dia no servidor.</h3></center><br><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tr BGCOLOR="'.$config['site']['vdarkborder'].'"><td CLASS=white><center><b>Nome do ganhador</b></center></td><td CLASS=white width=184 colspan=2><center><b>Recompensa</b></center></td><td width=100 CLASS=white><center><b>World</b></center></td></tr>'; $lottery = $SQL->query('SELECT id, name, item, world_id FROM lottery WHERE world_id = 0 ORDER BY id DESC;'); foreach($lottery as $result) { $players++; if(is_int($players / 2)) $bgcolor = $config['site']['lightborder']; else $bgcolor = $config['site']['darkborder']; $main_content .= '<TR BGCOLOR='.$bgcolor.'><TD WIDTH=35%><center><a href="?subtopic=characters&name='.urlencode($result['name']).'">'.$result['name'].'</a></center></td><TD WIDTH=5%><img src=\'/images/'.urlencode($result['item']).'.gif\'></td><TD WIDTH=30%><b>'.$result['item'].'</b></td><TD WIDTH=30%><center>Norah World</center></td></tr> <center><a href="http://www.tibiaking.com/forum/user/116608-absolute/">Absolute</a> on tibiaking - Todos os direitos reservados</center> '; } $main_content .= '</table>'; ?> Em seu index.php adicione:
      case "lottery"; $topic = "Lottery System"; $subtopic = "lottery"; include("lottery.php"); break; Adicione onde preferir no menu do seu Gesior no layout.php
       
       
      Modelo base:

       

       
      Créditos:
      Absolute 
      vdK
      KleKSu

       
       
      Caso haja dúvidas não deixe de perguntar
       
       
      Até o próximo.
       
       
      Absolute.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo