UP
- Fórum
- OTServ
- Suporte
- Resolvidos
- ajuda com anihi bloqueada
ajuda com anihi bloqueada
Por gabrielbuff, 27 de set. de 2016 em Resolvidos
info
Grupo: Campones
Registrado: 23/01/13
Posts: 29
Reputação: 0
Char no Tibia: pilantra

info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

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
info
Grupo: Campones
Registrado: 23/01/13
Posts: 29
Reputação: 0
Char no Tibia: pilantra

Poccnn, isso mesmo que eu queria.. mais faltou o time exemplo: 60, 59, 58..(contagem regressiva) na alavanca e em mais 4posições, configuraveis.
info
Grupo: Campones
Registrado: 23/01/13
Posts: 29
Reputação: 0
Char no Tibia: pilantra

UP
info
Grupo: Campones
Registrado: 23/01/13
Posts: 29
Reputação: 0
Char no Tibia: pilantra

UP
info
Grupo: Administrador
Registrado: 08/07/05
Posts: 5.8k
Reputação: +1.4k
Gênero: Outro

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.

info
Grupo: Campones
Registrado: 14/10/15
Posts: 42
Reputação: +14

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
info
Grupo: Campones
Registrado: 23/01/13
Posts: 29
Reputação: 0
Char no Tibia: pilantra

mendiguinho91, não funcionou, mais tambem não deu erro, ao usar a alavanca só aparece essa mensagem : " Aguarde até que seja liberada"
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

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.
info
Grupo: Campones
Registrado: 23/01/13
Posts: 29
Reputação: 0
Char no Tibia: pilantra




info
Grupo: Campones
Registrado: 23/01/13
Posts: 29
Reputação: 0
Char no Tibia: pilantra
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,
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