Jump to content
  • 0

Event Boss


marcelinhok

Question

Se alguem puder disponibiliza rum evento boss que funcione da seguinte maneira.
O boss nasce em 1 em 1 hora.
e ele tem tempo pra ficar la, no caso 20 min. Queria  que funcionasse assim, com tempo. para nao ficar nascendo 1 em 1 e ficar varios boses.

se alguem puder ajudar, agradeço desde de ja <3

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0
Em 19/03/2020 em 08:16, marcelinhok disse:

Se alguem puder disponibiliza rum evento boss que funcione da seguinte maneira.
O boss nasce em 1 em 1 hora.
e ele tem tempo pra ficar la, no caso 20 min. Queria  que funcionasse assim, com tempo. para nao ficar nascendo 1 em 1 e ficar varios boses.

se alguem puder ajudar, agradeço desde de ja <3

Olá, vá na pasta Data/Globalevents/Scripts e crie um arquivo lua chamado boss e adicione o código dentro:

----------------------------------- EVENTO SUMMON BOSS FEITO POR YAN18 -----------------------------------------
local minutos = 20 ---- COLOCA OS MINUTOS AQUI PARA OS BOSS SUMIREM CASO NINGUÉM OS MATE 

---- NOME DOS MONTROS ----
local monsters = {
[1] = "Magmar" ,
[2] = "Electabuzz",
[3] = "Scizor", 
}

---- POSIÇÃO DA ARENA ONDE APARECERÁ OS MONSTROS ----
local position_arena = {
from_pos = {x= 964, y = 993, z= 7}, -- VARIÁVEL QUE TEM A COORDENADA INICIAL DO LUGAR ONDE VAI APARECER OS MONSTROS
to_pos = {x= 978, y = 1009, z= 7}, -- VARIÁVEL QUE TEM A COORDENADA FINAL DO LUGAR ONDE VAI APARECER OS MONSTROS
} 

---------------------------------- CÓDIGO ----------------------------------------------
function onThink(cid, words, interval, lastExecution)

----- CRIA OS BOSS -----
	for i, j in ipairs(monsters) do
	----- VARIÁVEL RANDOM_POSITION GERA O SPAWN ALEATÓRIO DOS BOSS -----
		local random_position = {x= math.random(position_arena.from_pos.x, position_arena.to_pos.x), y= math.random(position_arena.from_pos.y, position_arena.to_pos.y), z= math.random(position_arena.from_pos.z, position_arena.to_pos.z)}
		doSummonCreature(j, random_position)
	end		

	doBroadcastMessage(#monsters == 1 and "A monster have been arrived in this world. Don't arrive near!" or "Some monsters have been arrived in this world. Don't arrive near by them!", 22)

---- VERIFICAÇÃO SE TEM MONSTROS NA ARENA PARA REMOVER ----

addEvent(function()
local position = {}
  
	for i = position_arena.from_pos.x, position_arena.to_pos.x do
		for j = position_arena.from_pos.y, position_arena.to_pos.y do
			position[#position+1] = {x= i, y = j, z= position_arena.from_pos.z, stackpos = 0}  
		end
	end

	for i= 1, #position do
		for j = 0, 255 do
			position[i].stackpos = j
			local monster = getTileThingByPos(position[i])
		

			if isMonster(monster.uid) then  
				for d, n in ipairs(monsters) do 	
					if getCreatureName(monster.uid) == n then 
						doRemoveCreature(monster.uid)
						
						if d == #monsters then
							doBroadcastMessage(#monsters == 1 and "The monster left this world. But it will return soon...." or "The monsters left this world. But they will return soon....", 22)
						end	
						
					end
				end	
			end	
		end	
		
		
	end	
end, minutos * 60 * 1000)
		
return true
end

Agora em Data/Globalevents abra o globalevents.xml e adicione a tag:

<globalevent name="boss" interval="3600" event="script" value="boss.lua"/> <!-- TEMPO EM SEGUNDOS, JÁ DEIXEI 1 HORA -->

Explicação: No código, eu criei 3 monstros genéricos para testar, só adicionar o nome deles igual está na tabela, e se quiser só 1 monstro, apague os outros dois e insira o desejado (lembrando de colocar a vírgula no final igual como está).

 

Na variável minutos já deixei 20 como pediu, mas caso queira trocar, só alterar o valor dela (lembrando que o valor dela tem que ser menor que o intervalo do evento no xml).

 

E na tabela position_arena, precisa colocar as coordenadas iniciais e finais da arena, já deixei pronto ali também e é só substituir.

 

Deixei para eles nascerem em posições aleatórias dentro das coordenadas da arena, caso queira spawns fixos, só ir na variável random_position e colocar x, y e z desejados.

 

Agora na parte do Xml como deixei o comentário na tag, já deixei 1 hora como pediu (3600 segundos), caso queira outro valor só alterar lá, lembrando que ali é em segundos.

 

Deixei tudo comentado e explicadinho, mas qualquer dúvida só falar. Eu testei muito aqui e deu certo, mas qualquer problema só me dizer.

Edited by Yan18
Link to comment
Share on other sites

  • 0
16 horas atrás, Yan18 disse:

Nunca mexi com OTS. Tenta usar esse script no OTS e se der erro manda print da distro.

 

isso é estranho, mas não lança erros no console, mas funciona no servidor também 

 

 

então eu os tenho no meu ot

Screenshot_1.png

Screenshot_2.png

Link to comment
Share on other sites

  • 0
Em 24/12/2020 em 02:26, poncex disse:

 

isso é estranho, mas não lança erros no console, mas funciona no servidor também 

 

 

então eu os tenho no meu ot

Screenshot_1.png

Screenshot_2.png

Não consegui entender o que você quis dizer.

Link to comment
Share on other sites

  • 0
Em 12/01/2021 em 00:21, poncex disse:

 

Eu só preciso de um boss system semelhante a esse, mas para otx global (semelhante a aura ot): c

Pelo que vi essa OTX é equivalente a TFS 1.X, então o código que fiz deve funcionar. Substitua o código por esse:

 

-- BOSS SYSTEM TFS 1.X FEITO POR YAN18 --

-- TABELA COM OS MONSTROS QUE VAI SURGIR DE ACORDO COM O TEMPO QUE VOCÊ COLOCOU NO INTERVAL NA TAG XML DO GLOBALEVENTS --
local monsters = {
{name = "Mew", pos = Position(1000, 1000, 7)},
{name = "Mewtwo", pos = Position(1000, 1000, 7)},
{name = "Articuno", pos = Position(1000, 1000, 7)},
{name = "Zapdos", pos = Position(1000, 1000, 7)},
{name = "Moltres", pos = Position(1000, 1000, 7)},
}

-- CONFIGURAÇÃO DA ARENA COMO POSIÇÃO CENTRAL QUE COMEÇA A VERIFICAR E X E Y (X, -X, Y, -Y) QUE VAI VERIFICAR NA ARENA SE TEM MONSTROS --
local config_arena = {
position_center = Position(1200, 1200, 7), -- POSIÇÃO CENTRAL DA ARENA
x_left = 20, -- QUANTIDADE DE TILES A ESQUERDA QUE VAI VERIFICAR SE TEM MONSTRO A PARTIR DA POSIÇÃO CENTRAL
x_right = 20, -- QUANTIDADE DE TILES A DIREITA QUE VAI VERIFICAR SE TEM MONSTRO A PARTIR DA POSIÇÃO CENTRAL
y_up = 20, -- QUANTIDADE DE TILES A CIMA QUE VAI VERIFICAR SE TEM MONSTRO A PARTIR DA POSIÇÃO CENTRAL
y_down = 20, -- QUANTIDADE DE TILES A BAIXO QUE VAI VERIFICAR SE TEM MONSTRO A PARTIR DA POSIÇÃO CENTRAL
}

local verifica_todos_andares = false -- SE SUA ARENA TIVER MAIS DE UM ANDAR, MUDE O VALOR PARA true
local minutos_fim_evento = 25 -- TEMPO EM MINUTOS PARA ACABAR O EVENTO E REMOVER OS MONTROS RESTANTES DA ARENA

local tempo_total_fim_evento = minutos_fim_evento * 60 * 1000 -- NÃO MEXER NESSA VARIÁVEL !!!

-------------------- CÓDIGO --------------------
function onThink(interval)
local evento_iniciado = false -- VERIFICA SE O EVENTO FOI INICIADO DA FORMA CORRETA

	if tempo_total_fim_evento >= interval then
		return print("Você configurou errado o tempo do início do evento com o final do evento.")
	end	

	for index, monster in pairs(monsters) do
		if evento_iniciado then
			return print("Você configurou errado o tempo de iniciar o evento com o tempo em que ele acabou.")
		
		else
			if #monsters < 1 then
				return print("A tabela com os monstros para o evento está vazia!")	
			end			
			
			Game.createMonster(monster.name, monster.pos)			
			
			if index == #monsters then
				broadcastMessage(#monsters == 1 and "A monster arrived in this world" or "Some monsters arrived in this world")
			end	
					
		end				
	end

	evento_iniciado = true

	if not evento_iniciado then
		return print("Você configurou o tempo errado no evento")
		
	else	
		addEvent(function()
					local monsters_arena = {}
					local spectator = Game.getSpectators(config_arena.position_center, verifica_todos_andares, false, config_arena.x_left, config_arena.x_right, y_down, y_up) -- NÃO MUDAR O TERCEIRO PARÂMETRO, DEIXE FALSE
					
					for index, creature in pairs(spectator) do
						if creature:isMonster() then
							monsters_arena[#monsters_arena + 1] = creature:getName()
						end	
					end	
					
					if #monsters_arena < 1 then
						--return print("Houve alguma coisa errada ao remover os monstros do evento.")
						return true
					
					else
						for index, monster in pairs(spectator) do
							for i = 1, #monsters_arena do
								if monster:isMonster() and monster:getName() == monsters_arena[i] then
									monster:remove()
								end
							end
			
							if index == #monsters_arena then		
								evento_iniciado = false
								return broadcastMessage(#monsters_arena == 1 and "A monster left this world" or "Some monsters left this world")
							end
							
						end
					end			
				end, tempo_total_fim_evento)
	end		
   
end

 

Eu comentei tudo, então deve ter ficado tudo claro. Fora que, no código que fiz para TFS 0.X acima, está tudo explicado, nesse código está mais otimizado para TFS 1.X.

 

Só lembrando que a posição central da arena é muito importante, então se a arena sua vai ser por exemplo 50x50, faça 51x51 para que a posição central se ímpar e a range X,Y fica iguais (pares), pois nesse exemplo de 51x51, a posição central seria X= 26, Y=26. E também é importante colocar a quantidade de tiles que vai verificar a partir da posição central nas variáveis X,Y na tabela da configuração da arena, assim como a posição central.

 

Caso não entenda algo ou fique com alguma dúvida, só falar. E ser der algum problema só falar também.

 

* OBS: É muito importante que configure o tempo do início do evento de forma coerente com a variável com o tempo do fim do evento, se não vai dar ruim, mas tratei isso no código e vai te avisar na distro.

Edited by Yan18
Link to comment
Share on other sites

  • 0
Em 31/03/2020 em 21:19, Yan18 disse:

Olá, vá na pasta Data/Globalevents/Scripts e crie um arquivo lua chamado boss e adicione o código dentro:


----------------------------------- EVENTO SUMMON BOSS FEITO POR YAN18 -----------------------------------------
local minutos = 20 ---- COLOCA OS MINUTOS AQUI PARA OS BOSS SUMIREM CASO NINGUÉM OS MATE 

---- NOME DOS MONTROS ----
local monsters = {
[1] = "Magmar" ,
[2] = "Electabuzz",
[3] = "Scizor", 
}

---- POSIÇÃO DA ARENA ONDE APARECERÁ OS MONSTROS ----
local position_arena = {
from_pos = {x= 964, y = 993, z= 7}, -- VARIÁVEL QUE TEM A COORDENADA INICIAL DO LUGAR ONDE VAI APARECER OS MONSTROS
to_pos = {x= 978, y = 1009, z= 7}, -- VARIÁVEL QUE TEM A COORDENADA FINAL DO LUGAR ONDE VAI APARECER OS MONSTROS
} 

---------------------------------- CÓDIGO ----------------------------------------------
function onThink(cid, words, interval, lastExecution)

----- CRIA OS BOSS -----
	for i, j in ipairs(monsters) do
	----- VARIÁVEL RANDOM_POSITION GERA O SPAWN ALEATÓRIO DOS BOSS -----
		local random_position = {x= math.random(position_arena.from_pos.x, position_arena.to_pos.x), y= math.random(position_arena.from_pos.y, position_arena.to_pos.y), z= math.random(position_arena.from_pos.z, position_arena.to_pos.z)}
		doSummonCreature(j, random_position)
	end		

	doBroadcastMessage(#monsters == 1 and "A monster have been arrived in this world. Don't arrive near!" or "Some monsters have been arrived in this world. Don't arrive near by them!", 22)

---- VERIFICAÇÃO SE TEM MONSTROS NA ARENA PARA REMOVER ----

addEvent(function()
local position = {}
  
	for i = position_arena.from_pos.x, position_arena.to_pos.x do
		for j = position_arena.from_pos.y, position_arena.to_pos.y do
			position[#position+1] = {x= i, y = j, z= position_arena.from_pos.z, stackpos = 0}  
		end
	end

	for i= 1, #position do
		for j = 0, 255 do
			position[i].stackpos = j
			local monster = getTileThingByPos(position[i])
		

			if isMonster(monster.uid) then  
				for d, n in ipairs(monsters) do 	
					if getCreatureName(monster.uid) == n then 
						doRemoveCreature(monster.uid)
						
						if d == #monsters then
							doBroadcastMessage(#monsters == 1 and "The monster left this world. But it will return soon...." or "The monsters left this world. But they will return soon....", 22)
						end	
						
					end
				end	
			end	
		end	
		
		
	end	
end, minutos * 60 * 1000)
		
return true
end

Agora em Data/Globalevents abra o globalevents.xml e adicione a tag:


<globalevent name="boss" interval="3600" event="script" value="boss.lua"/> <!-- TEMPO EM SEGUNDOS, JÁ DEIXEI 1 HORA -->

Explicação: No código, eu criei 3 monstros genéricos para testar, só adicionar o nome deles igual está na tabela, e se quiser só 1 monstro, apague os outros dois e insira o desejado (lembrando de colocar a vírgula no final igual como está).

 

Na variável minutos já deixei 20 como pediu, mas caso queira trocar, só alterar o valor dela (lembrando que o valor dela tem que ser menor que o intervalo do evento no xml).

 

E na tabela position_arena, precisa colocar as coordenadas iniciais e finais da arena, já deixei pronto ali também e é só substituir.

 

Deixei para eles nascerem em posições aleatórias dentro das coordenadas da arena, caso queira spawns fixos, só ir na variável random_position e colocar x, y e z desejados.

 

Agora na parte do Xml como deixei o comentário na tag, já deixei 1 hora como pediu (3600 segundos), caso queira outro valor só alterar lá, lembrando que ali é em segundos.

 

Deixei tudo comentado e explicadinho, mas qualquer dúvida só falar. Eu testei muito aqui e deu certo, mas qualquer problema só me dizer.

 

Funcional, testado tfs 0.3.5

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...