Tile Teleporter (random)

warotserv
em Actions e Talkactions

warotserv

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 22/09/13Posts: 25

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.


Omega

o/
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 17/06/07Posts: 1165Gênero: MasculinoChar no Tibia: Nenhum

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

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

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.

warotserv

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 22/09/13Posts: 25

 

 

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!

 

 

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

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