Ir para conteúdo

Omega

Posts Recomendados

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},
	}

 

 

  1. p1 a p4 são as posições de início dos jogadores (onde eles usam a alavanca para entrar na quest!)
  2. 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.
  3. top1 a top4 são as posições para onde os jogadores serão teletransportados
  4. [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:

 

2lm1kr6.jpg

 

 

 

t8ksjp.jpg

 

Link para o comentário
Compartilhar em outros sites

Testei, e funcionando 99%, unico problema é que quando da alguem erro "não tem 4 player, não são lvl 100" , a alavanca fica virando , não teria como deixa ela travada? para quando não der para ir a alavanca não se mova ? Mais mesmo assim obrigado, REP +

Editado por AlekysRocha19
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...