Ir para conteúdo

Featured Replies

Postado

Boa tarde, tô testando esse script só que depois do tempo da quest (2 minutos) ele vai executar o cleararea ele da erro na distro.

 

ERRO

Spoiler

[Error - Action Interface] 
[31/01/2019 14:19:52] In a timer event called from: 
[31/01/2019 14:19:52] data/actions/scripts/one/anihilation/anihi.lua:onUse
[31/01/2019 14:19:52] Description: 
[31/01/2019 14:19:52] data/actions/scripts/portaarena.lua:33: attempt to perform arithmetic on local 'rangex' (a nil value)
[31/01/2019 14:19:52] stack traceback:
[31/01/2019 14:19:52]     data/actions/scripts/portaarena.lua:33: in function 'clearArea'
[31/01/2019 14:19:52]     data/actions/scripts/one/anihilation/anihi.lua:100: in function <data/actions/scripts/one/anihilation/anihi.lua:99>
 

 

 

Quest.lua

Spoiler

local config = {
    storage = 9721,
    time = 2,                                --Tempo para fazer a quest, em minutos.
    interval = 2,                           --Tempo para poder usar a alavanca novamente, em minutos.
    timerPos = {
        {x = 1127, y = 1152, z = 7}, --Posições onde o tempo restante aparecerá.
            {x = 1129, y = 1150, z = 8},
            {x = 1129, y = 1156, z = 8},
        {x = 1121, y = 1150, z = 8},
        {x = 1121, y = 1156, z = 8},
},
    monster = {
        name = "Annihilon",               --Nome do monstro.
        pos = {
            {x = 1121, y = 1151, z = 8},           --Posições onde ele vai nascer.
            {x = 1121, y = 1153, z = 8},
            {x = 1121, y = 1155, z = 8},
            {x = 1129, y = 1151, z = 8},
            {x = 1129, y = 1153, z = 8},
            {x = 1129, y = 1155, z = 8},
        },
    },
    player = {
        {{x = 1126, y = 1152, z = 7}, {x = 1127, y = 1153, z = 8}},      --{{posição onde o player deve ficar}, {para onde será teleportado}},
    {{x = 1125, y = 1152, z = 7}, {x = 1126, y = 1153, z = 8}},
    {{x = 1124, y = 1152, z = 7}, {x = 1125, y = 1153, z = 8}},
    {{x = 1123, y = 1152, z = 7}, {x = 1124, y = 1153, z = 8}},
    {{x = 1122, y = 1152, z = 7}, {x = 1123, y = 1153, z = 8}},
    },
    area = {{x = 1121, y = 1150, z = 8}, {x = 1129, y = 1156, z = 8}},   --{{posição superior esquerda da área}, {posição inferior direita da área}},
}
local cidPos = {}
function clearArea()
    for x = config.area[1].x, config.area[2].x do
        for y = config.area[1].y, config.area[2].y do
            local pos = {x = x, y = y, z = config.area[1].z}
            local pid = getTopCreature(pos).uid
            if pid > 0 then
                if isPlayer(pid) then
                    doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)))
                    doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_RED, "Você não conseguiu completar a Quest.")
                else
                    doRemoveCreature(pid)
                end
            end
        end
    end
    setGlobalStorageValue(config.storage, os.time() + config.interval * 60)
end
function checkPlayer()
    for x = config.area[1].x, config.area[2].x do
        for y = config.area[1].y, config.area[2].y do
            local pos = {x = x, y = y, z = config.area[1].z}
            local pid = getTopCreature(pos).uid
            if isPlayer(pid) then
                return true
            end
        end
    end
    return false
end
function convert(time)
    return {minutes = math.floor(time / 60), seconds = time - math.floor(time / 60) * 60}
end
function timer(time)
    if time < 0 or not checkPlayer() then
        return true
    end
    for i = 1, #config.timerPos do
        doSendAnimatedText(config.timerPos, convert(time).minutes..":"..convert(time).seconds, 215)
    end
    addEvent(timer, 1000, time - 1)
