Jump to content

(Resolvido)Arena inteligente


Go to solution Solved by antharaz,

Recommended Posts

Script que leva os 2 jogadores (circulo preto) para 2 posiçoes dentro da arena (circulo vermelho), e que, só permita o uso da alavanca se ambos os dois players forem level 300. E o ultimo que ficar na arena, é teleportado para outro sqm, (circulo amarelo), e recebe algumas premiações.

Algumas mensagens:

 

Você esta dentro da arena, agora enfrente o inimigo com honra!

 

Você matou o inimigo, e foi o ultimo a ficar na arena, por tanto, ganhou as seguintes premiações: 

 

arena.png

Edited by JcA (see edit history)
Link to post
Share on other sites

@Jinx leia as regras, não é a primeira vez que você é avisado:

2.7 - Dar "UP" para subir tópicos:
É totalmente proibido comentar "UP" para subir tópicos, caso você tenha a intenção você pode utilizar nosso recurso de subir tópicos e ele automaticamente irá te colocar um tempo de espera de 24 horas para realizar a função novamente. Caso o membro realize tal ato isso pode ser interpretado como flood.

 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link to post
Share on other sites

  • 3 weeks later...

Fiz o action levando em consideração que um player irá realmente matar o outro.

 

local config = {
				pos = {
						pos_entrada = {  --POSICAO DOS SQM PRETOS
										{x=118,y=379,z=7},
										{x=120,y=379,z=7}
						},
						pos_dentro = { --POS DOS SQM VERMELHOS
										{x=118,y=376,z=7},
										{x=120,y=376,z=7}
						},
						pos_ganhador = {x=124,y=379,z=7}
				},

				premiacao = { --PREMIACAO
								{id=2229,quantidade=4},
								{id=2207,quantidade=1},
								{id=2160,quantidade=1}
				},
				
				msg = {
						ganhou = 'Você matou o inimigo, e foi o ultimo a ficar na arena, por tanto, ganhou as seguintes premiações: ',
						entrou = 'Você esta dentro da arena, agora enfrente o inimigo com honra!'
				},
				
				level_minimo = 300
}

local p = {}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if #p > 0 then
		doSendMagicEffect(fromPosition,2)
		return false
	end
	for _,pos in pairs(config.pos.pos_entrada) do
		local player = getTopCreature(pos).uid
		if not isPlayer(player) or getPlayerLevel(player) < config.level_minimo then
			p = {}
			doSendMagicEffect(fromPosition,2)
			return false
		end
		table.insert(p,player)
	end
	for _,player in pairs(p) do
		doTeleportThing(player,config.pos.pos_dentro[_])
		doPlayerSendTextMessage(player, 22, 'Você esta dentro da arena, agora enfrente o inimigo com honra!')
	end
	verifica()
	return true
end

function verifica()
	for _,player in pairs(p) do
		if not isPlayer(player) then
			table.remove(p,_)
			player = p[1]
			doTeleportThing(player,config.pos.pos_ganhador)
			local texto = config.msg.ganhou
			for a,t in pairs(config.premiacao) do
				doPlayerAddItem(player,t.id,t.quantidade)
				texto = a ~= #config.premiacao and (texto..t.quantidade..' '..getItemNameById(t.id)..', ') or (texto..t.quantidade..' '..getItemNameById(t.id)..'.')
			end
			doPlayerSendTextMessage(player, 22, texto)
			p = {}
			return true
		end
	end
	addEvent(verifica,1000)
end

 

Link to post
Share on other sites

Em 29/09/2017 em 13:55, antharaz disse:

Fiz o action levando em consideração que um player irá realmente matar o outro.

 


