Postado Junho 29, 2023 1 ano 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
Postado Julho 3, 2023 1 ano 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 [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Julho 4, 2023 1 ano Autor 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.
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.