Postado Janeiro 31, 2019 6 anos 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 Fevereiro 1, 2019 6 anos não é nesse script. é nesse aqui data/actions/scripts/portaarena.lua [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Fevereiro 2, 2019 6 anos 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 trueend Editado Fevereiro 2, 2019 6 anos 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.