A pedido de um membro do fórum, fiz uma anihilator completa e tô postando pra quem quiser usar.
Ela faz as seguintes checagens:
- Todos os 4 pisos estão com jogadores?
- Todos os jogadores são lvl 100+?
- Existe algum outro time dentro da anihilator?
- Algum jogador do time já fez essa quest?
Caso a resposta seja negativa para qualquer uma dessas perguntas, os jogadores não serão teletransportados.
actions/scripts/omegaannihi.lua
-- Anihi completa feita por Leoric (Omega no XTibia) -- function getMonstersInArea(pos1,pos2) local players = {} if pos1.x and pos1.y and pos2.x and pos2.y and pos1.z and pos2.z then for a = pos1.x, pos2.x do for b = pos1.y,pos2.y do local pos = {x=a,y=b,z=pos1.z} if isMonster(getTopCreature(pos).uid) then table.insert(players,getTopCreature(pos).uid) end end end return players else return false end end function getPlayersInArea(pos1,pos2) local players = {} if pos1.x and pos1.y and pos2.x and pos2.y and pos1.z and pos2.z then for a = pos1.x, pos2.x do for b = pos1.y,pos2.y do for z=pos1.z,pos2.z do local pos = {x=a,y=b,z=z} if isPlayer(getTopCreature(pos).uid) then table.insert(players,getTopCreature(pos).uid) end end end end return players else return false end end function onUse(cid, item, fromPos, itemEx, toPos) local pos = { p1 = {x=268, y=644, z=7}, -- posições dos jogadores antes da anihi p2 = {x=269, y=644, z=7}, p3 = {x=270, y=644, z=7}, p4 = {x=271, y=644, z=7}, anihi1 = {x=262, y=638, z=8}, -- posições de início e fim da anihi (coloque um z=6 e outro z=7 e todos os números tem que ser em ordem crescente) anihi2 = {x=274, y=649, z=9}, top1 = {x=268, y=644, z=8}, -- posições para onde cada player irá na anihi top2 = {x=269, y=644, z=8}, top3 = {x=270, y=644, z=8}, top4 = {x=271, y=644, z=8}, } anihiStorage = 23601 -- storage pra checar se já fez a anihi (esse código não vai mudar, só nos baús) local demons = { [1] = {x=265, y=642, z=8}, -- posição de cada demon [2] = {x=265, y=645, z=8}, [3] = {x=268, y=641, z=8}, [4] = {x=271, y=641, z=8}, [5] = {x=268, y=647, z=8}, [6] = {x=271, y=647, z=8}, } local player1 = getTopCreature(pos.p1) local player2 = getTopCreature(pos.p2) local player3 = getTopCreature(pos.p3) local player4 = getTopCreature(pos.p4) if item.itemid == 1945 then if isPlayer(player1.uid) and isPlayer(player2.uid) and isPlayer(player3.uid) and isPlayer(player4.uid) then local players = {[1] = player1.uid, [2] = player2.uid, [3] = player3.uid, [4] = player4.uid} local playersInAnihi = getPlayersInArea(pos.anihi1, pos.anihi2) local j = 0 if #playersInAnihi > 0 then for _, pid in ipairs(players) do doPlayerSendCancel(pid, 'You have to wait until another team clears off the room before you can enter.') end j = 1 end if j == 1 then doTransformItem(item.uid, item.itemid+1) return true end if getPlayerLevel(player1.uid) >= 100 and getPlayerLevel(player2.uid) >= 100 and getPlayerLevel(player3.uid) >= 100 and getPlayerLevel(player4.uid) >= 100 then local i = 0 for _,pid in ipairs(players) do if getPlayerStorageValue(pid, anihiStorage) > -1 then i = 1 for _,pad in ipairs(players) do doPlayerSendCancel(pad, 'Someone in your team has already done this quest.') end break end end if i == 1 then doTransformItem(item.uid, item.itemid+1) return true end local monstersInAnihi = getMonstersInArea(pos.anihi1,pos.anihi2) if #monstersInAnihi > 0 then for _, monst in ipairs(monstersInAnihi) do doRemoveCreature(monst) end end for _, position in ipairs(demons) do doCreateMonster('demon', position) end doTeleportThing(player1.uid, pos.top1) doSendMagicEffect(pos.top1,10) doTeleportThing(player2.uid, pos.top2) doSendMagicEffect(pos.top2,10) doTeleportThing(player3.uid, pos.top3) doSendMagicEffect(pos.top3,10) doTeleportThing(player4.uid, pos.top4) doSendMagicEffect(pos.top4,10) else for _,pid in ipairs(players) do if getPlayerLevel(pid) < 100 then doPlayerSendCancel(pid, 'You have to be level 100 to enter this quest.') else doPlayerSendCancel(pid, 'Someone in your team is under level 100.') end end end else doPlayerSendCancel(cid, 'You need 4 players for this quest.') end doTransformItem(item.uid, item.itemid+1) return true elseif item.itemid == 1946 then doTransformItem(item.uid, item.itemid-1) return true end return true end
actions/scripts/omegachests.lua
function onUse(cid, item, fromPos, itemEx, toPos) local annihiItem = { [3050] = 2431, -- Stonecutter [3051] = 2326, -- Annihi bear (troque para 2421 se você preferir o Thuder Hammer) [3052] = 2400, -- Magic sword [3053] = 2494, -- Demon Armor } annihiStorage = 23601 if isInArray({3050,3051,3052,3053},item.uid) then if getPlayerStorageValue(cid, annihiStorage) == -1 then if getPlayerFreeCap(cid) >= getItemWeightById(annihiItem[item.uid],1) then if doPlayerAddItem(cid, annihiItem[item.uid], 1, false) then doPlayerSendTextMessage(cid,25,'You have found a '..getItemNameById(annihiItem[item.uid])..'.') setPlayerStorageValue(cid, annihiStorage, 1) else doPlayerSendTextMessage(cid,25, 'You have found a '..getItemNameById(annihiItem[item.uid])..'. You don\'t have enough slots to hold it.') end else doPlayerSendTextMessage(cid,25, 'You have found a '..getItemNameById(annihiItem[item.uid])..'. It weighs '..getItemWeightById(annihiItem[item.uid],1)..'.00. It is too heavy.') end else doPlayerSendTextMessage(cid,25,'It is empty.') end end return true end
TAGs no actions.xml
<action actionid="120391" script="omegaannihi.lua"/> <action actionid="120392" script="omegachests.lua"/>
Configuração
Vamos da parte mais difícil para a mais fácil, começaremos no omegaanihi.lua
- Essa é a parte da configuração:
local pos = { p1 = {x=268, y=644, z=7}, -- posições dos jogadores antes da anihi p2 = {x=269, y=644, z=7}, p3 = {x=270, y=644, z=7}, p4 = {x=271, y=644, z=7}, anihi1 = {x=262, y=638, z=8}, -- posições de início e fim da anihi (coloque um z=6 e outro z=7 e todos os números tem que ser em ordem crescente) anihi2 = {x=274, y=649, z=9}, top1 = {x=268, y=644, z=8}, -- posições para onde cada player irá na anihi top2 = {x=269, y=644, z=8}, top3 = {x=270, y=644, z=8}, top4 = {x=271, y=644, z=8}, } annihiStorage = 23601 -- storage pra checar se já fez a anihi (esse código não vai mudar, só nos baús) local demons = { [1] = {x=265, y=642, z=8}, -- posição de cada demon [2] = {x=265, y=645, z=8}, [3] = {x=268, y=641, z=8}, [4] = {x=271, y=641, z=8}, [5] = {x=268, y=647, z=8}, [6] = {x=271, y=647, z=8}, }
- p1 a p4 são as posições de início dos jogadores (onde eles usam a alavanca para entrar na quest!)
- annihi1 e annihi2 são as partes complicadas. Preste atenção: essas são as posições de início e fim da annihilator. A partir dessas posições, imagine um quadrado. Esse quadrado deve englobar TODA a sua annihi, pois as checagens serão feitas nele. Aqui você deve colocar a posição do canto esquerdo superior da sua annihi em annihi1 e o canto inferior direito da sua annihi, em annihi2. anihi1 deverá ficar no subsolo (para cobrir também a área dos baús). Seguem duas imagens no fim do tópico.
- top1 a top4 são as posições para onde os jogadores serão teletransportados
- [1] a [6] são as posições nas quais os demons serão criados
- Agora, para colocar no mapa, você deve colocar o actionid da alavanca igual a 120391 e dos baús 120392 (todos os 4).
- Em seguida, você deve atribuir aos baús os uniqueids 3050, 3051, 3052 e 3053 (um para cada). É fácil configurar qual baú dará qual item.
Agora você tem sua annihilator 100% funcionando.
OBS.: se aparecer algum erro, poste o erro na distro junto.
Imagens: