Ir para conteúdo
  • Cadastre-se

(Resolvido)BOSS ROOM COM RECOMPENSA SORTIDA


Ir para solução Resolvido por denizinhows,

Posts Recomendados

.Qual servidor ou website você utiliza como base? 

Provavelmente TFS 0.4 ou 1.0 (Digo isso pois não aparece na distro devido a um "bug" acredito. 

image.thumb.png.f7b8f0288f122e4eeba10d6ed01af3ef.png

 

Qual o motivo deste tópico? 

Pedido de SCRIPT para realização de uma SALA BOSS personalizada. 

 

-> Acesso a Sala da Boss Room via porta magica (que consumirá 1 ticket para entrar e terá um cooldown de 4 horas para poder entrar novamente)

-> Acesso a boss Room via Alavanca como a da anihi de 3 a 6 players. 

-> Ao clicar na alavanca, os players serão teleportados para o boss room e o boss será sumonado no centro dela com tempo de 10 minutos para ser morto. (caso não seja morto no tempo ele sumirá e os players voltaram para o sqm fora da boss room e terão que aguardar o cooldown para retomar.

-> Assim que o boss morrer, aparecerá um TP que duraria 30 segundos para o salão de recompensas.

-> No salão de recompensas terá um bau magico que dará recompensas baseada em sorte ou seja sorteará dentre 10 itens 1 deles como recompensa para o boss feito que poderá ser repedito novamente a cada 4 horas mantendo a mesma probabilidade de sorte para receber itens aleatórios dentre os configurados no script.

 

 

Está surgindo algum erro? Se sim coloque-o aqui. 

Citar

Todos scripts que testei até agora, tecnicamente eram incompletos, em relação a todas funções que queria, e também não chegavam a dar erro, porém não funcionavam ao ser colocados para rodar. A alavanca balançava de um lado para o outro mais não ativava a função desejada. OBS: Foram testados pelo menos 9 scrips diferentes e modificados para tentar fazer a idéia acontecer. Mais não sou programador, e sou amador nesse ramo. 

 

Você tem o código disponível? Se tiver publique-o aqui: 


 

Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

 

Link para o post
Compartilhar em outros sites

Tipo assim?

 

Spoiler

 

 

 

Configuração:

 

para facilitar na manutenção, crie um arquivo em data > lib > configBossRoom.lua:

 

-- made by Imperius
-- == Configurações - BOSS ROOM ===

configBossRoom = {
    name = "Dragon Lord", -- nome do boss.
    minPlayers = 3, -- Quantidade Min de players para participar.
 
    timeToKill = 10, -- Tempo (em minutos)  que os players terão para matar o boss.
    timeOpenTP = 30, -- Tempo (em segundos) que o teleport do salão de recompensas ficará aberto após matar o boss. 

    -- Coloque abaixo ID de todas as recompensas que serão sorteadas ao clicar no bau (somente uma será entregue) --
    recompensasID = {2494, 2195, 2400, 7708},

    portaMagica = {
        storage = 1234569, -- Responsável por verificar o cooldown.
		ticketID = 10306,  -- ID do ticket que o player precisará para passar pela porta.
		cooldown = 4       -- Tempo em horas.
    },

    alavanca = { -- Coloque as posições dos sqm que os players precisará estar pisando para usar a alavanca. (estilo a ahini quest).
        {x = 32346, y = 31940, z = 8}, -- player 1
        {x = 32347, y = 31940, z = 8}, -- player 2
        {x = 32348, y = 31940, z = 8}, -- player 3
        {x = 32349, y = 31940, z = 8}, -- player 4
        {x = 32350, y = 31940, z = 8}, -- player 5
        {x = 32351, y = 31940, z = 8}  -- player 6
    },

    areaSalaBoss = {{x = 32310, y = 31930, z = 8}, {x = 32319, y = 31937, z = 8}}, -- Canto superior esquerdo | Canto inferior direito. (Sala do Boss)

  	positionKickPlayer = {x = 32354, y = 31940, z = 8}, -- Position onde os players serão teleportados caso não tenha matado o boss em 10 minutos.
    positionSalaAlavanca = {x = 32351, y = 31940, z = 8}, -- Position onde o player será teleportado ao clicar na porta. (igual o do vídeo).
    positionSalaBoss = {x = 32314, y = 31931, z = 8},  -- Position onde os players irão ser teleportados ao usar a alavanca.
    positionSpawnBoss = {x = 32315, y = 31936, z = 8}, -- Position onde o boss irá aparecer.
    positionSalaRecompensas = {{x = 32319, y = 31937, z = 8}, {x = 32318, y = 31930, z = 5}} -- onde o TP vai abrir após matar o boss | onde o TP vai levar os players.
} 

 

 

em data > actions > actions.xml:

 

	<!-- Porta Magica (Boss Room) -->
	<action uniqueid="65000" event="script" value="portaBossRoom.lua"/>
	
	<!-- Alavanca (Boss Room)-->
	<action uniqueid="65001" event="script" value="alavancaBossRoom.lua"/>

	<!-- bau recompensa (Boss Room) -->
	<action uniqueid="65002" script="bauBossRoom.lua" />

 

aviso: Não se esqueça de adicionar a uniqueid lá no Remere's Map Editor.

 

actions > scripts > portaBossRoom.lua:

 

 

Spoiler


function onUse(cid, item, fromPosition, itemEx, toPosition)

	-- Caso o player não tenha o ticket --
	if getPlayerItemCount(cid, configBossRoom.portaMagica.ticketID) < 1 then 
		doPlayerSendCancel(cid, "You need at least one "..getItemNameById(configBossRoom.ticketID).." to be able to go through the door.")
		return true
	end

	-- function de tempo by (FeeTads)
	local function getTimeString(self)
		local format = {
			{'day', self / 60 / 60 / 24},
			{'hour', self / 60 / 60 % 24},
			{'minute', self / 60 % 60},
			{'second', self % 60}
		}
	
		local out = {}
		for k, t in ipairs(format) do
			local v = math.floor(t[2])
			if(v > 0) then
				table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
			end
		end
		local ret = table.concat(out)
		if ret:len() < 16 and ret:find('second') then
			local a, b = ret:find(' and ')
			ret = ret:sub(b+1)
		end
		return ret
	end

	-- Caso não tenha passado o tempo do cooldown --
	if getPlayerStorageValue(cid, configBossRoom.portaMagica.storage) - os.time() >= 1 then
		--doPlayerSendCancel(cid, "Voce precisa aguardar "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." para poder entrar novamente.")
		doPlayerSendCancel(cid, "You need to wait "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." to get through the door.")
		return true
	end

	-- Caso esteja tudo certo --
	doPlayerRemoveItem(cid, configBossRoom.portaMagica.ticketID, 1)
	doTeleportThing(cid, configBossRoom.positionSalaAlavanca)
	doSendMagicEffect(getPlayerPosition(cid), 10)
	setPlayerStorageValue(cid, configBossRoom.portaMagica.storage, os.time() + (configBossRoom.portaMagica.cooldown)*3600) -- Seta o Cooldown (em horas).
	return true
end

 

 

 

actions > scripts  > alavancaBossRoom.lua:

 

Spoiler

function onUse(cid, item, fromPosition, itemEx, toPosition)

	local players = {}
	for i = 1, #configBossRoom.alavanca do
		local v = getTopCreature(configBossRoom.alavanca[i]).uid 
		players[i] = isPlayer(v) and v or nil
	end

	function checkPlayersInRoom() -- Responsável por verificar se há jogadores na sala enfrentando o boss.
		local player_room = 0
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local pos = {x=x, y=y, z=z,stackpos = 253}
					local thing = getThingfromPos(pos)
					if thing.itemid > 0 and isPlayer(thing.uid) == true then
						player_room = player_room+1
					end
				end
			end
		end
		return player_room
	end


	if #players < configBossRoom.minPlayers then
		doPlayerSendCancel(cid, "You need at least "..configBossRoom.minPlayers.." players to enter.")
		return true
	end

	if checkPlayersInRoom() >= 1 then
			doPlayerSendTextMessage(cid,19, "There is already a team in the boss room.")  
		return true
	end

	function playersTP(position) -- Responsável por teleportar os jogadores
		for i = 1, 6 do
			if players[i] then
				doTeleportThing(players[i], position)
				doSendMagicEffect(position, CONST_ME_TELEPORT)
			end
		end
	end

	function removeBoss() -- Responsavel por Remover o BOSS da sala (caso os players nao tenham matado)
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local area = {x = x, y = y, z = z}
					local creature = getTopCreature(area).uid
					if isCreature(creature) then   
						doRemoveCreature(creature)
					end
				end
			end
		end
	end

	function checkBossTime() -- Responsável por verificar se os jogadores matou ou não o boss após 10 minutos.
		for x = configBossRoom.areaSalaBoss[1].x - 1, configBossRoom.areaSalaBoss[2].x + 1 do
			for y = configBossRoom.areaSalaBoss[1].y - 1, configBossRoom.areaSalaBoss[2].y + 1 do
				local pos = {x=x, y=y, z=configBossRoom.areaSalaBoss[1].z}
				local m = getTopCreature(pos).uid
				if m ~= 0 and isMonster(m) and isInArray(configBossRoom.name, getCreatureName(m)) then
					playersTP(configBossRoom.positionKickPlayer)
					removeBoss()
				end
			end 
		end
		return false 
	end

		playersTP(configBossRoom.positionSalaBoss)
		doCreateMonster(configBossRoom.name, configBossRoom.positionSpawnBoss)
		addEvent(checkBossTime, configBossRoom.timeToKill*60*1000)
		return true
end

 

 

 

 

actions > scripts > bauBossRoom.lua:

 

 

Spoiler


function onUse(cid, item, fromPosition, itemEx, toPosition)

		local randomItem = configBossRoom.recompensasID[math.random(1, #configBossRoom.recompensasID)]

		doPlayerAddItem(cid, randomItem)
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
		doSendMagicEffect(getThingPos(cid), 49)

		doPlayerSendTextMessage(cid, 22, "Congratulations! You received a "..getItemNameById(randomItem).." for killing the boss!") -- Mensagem que o player vai receber quando clicar no bau.
	return true
end

 

 

 

agora em creaturescripts > creaturescripts.xml:

 

 

<!-- Boss Room -->
<event type="death" name="bossTeleport" script="bossTeleport.lua"/>

 

 

creaturescripts >  scripts > bossTeleport.lua:

 

Spoiler


function onDeath(cid)

    registerCreatureEvent(cid, "bossTeleport")

    function removeTeleporte()
        local tp = getTileItemById(configBossRoom.positionSalaRecompensas[1], 5023).uid
        doRemoveItem(tp, 1)
        doSendMagicEffect(configBossRoom.positionSalaRecompensas[1], CONST_ME_POFF)
    end

    if getCreatureName(cid) == configBossRoom.name then
        doCreatureSay(cid, "A new teleporter has been created. You have "..configBossRoom.timeOpenTP.." seconds to leave this room.", TALKTYPE_ORANGE_1)
        doCreateTeleport(5023, configBossRoom.positionSalaRecompensas[2], configBossRoom.positionSalaRecompensas[1])
        addEvent(removeTeleporte, configBossRoom.timeOpenTP*1000)
    end

    return true
end

 

 

 

por fim, vá até em data > monster > abra o arquivo do seu boss. ex: "NomeDoBoss.xml" e adicione a tag abaixo:

 

	<script> 
		<event name="bossTeleport"/> 
	</script>

 

 

 

 

 

 

 

 

Editado por Imperius (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução
Em 19/10/2022 em 19:42, Imperius disse:

Tipo assim?

 

  Mostrar conteúdo oculto

 

 

 

Configuração:

 

para facilitar na manutenção, crie um arquivo em data > lib > configBossRoom.lua:

 


-- made by Imperius
-- == Configurações - BOSS ROOM ===

configBossRoom = {
    name = "Dragon Lord", -- nome do boss.
    minPlayers = 3, -- Quantidade Min de players para participar.
 
    timeToKill = 10, -- Tempo (em minutos)  que os players terão para matar o boss.
    timeOpenTP = 30, -- Tempo (em segundos) que o teleport do salão de recompensas ficará aberto após matar o boss. 

    -- Coloque abaixo ID de todas as recompensas que serão sorteadas ao clicar no bau (somente uma será entregue) --
    recompensasID = {2494, 2195, 2400, 7708},

    portaMagica = {
        storage = 1234569, -- Responsável por verificar o cooldown.
		ticketID = 10306,  -- ID do ticket que o player precisará para passar pela porta.
		cooldown = 4       -- Tempo em horas.
    },

    alavanca = { -- Coloque as posições dos sqm que os players precisará estar pisando para usar a alavanca. (estilo a ahini quest).
        {x = 32346, y = 31940, z = 8}, -- player 1
        {x = 32347, y = 31940, z = 8}, -- player 2
        {x = 32348, y = 31940, z = 8}, -- player 3
        {x = 32349, y = 31940, z = 8}, -- player 4
        {x = 32350, y = 31940, z = 8}, -- player 5
        {x = 32351, y = 31940, z = 8}  -- player 6
    },

    areaSalaBoss = {{x = 32310, y = 31930, z = 8}, {x = 32319, y = 31937, z = 8}}, -- Canto superior esquerdo | Canto inferior direito. (Sala do Boss)

  	positionKickPlayer = {x = 32354, y = 31940, z = 8}, -- Position onde os players serão teleportados caso não tenha matado o boss em 10 minutos.
    positionSalaAlavanca = {x = 32351, y = 31940, z = 8}, -- Position onde o player será teleportado ao clicar na porta. (igual o do vídeo).
    positionSalaBoss = {x = 32314, y = 31931, z = 8},  -- Position onde os players irão ser teleportados ao usar a alavanca.
    positionSpawnBoss = {x = 32315, y = 31936, z = 8}, -- Position onde o boss irá aparecer.
    positionSalaRecompensas = {{x = 32319, y = 31937, z = 8}, {x = 32318, y = 31930, z = 5}} -- onde o TP vai abrir após matar o boss | onde o TP vai levar os players.
} 

 

 

em data > actions > actions.xml:

 


	<!-- Porta Magica (Boss Room) -->
	<action uniqueid="65000" event="script" value="portaBossRoom.lua"/>
	
	<!-- Alavanca (Boss Room)-->
	<action uniqueid="65001" event="script" value="alavancaBossRoom.lua"/>

	<!-- bau recompensa (Boss Room) -->
	<action uniqueid="65002" script="bauBossRoom.lua" />

 

aviso: Não se esqueça de adicionar a uniqueid lá no Remere's Map Editor.

 

actions > scripts > portaBossRoom.lua:

 

 

  Mostrar conteúdo oculto


function onUse(cid, item, fromPosition, itemEx, toPosition)

	-- Caso o player não tenha o ticket --
	if getPlayerItemCount(cid, configBossRoom.portaMagica.ticketID) < 1 then 
		doPlayerSendCancel(cid, "You need at least one "..getItemNameById(configBossRoom.ticketID).." to be able to go through the door.")
		return true
	end

	-- function de tempo by (FeeTads)
	local function getTimeString(self)
		local format = {
			{'day', self / 60 / 60 / 24},
			{'hour', self / 60 / 60 % 24},
			{'minute', self / 60 % 60},
			{'second', self % 60}
		}
	
		local out = {}
		for k, t in ipairs(format) do
			local v = math.floor(t[2])
			if(v > 0) then
				table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
			end
		end
		local ret = table.concat(out)
		if ret:len() < 16 and ret:find('second') then
			local a, b = ret:find(' and ')
			ret = ret:sub(b+1)
		end
		return ret
	end

	-- Caso não tenha passado o tempo do cooldown --
	if getPlayerStorageValue(cid, configBossRoom.portaMagica.storage) - os.time() >= 1 then
		--doPlayerSendCancel(cid, "Voce precisa aguardar "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." para poder entrar novamente.")
		doPlayerSendCancel(cid, "You need to wait "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." to get through the door.")
		return true
	end

	-- Caso esteja tudo certo --
	doPlayerRemoveItem(cid, configBossRoom.portaMagica.ticketID, 1)
	doTeleportThing(cid, configBossRoom.positionSalaAlavanca)
	doSendMagicEffect(getPlayerPosition(cid), 10)
	setPlayerStorageValue(cid, configBossRoom.portaMagica.storage, os.time() + (configBossRoom.portaMagica.cooldown)*3600) -- Seta o Cooldown (em horas).
	return true
end

 

 

 

actions > scripts  > alavancaBossRoom.lua:

 

  Mostrar conteúdo oculto


function onUse(cid, item, fromPosition, itemEx, toPosition)

	local players = {}
	for i = 1, #configBossRoom.alavanca do
		local v = getTopCreature(configBossRoom.alavanca[i]).uid 
		players[i] = isPlayer(v) and v or nil
	end

	function checkPlayersInRoom() -- Responsável por verificar se há jogadores na sala enfrentando o boss.
		local player_room = 0
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local pos = {x=x, y=y, z=z,stackpos = 253}
					local thing = getThingfromPos(pos)
					if thing.itemid > 0 and isPlayer(thing.uid) == true then
						player_room = player_room+1
					end
				end
			end
		end
		return player_room
	end


	if #players < configBossRoom.minPlayers then
		doPlayerSendCancel(cid, "You need at least "..configBossRoom.minPlayers.." players to enter.")
		return true
	end

	if checkPlayersInRoom() >= 1 then
			doPlayerSendTextMessage(cid,19, "There is already a team in the boss room.")  
		return true
	end

	function playersTP(position) -- Responsável por teleportar os jogadores
		for i = 1, 6 do
			if players[i] then
				doTeleportThing(players[i], position)
				doSendMagicEffect(position, CONST_ME_TELEPORT)
			end
		end
	end

	function removeBoss() -- Responsavel por Remover o BOSS da sala (caso os players nao tenham matado)
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local area = {x = x, y = y, z = z}
					local creature = getTopCreature(area).uid
					if isCreature(creature) then   
						doRemoveCreature(creature)
					end
				end
			end
		end
	end

	function checkBossTime() -- Responsável por verificar se os jogadores matou ou não o boss após 10 minutos.
		for x = configBossRoom.areaSalaBoss[1].x - 1, configBossRoom.areaSalaBoss[2].x + 1 do
			for y = configBossRoom.areaSalaBoss[1].y - 1, configBossRoom.areaSalaBoss[2].y + 1 do
				local pos = {x=x, y=y, z=configBossRoom.areaSalaBoss[1].z}
				local m = getTopCreature(pos).uid
				if m ~= 0 and isMonster(m) and isInArray(configBossRoom.name, getCreatureName(m)) then
					playersTP(configBossRoom.positionKickPlayer)
					removeBoss()
				end
			end 
		end
		return false 
	end

		playersTP(configBossRoom.positionSalaBoss)
		doCreateMonster(configBossRoom.name, configBossRoom.positionSpawnBoss)
		addEvent(checkBossTime, configBossRoom.timeToKill*60*1000)
		return true
end

 

 

 

 

actions > scripts > bauBossRoom.lua:

 

 

  Mostrar conteúdo oculto


function onUse(cid, item, fromPosition, itemEx, toPosition)

		local randomItem = configBossRoom.recompensasID[math.random(1, #configBossRoom.recompensasID)]

		doPlayerAddItem(cid, randomItem)
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
		doSendMagicEffect(getThingPos(cid), 49)

		doPlayerSendTextMessage(cid, 22, "Congratulations! You received a "..getItemNameById(randomItem).." for killing the boss!") -- Mensagem que o player vai receber quando clicar no bau.
	return true
end

 

 

 

agora em creaturescripts > creaturescripts.xml:

 

 


<!-- Boss Room -->
<event type="death" name="bossTeleport" script="bossTeleport.lua"/>

 

 

creaturescripts >  scripts > bossTeleport.lua:

 

  Mostrar conteúdo oculto


function onDeath(cid)

    registerCreatureEvent(cid, "bossTeleport")

    function removeTeleporte()
        local tp = getTileItemById(configBossRoom.positionSalaRecompensas[1], 5023).uid
        doRemoveItem(tp, 1)
        doSendMagicEffect(configBossRoom.positionSalaRecompensas[1], CONST_ME_POFF)
    end

    if getCreatureName(cid) == configBossRoom.name then
        doCreatureSay(cid, "A new teleporter has been created. You have "..configBossRoom.timeOpenTP.." seconds to leave this room.", TALKTYPE_ORANGE_1)
        doCreateTeleport(5023, configBossRoom.positionSalaRecompensas[2], configBossRoom.positionSalaRecompensas[1])
        addEvent(removeTeleporte, configBossRoom.timeOpenTP*1000)
    end

    return true
end

 

 

 

por fim, vá até em data > monster > abra o arquivo do seu boss. ex: "NomeDoBoss.xml" e adicione a tag abaixo:

 


	<script> 
		<event name="bossTeleport"/> 
	</script>

 

 

 

 

 

 

 

 

Funcionou perfeitamente!

 

MATOU O MEU PROBLEMA que eu estava tendo fazia 3 DIAS JESUIS!!!!!!

 

MAIS QUE UM REP+ 

 

O CARA MERECE UM PIXzão de R$250,00 

 

FIQUEI 1 semana para tentar achar scripts pra essa boss room.

 

me Adiciona no discord depois moço! Faço questão de pagar por script.

Link para o post
Compartilhar em outros sites
Em 19/10/2022 em 19:42, Imperius disse:

Tipo assim?

 

 

 

 

Configuração:

 

para facilitar na manutenção, crie um arquivo em data > lib > configBossRoom.lua:

 




-- made by Imperius
-- == Configurações - BOSS ROOM ===

configBossRoom = {
    name = "Dragon Lord", -- nome do boss.
    minPlayers = 3, -- Quantidade Min de players para participar.
 
    timeToKill = 10, -- Tempo (em minutos)  que os players terão para matar o boss.
    timeOpenTP = 30, -- Tempo (em segundos) que o teleport do salão de recompensas ficará aberto após matar o boss. 

    -- Coloque abaixo ID de todas as recompensas que serão sorteadas ao clicar no bau (somente uma será entregue) --
    recompensasID = {2494, 2195, 2400, 7708},

    portaMagica = {
        storage = 1234569, -- Responsável por verificar o cooldown.
		ticketID = 10306,  -- ID do ticket que o player precisará para passar pela porta.
		cooldown = 4       -- Tempo em horas.
    },

    alavanca = { -- Coloque as posições dos sqm que os players precisará estar pisando para usar a alavanca. (estilo a ahini quest).
        {x = 32346, y = 31940, z = 8}, -- player 1
        {x = 32347, y = 31940, z = 8}, -- player 2
        {x = 32348, y = 31940, z = 8}, -- player 3
        {x = 32349, y = 31940, z = 8}, -- player 4
        {x = 32350, y = 31940, z = 8}, -- player 5
        {x = 32351, y = 31940, z = 8}  -- player 6
    },

    areaSalaBoss = {{x = 32310, y = 31930, z = 8}, {x = 32319, y = 31937, z = 8}}, -- Canto superior esquerdo | Canto inferior direito. (Sala do Boss)

  	positionKickPlayer = {x = 32354, y = 31940, z = 8}, -- Position onde os players serão teleportados caso não tenha matado o boss em 10 minutos.
    positionSalaAlavanca = {x = 32351, y = 31940, z = 8}, -- Position onde o player será teleportado ao clicar na porta. (igual o do vídeo).
    positionSalaBoss = {x = 32314, y = 31931, z = 8},  -- Position onde os players irão ser teleportados ao usar a alavanca.
    positionSpawnBoss = {x = 32315, y = 31936, z = 8}, -- Position onde o boss irá aparecer.
    positionSalaRecompensas = {{x = 32319, y = 31937, z = 8}, {x = 32318, y = 31930, z = 5}} -- onde o TP vai abrir após matar o boss | onde o TP vai levar os players.
} 

 

 

em data > actions > actions.xml:

 




	<!-- Porta Magica (Boss Room) -->
	<action uniqueid="65000" event="script" value="portaBossRoom.lua"/>
	
	<!-- Alavanca (Boss Room)-->
	<action uniqueid="65001" event="script" value="alavancaBossRoom.lua"/>

	<!-- bau recompensa (Boss Room) -->
	<action uniqueid="65002" script="bauBossRoom.lua" />

 

aviso: Não se esqueça de adicionar a uniqueid lá no Remere's Map Editor.

 

actions > scripts > portaBossRoom.lua:

 

 

  Mostrar conteúdo oculto






function onUse(cid, item, fromPosition, itemEx, toPosition)

	-- Caso o player não tenha o ticket --
	if getPlayerItemCount(cid, configBossRoom.portaMagica.ticketID) < 1 then 
		doPlayerSendCancel(cid, "You need at least one "..getItemNameById(configBossRoom.ticketID).." to be able to go through the door.")
		return true
	end

	-- function de tempo by (FeeTads)
	local function getTimeString(self)
		local format = {
			{'day', self / 60 / 60 / 24},
			{'hour', self / 60 / 60 % 24},
			{'minute', self / 60 % 60},
			{'second', self % 60}
		}
	
		local out = {}
		for k, t in ipairs(format) do
			local v = math.floor(t[2])
			if(v > 0) then
				table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
			end
		end
		local ret = table.concat(out)
		if ret:len() < 16 and ret:find('second') then
			local a, b = ret:find(' and ')
			ret = ret:sub(b+1)
		end
		return ret
	end

	-- Caso não tenha passado o tempo do cooldown --
	if getPlayerStorageValue(cid, configBossRoom.portaMagica.storage) - os.time() >= 1 then
		--doPlayerSendCancel(cid, "Voce precisa aguardar "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." para poder entrar novamente.")
		doPlayerSendCancel(cid, "You need to wait "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." to get through the door.")
		return true
	end

	-- Caso esteja tudo certo --
	doPlayerRemoveItem(cid, configBossRoom.portaMagica.ticketID, 1)
	doTeleportThing(cid, configBossRoom.positionSalaAlavanca)
	doSendMagicEffect(getPlayerPosition(cid), 10)
	setPlayerStorageValue(cid, configBossRoom.portaMagica.storage, os.time() + (configBossRoom.portaMagica.cooldown)*3600) -- Seta o Cooldown (em horas).
	return true
end

 

 

 

actions > scripts  > alavancaBossRoom.lua:

 

  Mostrar conteúdo oculto






function onUse(cid, item, fromPosition, itemEx, toPosition)

	local players = {}
	for i = 1, #configBossRoom.alavanca do
		local v = getTopCreature(configBossRoom.alavanca[i]).uid 
		players[i] = isPlayer(v) and v or nil
	end

	function checkPlayersInRoom() -- Responsável por verificar se há jogadores na sala enfrentando o boss.
		local player_room = 0
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local pos = {x=x, y=y, z=z,stackpos = 253}
					local thing = getThingfromPos(pos)
					if thing.itemid > 0 and isPlayer(thing.uid) == true then
						player_room = player_room+1
					end
				end
			end
		end
		return player_room
	end


	if #players < configBossRoom.minPlayers then
		doPlayerSendCancel(cid, "You need at least "..configBossRoom.minPlayers.." players to enter.")
		return true
	end

	if checkPlayersInRoom() >= 1 then
			doPlayerSendTextMessage(cid,19, "There is already a team in the boss room.")  
		return true
	end

	function playersTP(position) -- Responsável por teleportar os jogadores
		for i = 1, 6 do
			if players[i] then
				doTeleportThing(players[i], position)
				doSendMagicEffect(position, CONST_ME_TELEPORT)
			end
		end
	end

	function removeBoss() -- Responsavel por Remover o BOSS da sala (caso os players nao tenham matado)
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local area = {x = x, y = y, z = z}
					local creature = getTopCreature(area).uid
					if isCreature(creature) then   
						doRemoveCreature(creature)
					end
				end
			end
		end
	end

	function checkBossTime() -- Responsável por verificar se os jogadores matou ou não o boss após 10 minutos.
		for x = configBossRoom.areaSalaBoss[1].x - 1, configBossRoom.areaSalaBoss[2].x + 1 do
			for y = configBossRoom.areaSalaBoss[1].y - 1, configBossRoom.areaSalaBoss[2].y + 1 do
				local pos = {x=x, y=y, z=configBossRoom.areaSalaBoss[1].z}
				local m = getTopCreature(pos).uid
				if m ~= 0 and isMonster(m) and isInArray(configBossRoom.name, getCreatureName(m)) then
					playersTP(configBossRoom.positionKickPlayer)
					removeBoss()
				end
			end 
		end
		return false 
	end

		playersTP(configBossRoom.positionSalaBoss)
		doCreateMonster(configBossRoom.name, configBossRoom.positionSpawnBoss)
		addEvent(checkBossTime, configBossRoom.timeToKill*60*1000)
		return true
end

 

 

 

 

actions > scripts > bauBossRoom.lua:

 

 

  Mostrar conteúdo oculto






function onUse(cid, item, fromPosition, itemEx, toPosition)

		local randomItem = configBossRoom.recompensasID[math.random(1, #configBossRoom.recompensasID)]

		doPlayerAddItem(cid, randomItem)
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
		doSendMagicEffect(getThingPos(cid), 49)

		doPlayerSendTextMessage(cid, 22, "Congratulations! You received a "..getItemNameById(randomItem).." for killing the boss!") -- Mensagem que o player vai receber quando clicar no bau.
	return true
end

 

 

 

agora em creaturescripts > creaturescripts.xml:

 

 




<!-- Boss Room -->
<event type="death" name="bossTeleport" script="bossTeleport.lua"/>

 

 

creaturescripts >  scripts > bossTeleport.lua:

 

  Mostrar conteúdo oculto






function onDeath(cid)

    registerCreatureEvent(cid, "bossTeleport")

    function removeTeleporte()
        local tp = getTileItemById(configBossRoom.positionSalaRecompensas[1], 5023).uid
        doRemoveItem(tp, 1)
        doSendMagicEffect(configBossRoom.positionSalaRecompensas[1], CONST_ME_POFF)
    end

    if getCreatureName(cid) == configBossRoom.name then
        doCreatureSay(cid, "A new teleporter has been created. You have "..configBossRoom.timeOpenTP.." seconds to leave this room.", TALKTYPE_ORANGE_1)
        doCreateTeleport(5023, configBossRoom.positionSalaRecompensas[2], configBossRoom.positionSalaRecompensas[1])
        addEvent(removeTeleporte, configBossRoom.timeOpenTP*1000)
    end

    return true
end

 

 

 

por fim, vá até em data > monster > abra o arquivo do seu boss. ex: "NomeDoBoss.xml" e adicione a tag abaixo:

 




	<script> 
		<event name="bossTeleport"/> 
	</script>

 

 

 

 

 

 

 

 

tfs 1.0 ou 0.4 ? queria adicionar no meu 0.4

teste e funcionou .04tfs.

PARABENS CARA TO A ANOS AQUI NO TK PEDINDO UM SCRIPT DESSE, SO NAO TE PAGO PQ CE SABE QUE CRIADO DE OT QUE AINDA N COMEÇOU NAO TEM GRANA

Em 19/10/2022 em 19:42, Imperius disse:

Tipo assim?

 

  Mostrar conteúdo oculto

 

 

 

Configuração:

 

para facilitar na manutenção, crie um arquivo em data > lib > configBossRoom.lua:

 


-- made by Imperius
-- == Configurações - BOSS ROOM ===

configBossRoom = {
    name = "Dragon Lord", -- nome do boss.
    minPlayers = 3, -- Quantidade Min de players para participar.
 
    timeToKill = 10, -- Tempo (em minutos)  que os players terão para matar o boss.
    timeOpenTP = 30, -- Tempo (em segundos) que o teleport do salão de recompensas ficará aberto após matar o boss. 

    -- Coloque abaixo ID de todas as recompensas que serão sorteadas ao clicar no bau (somente uma será entregue) --
    recompensasID = {2494, 2195, 2400, 7708},

    portaMagica = {
        storage = 1234569, -- Responsável por verificar o cooldown.
		ticketID = 10306,  -- ID do ticket que o player precisará para passar pela porta.
		cooldown = 4       -- Tempo em horas.
    },

    alavanca = { -- Coloque as posições dos sqm que os players precisará estar pisando para usar a alavanca. (estilo a ahini quest).
        {x = 32346, y = 31940, z = 8}, -- player 1
        {x = 32347, y = 31940, z = 8}, -- player 2
        {x = 32348, y = 31940, z = 8}, -- player 3
        {x = 32349, y = 31940, z = 8}, -- player 4
        {x = 32350, y = 31940, z = 8}, -- player 5
        {x = 32351, y = 31940, z = 8}  -- player 6
    },

    areaSalaBoss = {{x = 32310, y = 31930, z = 8}, {x = 32319, y = 31937, z = 8}}, -- Canto superior esquerdo | Canto inferior direito. (Sala do Boss)

  	positionKickPlayer = {x = 32354, y = 31940, z = 8}, -- Position onde os players serão teleportados caso não tenha matado o boss em 10 minutos.
    positionSalaAlavanca = {x = 32351, y = 31940, z = 8}, -- Position onde o player será teleportado ao clicar na porta. (igual o do vídeo).
    positionSalaBoss = {x = 32314, y = 31931, z = 8},  -- Position onde os players irão ser teleportados ao usar a alavanca.
    positionSpawnBoss = {x = 32315, y = 31936, z = 8}, -- Position onde o boss irá aparecer.
    positionSalaRecompensas = {{x = 32319, y = 31937, z = 8}, {x = 32318, y = 31930, z = 5}} -- onde o TP vai abrir após matar o boss | onde o TP vai levar os players.
} 

 

 

em data > actions > actions.xml:

 


	<!-- Porta Magica (Boss Room) -->
	<action uniqueid="65000" event="script" value="portaBossRoom.lua"/>
	
	<!-- Alavanca (Boss Room)-->
	<action uniqueid="65001" event="script" value="alavancaBossRoom.lua"/>

	<!-- bau recompensa (Boss Room) -->
	<action uniqueid="65002" script="bauBossRoom.lua" />

 

aviso: Não se esqueça de adicionar a uniqueid lá no Remere's Map Editor.

 

actions > scripts > portaBossRoom.lua:

 

 

  Ocultar conteúdo


function onUse(cid, item, fromPosition, itemEx, toPosition)

	-- Caso o player não tenha o ticket --
	if getPlayerItemCount(cid, configBossRoom.portaMagica.ticketID) < 1 then 
		doPlayerSendCancel(cid, "You need at least one "..getItemNameById(configBossRoom.ticketID).." to be able to go through the door.")
		return true
	end

	-- function de tempo by (FeeTads)
	local function getTimeString(self)
		local format = {
			{'day', self / 60 / 60 / 24},
			{'hour', self / 60 / 60 % 24},
			{'minute', self / 60 % 60},
			{'second', self % 60}
		}
	
		local out = {}
		for k, t in ipairs(format) do
			local v = math.floor(t[2])
			if(v > 0) then
				table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
			end
		end
		local ret = table.concat(out)
		if ret:len() < 16 and ret:find('second') then
			local a, b = ret:find(' and ')
			ret = ret:sub(b+1)
		end
		return ret
	end

	-- Caso não tenha passado o tempo do cooldown --
	if getPlayerStorageValue(cid, configBossRoom.portaMagica.storage) - os.time() >= 1 then
		--doPlayerSendCancel(cid, "Voce precisa aguardar "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." para poder entrar novamente.")
		doPlayerSendCancel(cid, "You need to wait "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." to get through the door.")
		return true
	end

	-- Caso esteja tudo certo --
	doPlayerRemoveItem(cid, configBossRoom.portaMagica.ticketID, 1)
	doTeleportThing(cid, configBossRoom.positionSalaAlavanca)
	doSendMagicEffect(getPlayerPosition(cid), 10)
	setPlayerStorageValue(cid, configBossRoom.portaMagica.storage, os.time() + (configBossRoom.portaMagica.cooldown)*3600) -- Seta o Cooldown (em horas).
	return true
end

 

 

 

actions > scripts  > alavancaBossRoom.lua:

 

  Ocultar conteúdo


function onUse(cid, item, fromPosition, itemEx, toPosition)

	local players = {}
	for i = 1, #configBossRoom.alavanca do
		local v = getTopCreature(configBossRoom.alavanca[i]).uid 
		players[i] = isPlayer(v) and v or nil
	end

	function checkPlayersInRoom() -- Responsável por verificar se há jogadores na sala enfrentando o boss.
		local player_room = 0
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local pos = {x=x, y=y, z=z,stackpos = 253}
					local thing = getThingfromPos(pos)
					if thing.itemid > 0 and isPlayer(thing.uid) == true then
						player_room = player_room+1
					end
				end
			end
		end
		return player_room
	end


	if #players < configBossRoom.minPlayers then
		doPlayerSendCancel(cid, "You need at least "..configBossRoom.minPlayers.." players to enter.")
		return true
	end

	if checkPlayersInRoom() >= 1 then
			doPlayerSendTextMessage(cid,19, "There is already a team in the boss room.")  
		return true
	end

	function playersTP(position) -- Responsável por teleportar os jogadores
		for i = 1, 6 do
			if players[i] then
				doTeleportThing(players[i], position)
				doSendMagicEffect(position, CONST_ME_TELEPORT)
			end
		end
	end

	function removeBoss() -- Responsavel por Remover o BOSS da sala (caso os players nao tenham matado)
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local area = {x = x, y = y, z = z}
					local creature = getTopCreature(area).uid
					if isCreature(creature) then   
						doRemoveCreature(creature)
					end
				end
			end
		end
	end

	function checkBossTime() -- Responsável por verificar se os jogadores matou ou não o boss após 10 minutos.
		for x = configBossRoom.areaSalaBoss[1].x - 1, configBossRoom.areaSalaBoss[2].x + 1 do
			for y = configBossRoom.areaSalaBoss[1].y - 1, configBossRoom.areaSalaBoss[2].y + 1 do
				local pos = {x=x, y=y, z=configBossRoom.areaSalaBoss[1].z}
				local m = getTopCreature(pos).uid
				if m ~= 0 and isMonster(m) and isInArray(configBossRoom.name, getCreatureName(m)) then
					playersTP(configBossRoom.positionKickPlayer)
					removeBoss()
				end
			end 
		end
		return false 
	end

		playersTP(configBossRoom.positionSalaBoss)
		doCreateMonster(configBossRoom.name, configBossRoom.positionSpawnBoss)
		addEvent(checkBossTime, configBossRoom.timeToKill*60*1000)
		return true
end

 

 

 

 

actions > scripts > bauBossRoom.lua:

 

 

  Ocultar conteúdo


function onUse(cid, item, fromPosition, itemEx, toPosition)

		local randomItem = configBossRoom.recompensasID[math.random(1, #configBossRoom.recompensasID)]

		doPlayerAddItem(cid, randomItem)
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
		doSendMagicEffect(getThingPos(cid), 49)

		doPlayerSendTextMessage(cid, 22, "Congratulations! You received a "..getItemNameById(randomItem).." for killing the boss!") -- Mensagem que o player vai receber quando clicar no bau.
	return true
end

 

 

 

agora em creaturescripts > creaturescripts.xml:

 

 


<!-- Boss Room -->
<event type="death" name="bossTeleport" script="bossTeleport.lua"/>

 

 

creaturescripts >  scripts > bossTeleport.lua:

 

  Ocultar conteúdo


function onDeath(cid)

    registerCreatureEvent(cid, "bossTeleport")

    function removeTeleporte()
        local tp = getTileItemById(configBossRoom.positionSalaRecompensas[1], 5023).uid
        doRemoveItem(tp, 1)
        doSendMagicEffect(configBossRoom.positionSalaRecompensas[1], CONST_ME_POFF)
    end

    if getCreatureName(cid) == configBossRoom.name then
        doCreatureSay(cid, "A new teleporter has been created. You have "..configBossRoom.timeOpenTP.." seconds to leave this room.", TALKTYPE_ORANGE_1)
        doCreateTeleport(5023, configBossRoom.positionSalaRecompensas[2], configBossRoom.positionSalaRecompensas[1])
        addEvent(removeTeleporte, configBossRoom.timeOpenTP*1000)
    end

    return true
end

 

 

 

por fim, vá até em data > monster > abra o arquivo do seu boss. ex: "NomeDoBoss.xml" e adicione a tag abaixo:

 


	<script> 
		<event name="bossTeleport"/> 
	</script>

 

 

 

 

 

 

 

 

nao sei se fiz algo de errado, mas nao esta expulsando da sala nem abrindo tp quando a criatura morre

Editado por Carlinhous1996 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 19/10/2022 em 19:42, Imperius disse:

Tipo assim?

 

  Mostrar conteúdo oculto

 

 

 

Configuração:

 

para facilitar na manutenção, crie um arquivo em data > lib > configBossRoom.lua:

 


-- made by Imperius
-- == Configurações - BOSS ROOM ===

configBossRoom = {
    name = "Dragon Lord", -- nome do boss.
    minPlayers = 3, -- Quantidade Min de players para participar.
 
    timeToKill = 10, -- Tempo (em minutos)  que os players terão para matar o boss.
    timeOpenTP = 30, -- Tempo (em segundos) que o teleport do salão de recompensas ficará aberto após matar o boss. 

    -- Coloque abaixo ID de todas as recompensas que serão sorteadas ao clicar no bau (somente uma será entregue) --
    recompensasID = {2494, 2195, 2400, 7708},

    portaMagica = {
        storage = 1234569, -- Responsável por verificar o cooldown.
		ticketID = 10306,  -- ID do ticket que o player precisará para passar pela porta.
		cooldown = 4       -- Tempo em horas.
    },

    alavanca = { -- Coloque as posições dos sqm que os players precisará estar pisando para usar a alavanca. (estilo a ahini quest).
        {x = 32346, y = 31940, z = 8}, -- player 1
        {x = 32347, y = 31940, z = 8}, -- player 2
        {x = 32348, y = 31940, z = 8}, -- player 3
        {x = 32349, y = 31940, z = 8}, -- player 4
        {x = 32350, y = 31940, z = 8}, -- player 5
        {x = 32351, y = 31940, z = 8}  -- player 6
    },

    areaSalaBoss = {{x = 32310, y = 31930, z = 8}, {x = 32319, y = 31937, z = 8}}, -- Canto superior esquerdo | Canto inferior direito. (Sala do Boss)

  	positionKickPlayer = {x = 32354, y = 31940, z = 8}, -- Position onde os players serão teleportados caso não tenha matado o boss em 10 minutos.
    positionSalaAlavanca = {x = 32351, y = 31940, z = 8}, -- Position onde o player será teleportado ao clicar na porta. (igual o do vídeo).
    positionSalaBoss = {x = 32314, y = 31931, z = 8},  -- Position onde os players irão ser teleportados ao usar a alavanca.
    positionSpawnBoss = {x = 32315, y = 31936, z = 8}, -- Position onde o boss irá aparecer.
    positionSalaRecompensas = {{x = 32319, y = 31937, z = 8}, {x = 32318, y = 31930, z = 5}} -- onde o TP vai abrir após matar o boss | onde o TP vai levar os players.
} 

 

 

em data > actions > actions.xml:

 


	<!-- Porta Magica (Boss Room) -->
	<action uniqueid="65000" event="script" value="portaBossRoom.lua"/>
	
	<!-- Alavanca (Boss Room)-->
	<action uniqueid="65001" event="script" value="alavancaBossRoom.lua"/>

	<!-- bau recompensa (Boss Room) -->
	<action uniqueid="65002" script="bauBossRoom.lua" />

 

aviso: Não se esqueça de adicionar a uniqueid lá no Remere's Map Editor.

 

actions > scripts > portaBossRoom.lua:

 

 

  Mostrar conteúdo oculto


function onUse(cid, item, fromPosition, itemEx, toPosition)

	-- Caso o player não tenha o ticket --
	if getPlayerItemCount(cid, configBossRoom.portaMagica.ticketID) < 1 then 
		doPlayerSendCancel(cid, "You need at least one "..getItemNameById(configBossRoom.ticketID).." to be able to go through the door.")
		return true
	end

	-- function de tempo by (FeeTads)
	local function getTimeString(self)
		local format = {
			{'day', self / 60 / 60 / 24},
			{'hour', self / 60 / 60 % 24},
			{'minute', self / 60 % 60},
			{'second', self % 60}
		}
	
		local out = {}
		for k, t in ipairs(format) do
			local v = math.floor(t[2])
			if(v > 0) then
				table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
			end
		end
		local ret = table.concat(out)
		if ret:len() < 16 and ret:find('second') then
			local a, b = ret:find(' and ')
			ret = ret:sub(b+1)
		end
		return ret
	end

	-- Caso não tenha passado o tempo do cooldown --
	if getPlayerStorageValue(cid, configBossRoom.portaMagica.storage) - os.time() >= 1 then
		--doPlayerSendCancel(cid, "Voce precisa aguardar "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." para poder entrar novamente.")
		doPlayerSendCancel(cid, "You need to wait "..getTimeString((getPlayerStorageValue(cid, configBossRoom.portaMagica.storage)-os.time())).." to get through the door.")
		return true
	end

	-- Caso esteja tudo certo --
	doPlayerRemoveItem(cid, configBossRoom.portaMagica.ticketID, 1)
	doTeleportThing(cid, configBossRoom.positionSalaAlavanca)
	doSendMagicEffect(getPlayerPosition(cid), 10)
	setPlayerStorageValue(cid, configBossRoom.portaMagica.storage, os.time() + (configBossRoom.portaMagica.cooldown)*3600) -- Seta o Cooldown (em horas).
	return true
end

 

 

 

actions > scripts  > alavancaBossRoom.lua:

 

  Mostrar conteúdo oculto


function onUse(cid, item, fromPosition, itemEx, toPosition)

	local players = {}
	for i = 1, #configBossRoom.alavanca do
		local v = getTopCreature(configBossRoom.alavanca[i]).uid 
		players[i] = isPlayer(v) and v or nil
	end

	function checkPlayersInRoom() -- Responsável por verificar se há jogadores na sala enfrentando o boss.
		local player_room = 0
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local pos = {x=x, y=y, z=z,stackpos = 253}
					local thing = getThingfromPos(pos)
					if thing.itemid > 0 and isPlayer(thing.uid) == true then
						player_room = player_room+1
					end
				end
			end
		end
		return player_room
	end


	if #players < configBossRoom.minPlayers then
		doPlayerSendCancel(cid, "You need at least "..configBossRoom.minPlayers.." players to enter.")
		return true
	end

	if checkPlayersInRoom() >= 1 then
			doPlayerSendTextMessage(cid,19, "There is already a team in the boss room.")  
		return true
	end

	function playersTP(position) -- Responsável por teleportar os jogadores
		for i = 1, 6 do
			if players[i] then
				doTeleportThing(players[i], position)
				doSendMagicEffect(position, CONST_ME_TELEPORT)
			end
		end
	end

	function removeBoss() -- Responsavel por Remover o BOSS da sala (caso os players nao tenham matado)
		for x = configBossRoom.areaSalaBoss[1].x, configBossRoom.areaSalaBoss[2].x do
			for y = configBossRoom.areaSalaBoss[1].y, configBossRoom.areaSalaBoss[2].y do
				for z = configBossRoom.areaSalaBoss[1].z, configBossRoom.areaSalaBoss[2].z do
					local area = {x = x, y = y, z = z}
					local creature = getTopCreature(area).uid
					if isCreature(creature) then   
						doRemoveCreature(creature)
					end
				end
			end
		end
	end

	function checkBossTime() -- Responsável por verificar se os jogadores matou ou não o boss após 10 minutos.
		for x = configBossRoom.areaSalaBoss[1].x - 1, configBossRoom.areaSalaBoss[2].x + 1 do
			for y = configBossRoom.areaSalaBoss[1].y - 1, configBossRoom.areaSalaBoss[2].y + 1 do
				local pos = {x=x, y=y, z=configBossRoom.areaSalaBoss[1].z}
				local m = getTopCreature(pos).uid
				if m ~= 0 and isMonster(m) and isInArray(configBossRoom.name, getCreatureName(m)) then
					playersTP(configBossRoom.positionKickPlayer)
					removeBoss()
				end
			end 
		end
		return false 
	end

		playersTP(configBossRoom.positionSalaBoss)
		doCreateMonster(configBossRoom.name, configBossRoom.positionSpawnBoss)
		addEvent(checkBossTime, configBossRoom.timeToKill*60*1000)
		return true
end

 

 

 

 

actions > scripts > bauBossRoom.lua:

 

 

  Mostrar conteúdo oculto


function onUse(cid, item, fromPosition, itemEx, toPosition)

		local randomItem = configBossRoom.recompensasID[math.random(1, #configBossRoom.recompensasID)]

		doPlayerAddItem(cid, randomItem)
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
		doSendMagicEffect(getThingPos(cid), 49)

		doPlayerSendTextMessage(cid, 22, "Congratulations! You received a "..getItemNameById(randomItem).." for killing the boss!") -- Mensagem que o player vai receber quando clicar no bau.
	return true
end

 

 

 

agora em creaturescripts > creaturescripts.xml:

 

 


<!-- Boss Room -->
<event type="death" name="bossTeleport" script="bossTeleport.lua"/>

 

 

creaturescripts >  scripts > bossTeleport.lua:

 

  Mostrar conteúdo oculto


function onDeath(cid)

    registerCreatureEvent(cid, "bossTeleport")

    function removeTeleporte()
        local tp = getTileItemById(configBossRoom.positionSalaRecompensas[1], 5023).uid
        doRemoveItem(tp, 1)
        doSendMagicEffect(configBossRoom.positionSalaRecompensas[1], CONST_ME_POFF)
    end

    if getCreatureName(cid) == configBossRoom.name then
        doCreatureSay(cid, "A new teleporter has been created. You have "..configBossRoom.timeOpenTP.." seconds to leave this room.", TALKTYPE_ORANGE_1)
        doCreateTeleport(5023, configBossRoom.positionSalaRecompensas[2], configBossRoom.positionSalaRecompensas[1])
        addEvent(removeTeleporte, configBossRoom.timeOpenTP*1000)
    end

    return true
end

 

 

 

por fim, vá até em data > monster > abra o arquivo do seu boss. ex: "NomeDoBoss.xml" e adicione a tag abaixo:

 


	<script> 
		<event name="bossTeleport"/> 
	</script>

 

 

 

 

 

 

 

 

sumiu

Link para o post
Compartilhar em outros sites

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo