Killua Automatic Raids System

Killua
Por Killua
em Globalevents e Spells

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

Killua Raids System

 

É um sistema normal de raids, compatível com quase todas versões do TFS (testado no 0.3.6 e 0.4), que acontecem automaticamente no local desejado, com dia e hora marcada.

 

Instalando:

 

Crie amoebaRaids.lua em data/globalevents/scripts e coloque isto:

 

 

 


-- Killua Automatic Raids System
-- Created by Killua, antigo amoeba13

local raids = {
    {name = "Monstros de fogo", monsters = {"Demon", "Dragon Lord", "Fire Devil"}, boss = "Orshabaal", fromPoss = {x=150, y=37, z=7}, toPoss = {x=157, y=42, z=7}, dates = {"Thursday-15:00", "Saturday-22:12"}, maxMonsters = 15, timeBoss = 60},
    {name = "Dragons", monsters = {"Dragon", "Dragon Lord", "Dragon Hatchling"}, boss = "Demodras", fromPoss = {x=1, y=1, z=1}, toPoss = {x=1, y=1, z=1}, dates = {"Monday-12:01", "Sunday-20:10"}, maxMonsters = 20, timeBoss = 120}
}

function isWalkable(pos)-- by Nord / editado por Omega
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0
		then return false
	elseif getTopCreature(pos).uid > 0 then
		return false
	elseif isCreature(getTopCreature(pos).uid) then
		return false
    elseif getTileInfo(pos).protection then
		return false
	elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
		return false
	end
    return true
end
 
function onThink(interval, lastExecution, thinkInterval)
    for _, myRaids in pairs(raids) do
        if table.find(myRaids.dates, os.date("%A-%H:%M")) then
            local pos = {x = math.random(myRaids.fromPoss.x, myRaids.toPoss.x), y = math.random(myRaids.fromPoss.y, myRaids.toPoss.y), z = math.random(myRaids.fromPoss.z, myRaids.toPoss.z)}
            local a = 0
            local b = 60000
            addEvent(doBroadcastMessage, 60000, "A invasao de " .. myRaids.name .. " teve inicio!")
            addEvent(doBroadcastMessage, myRaids.maxMonsters * 500 + myRaids.timeBoss * 1000, "O boss " .. myRaids.boss .. " chegou na invasao!")
            while not(a == myRaids.maxMonsters) do
            local bonsters = math.random(1, #myRaids.monsters)
            local pos = {x = math.random(myRaids.fromPoss.x, myRaids.toPoss.x), y = math.random(myRaids.fromPoss.y, myRaids.toPoss.y), z = math.random(myRaids.fromPoss.z, myRaids.toPoss.z)}
            addEvent(function()
                if isWalkable(pos) then
                    doCreateMonster(myRaids.monsters[bonsters], pos)
                end
            end, b)
                a = a + 1
                b = b + 500
            end
             addEvent(function()
                if isWalkable(pos) then
                doCreateMonster(myRaids.boss, pos)
            end
        end, myRaids.maxMonsters * 500 + myRaids.timeBoss * 1000)
        end
    end
    return true
end

 

No globalevents.xml coloque essa tag:

​<globalevent name="AmoebaRaids" interval="60" event="script" value="amoebaRaids.lua"/>

Configurar:

 

A configuração é toda feita nessa tabela:

local raids = {
    {name = "Monstros de fogo", monsters = {"Demon", "Dragon Lord", "Fire Devil"}, boss = "Orshabaal", fromPoss = {x=150, y=37, z=7}, toPoss = {x=157, y=42, z=7}, dates = {"Thursday-15:00", "Saturday-22:12"}, maxMonsters = 15},
    {name = "Dragons", monsters = {"Dragon", "Dragon Lord", "Dragon Hatchling"}, boss = "Demodras", fromPoss = {x=1, y=1, z=1}, toPoss = {x=1, y=1, z=1}, dates = {"Monday-12:01", "Sunday-20:10"}, maxMonsters = 20}
}

name é o nome da invasão, que vai aparecer no broadcast.

monsters são os monstros que vão ser criados na invasão.

boss é o boss que nasce depois de x segundos após todos os monstros serem criados.

fromPoss é o canto superior esquerdo da área onde a invasão vai ocorrer.

toPoss é o canto inferior direito da área onde a invasão vai ocorrer.

dates são as datas (dias e horarios) em que as invasões ocorrerão. Sendo sempre escritas nesse formato "Dia(em inglês)-hora:minuto" . Exemplo "Monday-12:01". A primeira letra deve ser maiúscula.

maxMonsters é o número de monstros que vão ser criados na invasão, sem contar o boss.

timeBoss é o tempo (em segundos) que o boss leva pra nascer após todos os outros monstros terem sido criados.

 

Espero que gostem.

roriscrave

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 18/07/08Posts: 545Char no Tibia: Nem eu sei

lindo esse garoto

JustinnoTibianno

chega mais pra você ver (ê ê)
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/11/11Posts: 696Gênero: MasculinoChar no Tibia: treinador de lobo

Eu tenho uma dúvida:

 

"boss é o boss que nasce 2 minutos após todos os outros monstros serem criados."

 

Tem como alterar esse tempo, para 5 minutos, ou 10, 15, etc?

Att. João Pedro

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

Eu tenho uma dúvida:

 

"boss é o boss que nasce 2 minutos após todos os outros monstros serem criados."

 

Tem como alterar esse tempo, para 5 minutos, ou 10, 15, etc?

 

Vc só precisa mudar essas duas linhas:

end, myRaids.maxMonsters * 500 + 120000)

 addEvent(doBroadcastMessage, myRaids.maxMonsters * 500 + 120000, "O boss " .. myRaids.boss .. " chegou na invasao!")

120000 representa os 2 minutos, vc pode por o tempo que quiser aí. (1000 = 1 segundo). Mas já vou por uma variável no início pra escolher quanto tempo o boss vai levar pra nascer.

Lordfire

TFS Maintainer
avatar
Lenda
Lenda

INFOS

Grupo: LendaRegistrado: 04/10/06Posts: 2605Gênero: MasculinoChar no Tibia: Knight Orion

Meu deus, que script gigante e mal otimizado. Tem umas variáveis que eu não descobri de onde surgiram. Também você usou um while quando podia usar um for.

 

local raids = {
    {name = "Monstros de fogo", monsters = {"Demon", "Dragon Lord", "Fire Devil"}, boss = "Orshabaal", fromPos = {x=150, y=37, z=7}, toPos = {x=157, y=42, z=7}, dates = {"Thursday-15:00", "Saturday-22:12"}, maxMonsters = 15, timeBoss = 60},
    {name = "Dragons", monsters = {"Dragon", "Dragon Lord", "Dragon Hatchling"}, boss = "Demodras", fromPos = {x=1, y=1, z=1}, toPos = {x=1, y=1, z=1}, dates = {"Monday-12:01", "Sunday-20:10"}, maxMonsters = 20, timeBoss = 120},
}

-- http://stackoverflow.com/questions/18093728/is-there-any-performance-value-in-creating-local-copies-of-lua-functions
local r = math.random

function doCreateMonsterIfWalkable(monster, pos)
    (getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 or getTopCreature(pos).uid > 0 or isCreature(getTopCreature(pos).uid) or getTileInfo(pos).protection or hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7)) and doCreateMonster(raid.monsters[monster], pos)
end
 
