EL
pedido

Teleport que muda outfit

Por Elias Palermo, 21 de abr. de 2016 em Scripts

resolvido
script
35
4.6k
DanihcvD
23 de abril de 2016 às 21:05
1 hora atrás, Elias Palermo disse:

E como seria a configuração dele?

 

Pelo script q eu mandei aí... sahsahuahus

Olha, se não tiver um tile já pronto assim no seu map editor, utilize um editor .dat pra criar um novo item walkable. E aí, utilizando um .spr editor, vc coloca a(s) sprite(s) de tp neste novo item. E aí utilizando um map editor, vc adiciona uma action id qualquer, q ñ esteja sendo usado por mais nenhum item, a ele.

Editado Abril 23 por danihcv

23 de abril de 2016 às 21:28
22 minutos atrás, danihcv disse:

 

Pelo script q eu mandei aí... sahsahuahus

Olha, se não tiver um tile já pronto assim no seu map editor, utilize um editor .dat pra criar um novo item walkable. E aí, utilizando um .spr editor, vc coloca a(s) sprite(s) de tp neste novo item. E aí utilizando um map editor, vc adiciona uma action id qualquer, q ñ esteja sendo usado por mais nenhum item, a ele.

Mas ai teria que ter uma função no script pra por o id desse item não?

DanihcvD
23 de abril de 2016 às 21:52

Pra especificar o id do item e associá-lo ao script e ao action id, vc utiliza a tag em movements.xml:

<movevent type="StepIn" actionid="ACTION-ID-X" event="script" value="SCRIPT.lua"/>

 

23 de abril de 2016 às 21:54
1 minuto atrás, danihcv disse:

Pra especificar o id do item e associá-lo ao script e ao action id, vc utiliza a tag em movements.xml:

<movevent type="StepIn" actionid="ACTION-ID-X" event="script" value="SCRIPT.lua"/>

 

Cara vou ser sincero contigo, acabei me perdendo em tantos comentários. Não querendo te dar trabalho você poderia fazer um post sobre esse sistema?

DanihcvD
23 de abril de 2016 às 22:02
7 minutos atrás, Elias Palermo disse:

Cara vou ser sincero contigo, acabei me perdendo em tantos comentários. Não querendo te dar trabalho você poderia fazer um post sobre esse sistema?

Fica tranquilo cara. Sobre o que vc quer que eu fale, exatamente?

23 de abril de 2016 às 22:03
Agora, danihcv disse:

Fica tranquilo cara. Sobre o que vc quer que eu fale, exatamente?

O tutorial passo a passo de como devo fazer, porquê eu me perdi por completo kkkk

tem 3 scripts no post, não sei qual usar

DanihcvD
23 de abril de 2016 às 22:34

sahusahuas, td bem. Vamos lá.

Primeiro vc deve fazer um novo tp. Para isso será necessário editar o arquivo .dat do client, a sua intenção nessa etapa é criar um novo item com a mesma aparencia de um tp normal. (eu só estou com duvida se pra deixar o novo item com aparencia de tp será necessário mexer no seu arquivo .spr do client)

na hora de criar esse novo item pelo .dat editor, não esqueça de colocar o item como walkable para que seja possível pisar em cima do item. E também não esqueça de colocar para usar a msm sprite do portal já existente. (acho que isso já basta, ñ acho q seja necessário usar um .spr editor não)

 

Agora com o novo item criado, utilize seu map editor para botar o seu novo tp no mapa. Coloque 2 tps (um para ser a saida e o outro para ser a entrada) e adicione o msm action id para os 2 (utilize o action id 738969, se quiser).

 

Agora vá na pasta data\movements e adicione essa tag ao arquivo movements.xml:

<movevent type="StepIn" actionid="738969" event="script" value="tpoutfit.lua"/>

Agora vá na pasta data\movements\scripts e crie um arquivo chamado tpoutfit.lua e coloque isso dentro:

local posEntrada = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao entrar no 1 portallocal posSaida = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao sair pelo 2 portallocal outfitfemale = 136 --outfit que o player recebera ao entrar no portal, se for femealocal outfitmale = 128 --outfit que o player recebera ao entrar no portal, se for macholocal info = {} --deixe isso da forma como estalocal str = "dentroDoTp" --deixe da forma que estafunction onStepIn(cid, position)	if getPlayerStorageValue(cid, str) < 1 then	setPlayerStorageValue(cid, str, 1)	doTeleportThing(cid, posEntrada)	table.insert(info, getCreatureOutfit(cid), cid)		if getPlayerSex(cid) == 0 then		doCreatureChangeOutfit(cid, outfitfemale)		doSendMagicEffect(getPlayerPosition(cid), 12)		else		doCreatureChangeOutfit(cid, outfitmale)		doSendMagicEffect(getPlayerPosition(cid), 12)		end	else	setPlayerStorageValue(cid, str, 0)	doTeleportThing(cid, posSaida)	doSendMagicEffect(getPlayerPosition(cid), 12)	outfitOld = info[cid]	doCreatureChangeOutfit(cid, outfitOld)	table.remove(info, cid)	endreturn trueend

Agora não esquece de configurar direitinho aí o script, com as posições corretas pra ele teleportar e com a outfit q ele vai botar.

 

 

EDIT: Lembrando que eu ñ sei nada de derivados, e por isso fiz a explicação de como seria em um ot de tibia normal. Caso os nomes dos arquivos/locais que eu falei não sejam exatamente assim, tente encontrar os equivalentes e seguir o passo a passo.

Editado Abril 23 por danihcv

23 de abril de 2016 às 22:37
3 minutos atrás, danihcv disse:

sahusahuas, td bem. Vamos lá.

Primeiro vc deve fazer um novo tp. Para isso será necessário editar o arquivo .dat do client, a sua intenção nessa etapa é criar um novo item com a mesma aparencia de um tp normal. (eu só estou com duvida se pra deixar o novo item com aparencia de tp será necessário mexer no seu arquivo .spr do client)

na hora de criar esse novo item pelo .dat editor, não esqueça de colocar o item como walkable para que seja possível pisar em cima do item. E também não esqueça de colocar para usar a msm sprite do portal já existente. (acho que isso já basta, ñ acho q seja necessário usar um .spr editor não)

 

Agora com o novo item criado, utilize seu map editor para botar o seu novo tp no mapa. Coloque 2 tps (um para ser a saida e o outro para ser a entrada) e adicione o msm action id para os 2 (utilize o action id 738969, se quiser).

 

Agora vá na pasta data\movements e adicione essa tag ao arquivo movements.xml:

<movevent type="StepIn" actionid="738969" event="script" value="tpoutfit.lua"/>

Agora vá na pasta data\movements\scripts e crie um arquivo chamado tpoutfit.lua e coloque isso dentro:

local posEntrada = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao entrar no 1 portallocal posSaida = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao sair pelo 2 portallocal outfitfemale = 136 --outfit que o player recebera ao entrar no portal, se for femealocal outfitmale = 128 --outfit que o player recebera ao entrar no portal, se for macholocal info = {} --deixe isso da forma como estalocal str = "dentroDoTp" --deixe da forma que estafunction onStepIn(cid, position)	if getPlayerStorageValue(cid, str) < 1 then	setPlayerStorageValue(cid, str, 1)	doTeleportThing(cid, posEntrada)	table.insert(info, getCreatureOutfit(cid), cid)		if getPlayerSex(cid) == 0 then		doCreatureChangeOutfit(cid, outfitfemale)		doSendMagicEffect(getPlayerPosition(cid), 12)		else		doCreatureChangeOutfit(cid, outfitmale)		doSendMagicEffect(getPlayerPosition(cid), 12)		end	else	setPlayerStorageValue(cid, str, 0)	doTeleportThing(cid, posSaida)	doSendMagicEffect(getPlayerPosition(cid), 12)	outfitOld = info[cid]	doCreatureChangeOutfit(cid, outfitOld)	table.remove(info, cid)	endreturn trueend

Agora não esquece de configurar direitinho aí o script, com as posições corretas pra ele teleportar e com a outfit q ele vai botar.

Beleza vou tentar aqui e já te dou a resposta, da pra criar esse item de boa pelo ObjectBuilder/Item Editor?

Editado Abril 23 por Elias Palermo

DanihcvD
23 de abril de 2016 às 22:44

Dá ss. Faça logo pelo qual vc tiver maior facilidade.

23 de abril de 2016 às 23:30
43 minutos atrás, danihcv disse:

Dá ss. Faça logo pelo qual vc tiver maior facilidade.

Mano a função de teleportar funcionou, mas não mudou a outfit e deu este erro na distro.

Citar

[23/04/2016 23:27:44] [Error - MoveEvents Interface] 

[23/04/2016 23:27:44] data/movements/scripts/tpoutfit.lua:onStepIn

[23/04/2016 23:27:44] Description: 

[23/04/2016 23:27:44] data/movements/scripts/tpoutfit.lua:12: bad argument #2 to 'insert' (number expected, got table)

[23/04/2016 23:27:44] stack traceback:

[23/04/2016 23:27:44]     [C]: in function 'insert'

[23/04/2016 23:27:44]     data/movements/scripts/tpoutfit.lua:12: in function <data/movements/scripts/tpoutfit.lua:8>

 

DanihcvD
23 de abril de 2016 às 23:36

Tenta agr:

local posEntrada = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao entrar no 1 portallocal posSaida = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao sair pelo 2 portallocal outfitfemale = 136 --outfit que o player recebera ao entrar no portal, se for femealocal outfitmale = 128 --outfit que o player recebera ao entrar no portal, se for macholocal info = {} --deixe isso da forma como estalocal str = "dentroDoTp" --deixe da forma que estafunction onStepIn(cid, position)	if getPlayerStorageValue(cid, str) < 1 then	setPlayerStorageValue(cid, str, 1)	doTeleportThing(cid, posEntrada)	table.insert(info, getCreatureOutfit(cid), getPlayerGUID(cid))		if getPlayerSex(cid) == 0 then		doCreatureChangeOutfit(cid, outfitfemale)		doSendMagicEffect(getPlayerPosition(cid), 12)		else		doCreatureChangeOutfit(cid, outfitmale)		doSendMagicEffect(getPlayerPosition(cid), 12)		end	else	setPlayerStorageValue(cid, str, 0)	doTeleportThing(cid, posSaida)	doSendMagicEffect(getPlayerPosition(cid), 12)	outfitOld = info[getPlayerGUID(cid)]	doCreatureChangeOutfit(cid, outfitOld)	table.remove(info, getPlayerGUID(cid))	endreturn trueend

 

 

EDIT: Não esquece de smp fzr o teste com um player que tenha a storage "dentroDoTp" menor que 1 (ou seja, que nem um player novato, ou um player que nunca tenha pisado no tp), isso é para evitar erros nos players que vc tá usando pra fzr o teste.

Editado Abril 23 por danihcv

24 de abril de 2016 às 09:23
9 horas atrás, danihcv disse:

Tenta agr:

local posEntrada = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao entrar no 1 portallocal posSaida = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao sair pelo 2 portallocal outfitfemale = 136 --outfit que o player recebera ao entrar no portal, se for femealocal outfitmale = 128 --outfit que o player recebera ao entrar no portal, se for macholocal info = {} --deixe isso da forma como estalocal str = "dentroDoTp" --deixe da forma que estafunction onStepIn(cid, position)	if getPlayerStorageValue(cid, str) < 1 then	setPlayerStorageValue(cid, str, 1)	doTeleportThing(cid, posEntrada)	table.insert(info, getCreatureOutfit(cid), getPlayerGUID(cid))		if getPlayerSex(cid) == 0 then		doCreatureChangeOutfit(cid, outfitfemale)		doSendMagicEffect(getPlayerPosition(cid), 12)		else		doCreatureChangeOutfit(cid, outfitmale)		doSendMagicEffect(getPlayerPosition(cid), 12)		end	else	setPlayerStorageValue(cid, str, 0)	doTeleportThing(cid, posSaida)	doSendMagicEffect(getPlayerPosition(cid), 12)	outfitOld = info[getPlayerGUID(cid)]	doCreatureChangeOutfit(cid, outfitOld)	table.remove(info, getPlayerGUID(cid))	endreturn trueend

 

 

EDIT: Não esquece de smp fzr o teste com um player que tenha a storage "dentroDoTp" menor que 1 (ou seja, que nem um player novato, ou um player que nunca tenha pisado no tp), isso é para evitar erros nos players que vc tá usando pra fzr o teste.

 

