lindo esse garoto
- Fórum
- OTServ
- Recursos
- Scripting
- Globalevents e Spells
- Killua Automatic Raids System
Killua Automatic Raids System
Por Killua, 16 de jan. de 2014 em Globalevents e Spells
info
Grupo: Conde
Registrado: 18/07/08
Posts: 545
Reputação: +21
Char no Tibia: Nem eu sei

info
Grupo: Conde
Registrado: 30/11/11
Posts: 696
Reputação: +71
Gênero: Masculino
Char 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?
Editado Janeiro 16 por JustinnoTibianno
info
Grupo: Conde
Registrado: 29/04/09
Posts: 904
Reputação: +389
Char 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.
info
Grupo: Lenda
Registrado: 03/10/06
Posts: 2.6k
Reputação: +309
Gênero: Masculino
Char 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
endMudei umas coisas de cabeça, se não der me avisa.info
Grupo: Conde
Registrado: 29/04/09
Posts: 904
Reputação: +389
Char 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ó...
info
Grupo: Lenda
Registrado: 03/10/06
Posts: 2.6k
Reputação: +309
Gênero: Masculino
Char 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
}
info
Grupo: Conde
Registrado: 29/04/09
Posts: 904
Reputação: +389
Char no Tibia: Jabuti Selvagem

Huum gostei da idéia, vou fer se faço assim depois e atualizo no tópico
info
Grupo: Campones
Registrado: 09/01/14
Posts: 8
Reputação: 0

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 '-'
Achei simples e funcional, não é complexo.
As pessoas que não entendem não sofreriam com mistérios nele, parabéns, rs.
info
Grupo: Conde
Registrado: 29/04/09
Posts: 904
Reputação: +389
Char 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 ![]()
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)
info
Grupo: Conde
Registrado: 29/04/09
Posts: 904
Reputação: +389
Char 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.



info
Grupo: Conde
Registrado: 29/04/09
Posts: 904
Reputação: +389
Char 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 endNo globalevents.xml coloque essa tag:
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.
Editado Janeiro 24 por Killua