Ir para conteúdo
  • Cadastre-se

(Resolvido)Arena inteligente


Ir para solução Resolvido por antharaz,

Posts Recomendados

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

Editado por JcA (veja o histórico de edições)
Link para o post
Compartilhar em outros 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 para o post
Compartilhar em outros 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 para o post
Compartilhar em outros 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

 

Editado por JcA (veja o histórico de edições)
Link para o post
Compartilhar em outros 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 para o post
Compartilhar em outros 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 para o post
Compartilhar em outros 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 para o post
Compartilhar em outros sites

@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.

Link para o post
Compartilhar em outros 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

Editado por JcA (veja o histórico de edições)
Link para o post
Compartilhar em outros 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 para o post
Compartilhar em outros sites

@antharaz Achei que era delay, mas enfim, só volta para posição de ganhador mesmo, se o player retornar na sala de arena, não vai automaticamente quando ganha

Editado por JcA (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

@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

 

 

Editado por antharaz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo