Ir para conteúdo
  • Cadastre-se

(Resolvido)Boss Room tfs 0.4


Ir para solução Resolvido por Vodkart,

Posts Recomendados

Galera estou com um probleminha com esse script

funciona quase tudo perfeito, o bug é tipo quando algum player morre na sala o boss não some, ai quando outro player entra na sala acumula o boss ai só depois de 10 minutos que o  boss.

o boss só some se passar 10m na sala

mas se alguem entrar na sala e morrer antes dos 10m e outro player entrar logo em seguida fica com 2 boss na sala.

 

só quero ajeitar isso o boss tem que sumir se alguem morrer na sala ou sair da sala

 

esse script é em lib e actions

 

 

Spoiler

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

BossRoom = {
    name = "Boss Ghazbaran", -- nome do boss.
    minPlayers = 1, -- 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 = 2157,  -- 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 = 32153, y = 32241, z = 7}, -- player 1
        {x = 32152, y = 32241, z = 7}, -- player 2
        {x = 32151, y = 32241, z = 7}, -- player 3
        {x = 32150, y = 32241, z = 7}, -- player 4
        {x = 32149, y = 32241, z = 7}, -- player 5
        {x = 32148, y = 32241, z = 7}  -- player 6
    },

    areaSalaBoss = {{x = 32186, y = 32240, z = 7}, {x = 32194, y = 32248, z = 7}}, -- Canto superior esquerdo | Canto inferior direito. (Sala do Boss)

      positionKickPlayer = {x = 32140, y = 32240, z = 7}, -- Position onde os players serão teleportados caso não tenha matado o boss em 10 minutos.
    positionSalaAlavanca = {x = 32145, y = 32241, z = 7}, -- Position onde o player será teleportado ao clicar na porta. (igual o do vídeo).
    positionSalaBoss = {x = 32186, y = 32248, z = 7},  -- Position onde os players irão ser teleportados ao usar a alavanca.
    positionSpawnBoss = {x = 32190, y = 32244, z = 7}, -- Position onde o boss irá aparecer.
    positionSalaRecompensas = {{x = 32194, y = 32240, z = 7}, {x = 32140, y = 32240, z = 7}} -- onde o TP vai abrir após matar o boss | onde o TP vai levar os players.

 

Spoiler

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

    local players = {}
    for i = 1, #BossRoom.alavanca do
        local v = getTopCreature(BossRoom.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 = BossRoom.areaSalaBoss[1].x, BossRoom.areaSalaBoss[2].x do
            for y = BossRoom.areaSalaBoss[1].y, BossRoom.areaSalaBoss[2].y do
                for z = BossRoom.areaSalaBoss[1].z, BossRoom.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 < BossRoom.minPlayers then
        doPlayerSendCancel(cid, "You need at least "..BossRoom.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 = BossRoom.areaSalaBoss[1].x, BossRoom.areaSalaBoss[2].x do
            for y = BossRoom.areaSalaBoss[1].y, BossRoom.areaSalaBoss[2].y do
                for z = BossRoom.areaSalaBoss[1].z, BossRoom.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 = BossRoom.areaSalaBoss[1].x - 1, BossRoom.areaSalaBoss[2].x + 1 do
            for y = BossRoom.areaSalaBoss[1].y - 1, BossRoom.areaSalaBoss[2].y + 1 do
                local pos = {x=x, y=y, z=BossRoom.areaSalaBoss[1].z}
                local m = getTopCreature(pos).uid
                if m ~= 0 and isMonster(m) and isInArray(BossRoom.name, getCreatureName(m)) then
                    playersTP(BossRoom.positionKickPlayer)
                    removeBoss()
                end
            end 
        end
        return false 
    end

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

Spoiler

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

    -- Caso o player não tenha o ticket --
    if getPlayerItemCount(cid, BossRoom.portaMagica.ticketID) < 1 then 
        doPlayerSendCancel(cid, "You need at least one "..getItemNameById(BossRoom.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, BossRoom.portaMagica.storage) - os.time() >= 1 then
        --doPlayerSendCancel(cid, "Voce precisa aguardar "..getTimeString((getPlayerStorageValue(cid, BossRoom.portaMagica.storage)-os.time())).." para poder entrar novamente.")
        doPlayerSendCancel(cid, "You need to wait "..getTimeString((getPlayerStorageValue(cid, BossRoom.portaMagica.storage)-os.time())).." to get through the door.")
        return true
    end

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

 

Link para o post
Compartilhar em outros sites
  • Solução

já existe a função de remover o boss, basta usá-la.

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	
	local players = {}
	for i = 1, #BossRoom.alavanca do
		local v = getTopCreature(BossRoom.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 = BossRoom.areaSalaBoss[1].x, BossRoom.areaSalaBoss[2].x do
			for y = BossRoom.areaSalaBoss[1].y, BossRoom.areaSalaBoss[2].y do
				for z = BossRoom.areaSalaBoss[1].z, BossRoom.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 < BossRoom.minPlayers then
		doPlayerSendCancel(cid, "You need at least "..BossRoom.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 = BossRoom.areaSalaBoss[1].x, BossRoom.areaSalaBoss[2].x do
			for y = BossRoom.areaSalaBoss[1].y, BossRoom.areaSalaBoss[2].y do
				for z = BossRoom.areaSalaBoss[1].z, BossRoom.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 = BossRoom.areaSalaBoss[1].x - 1, BossRoom.areaSalaBoss[2].x + 1 do
			for y = BossRoom.areaSalaBoss[1].y - 1, BossRoom.areaSalaBoss[2].y + 1 do
				local pos = {x=x, y=y, z=BossRoom.areaSalaBoss[1].z}
				local m = getTopCreature(pos).uid
				if m ~= 0 and isMonster(m) and isInArray(BossRoom.name, getCreatureName(m)) then
					playersTP(BossRoom.positionKickPlayer)
					removeBoss()
				end
			end 
		end
		return false 
	end
	removeBoss()
	playersTP(BossRoom.positionSalaBoss)
	doCreateMonster(BossRoom.name, BossRoom.positionSpawnBoss)
	addEvent(checkBossTime, BossRoom.timeToKill*60*1000)
	return true
end

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
19 horas atrás, Vodkart disse:

já existe a função de remover o boss, basta usá-la.

 


function onUse(cid, item, fromPosition, itemEx, toPosition)
	
	local players = {}
	for i = 1, #BossRoom.alavanca do
		local v = getTopCreature(BossRoom.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 = BossRoom.areaSalaBoss[1].x, BossRoom.areaSalaBoss[2].x do
			for y = BossRoom.areaSalaBoss[1].y, BossRoom.areaSalaBoss[2].y do
				for z = BossRoom.areaSalaBoss[1].z, BossRoom.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 < BossRoom.minPlayers then
		doPlayerSendCancel(cid, "You need at least "..BossRoom.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 = BossRoom.areaSalaBoss[1].x, BossRoom.areaSalaBoss[2].x do
			for y = BossRoom.areaSalaBoss[1].y, BossRoom.areaSalaBoss[2].y do
				for z = BossRoom.areaSalaBoss[1].z, BossRoom.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 = BossRoom.areaSalaBoss[1].x - 1, BossRoom.areaSalaBoss[2].x + 1 do
			for y = BossRoom.areaSalaBoss[1].y - 1, BossRoom.areaSalaBoss[2].y + 1 do
				local pos = {x=x, y=y, z=BossRoom.areaSalaBoss[1].z}
				local m = getTopCreature(pos).uid
				if m ~= 0 and isMonster(m) and isInArray(BossRoom.name, getCreatureName(m)) then
					playersTP(BossRoom.positionKickPlayer)
					removeBoss()
				end
			end 
		end
		return false 
	end
	removeBoss()
	playersTP(BossRoom.positionSalaBoss)
	doCreateMonster(BossRoom.name, BossRoom.positionSpawnBoss)
	addEvent(checkBossTime, BossRoom.timeToKill*60*1000)
	return true
end

 

tem mais um problema, o player só é removido da sala quando não consegue matar o boss depois de 10m, mas se o player matar o boss antes dos 10m ele não é removido da sala 

eu tbm queria por pra ele ser removido da sala quando matar o boss dps de 10m ele é removido da sala, pra ngm ficar afk na sala do boss.

 

 

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