Ir para conteúdo

Featured Replies

Postado

.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. 

 

Resolvido por denizinhows

Ir para solução
Postado

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)

Postado
  • Autor
  • 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.

Postado
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)

Postado
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

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo