Ir para conteúdo
  • 0

Teleport com storage que muda a posição.


Elias Palermo

Pergunta

Bom dia!

 

Estou precisando muito de um teleport que funcione da seguinte maneira:

 

Ao passa nesse tp ele me da um storage que mudará a posição que serei movido caso eu passe nele novamente.

 

Explicando melhor.

 

Eu uso um sistema no meu client que me da a chance de por imagens na tela em certos lugares que eu passo, e disso me aproveito para montar uma historia mais elaborada.

Logo tendo esse teleport eu teria melhor proveito para fazer cenas em certos momentos da historia do game, tendo em vista que eu veria aquela determinada situação apenas uma vez já que esse tp mudaria o local que iria me mandar após ser adquirido o storage.

 

Resumo:

 

Funcionaria assim. Quando eu passar nesse tp ele me deslocará para "x" local, e neste local terá o enredo de uma parte da historia. (Um local fantasma assim digamos, já que o player passará apenas uma vez). Esse mesmo tp me dará uma storage para quando eu for passar NELE novamente ele irá me mover para outro "x" local( Que seria o mesmo local só que sem a situação da historia acontecendo).

 

Eu preciso MUITO disso, se alguém puder me ajudar ficarei totalmente grato.

Minha base é PDA.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0

@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?

Link para o comentário
Compartilhar em outros sites

  • 0
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=

Link para o comentário
Compartilhar em outros sites

  • 0
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.

Link para o comentário
Compartilhar em outros sites

  • 0

@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

Link para o comentário
Compartilhar em outros sites

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0

@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

 

Link para o comentário
Compartilhar em outros sites

  • 0
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 por Elias Palermo
Link para o comentário
Compartilhar em outros sites

  • 0

@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?

Link para o comentário
Compartilhar em outros sites

  • 0
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 por Elias Palermo
Link para o comentário
Compartilhar em outros sites

  • 0
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 por Mendiguinho91
Link para o comentário
Compartilhar em outros sites

  • 0
11 minutos atrás, Mendiguinho91 disse:
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

 

No caso essa tabela seriam todos os tps que essa storage libera?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...