EL
tfs 1.0

Teleport com storage que muda a posição.

Por Elias Palermo, 20 de mai. de 2016 em Scripts

pedido
resolvido
script
42
4.3k
DanihcvD
23 de maio de 2016 às 23:56

@Elias Palermo, vê agr:

local str = "storageTeleport" --storage que receberá os valores (para controlar o local para onde levará o player)local msgErro = "Você não é digno de entrar aqui." --mensagem de erro ao tentar entrar no teleport mas não ter um valor configurado na tabelalocal teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}[-1] = {pos = {x=1024, y=652, z=9}, newValue = 300031},[0] = {pos = {x=1024, y=652, z=9}, newValue = 300031},[300031] = {pos = {x=1025, y=662, z=9}, newValue = 300032},[300032] = {pos = {x=1025, y=662, z=9}, newValue = 300031},}function onStepIn(cid, position, fromPosition)vs = {}for k, v in pairs(teleports) dotable.insert(vs, k)endvalor = getPlayerStorageValue(cid, str)	if isInArray(vs, valor) then		doTeleportThing(cid, teleports[valor].pos)		setPlayerStorageValue(cid, str, teleports[valor].newValue)	else		doTeleportThing(cid, fromPosition)		doPlayerSendCancel(cid, msgErro)	end	return trueend

 

24 de maio de 2016 às 00:01
3 minutos atrás, Danihcv disse:

@Elias Palermo, vê agr:

local str = "storageTeleport" --storage que receberá os valores (para controlar o local para onde levará o player)local msgErro = "Você não é digno de entrar aqui." --mensagem de erro ao tentar entrar no teleport mas não ter um valor configurado na tabelalocal teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}[-1] = {pos = {x=1024, y=652, z=9}, newValue = 300031},[0] = {pos = {x=1024, y=652, z=9}, newValue = 300031},[300031] = {pos = {x=1025, y=662, z=9}, newValue = 300032},[300032] = {pos = {x=1025, y=662, z=9}, newValue = 300031},}function onStepIn(cid, position, fromPosition)vs = {}for k, v in pairs(teleports) dotable.insert(vs, k)endvalor = getPlayerStorageValue(cid, str)	if isInArray(vs, valor) then		doTeleportThing(cid, teleports[valor].pos)		setPlayerStorageValue(cid, str, teleports[valor].newValue)	else		doTeleportThing(cid, fromPosition)		doPlayerSendCancel(cid, msgErro)	end	return trueend

 

O primeiro script funciona, o segundo não.

 

 

 

TeleportStorage MT.Moon.lua

TeleportStorage MT.Moon2.lua

TeleportStorage MT.Moon.lua

TeleportStorage MT.Moon2.lua

DanihcvD
24 de maio de 2016 às 00:04
1 minuto atrás, Elias Palermo disse:

O primeiro script funciona, o segundo não.

 

Mas eu só mandei 1... .-.

24 de maio de 2016 às 00:08
3 minutos atrás, Danihcv disse:

 

Mas eu só mandei 1... .-.

Sim, mas foi como eu disse.

Vou precisar desse script mais de uma vez.

E só ta funcionando a função em um, entendeu? xD

DanihcvD
24 de maio de 2016 às 00:16

@Elias Palermo, ahh sim. kkkk my bad

 

Bom, o processo para acrescentar +1 teleport desse. Acredito que vc já saiba e tenha feito, mas é melhor prevenir do que remediar:

Você precisará criar um novo arquivo .lua, precisará adicionar outra tag no movements.xml (e colocar pra usar esse novo arquivo.lua), precisará escolher outro action id, e eu recomendo também mudar a storage usada:

local str = "storageTeleport" 

Teleport2:

local str = "storageTeleport2" 

 

 

Já fez tudo isso?

 

-------EDIT:

E o erro continua o mesmo da print passada?

Editado Maio 24 por Danihcv

24 de maio de 2016 às 00:23
6 minutos atrás, Danihcv disse:

@Elias Palermo, ahh sim. kkkk my bad

 

Bom, o processo para acrescentar +1 teleport desse. Acredito que vc já saiba e tenha feito, mas é melhor prevenir do que remediar:

Você precisará criar um novo arquivo .lua, precisará adicionar outra tag no movements.xml (e colocar pra usar esse novo arquivo.lua), precisará escolher outro action id, e eu recomendo também mudar a storage usada:

local str = "storageTeleport" 

Teleport2:

local str = "storageTeleport2" 

 

 

Já fez tudo isso?

Eu só não tinha mudado isso : local str = "storageTeleport2"

Mudei agora e mesmo assim continua sem funcionar D=

24 de maio de 2016 às 00:31
14 minutos atrás, Danihcv disse:

@Elias Palermo, ahh sim. kkkk my bad

 

Bom, o processo para acrescentar +1 teleport desse. Acredito que vc já saiba e tenha feito, mas é melhor prevenir do que remediar:

Você precisará criar um novo arquivo .lua, precisará adicionar outra tag no movements.xml (e colocar pra usar esse novo arquivo.lua), precisará escolher outro action id, e eu recomendo também mudar a storage usada:

local str = "storageTeleport" 

Teleport2:

local str = "storageTeleport2" 

 

 

Já fez tudo isso?

 

-------EDIT:

E o erro continua o mesmo da print passada?

Na verdade agora não da erro na distro, ele apenas não é teleportado e aparece aquela mensagem que você colocou.

DanihcvD
24 de maio de 2016 às 01:41

@Elias Palermo, brother, novamente é melhor prevenir do que remediar: você tá ligado que os valores de newValue são valores pra storage str (e não uma nova storage), ne? Ou seja, você precisa usar a função setPlayerStorageValue no player pra settar algum dos valores que estejam dentro dos colchetes.

 

Também vale lembrar que o valor da storage está muuuuito alto. Não há necessidade disso. O valor de storage é do tipo int16, isso implica dizer que ele só armazena números  que estejam no intervalo entre −32,768 e +32,767.  No caso vc está usando os valores +300,031 e +300,032 (ou seja, estão fora do intervalo permitido).


*agradecimento ao MarceLoko pela informação de que o valor é um int16

24 de maio de 2016 às 08:40
6 horas atrás, Danihcv disse:

@Elias Palermo, brother, novamente é melhor prevenir do que remediar: você tá ligado que os valores de newValue são valores pra storage str (e não uma nova storage), ne? Ou seja, você precisa usar a função setPlayerStorageValue no player pra settar algum dos valores que estejam dentro dos colchetes.

 

Também vale lembrar que o valor da storage está muuuuito alto. Não há necessidade disso. O valor de storage é do tipo int16, isso implica dizer que ele só armazena números  que estejam no intervalo entre −32,768 e +32,767.  No caso vc está usando os valores +300,031 e +300,032 (ou seja, estão fora do intervalo permitido).

 

*agradecimento ao MarceLoko pela informação de que o valor é um int16

Mano não entendi muito bem. Tem como resumir a solução? >< kkkk

PoccnnP
24 de maio de 2016 às 13:05

Substitui isso:

Citar

if isInArray(teleports, valor) then

 

Por isto:

Citar

if teleports[valor] then

 

DanihcvD
24 de maio de 2016 às 15:13

@Elias Palermo, você está usando um newValue muuuito alto. Isso implica dizer que o computador não é capaz de armazenar essa informação da forma correta.
O valor que vc está usando está na casa dos trezentos mil (300001 e 300002), sendo que na realidade, o valor não pode ser maior que trinta e dois mil, setecentos e sessenta e sete.

 

EDIT: Correção: o valor que tfs 1.0 usa é int32 (então, os newValue altos funcionam).

Tenta o script assim:

local str = "storageTeleport" --storage que receberá os valores (para controlar o local para onde levará o player)local teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}	[-1] = {pos = {x=1024, y=652, z=9}, newValue = 1},	[0] = {pos = {x=1024, y=652, z=9}, newValue = 1},	[300001] = {pos = {x=1025, y=662, z=9}, newValue = 300002},	[300002] = {pos = {x=1025, y=662, z=9}, newValue = 300001},}function onStepIn(cid, position, fromPosition)	local valor = getPlayerStorageValue(cid, str)	if not teleports[valor] then		print(valor.." não é uma chave válida")		return false	end	doTeleportThing(cid, teleports[valor].pos)	setPlayerStorageValue(cid, str, teleports[valor].newValue)	return trueend

 

Editado Maio 24 por Danihcv

24 de maio de 2016 às 23:23
8 horas atrás, Danihcv disse:

@Elias Palermo, você está usando um newValue muuuito alto. Isso implica dizer que o computador não é capaz de armazenar essa informação da forma correta.

O valor que vc está usando está na casa dos trezentos mil (300001 e 300002), sendo que na realidade, o valor não pode ser maior que trinta e dois mil, setecentos e sessenta e sete.

 

EDIT: Correção: o valor que tfs 1.0 usa é int32 (então, os newValue altos funcionam).

Tenta o script assim:

local str = "storageTeleport" --storage que receberá os valores (para controlar o local para onde levará o player)local teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}	[-1] = {pos = {x=1024, y=652, z=9}, newValue = 1},	[0] = {pos = {x=1024, y=652, z=9}, newValue = 1},	[300001] = {pos = {x=1025, y=662, z=9}, newValue = 300002},	[300002] = {pos = {x=1025, y=662, z=9}, newValue = 300001},}function onStepIn(cid, position, fromPosition)	local valor = getPlayerStorageValue(cid, str)	if not teleports[valor] then		print(valor.." não é uma chave válida")		return false	end	doTeleportThing(cid, teleports[valor].pos)	setPlayerStorageValue(cid, str, teleports[valor].newValue)	return trueend

 

Aparece isso na distro mano : [24/05/2016 23:19:30] 300032 não é uma chave válida

 

Tava aqui pensando, será que se trocar esses valores de -1 e 0 por outra storage qualquer que desse em quest por exemplo, funcionaria?

Pensando bem, acho que o player poderia tornar isso um ciclo vicioso fazendo a quest e indo no tp, né? porque ficaria sempre mudando x-x

Porque ai seria diferente em cada script que eu fizesse, e não teria nenhuma ligação de um com outro, sei lá só uma hipostese que passou pela minha cabeça kkk não entendo muito.

 

Bom mano pensei em uma maneira que possa funcionar.

Seria assim:

 

Adiciona uma função nesse script que o tp não me permite passar se eu não tiver x str que no caso seria a primeira.

Essa str eu pegaria com um npc que vai fazer parte da historia e ele vai estar oculto no mapa em um lugar que o player só vai ter acesso a uma vez, sendo assim eu poderia usar essa str como porta pra usar no lugar no -1 e 0, assim funcionando outros scripts para o mesmo sistema. Eu só precisaria de um npc que me desse uma str só por eu dizer hi a ele. Eu digo hi, ele me da uma informação qualquer e a str... Deu pra entender mais ou menos a ideia?

Editado Maio 25 por Elias Palermo

DanihcvD
25 de maio de 2016 às 00:27

@Elias Palermo, então pow, é aquilo que eu disse, os valores que estão dentro dos colchetes, não são storages. São possíveis valores pra storage declarada nessa linha:

local str = "storageTeleport" 

Vou usar o exemplo de ganhar a storage com quest.

O player abre um baú, aí ele "ganha uma storage" isso quer dizer que é settado (colocado) um valor diferente de -1 para uma storage X para aql player. Sacas?

 

Então, para que um player possa entrar no tp, ele precisa ter algum dos valores (entre colchetes) na storage "storageTeleport".

Manja?

25 de maio de 2016 às 09:06
9 horas atrás, Danihcv disse:

@Elias Palermo, então pow, é aquilo que eu disse, os valores que estão dentro dos colchetes, não são storages. São possíveis valores pra storage declarada nessa linha:

local str = "storageTeleport" 

Vou usar o exemplo de ganhar a storage com quest.

O player abre um baú, aí ele "ganha uma storage" isso quer dizer que é settado (colocado) um valor diferente de -1 para uma storage X para aql player. Sacas?

 

Então, para que um player possa entrar no tp, ele precisa ter algum dos valores (entre colchetes) na storage "storageTeleport".

 

Manja?

Pior que nem com outros valores estão funcionando, bom mano minha cabeça é cheia de ideias se você puder me ajudar vou fazer o seguinte.

Uma quest em um npc me dará um item, para que eu possa ir em um npc de teleport que vai me levar pra local X onde ocorrerá a cena da historia e lá vou pegar uma str.

 

Agora nessa parte aqui eu preciso da sua ajuda.

Um tp que precise de X storage apenas para entrar, se não tiver aparece a seguinte mensagem "Voce nao fez a quest tal"

Os outros sistemas eu já tenho tudo, só preciso desse tp que precise de uma str pra passar.

Editado Maio 25 por Elias Palermo

25 de maio de 2016 às 09:56
local t,s = {	[0] = {x=1024, y=652, z=9},	[1] = {x=1025, y=652, z=9},	[2] = {x=1026, y=652, z=9},	[3] = {x=1027, y=652, z=9}},102536 -- storage da questfunction onStepIn(cid, position, fromPosition)local var = getPlayerStorageValue(cid, s) <= 0 and 0 or getPlayerStorageValue(cid, s) if not t[var] thendoTeleportThing(cid, fromPosition, true)doSendMagicEffect(fromPosition, CONST_ME_POOF)doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "já passou por todas as quests.")return trueenddoTeleportThing(cid, t[var])setPlayerStorageValue(cid, s, var+1)return trueend

 

Editado Maio 25 por Mendiguinho91