Ir para conteúdo
  • 0

ajuda com anihi bloqueada


gabrielbuff

Pergunta

Esse script funciona desta maneira, é uma anihi que precisam de 5 jogadores, ao entrar na quest, os jogadores tem 120 segundos para matarem os bichos, caso não consigam serão levados ao templo, e ao puxar a alavanca fica uma contagem de 120 ao 0... porem ao terminar a contagem ninguem consegue mais entrar, fica bloqueada e não esta teletransportando os player para x posição desejada não ocorre nenhum erro no distro.

 

function isOnSameFloor(fromPos, toPos)
    return fromPos.z == toPos.z and true or false
end

function isEven(arg)
    return arg % 2 == 0 and true or false
end

function getMiddlePos(fromPos, toPos)
    if not isOnSameFloor(fromPos, toPos) then
        return false
    end
    
    local middle = {x = 0, y = 0, z = 0}    
        middle.x = isEven(fromPos.x + toPos.x) and (fromPos.x + toPos.x)/2 or math.floor((fromPos.x + toPos.x)/2) + 1
        middle.y = isEven(fromPos.y + toPos.y) and (fromPos.y + toPos.y)/2 or math.floor((fromPos.y + toPos.y)/2) + 1
        middle.z = fromPos.z or toPos.z
    return middle
end

function getDistanceRadius(fromPos, toPos)
    if not isOnSameFloor(fromPos, toPos) then
        return false
    end
    
    local distance = getDistanceBetween(fromPos, toPos)
    return isEven(distance) and (distance/2) or math.floor(distance/2) + 1
end

function clearArea(middlePos, rangex, rangey)
    local final = {x=1382, y=837, z=8} -- Posição onde será teleportado quando acabar o tempo
    
    for i = -rangex, rangex do
        for j = -rangey, rangey do
            pos = {x = middlePos.x + i, y = middlePos.y + j, z = middlePos.z}
            creature = getTopCreature(pos).uid
            
            if isMonster(creature) then
                doSendMagicEffect(getThingPos(creature), 14)
                doRemoveCreature(creature)
            elseif isPlayer(creature) then
                doSendMagicEffect(getThingPos(creature), 10)
                doTeleportThing(creature, final)
            end
        end
    end
    
    setGlobalStorageValue(sto, -1)
    return true
end
    
