KI
action

Monster Hunter Event

Por Killua, 08 de abr. de 2014 em Mods, funções e outros

tibia
script
otserv
5.0 (1)
18
9.3k
KilluaK
08 de abril de 2014 às 12:57

Monster Hunter Event

Como não tive tempo para trazer um script semana passada, criei um bem legal para essa semana. Para ver os outros scripts de terça, clique aqui.

Vídeo demonstrativo:

Explicação detalhada:

O evento possui duas versões: automática (globalevent) e manual (talkaction). Quando o evento inicia, é sorteado um monstro e um intervalo de tempo, por exemplo: Hydra e 15 minutos. Seguindo esse exemplo, os jogadores terão 15 minutos para matar hydras, no final dos 15 minutos, aquele que tiver matado mais hydras será o vencedor e receberá um prêmio. - É tudo configurável.

Instalação:

Crie Monster Hunter.lua em data/creaturescripts/scripts e coloque:


-- Monster Hunter Event feito por Killua, XTibia.com

function onKill(cid, target, lastHit)
    if isPlayer(cid) and isMonster(target) then
        if getCreatureMaster(target) ~= nil then
            return true
        end
        local name = getGlobalStorageValue(1919211)
        if string.lower(getCreatureName(target)) == string.lower(name) then
            doPlayerSetStorageValue(cid, 1814210, getPlayerStorageValue(cid, 1814210) + 1)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Monster Hunter Event] Voce ja matou "..getPlayerStorageValue(cid, 1814210).." "..name.."s! Continue matando para ser o vencedor!")
        end
    end
    return true
end

function onLogin(cid)
    if getGlobalStorageValue(1919211) == 0 then
        doPlayerSetStorageValue(cid, 1814210, 0)
    end
    registerCreatureEvent(cid, "Monster Hunter")
    return true
end

Em data/creaturescripts/creaturescripts.xml adicione essas TAGs:

 

<event type="kill" name="Monster Hunter" event="script" value="Monster Hunter.lua"/>
<event type="login" name="Monster Hunterl" event="script" value="Monster Hunter.lua"/>

A próxima parte irá depender de qual versão escolher

Versão manual (talkaction)

 

Em data/talkactions/scripts crie Monster Hunter.lua e coloque:


-- Monster Hunter Event feito por Killua, XTibia.com

local monsters = {"Demon", "Rat", "Hydra", "Dragon Lord", "Ancient Scarab"} -- Monstros que podem ser sorteados
local time_min, max = 10, 15 -- Em minutos
local premios, gold = {{2160, 10}, {2157, 5}}, 10000 -- {id do item, quantidade} que o jogador ganha e quantia de gold

function winMonsterEvent()
    local max_sto, winner = 0, 0
    local monster = getGlobalStorageValue(1919211)
    for _, pid in pairs(getPlayersOnline()) do
        local sto = getPlayerStorageValue(pid, 1814210)
        if sto > max_sto then
            max_sto = sto
            winner = pid
        end
    end
    if isPlayer(winner) then
        local artigo = getPlayerSex(winner) == 0 and "A jogadora" or "O jogador"
        doBroadcastMessage(artigo.." "..getCreatureName(winner).." matou "..getPlayerStorageValue(winner, 1814210).." "..monster.."s e venceu o evento, parabens!")
        for _, prize in pairs(premios) do
            doPlayerAddItem(winner, prize[1], prize[2])
        end
        doPlayerAddMoney(winner, gold)
    else
        doBroadcastMessage("[Monster Hunter Event] O evento terminou e nao houve nenhum vencedor.")
    end 
    setGlobalStorageValue(1919211, 0)
end   


function onSay(cid, words, param, channel)
    local random = math.random(1, #monsters)
    local time = math.random(time_min, max)
    for _, pid in pairs(getPlayersOnline()) do
        doPlayerSetStorageValue(pid, 1814210, 0)
    end
    setGlobalStorageValue(1919211, monsters[random])
    doBroadcastMessage("[Monster Hunter Event] O evento comecou e vai durar "..time.." minuto. O monstro sorteado foi "..monsters[random].."! Quem matar mais deles ate o fim sera o vencedor!")
    addEvent(winMonsterEvent, time*1000*60)    
    return true
end

Em data/talkactions/talkactions.xml coloque essa TAG:

<talkaction log="yes" access="5" words="/monsterhunter" event="script" value="Monster Hunter.lua"/>

 

Versão automática (globalevent)

 

Em data/globalevents/scripts crie Monster Hunter.lua e coloque:


-- Monster Hunter Event feito por Killua, XTibia.com

local monsters = {"Demon", "Rat", "Hydra", "Dragon Lord", "Ancient Scarab"} -- Monstros que podem ser sorteados
local time_min, max = 10, 15 -- Em minutos
local premios, gold = {{2160, 10}, {2157, 5}}, 10000 -- {id do item, quantidade} que o jogador ganha e quantia de gold

function winMonsterEvent()
    local max_sto, winner = 0, 0
    local monster = getGlobalStorageValue(1919211)
    for _, pid in pairs(getPlayersOnline()) do
        local sto = getPlayerStorageValue(pid, 1814210)
        if sto > max_sto then
            max_sto = sto
            winner = pid
        end
    end
    if isPlayer(winner) then
        local artigo = getPlayerSex(winner) == 0 and "A jogadora" or "O jogador"
        doBroadcastMessage(artigo.." "..getCreatureName(winner).." matou "..getPlayerStorageValue(winner, 1814210).." "..monster.."s e venceu o evento, parabens!")
        for _, prize in pairs(premios) do
            doPlayerAddItem(winner, prize[1], prize[2])
        end
        doPlayerAddMoney(winner, gold)
    else
        doBroadcastMessage("[Monster Hunter Event] O evento terminou e nao houve nenhum vencedor.")
    end 
    setGlobalStorageValue(1919211, 0)
end   


function onThink(interval, lastExecution, thinkInterval)
    local random = math.random(1, #monsters)
    local time = math.random(time_min, max)
    for _, pid in pairs(getPlayersOnline()) do
        doPlayerSetStorageValue(pid, 1814210, 0)
    end
    setGlobalStorageValue(1919211, monsters[random])
    doBroadcastMessage("[Monster Hunter Event] O evento comecou e vai durar "..time.." minuto. O monstro sorteado foi "..monsters[random].."! Quem matar mais deles ate o fim sera o vencedor!")
    addEvent(winMonsterEvent, time*1000*60)    
    return true
end

Em data/globalevents/globalevents.xml coloque essa TAG:


<globalevent name="Monster Hunter Event" interval="60000" event="script" value="Monster Hunter.lua"/>

 

Configuração:

local monsters = {"Demon", "Rat", "Hydra", "Dragon Lord", "Ancient Scarab"} -- Monstros que podem ser sorteados
local time_min, max = 10, 15 -- Em minutos
local premios, gold = {{2160, 10}, {2157, 5}}, 10000 -- {id do item, quantidade} que o jogador ganha e quantia de gold
  • Em monsters, coloque o nome dos monstros que poderão ser sorteados no evento.
  • Em time_min, max, coloque o tempo mínimo e o tempo máximo de duração do evento.
  • em premios, gold adicione os itens e a quantidade de gold que o vencedor receberá (seguindo o modelo apresentado).

 

TAG no Globalevents.xml (versão automática):

<globalevent name="Monster Hunter Event" interval="3600000" event="script" value="Monster Hunter.lua"/>
  • interval é o intervalo entre as execuções do evento, coloquei 3600000, que equivale a 1 hora (1000 = 1 segundo). Se seu servidor NÃO for em milissegundos, use 1 = 1 segundo, logo 1 hora = 3600.

 

TAG no Talkactions.xml (versão manual):

<talkaction log="yes" access="5" words="/monsterhunter" event="script" value="Monster Hunter.lua"/>
  • Em access coloque o núemero de acesso mínimo para poder usar o comando. 5 = somente gods podem usar.

 

Para iniciar o evento na maneira manual, basta usar /monsterhunter

Para iniciar o evento na maneira automática, basta aguardar o tempo configurado.

Editado Abril 12 por Killua

08 de abril de 2014 às 13:04

Ficou perfeito o evento *---*

bisosonhoB
08 de abril de 2014 às 13:32

nossa curti, com certeza irei usar, qualquer problema ou ideia eu posto de novo, vlw!

 

EDIT:

ta funcionando legal, só achei uma coisa ruim, se o player n tiver cap ou espaço o premio cai no chão, vc poderia colocar pra caso n conseguisse dar o item mandar direto pro dp

 

 

EDIT2:

 

uma ideia legal seria ter grupo de monstro, tipo minotaurs, ai o player poderia matar qualquer tipo de mino

 

 

EDIT3:

 

vc esqueceu de checar se o monstro é summon! xD

Editado Abril 8 por Diihbran

MateusooM
11 de abril de 2014 às 21:59

Como o Diihbran falou, você esqueceu de checar se o monstro é summon. E outra coisa que seria interessante acrescentar seria: Verificar se o evento já está acontecendo, pois o que eu acho mais certo é utilizar tanto o movo automatico(global events) quanto o modo manual(talk actions), o ADM pode querer fazer um evento manualmente em uma determinada hora e pode coincidir que o evento automatico começará, assim zerando o evento que foi começado manualmente.
O Script é muito bom, e achei a ideia surpreendente, o seu trabalho aqui tem sido muito bom, gostei muito de alguns scripts seus, parabéns!
Um grande abraço e continue assim! REP+

KilluaK
12 de abril de 2014 às 12:10

Na realidade eu nem pensei na possibilidade de o monstro ser summon... Eu fiz pensando em usar somente monstros mais fortes.

De qualquer forma, atualizei o tópico com a checagem, obrigado pela sugestão.

jeanflamengoJ
15 de abril de 2014 às 12:22

@kill teria como você fazer esse evento para poketibia? pq eu dei uma testada aki e não funfo não.

Editado Abril 15 por jeanflamengo

duasrodasD
15 de abril de 2014 às 20:45

Killua ficou lindo cara!!Valew por compartilhar com o Xtibia!!

Reputado!

2 semanas depois...
MasterzikkaM
26 de abril de 2014 às 10:43

Cara eu gostei d ++ do event mais estoou com uma duvida onde os monstros aparecem??

 

pode deixar ja entendi oq tem que fazer vc tem que procurar hunts com o monstro sorteado e quem mata mais ganha...

Editado Abril 26 por Masterzikka

KilluaK
26 de abril de 2014 às 12:15

Cara eu gostei d ++ do event mais estoou com uma duvida onde os monstros aparecem??

 

pode deixar ja entendi oq tem que fazer vc tem que procurar hunts com o monstro sorteado e quem mata mais ganha...

É isso ai kkkk

coyotestarkC
29 de abril de 2014 às 23:47

bem interessante este script show de bola testando

 

 

 

eu testei o evento so que ninguem ganha

 

[Monster Hunter Event] O evento terminou e nao houve nenhum vencedor.

Editado Abril 30 por CoyoteStark

KilluaK
30 de abril de 2014 às 12:00

bem interessante este script show de bola testando

 

 

 

eu testei o evento so que ninguem ganha

 

[Monster Hunter Event] O evento terminou e nao houve nenhum vencedor.

Se ninguém ganhou é pq ninguém matou um monstro sorteado...

coyotestarkC
30 de abril de 2014 às 18:20

claro que matou, para testar eu me certifiquei que tinha um jogador na cave que tinha este monstro, tinha, entao ativei o evento e nao deu nada.

KilluaK
30 de abril de 2014 às 19:26

claro que matou, para testar eu me certifiquei que tinha um jogador na cave que tinha este monstro, tinha, entao ativei o evento e nao deu nada.

 

Reisntale o evento seguindo com exatidão o que foi explicado no tópico... Não existem motivos para ele não funcionar, a não ser que você tenha instalado errado.

coyotestarkC
01 de maio de 2014 às 16:21

vejamos, colocar parada no creature/scripts depois registrar no creatures xml

depois talk,

belesa fiz tudo isso.

vou testar o automatico para ver se funciona

1 ano depois...
julhinhuuJ
28 de agosto de 2015 às 11:00

Aqui não conta os monstros que matei .. porque?