local config = {
				pos = {
						pos_entrada = {  --POSICAO DOS SQM PRETOS
										{x=118,y=379,z=7},
										{x=120,y=379,z=7}
						},
						pos_dentro = { --POS DOS SQM VERMELHOS
										{x=118,y=376,z=7},
										{x=120,y=376,z=7}
						},
						pos_ganhador = {x=124,y=379,z=7}
				},

				premiacao = { --PREMIACAO
								{id=2229,quantidade=4},
								{id=2207,quantidade=1},
								{id=2160,quantidade=1}
				},
				
				msg = {
						ganhou = 'Você matou o inimigo, e foi o ultimo a ficar na arena, por tanto, ganhou as seguintes premiações: ',
						entrou = 'Você esta dentro da arena, agora enfrente o inimigo com honra!'
				},
				
				level_minimo = 300
}

local p = {}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if #p > 0 then
		doSendMagicEffect(fromPosition,2)
		return false
	end
	for _,pos in pairs(config.pos.pos_entrada) do
		local player = getTopCreature(pos).uid
		if not isPlayer(player) or getPlayerLevel(player) < config.level_minimo then
			p = {}
			doSendMagicEffect(fromPosition,2)
			return false
		end
		table.insert(p,player)
	end
	for _,player in pairs(p) do
		doTeleportThing(player,config.pos.pos_dentro[_])
		doPlayerSendTextMessage(player, 22, 'Você esta dentro da arena, agora enfrente o inimigo com honra!')
	end
	verifica()
	return true
end

function verifica()
	for _,player in pairs(p) do
		if not isPlayer(player) then
			table.remove(p,_)
			player = p[1]
			doTeleportThing(player,config.pos.pos_ganhador)
			local texto = config.msg.ganhou
			for a,t in pairs(config.premiacao) do
				doPlayerAddItem(player,t.id,t.quantidade)
				texto = a ~= #config.premiacao and (texto..t.quantidade..' '..getItemNameById(t.id)..', ') or (texto..t.quantidade..' '..getItemNameById(t.id)..'.')
			end
			doPlayerSendTextMessage(player, 22, texto)
			p = {}
			return true
		end
	end
	addEvent(verifica,1000)
end

 

 

Muito bom cara, só esta com 1 problema, ele não envia o ganhador para a posição certa, e não faz a premiação, mas não da erros.

 

local config = {
				pos = {
						pos_entrada = {  --POSICAO DOS SQM PRETOS
										{x=1016,y=1026,z=4},
										{x=1016,y=1028,z=4}
						},
						pos_dentro = { --POS DOS SQM VERMELHOS
										{x=1019,y=1027,z=4},
										{x=1027,y=1027,z=4}
						},
						pos_ganhador = {x=1013,y=1027,z=4}
				},

				premiacao = { --PREMIACAO
								{id=2160,quantidade=1},
								{id=2160,quantidade=1},
								{id=2160,quantidade=1}
				},
				
				msg = {
						ganhou = 'You killed the enemy, and was the last to stay in the arena, therefore, won the following awards: ',
						entrou = 'You are inside the arena, now in front of the enemy with honor!'
				},
				
				level_minimo = 250
}

local p = {}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if #p > 0 then
		doSendMagicEffect(fromPosition,2)
		return false
	end
	for _,pos in pairs(config.pos.pos_entrada) do
		local player = getTopCreature(pos).uid
		if not isPlayer(player) or getPlayerLevel(player) < config.level_minimo then
			p = {}
			doSendMagicEffect(fromPosition,2)
			return false
		end
		table.insert(p,player)
	end
	for _,player in pairs(p) do
		doTeleportThing(player,config.pos.pos_dentro[_])
		doPlayerSendTextMessage(player, 22, 'You are inside the arena, now in front of the enemy with honor!')
	end
	verifica()
	return true
end

function verifica()
	for _,player in pairs(p) do
		if not isPlayer(player) then
			table.remove(p,_)
			player = p[1]
			doTeleportThing(player,config.pos.pos_ganhador)
			local texto = config.msg.ganhou
			for a,t in pairs(config.premiacao) do
				doPlayerAddItem(player,t.id,t.quantidade)
				texto = a ~= #config.premiacao and (texto..t.quantidade..' '..getItemNameById(t.id)..', ') or (texto..t.quantidade..' '..getItemNameById(t.id)..'.')
			end
			doPlayerSendTextMessage(player, 22, texto)
			p = {}
			return true
		end
	end
	addEvent(verifica,1000)
