WA
moveevent

Tile Teleporter (random)

Por warotserv, 22 de set. de 2013 em Actions e Talkactions

script
5
1.2k
warotservW
22 de setembro de 2013 às 12:23

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.


OmegaO
23 de setembro de 2013 às 11:25

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

OneshotO
23 de setembro de 2013 às 12:03

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.

warotservW
23 de setembro de 2013 às 13:22

 

 

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!

 

 

OneshotO
23 de setembro de 2013 às 21:39

Acredito que a chance de gerar um stack overflow é muito baixa mesmo. Ah sei lá, estou enferrujado.