local t = {
    lvl = 100,
    entrada = {
        {x = 1427, y = 824, z = 7}, -- pos players
        {x = 1426, y = 824, z = 7}, -- pos players
        {x = 1425, y = 824, z = 7}, -- pos players
        {x = 1424, y = 824, z = 7}, -- pos players
        {x = 1423, y = 824, z = 7}, -- pos players
    },
    saida = {
        {x = 1440, y = 824, z = 7}, -- pos para onde eles irão
        {x = 1439, y = 824, z = 7}, -- pos para onde eles irão
        {x = 1438, y = 824, z = 7}, -- pos para onde eles irão
        {x = 1437, y = 824, z = 7}, -- pos para onde eles irão
        {x = 1436, y = 824, z = 7}, -- pos para onde eles irão
    },
    monstros = {
        {{x = 1434, y = 822, z = 7}, "Demon"}, -- defina pos dos montros e nomes
        {{x = 1434, y = 824, z = 7}, "Demon"}, -- defina pos dos montros e nomes
        {{x = 1434, y = 826, z = 7}, "Demon"}, -- defina pos dos montros e nomes
        {{x = 1442, y = 822, z = 7}, "Demon"}, -- defina pos dos montros e nomes
        {{x = 1442, y = 824, z = 7}, "Demon"}, -- defina pos dos montros e nomes
        {{x = 1442, y = 826, z = 7}, "Demon"}, -- defina pos dos montros e nomes
    }
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local configure = {
        fromPos = {x=1433, y=820, z=7}, -- posição superior esquerda do mapa, da area em que esta mapeado a area.
        toPos = {x=1443, y=828, z=7}, -- posição inferior direita do mapa, da area em que esta mapeado a area.
        boss = "Demon" -- Aqui você bota o nome do monstro que você quer remover
    }
    
    local config = {
        position = {x=1428, y=824, z=7}, -- Contagem
        position1 = {x=1434, y=821, z=7}, -- Contagem
        position2 = {x=1434, y=827, z=7}, -- Contagem
        position3 = {x=1442, y=821, z=7}, -- Contagem
        position4 = {x=1442, y=827, z=7}, -- Contagem
        fromPosition = {x=1433, y=820, z=7},
        toPosition = {x=1443, y=828, z=7},
        id = 1498,
        time = 1 -- tempo que o teleport ira sumir em minutos
    }

    local time = 60
    local sto = 5973
    local check = {}
    
    for _, k in ipairs(t.entrada) do
        local x = getTopCreature(k).uid
        if(x == 0 or not isPlayer(x) or getPlayerLevel(x) < t.lvl) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa de 5 jogadores para entrar na quest.")
            return true
        end
        
            if getGlobalStorageValue(sto) == 1 then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde até que seja liberada.")
                return true
            end
            
        table.insert(check, X):
    end
    
                for _, summon in pairs(t.monstros) do
                    local creature = getTopCreature(summon[1]).uid
                    doCreateMonster(summon[2], summon[1])
                end
                
                    for i, tid in ipairs(check) do
                        doTeleportThing(tid, t.saida, false)
                        doSendMagicEffect(t.saida, 10)
                        doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
                    end
                    
            for i = 1,time do
                formula = time - 1*i
                addEvent(doSendAnimatedText, i*1000, config.position, formula, TEXTCOLOR_RED)
                addEvent(doSendAnimatedText, i*1000, config.position1, formula, TEXTCOLOR_RED)
                addEvent(doSendAnimatedText, i*1000, config.position2, formula, TEXTCOLOR_RED)
                addEvent(doSendAnimatedText, i*1000, config.position3, formula, TEXTCOLOR_RED)
                addEvent(doSendAnimatedText, i*1000, config.position4, formula, TEXTCOLOR_RED)
            end
    
    setGlobalStorageValue(sto, 1)
    local rx = getDistanceRadius(configure.fromPos, configure.toPos)
    addEvent(clearArea, config.time * 60 * 1000, getMiddlePos(configure.fromPos, configure.toPos), rx, rx)
    return true
end

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Eu fiz esse script para um membro que queria uma annihi com tempo; vê se te serve.

Citar

--[[> Annihilator script by Marcryzius D'evil <]]-- 
local pos_demons,pos_players,tele_players,exit_players = { 
-- posições onde serão sumonados os monstros na annihilator 
   {x=1119, y=1241, z=11,stackpos=253}, 
   {x=1119, y=1242, z=11,stackpos=253}, 
   {x=1119, y=1243, z=11,stackpos=253}, 
   {x=1127, y=1241, z=11,stackpos=253}, 
   {x=1127, y=1242, z=11,stackpos=253}, 
   {x=1127, y=1243, z=11,stackpos=253} 
},{ 
   --posições onde estão os players antes de irem a sala da annihi 
   {x=1113,y=1242,z=11,stackpos=253}, 
   {x=1112,y=1242,z=11,stackpos=253}, 
   {x=1111,y=1242,z=11,stackpos=253}, 
   {x=1110,y=1242,z=11,stackpos=253}, 
   {x=1109,y=1242,z=11,stackpos=253}, 
},{ 
   --posições onde serão teleportados os players para a sala da annihi 
   {x=1125,y=1242,z=11,stackpos=253}, 
   {x=1124,y=1242,z=11,stackpos=253}, 
   {x=1123,y=1242,z=11,stackpos=253}, 
   {x=1122,y=1242,z=11,stackpos=253}, 
   {x=1121,y=1242,z=11,stackpos=253}, 
},{x=1109,y=1242,z=11,stackpos=253} -- posição onde será enviados os players quando acabar o tempo.

 

local level,time_annihi = 100,60 -- tempo em segundos
QUANT = time_annihi -- não mecha 
RELOAD_ANNIHI = 0 -- não mecha 

 

--== FUNÇÕES NECESSARIAS ==-- 

local function getCreaturesInRange(position, radiusx, radiusy, showMonsters, showPlayers) --Marcryzius 
    local creaturesList = {} 
    for x = -radiusx, radiusx do 
        for y = -radiusy, radiusy do 
        local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z, stackpos = STACKPOS_TOP_CREATURE}) 
            if (creature.type == 1 and showPlayers == true) or (creature.type == 2 and showMonsters == true) then 
                table.insert(creaturesList, creature.uid) 
            end 
        end 
    end 
    return creaturesList 
end 
      

local function reloadAnnihi() 
local players = getCreaturesInRange(tele_players[3], 6, 6, true, true) 
   for _,cid in pairs(players) do 
      if(isPlayer(cid) == true)then 
         doTeleportThing(cid,exit_players, false) 
         doPlayerSendCancel(cid,"Voce não conseguiu completar a annihi e por isso foi retirado dela... NOOB!") 
      elseif(isMonster(cid))then 
         doRemoveCreature(cid) 
      end 
   end 
end 

--== FUNÇÕES NECESSARIAS ==-- 

function onUse(cid, item, fPos, itemEx, toPosition) 
   if(item.itemid == 1946)then 
      for _,pos in pairs(pos_players) do 
         local player = getThingFromPos(pos) 
         if not(isPlayer(player.uid))then 
            return true,doPlayerSendCancel(cid,"voce precisa de "..#pos_players.." pessoas para poder entrar na sala.") 
         elseif(getPlayerLevel(player.uid) < level)then 
            return true,doPlayerSendCancel(cid,"Todos necessitam ter level "..level.." ou mais.") 
         end 
      end 
      local getMonsterInAnnihi = getCreaturesInRange(tele_players[3], 5, 5, true) 
      for k,pos  in pairs(pos_demons) do 
         if(k <= #pos_players)then 
         local player = getThingFromPos(pos_players[k]) 
            if(player.uid ~= nil)then 
               doTeleportThing(player.uid,tele_players[k], false) 
            end 
         end 
         if(#getMonsterInAnnihi == 0)then 
            doSummonCreature("demon", pos) -- Nome do monstro 
         end 
      end 
      if(QUANT == time_annihi)then 
         RELOAD_ANNIHI = addEvent(reloadAnnihi,time_annihi*1000) 
      end 
   elseif(item.itemid == 1945)then 
      if(#getCreaturesInRange(tele_players[3], 6, 6, false, true) > 0)then 
         return true,doPlayerSendCancel(cid,"Espere o time acabar de fazer a annihilator quest.") 
      end 
   end 
end 
 

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Administrador
3 minutos atrás, gabrielbuff disse:

UP

 

Opa, use este botão, no começo do tópico, para atualizar o destaque e obter mais respostas. UP nos comentários é considerado flood.

9895dd0052e9426b8b95bdddae36adb1.png

Link para o comentário
Compartilhar em outros sites

  • 0

troque essa parte:

 

   for _, k in ipairs(t.entrada) do        local x = getTopCreature(k).uid        if(x == 0 or not isPlayer(x) or getPlayerLevel(x) < t.lvl) then            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa de 5 jogadores para entrar na quest.")            return true        end        

por essa:

 

   for _, k in ipairs(t.entrada) do        local x = getTopCreature(k).uid        if x == 0 then            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa de 5 jogadores para entrar na quest.") return true	end	if isPlayer(x) and getPlayerLevel(x) < t.lvl then            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa de 5 jogadores level "..t.level.." ou mais para entrar na quest.") return true        endend

 

Link para o comentário
Compartilhar em outros sites

  • 0

Acabei esquecendo de ti, mas quando eu chegar em casa, e se eu tiver tempo, eu vejo isso pra ti.

O script que eu postei te serviu? Vou usar ele e por apenas a contagem regressiva. 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...