end

 

Edited by JcA (see edit history)
Link to post
Share on other sites

@JcA 

 

" não envia o ganhador para a posição certa, e não faz a premiação" então ta longe de estar bom né ashujdiashuasdhui

 

Eu testei aqui com tfs 0.3.6 e funcionou 100%, mandei para um amigo testar em um OTX e funcionou normalmente também. Tem certeza de que configurou tudo certo?

Link to post
Share on other sites

4 minutos atrás, antharaz disse:

@JcA 

 

" não envia o ganhador para a posição certa, e não faz a premiação" então ta longe de estar bom né ashujdiashuasdhui

 

Eu testei aqui com tfs 0.3.6 e funcionou 100%, mandei para um amigo testar em um OTX e funcionou normalmente também. Tem certeza de que configurou tudo certo?

 

Sim, bom, deixa eu ver novamente

Link to post
Share on other sites

8 minutos atrás, antharaz disse:

@JcA 

 

" não envia o ganhador para a posição certa, e não faz a premiação" então ta longe de estar bom né ashujdiashuasdhui

 

Eu testei aqui com tfs 0.3.6 e funcionou 100%, mandei para um amigo testar em um OTX e funcionou normalmente também. Tem certeza de que configurou tudo certo?

 

Entendi porque não funcionou, a area é pvp tile, se for pvp normal (de ficar pk) funciona, o que eu mudo pra funcionar?

Link to post
Share on other sites

2 minutos atrás, antharaz disse:

@JcA 

 

Quando o outro player morre nessa área de pvp tile ele é teleportado pra fora certo? Se sim, só precisa me passar a pos superior esquerda e inferior direita da parte de dentro de sua arena e eu adapto o script.

 

superiro esquerda: 1015 1019 4

 

inferior direita: 1030 1033 4

 

O player vencedor só recebe a premiação e é teleportado se a arena tiver sem o tool "pvp tile", o roxinho da imagem a cima, se tiver não funciona, é pra funciona com o tool

Edited by JcA (see edit history)
Link to post
Share on other sites

@JcA 

 

Pode deixar com o 'pvp tile' roxo no mapa e usar este script abaixo:

 

Spoiler

local config = {
				pos = {
						pos_entrada = {  --POSICAO DOS SQM PRETOS
										{x=1016,y=1026,z=4},
										{x=1016,y=1028,z=4}
						},
						pos_dentro = { --POS DOS SQM VERMELHOS
										{x=1019,y=1027,z=4},
										{x=1027,y=1027,z=4}
						},
						pos_ganhador = {x=1013,y=1027,z=4},
						pos_area = {
										{x=1015,y=1019,z=4},
										{x=1030,y=1033,z=4}
						}
				},

				premiacao = { --PREMIACAO
								{id=2160,quantidade=1},
								{id=2160,quantidade=1},
								{id=2160,quantidade=1}
				},
				
				msg = {
						ganhou = 'You killed the enemy, and was the last to stay in the arena, therefore, won the following awards: ',
						entrou = 'You are inside the arena, now in front of the enemy with honor!'
				},
				
				level_minimo = 250
}

local p = {}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if #p > 0 then
		doSendMagicEffect(fromPosition,2)
		return false
	end
	for _,pos in pairs(config.pos.pos_entrada) do
		local player = getTopCreature(pos).uid
		if not isPlayer(player) or getPlayerLevel(player) < config.level_minimo then
			p = {}
			doSendMagicEffect(fromPosition,2)
			return false
		end
		table.insert(p,player)
	end
	for _,player in pairs(p) do
		doTeleportThing(player,config.pos.pos_dentro[_])
		doPlayerSendTextMessage(player, 22, 'You are inside the arena, now in front of the enemy with honor!')
	end
	verifica()
	return true