end
function onUse(cid)
    if getGlobalStorageValue(config.storage) > os.time() then
        return doPlayerSendCancel(cid, "Wait "..convert(getGlobalStorageValue(config.storage) - os.time()).minutes.."min and "..convert(getGlobalStorageValue(config.storage) - os.time()).seconds.."secs.")
    elseif checkPlayer() then
        return doPlayerSendCancel(cid, "Tem Player fazendo a Quest,Aguarde!.")
    end
    local p = {}
    for _, pos in pairs(config.player) do
        local pid = getTopCreature(pos[1]).uid
        if isPlayer(pid) then
            p[#p + 1] = pid
            cidPos[pid] = _
        end
    end
    if #p < #config.player then
        return doPlayerSendCancel(cid, "Não tem 5 Player necessarios.")
    end
    for i = 1, #p do
        doTeleportThing(p, config.player[cidPos[p]][2])
        doPlayerSendTextMessage(p, 27, "Boa sorte!")
    end
    for _, pos in pairs(config.monster.pos) do
        doCreateMonster(config.monster.name, pos)
    end
    timer(config.time * 60)
    addEvent(function()
        clearArea()
    end, config.time * 60 * 1000)
    return true
end

 

Postado
  • Autor

Agora vi o erro, e é nos 2 scripts de quest diferentes rsrsrs

E a script lá de cima da quest, ela não tá removendo os boss e nem os player na área informada.

 

 

aqui o script da porta

Spoiler

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=1071, y=1163, z=6} -- 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, -18)
    return true
end

local t = {
    lvl = 120,
    entrada = {
        {x = 1119, y = 1181, z = 8}, -- pos players
    },
    saida = {
        {x = 1170, y = 1193, z = 8}, -- pos para onde eles irão
    },
monstros = {
        {{x = 1173, y = 1189, z = 8}, "Arenathus"}, -- defina pos dos montros e nomes
    }
}
    


function onUse(cid, item, fromPosition, itemEx, toPosition)
    local configure = {
        fromPos = {x=1162, y=1181, z=8}, -- posição superior esquerda do mapa, da area em que esta mapeado a area.
        toPos = {x=1181, y=1200, z=8}, -- posição inferior direita do mapa, da area em que esta mapeado a area.
        boss = "Arenathus" -- Aqui você bota o nome do monstro que você quer remover
    }
    
    local config = {
        hnitem = "Você precisa de 1 Arena Key para entrar.", --Mensagem que o player receberá caso não tenha o item.
        hitem = "Você entrou na Arena Quest, você tem 5 minutos", --Mensagem que o player receberá caso tenha o item.
        item = 2092, --ID do item.
        qnt = 1, --Quantidade.
        position = {x=1119, y=1180, z=8}, -- Contagem
        fromPosition = {x=1115, y=1177, z=8},
        toPosition = {x=1121, y=1183, z=8},
        id = 1498,
        time = 1
    }


    local time = 300
    local check = {}


for _, k in ipairs(t.entrada) do
         local x = getTopCreature(k).uid  
            if(x == 0 or not isPlayer(x)) then  
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Fique na frente da porta para entrar.")
            return true
        end

 if getPlayerLevel(cid) <= 119 then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa estar level 120+.")
            return true
        end    


            if getGlobalStorageValue(sto) == 18 then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde até que a Arena seja liberada.")
                return true
            end

 if getPlayerItemCount (cid, config.item) >= config.qnt then
        doPlayerRemoveItem(cid, config.item, config.qnt)
                doPlayerSendTextMessage(cid, 18, config.hitem) -- Caso não queira que receba mensagem, apague essa linha.
        else
        doPlayerSendTextMessage(cid, 18, config.hnitem) -- Caso não queira que receba mensagem, apague essa linha.
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 == 6265 and 6265 or 6265)
                    end
                    
            for i = 1,time do
                formula = time - 1*i
                addEvent(doSendAnimatedText, i*1000, config.position, formula, TEXTCOLOR_RED)
            end
    
    setGlobalStorageValue(sto, 18)
    local rx = getDistanceRadius(configure.fromPos, configure.toPos)
    addEvent(clearArea, config.time * 300 * 1000, getMiddlePos(configure.fromPos, configure.toPos), rx, rx)
    return true
end

 

Editado por eunaosei123 (veja o histórico de edições)

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.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo