Ir para conteúdo

Tile Teleporter (random)


warotserv

Posts Recomendados

Bom dia novamente, agora vou postar outro script que fiz que faz com que, quando um player pisar em um tile com determinada action ID, seja teletransportado para uma lugar randômico.



Primeiramente, crie um arquivo em "data\movements\scripts" chamado "tileTeleporter.lua" e copie o seguinte conteúdo para dentro dele



local teleportPoints = {
[ 0] = {x = 210, y = 190, z = 7},
[ 1] = {x = 233, y = 196, z = 7},
[ 2] = {x = 243, y = 188, z = 7},
[ 3] = {x = 254, y = 180, z = 7},
[ 4] = {x = 231, y = 160, z = 7},
[ 5] = {x = 212, y = 158, z = 7},
[ 6] = {x = 212, y = 170, z = 7},
[ 7] = {x = 227, y = 171, z = 7},
[ 8] = {x = 266, y = 149, z = 7},
[ 9] = {x = 234, y = 140, z = 7},
[10] = {x = 205, y = 143, z = 7},
[11] = {x = 177, y = 126, z = 7},
[12] = {x = 290, y = 177, z = 6},
[13] = {x = 219, y = 185, z = 6},
[14] = {x = 261, y = 167, z = 6},
[15] = {x = 270, y = 167, z = 8}
}

function onStepIn(cid, item, position)
if isPlayer(cid) then
local position = teleportPoints[math.random(0,15)]
doTeleportThing(cid, position)

end
return true
end

agora, em "movements.xml" cole a seguinte linha de código



<movevent type="StepIn" actionid="8586" script="tileTeleporter.lua"/>

Bom, é isso. Acho que não precisa explicar, está bem fácil de entender e alterar o código.



Espero ter ajudado.



P.S.: Não me importo que roubem meus créditos e/ou postem em outros fórums.


Link para o comentário
Compartilhar em outros sites

Acho que ficaria mais fácil de configurar (pra quem é preguiçoso e não entende nada do script, se substituísse

Isso

local position = teleportPoints[math.random(0,15)]

Por isso

local position = teleportPoints[math.random(0,#teleportPoints)]

Aí o cara não precisa colocar as 15 opções sem dar problema =D

 

 

Enfim, um código simples e útil

Link para o comentário
Compartilhar em outros sites

Eu ainda prefiro fazer com duas posições apenas, já que o objetivo do script é teleportar para posições totalmente aleatórias.

local fromPosition = {x=100,y=100,z=7}
local toPosition = {x=200, y=200, z=7}

function getRandomPosition(fromPosition, toPosition)
	local tmp = {
		x = math.random(fromPosition.x, toPosition.x), 
		y = math.random(fromPosition.y, toPosition.y), 
		z = math.random(fromPosition.z, toPosition.z),
	}
	if getTileInfo(tmp).house == false and getTopCreature(tmp).uid == 0 and doTileQueryAdd(cid, tmp, 7) == RETURNVALUE_NOERROR then
		return tmp
	end
	return getRandomPosition(fromPosition, toPosition)
end

function onStepIn(cid)
	return doTeleportThing(cid, getRandomPosition(fromPosition, toPosition))
end
		 

Com recursividade, se a primeira posição não for "boa", ele sorteia uma segunda dentro da área delimitada e por aí vai.

Link para o comentário
Compartilhar em outros sites

 

 

local position = teleportPoints[math.random(0,#teleportPoints)]

omega blueheaven,

Realmente, essa é a maneira correta, falha minha,hehehe.

 

Oneshot

É sempre bom evitar recursividades, dependendo do local, muitas posições estarão incorretas e poderá gerar um stackOverFlow.

 

Obrigado gente!

 

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...