end

function verifica()
	for _,player in pairs(p) do
		local po = getThingPos(player) 
		if po.x < config.pos.pos_area[1].x or po.x > config.pos.pos_area[2].x or po.y < config.pos.pos_area[1].y or po.y > config.pos.pos_area[2].y then
			table.remove(p,_)
			player = p[1]
			doTeleportThing(player,config.pos.pos_ganhador)
			local texto = config.msg.ganhou
			for a,t in pairs(config.premiacao) do
				doPlayerAddItem(player,t.id,t.quantidade)
				texto = a ~= #config.premiacao and (texto..t.quantidade..' '..getItemNameById(t.id)..', ') or (texto..t.quantidade..' '..getItemNameById(t.id)..'.')
			end
			doPlayerSendTextMessage(player, 22, texto)
			p = {}
			return true
		end
	end
	addEvent(verifica,1000)
end

 

 

Link to post
Share on other sites

  • Solution

@JcA 

 

Eu realmente não to entendendo o que você ta falando kkkkk' não tem algum canal para nos comunicarmos por voz não? seria mais fácil.

 

---EDIT

 

Segue o código acrescentado com a  verificação de andar:

 

Spoiler

local config = {
				pos = {
						pos_entrada = {  --POSICAO DOS SQM PRETOS
										{x=1016,y=1026,z=4},
										{x=1016,y=1028,z=4}
						},
						pos_dentro = { --POS DOS SQM VERMELHOS
										{x=1019,y=1027,z=4},
										{x=1027,y=1027,z=4}
						},
						pos_ganhador = {x=1013,y=1027,z=4},
						pos_area = {
										{x=1015,y=1019,z=4},
										{x=1030,y=1033,z=4}
						}
				},

				premiacao = { --PREMIACAO
								{id=2160,quantidade=1},
								{id=2160,quantidade=1},
								{id=2160,quantidade=1}
				},
				
				msg = {
						ganhou = 'You killed the enemy, and was the last to stay in the arena, therefore, won the following awards: ',
						entrou = 'You are inside the arena, now in front of the enemy with honor!'
				},
				
				level_minimo = 250
}

local p = {}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if #p > 0 then
		doSendMagicEffect(fromPosition,2)
		return false
	end
	for _,pos in pairs(config.pos.pos_entrada) do
		local player = getTopCreature(pos).uid
		if not isPlayer(player) or getPlayerLevel(player) < config.level_minimo then
			p = {}
			doSendMagicEffect(fromPosition,2)
			return false
		end
		table.insert(p,player)
	end
	for _,player in pairs(p) do
		doTeleportThing(player,config.pos.pos_dentro[_])
		doPlayerSendTextMessage(player, 22, 'You are inside the arena, now in front of the enemy with honor!')
	end
	verifica()
	return true
end

function verifica()
	for _,player in pairs(p) do
		local po = getThingPos(player)
		if po.x < config.pos.pos_area[1].x or po.x > config.pos.pos_area[2].x or po.y < config.pos.pos_area[1].y or po.y > config.pos.pos_area[2].y or po.z ~= config.pos.pos_area[1].z then
			table.remove(p,_)
			player = p[1]
			doTeleportThing(player,config.pos.pos_ganhador)
			local texto = config.msg.ganhou
			for a,t in pairs(config.premiacao) do
				doPlayerAddItem(player,t.id,t.quantidade)
				texto = a ~= #config.premiacao and (texto..t.quantidade..' '..getItemNameById(t.id)..', ') or (texto..t.quantidade..' '..getItemNameById(t.id)..'.')
			end
			doPlayerSendTextMessage(player, 22, texto)
			p = {}
			return true
		end
	end
	addEvent(verifica,1000)
end

 

 

Edited by antharaz (see edit history)
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Confirmação de Termo