Continua a dar erro :(

Citar

[24/04/2016 09:22:45] [Error - MoveEvents Interface] 

[24/04/2016 09:22:45] data/movements/scripts/tpoutfit.lua:onStepIn

[24/04/2016 09:22:45] Description: 

[24/04/2016 09:22:45] data/movements/scripts/tpoutfit.lua:12: bad argument #2 to 'insert' (number expected, got table)

[24/04/2016 09:22:45] stack traceback:

[24/04/2016 09:22:46]     [C]: in function 'insert'

[24/04/2016 09:22:46]     data/movements/scripts/tpoutfit.lua:12: in function <data/movements/scripts/tpoutfit.lua:8>

 

DanihcvD
24 de abril de 2016 às 15:54

My bad... Agr deve ir sem problema:

local posEntrada = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao entrar no 1 portallocal posSaida = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao sair pelo 2 portallocal outfitfemale = 136 --outfit que o player recebera ao entrar no portal, se for femealocal outfitmale = 128 --outfit que o player recebera ao entrar no portal, se for macholocal info = {} --deixe isso da forma como estalocal str = "dentroDoTp" --deixe da forma que estafunction onStepIn(cid, position)	if getPlayerStorageValue(cid, str) < 1 then	setPlayerStorageValue(cid, str, 1)	doTeleportThing(cid, posEntrada)	table.insert(info, getPlayerGUID(cid), getCreatureOutfit(cid))		if getPlayerSex(cid) == 0 then		doCreatureChangeOutfit(cid, outfitfemale)		doSendMagicEffect(getPlayerPosition(cid), 12)		else		doCreatureChangeOutfit(cid, outfitmale)		doSendMagicEffect(getPlayerPosition(cid), 12)		end	else	setPlayerStorageValue(cid, str, 0)	doTeleportThing(cid, posSaida)	doSendMagicEffect(getPlayerPosition(cid), 12)	outfitOld = info[getPlayerGUID(cid)]	doCreatureChangeOutfit(cid, outfitOld)	table.remove(info, getPlayerGUID(cid))	endreturn trueend

 

24 de abril de 2016 às 16:29
34 minutos atrás, danihcv disse:

My bad... Agr deve ir sem problema:

local posEntrada = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao entrar no 1 portallocal posSaida = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao sair pelo 2 portallocal outfitfemale = 136 --outfit que o player recebera ao entrar no portal, se for femealocal outfitmale = 128 --outfit que o player recebera ao entrar no portal, se for macholocal info = {} --deixe isso da forma como estalocal str = "dentroDoTp" --deixe da forma que estafunction onStepIn(cid, position)	if getPlayerStorageValue(cid, str) < 1 then	setPlayerStorageValue(cid, str, 1)	doTeleportThing(cid, posEntrada)	table.insert(info, getPlayerGUID(cid), getCreatureOutfit(cid))		if getPlayerSex(cid) == 0 then		doCreatureChangeOutfit(cid, outfitfemale)		doSendMagicEffect(getPlayerPosition(cid), 12)		else		doCreatureChangeOutfit(cid, outfitmale)		doSendMagicEffect(getPlayerPosition(cid), 12)		end	else	setPlayerStorageValue(cid, str, 0)	doTeleportThing(cid, posSaida)	doSendMagicEffect(getPlayerPosition(cid), 12)	outfitOld = info[getPlayerGUID(cid)]	doCreatureChangeOutfit(cid, outfitOld)	table.remove(info, getPlayerGUID(cid))	endreturn trueend

 

Ainda não kk

Citar

[24/04/2016 16:27:49] [Error - MoveEvents Interface] 

[24/04/2016 16:27:49] data/movements/scripts/tpoutfit.lua:onStepIn

[24/04/2016 16:27:49] Description: 

[24/04/2016 16:27:49] attempt to index a number value

[24/04/2016 16:27:49] stack traceback:

[24/04/2016 16:27:49]     [C]: in function 'doCreatureChangeOutfit'

[24/04/2016 16:27:49]     data/movements/scripts/tpoutfit.lua:17: in function <data/movements/scripts/tpoutfit.lua:8>

 

DanihcvD
24 de abril de 2016 às 16:50

Vê qual erro dá agr.. sauhsahusahusa

 

local posEntrada = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao entrar no 1 portallocal posSaida = {x = 69691, y= 73731, z= 7} --posicao para onde o player será levado ao sair pelo 2 portallocal outfitfemale = 136 --outfit que o player recebera ao entrar no portal, se for femealocal outfitmale = 128 --outfit que o player recebera ao entrar no portal, se for macholocal info = {} --deixe isso da forma como estalocal str = "dentroDoTp" --deixe da forma que estafunction onStepIn(cid, position)	if getPlayerStorageValue(cid, str) < 1 then	setPlayerStorageValue(cid, str, 1)	doTeleportThing(cid, posEntrada)	table.insert(info, getPlayerGUID(cid), getCreatureOutfit(cid))		if getPlayerSex(cid) == 0 then		doCreatureChangeOutfit(cid, {lookType=outfitfemale})		doSendMagicEffect(getPlayerPosition(cid), 12)		else		doCreatureChangeOutfit(cid, {lookType=outfitmale})		doSendMagicEffect(getPlayerPosition(cid), 12)		end	else	setPlayerStorageValue(cid, str, 0)	doTeleportThing(cid, posSaida)	doSendMagicEffect(getPlayerPosition(cid), 12)	outfitOld = info[getPlayerGUID(cid)]	doCreatureChangeOutfit(cid, outfitOld)	table.remove(info, getPlayerGUID(cid))	endreturn trueend