function onThink(interval, lastExecution, thinkInterval)
    for _, raid in pairs(raids) do
        if table.find(raid.dates, os.date("%A-%H:%M")) then
            local spawn_time = 60000, spawn_boss = raid.maxMonsters + (raid.timeBoss << 1)) * 500
            addEvent(doBroadcastMessage, 60000, "A invasao de " .. raid.name .. " teve inicio!")
            addEvent(doBroadcastMessage, spawn_boss, "O boss " .. raid.boss .. " chegou na invasao!")
            for i = 1, raid.maxMonsters do
                addEvent(doCreateMonsterIfWalkable(raid.monsters[r(1, #raid.monsters)], {x = r(raid.fromPos.x, raid.toPos.x), y = r(raid.fromPos.y, raid.toPos.y), z = r(raid.fromPos.z, raid.toPos.z)}), spawn_time)
                spawn_time = spawn_time + 500
            end
            addEvent(doCreateMonsterIfWalkable(raid.boss, {x = r(raid.fromPos.x, raid.toPos.x), y = r(raid.fromPos.y, raid.toPos.y), z = r(raid.fromPos.z, raid.toPos.z)}, spawn_boss)
        end
    end
    return true
end
Mudei umas coisas de cabeça, se não der me avisa.

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

Cara o tamanho ficou quase o mesmo, vc só colocou as linhas da função do Omega em uma só gigantesca (eu sei que vc já incluiu o doCreateMonster nela)... E qual o problema de usar while no lugar de for se funciona do mesmo jeito? Eu acho que o meu é mais organizado e fácil de entender...

 

As variáveis que eu fiz repetidas são pq eu precisava usar o math.random dentro e fora do while, quando eu usava só fora, o script fazia o sorteio uma vez só...

Lordfire

TFS Maintainer
avatar
Lenda
Lenda

INFOS

Grupo: LendaRegistrado: 04/10/06Posts: 2605Gênero: MasculinoChar no Tibia: Knight Orion

Usar while no lugar de for não é problema, mas o for foi criado justamente pra isso (iterar de x até y), aí faz a mesma coisa sem você precisar se preocupar com o iterador. Do mais foi só mania minha de DRY.

 

Uma sugestão, faça seu script receber várias waves com delays diferentes, tipo assim:

{
  name = "Dragons",
  waves = {
    {
      monsters = {"Dragon Hatchling", "Dragon Lord Hatchling"},
      maxMonsters = 15
    },
    {
      delay = 120,
      monsters = {"Dragon Hatchling", "Dragon Lord Hatchling", "Dragon"},
      maxMonsters = 18
    },
    {
      delay = 300,
      monsters = {"Dragon Hatchling", "Dragon Lord Hatchling", "Dragon", "Dragon Lord"},
      maxMonsters = 21
    },
    {
      delay = 600,
      monsters = {"Dragon Hatchling", "Dragon Lord Hatchling"},
      maxMonsters = 24
    },
  },
  boss = "Orshabaal",
  fromPos = {x=150, y=37, z=7},
  toPos = {x=157, y=42, z=7},
  dates = {"Thursday-15:00", "Saturday-22:12"},
  bossDelay = 900
}

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

bolota_xd@hotmail.com

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 09/01/14Posts: 8

e se ninguem matar o boss? ele não some depois de tantos tempo?? eu precisava de um script que fizesse isso, me ajuda ai plix '-'

1490697_4.png

leleeuh

Streamer
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/01/11Posts: 98

Achei simples e funcional, não é complexo.

As pessoas que não entendem não sofreriam com mistérios nele, parabéns, rs.

showoff

de volta ao xtibia: 11/02/14

here we go again: 09/02/16

 

oOFdUMU.png

 

facebook fanpage

facebook personal page

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

e se ninguem matar o boss? ele não some depois de tantos tempo?? eu precisava de um script que fizesse isso, me ajuda ai plix '-'

 

Se ngm matar ele continua lá... Mas posso fazer ele remover sim. Se vc puder esperar até segunda-feira fica tranquilo, pq só vou ter tempo a partir de lá...

 

 

Achei simples e funcional, não é complexo.

As pessoas que não entendem não sofreriam com mistérios nele, parabéns, rs.

 

Obrigado :)

duasrodas

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/01/12Posts: 90

Script funcionou,mas cria infinitos monstros e envia monte de msg!!

00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!

Mesmo colocando 8 monstros aparece um monte!

 

Servidor 8.6(DEV 0.4 3884)

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

Script funcionou,mas cria infinitos monstros e envia monte de msg!!

00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!
00:46 O boss Demodras chegou na invasao!

Mesmo colocando 8 monstros aparece um monte!

 

Servidor 8.6(DEV 0.4 3884)

 

Desculpe a demora para responder, eu não tinha visto. Seu servidor deve ser por milissegundos. Na tag do globalevents, mude o intervalo de 60 para 60000, abraços.