Ir para conteúdo
  • Cadastre-se

(Resolvido)Spells Criar portal no chao


Ir para solução Resolvido por Roy,

Posts Recomendados

Ola, Boa noite, tou precisando de uma spells que funcione mais o menos assim

o player usa a magia , ai cria um portal em baixo dele e esse portal irar levar para "X" position, (esse portal some em "X" segundos).

sendo que la no destino vai ter um portal para voltar pro mesmo lugar em que a magia foi usada! porem para voltar teria que esperar "X"

segundos para poder atravessar o portal de volta. E tipo um kamui no jutso de Nto. Agradeço a quem tentar ajudar.

 

Link para o post
Compartilhar em outros sites
  • Solução

É o seguinte o portal será criado Ok, mas o tempo do outro portal deve ser maior senão o player irá voltar para o local onde ele foi teleportado ou seja, não o local onde o portal foi criado, a partir do momento em que o portal criado for removido ao ele usar o outro portal ele será teleportado para o Removido, Acho que deu para entender.

 

Spell

local config = {storage = 8001}--Seleciona a storage 8001 e separa entre 3, exemplo - "8001, 8002, 8003", Entao nao use nenhuma dessas 3 storages em outros scripts.
local cfg = {storage = 8000, Tempo = 1*60}  --1 minuto. Tempo que poderá passar no piso ao redor do Teleport.
local function doSavePlayerPos(uid, storage, pos)
doCreatureSetStorage(uid, storage, pos.x)
doCreatureSetStorage(uid, storage+1, pos.y)
doCreatureSetStorage(uid, storage+2, pos.z)
end

function onCastSpell(cid, var)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
local TeleportID = 1387
local Teleport = {
config = {
ToPos = {x = 309, y = 287, z = 7}, -- Local onde o jogador será teleportado
Pos = getCreaturePosition(cid),
Time = 10, --Quanto tempo irá durar o Teleport
},
}

function removeTeleport(Teleport)
local t = getTileItemById(Teleport.config.Pos, TeleportID)
if t then
doRemoveItem(t.uid, 1)
doSendMagicEffect(Teleport.config.Pos, CONST_ME_POFF)
end
end

doCreateTeleport(TeleportID, Teleport.config.ToPos,Teleport.config.Pos)
addEvent(removeTeleport, Teleport.config.Time * 1000, Teleport)
setPlayerStorageValue(cid, cfg.storage, os.time()+cfg.Tempo)
doSavePlayerPos(cid, config.storage, getThingPos(cid))
----------------------------------------------------------------------------------------------------------------------------------------------------------------
return TRUE
end

Movements.xml

<movevent type="StepIn" actionid="9000" event="script" value="piso.lua"/>
<movevent type="StepIn" actionid="9001" event="script" value="teleport.lua"/>

 

piso.lua

function onStepIn(cid, item, position, fromPosition)
local config = {storage = 8000}
if (getPlayerStorageValue(cid, config.storage) <= os.time()) then
return true
else
doTeleportThing(cid, fromPosition, false)
doPlayerSendCancel(cid, "Você deve aguardar " ..getPlayerStorageValue(cid, config.storage) - os.time().." para poder entrar nesse portal!")
end
return true 
end

 

Teleport.lua

function onStepIn(cid, item, position, fromPosition)
local config = {storage = 8001}
local function getSavedPlayerPos(uid, storage)
return {x = getCreatureStorage(uid, storage), y = getCreatureStorage(uid, storage+1), z = getCreatureStorage(uid, storage+2)}
end
if (getPlayerStorageValue(cid, config.storage) <= os.time()) then
doTeleportThing(cid, getSavedPlayerPos(cid, config.storage))
else
doTeleportThing(cid, fromPosition, false)
doPlayerSendCancel(cid, "Você deve aguardar " ..getPlayerStorageValue(cid, config.storage) - os.time().." para poder entrar nesse portal!")
end
return true 
end
Editado por Roy (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
1 minuto atrás, Black Fenix disse:

@Roy Tenho que adiconar algum action no portal q vai ficar dentro?

 

<movevent type="StepIn" actionid="9000" event="script" value="piso.lua"/>
<movevent type="StepIn" actionid="9001" event="script" value="teleport.lua"/>

No piso onde o player precisa passar para acessar o portal coloca action 9000 e no Teleport que o player irá ser teleportado 9001

Link para o post
Compartilhar em outros sites
4 minutos atrás, Black Fenix disse:

@Roy no caso teria que adcionar um arquivo lua no meu movements com esses nome certo? "teleport e piso " teria essa script ai?

 

Poxa cara. Tudo bem então

Você vai fazer o seguinte, vai criar a  Spell e colocar o script dela acima Ok.

Agora você vai adicionar essas duas linhas no seu movements.xml

<movevent type="StepIn" actionid="9000" event="script" value="piso.lua"/>
<movevent type="StepIn" actionid="9001" event="script" value="teleport.lua"/>

você pode colocar o nome que quiser o cria uma arquivo .lua com o script de cada.

Editado por Roy (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
43 minutos atrás, Black Fenix disse:

@Roy Perfeito mano ! so mais uma coisinha teria como o player usar a magia em alguem dai vai ele e o target ja para a position e o portal ficava la no chao ?

 

Ter tem,mas não acho necessário é só o player castar a spell e outro jogador pode entrar

Link para o post
Compartilhar em outros sites
15 horas atrás, Roy disse:

É o seguinte o portal será criado Ok, mas o tempo do outro portal deve ser maior senão o player irá voltar para o local onde ele foi teleportado ou seja, não o local onde o portal foi criado, a partir do momento em que o portal criado for removido ao ele usar o outro portal ele será teleportado para o Removido, Acho que deu para entender.

 

Spell


local config = {storage = 8001}--Seleciona a storage 8001 e separa entre 3, exemplo - "8001, 8002, 8003", Entao nao use nenhuma dessas 3 storages em outros scripts.
local cfg = {storage = 8000, Tempo = 1*60}  --1 minuto. Tempo que poderá passar no piso ao redor do Teleport.
local function doSavePlayerPos(uid, storage, pos)
doCreatureSetStorage(uid, storage, pos.x)
doCreatureSetStorage(uid, storage+1, pos.y)
doCreatureSetStorage(uid, storage+2, pos.z)
end

function onCastSpell(cid, var)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
local TeleportID = 1387
local Teleport = {
config = {
ToPos = {x = 309, y = 287, z = 7}, -- Local onde o jogador será teleportado
Pos = getCreaturePosition(cid),
Time = 10, --Quanto tempo irá durar o Teleport
},
}

function removeTeleport(Teleport)
local t = getTileItemById(Teleport.config.Pos, TeleportID)
if t then
doRemoveItem(t.uid, 1)
doSendMagicEffect(Teleport.config.Pos, CONST_ME_POFF)
end
end

doCreateTeleport(TeleportID, Teleport.config.ToPos,Teleport.config.Pos)
addEvent(removeTeleport, Teleport.config.Time * 1000, Teleport)
setPlayerStorageValue(cid, cfg.storage, os.time()+cfg.Tempo)
doSavePlayerPos(cid, config.storage, getThingPos(cid))
----------------------------------------------------------------------------------------------------------------------------------------------------------------
return TRUE
end

Movements.xml


<movevent type="StepIn" actionid="9000" event="script" value="piso.lua"/>
<movevent type="StepIn" actionid="9001" event="script" value="teleport.lua"/>

 

piso.lua


function onStepIn(cid, item, position, fromPosition)
local config = {storage = 8000}
if (getPlayerStorageValue(cid, config.storage) <= os.time()) then
return true
else
doTeleportThing(cid, fromPosition, false)
doPlayerSendCancel(cid, "Você deve aguardar " ..getPlayerStorageValue(cid, config.storage) - os.time().." para poder entrar nesse portal!")
end
return true 
end

 

Teleport.lua


function onStepIn(cid, item, position, fromPosition)
local config = {storage = 8001}
local function getSavedPlayerPos(uid, storage)
return {x = getCreatureStorage(uid, storage), y = getCreatureStorage(uid, storage+1), z = getCreatureStorage(uid, storage+2)}
end
if (getPlayerStorageValue(cid, config.storage) <= os.time()) then
doTeleportThing(cid, getSavedPlayerPos(cid, config.storage))
else
doTeleportThing(cid, fromPosition, false)
doPlayerSendCancel(cid, "Você deve aguardar " ..getPlayerStorageValue(cid, config.storage) - os.time().." para poder entrar nesse portal!")
end
return true 
end

 

Tem como coloca um efeito ao entrar no teleporte criado no chão. Fica aparecendo um efeito de fumaça. 

Link para o post
Compartilhar em outros sites
Em 01/01/2019 em 21:03, Black Fenix disse:

@Roy poderia fazer isso para mim ?

 

 

É o seguinte ele irá castar a Spell em alguém tipo.

Exiva Black Fenix

E ambos terá que está em party(somente em party) e então  serão teleportado para o local. O portal criado não irá funcionar mais até porque somente ambos irá poder passar pelo portal do outro lado no caso.

 

adicionar na tag xml da spell:

needtarget="1" params="1" range="1" 

range="1" = distância necessária para poder castar a spell. 1 = Player próximo um do outro.

 

E irá ficar assim:

<instant name="test" words="test" lvl="0" needtarget="1" params="1" range="1" maglv="0" manapercent="0" soul="0" exhaustion="1000" prem="0" enabled="1" script="test.lua"/>

 

Spell .lua

Spoiler

local config = {storage = 8001}--Seleciona a storage 8001 e separa entre 3, exemplo - "8001, 8002, 8003", Entao nao use nenhuma dessas 3 storages em outros scripts.
local cfg = {storage = 8000, Tempo = 1*60}  --1 minuto. Tempo que poderá passar no piso ao redor do Teleport.

local function doSavePlayerPos(uid, storage, pos)
doCreatureSetStorage(uid, storage, pos.x)
doCreatureSetStorage(uid, storage+1, pos.y)
doCreatureSetStorage(uid, storage+2, pos.z)
end

function onCastSpell(cid, var)
local target = variantToNumber(var)
local party = getPartyMembers(cid)
local targetIsPartyMember = false

local TeleportID = 1387
local Teleport = {
config = {
ToPos = {x = 0, y = 0, z = 0}, -- Local onde o jogador será teleportado coloquei 0 porque caso outro jogador tente entrar não possa ser teleportado somente a quem o cara usou a spell
TPos = {x = 309, y = 287, z = 7}, -- Local onde o jogador será teleportado
Pos = getCreaturePosition(cid),
Time = 10, --Quanto tempo irá durar o Teleport 10 segundos
},
}

function removeTeleport(Teleport)
local t = getTileItemById(Teleport.config.Pos, TeleportID)
if t then
doRemoveItem(t.uid, 1)
doSendMagicEffect(Teleport.config.Pos, CONST_ME_POFF)
end
end

if type(party) == "table" then
for _, member in pairs(party) do
if member == target then
targetIsPartyMember = true
break
end
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa esta em party para castar essa spell e, o target precisa ser um membro da sua party!")
return false
end

if targetIsPartyMember then
doCreateTeleport(TeleportID, Teleport.config.ToPos,Teleport.config.Pos)
addEvent(removeTeleport, Teleport.config.Time * 1000, Teleport)
setPlayerStorageValue(target, cfg.storage, os.time()+cfg.Tempo)
setPlayerStorageValue(cid, cfg.storage, os.time()+cfg.Tempo)
doSavePlayerPos(target, config.storage, getThingPos(target))
doSavePlayerPos(cid, config.storage, getThingPos(cid))
doTeleportThing(target, Teleport.config.TPos)
doTeleportThing(cid, Teleport.config.TPos)
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você só pode usar essa spell em membros da sua party.")
end
return TRUE
end

 

 

-------------------------------------------------------------------------------------------------------------------

 

Em 02/01/2019 em 10:04, BangxD disse:

Tem como coloca um efeito ao entrar no teleporte criado no chão. Fica aparecendo um efeito de fumaça. 

 

Sim tem sim, mas você vai adicionar uma action no piso para onde o Player irá ser teleportado.

 

Tag Movements.xml

<movevent type="StepIn" actionid="9002" event="script" value="Piso-TPos.lua"/>

Piso-TPos.lua

Spoiler

function onStepIn(cid, item, position, fromPosition)
local cfg ={
	Pos = {x = 309, y = 287, z = 7}, --Local de onde o player irá nascer ao acessar o Teleport Criado.
	TimeEffect = 11,-- Tempo em segundos que o efeito vai surgir no Tile. 11 = 10 segundos. sempre coloque 1 segundo a mais.
	Storage = 7000
}

function Effect()
	if isPlayer(cid) then
		doSendMagicEffect(cfg.Pos, CONST_ME_POFF)
	end
end
	  
if (getPlayerStorageValue(cid, cfg.Storage) - os.time() <= 0) then
    setPlayerStorageValue(cid, cfg.Storage, os.time() + 3600) -- por quanto tempo irá demorar para quando o player pisar novamente no Tile irá ficar surgindo o efeito. 3600 = 60 minutos
	
   T = 1
  while T ~= cfg.TimeEffect do
        addEvent(Effect, T*1000)
          T = T + 1
  end
end 

return TRUE
end

 

 

-------------------------------------------------------------------------------------------------------------------

 

10 horas atrás, DEKU KUNNNN disse:

@Roy  Script muito boa, mas pq só a vocação que usou a magia do teleporte pode sair ? tem como resolver isso ?

 

Porque só salva a posição do Jogador que usou a spell.

doSavePlayerPos(cid, config.storage, getThingPos(cid))

Eu acho que tive uma solução para todos que entrarem no portal criado.

 

Substituir esse no lugar do outro spell .lua

Spoiler

function onCastSpell(cid, var)
function CreateTeleport(position, itemid)
	local uid = doCreateItem(itemid, 1, position)
		doSetItemActionId(uid, 9003)
	end
	
local TeleportID = 1387
local Teleport = {
config = {
Pos = getCreaturePosition(cid),
Time = 10, --Quanto tempo irá durar o Teleport 10 segundos
},
}

function removeTeleport(Teleport)
local t = getTileItemById(Teleport.config.Pos, TeleportID)
if t then
doRemoveItem(t.uid, 1)
doSendMagicEffect(Teleport.config.Pos, CONST_ME_POFF)
end
end

addEvent(CreateTeleport, 1, Teleport.config.Pos, TeleportID)
addEvent(removeTeleport, Teleport.config.Time * 1000, Teleport)
return TRUE
end

 

 

 

Movements.xml adicionar essa tag.

<movevent type="StepIn" actionid="9003" event="script" value="teleport2.lua"/>

 

em Movements/scripts criar um arquivo com nome. Teleport2.lua e adicionar isso dentro.

Spoiler

function onStepIn(cid, item, position, fromPosition)
local config = {storage = 8001}--Seleciona a storage 8001 e separa entre 3, exemplo - "8001, 8002, 8003", Entao nao use nenhuma dessas 3 storages em outros scripts.
local cfg = {storage = 8000, Tempo = 1*60, Pos = {x = 309, y = 287, z = 7}}  --1 minuto. Tempo que poderá passar no piso ao redor do Teleport.
local function doSavePlayerPos(uid, storage, pos)
doCreatureSetStorage(uid, storage, pos.x)
doCreatureSetStorage(uid, storage+1, pos.y)
doCreatureSetStorage(uid, storage+2, pos.z)
end
doSavePlayerPos(cid, config.storage, getThingPos(cid))
setPlayerStorageValue(cid, cfg.storage, os.time()+cfg.Tempo)
doTeleportThing(cid, cfg.Pos)
return TRUE
end

 

 

OBS: Lembrando que o tempo do teleport criado tem que ser menor que o tempo para entrar no outro Teleport assim o player(s) voltará para o local de onde o Teleport foi criado.

Editado por Roy (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
2 horas atrás, Roy disse:

É o seguinte ele irá castar a Spell em alguém tipo.


Exiva Black Fenix

E ambos terá que está em party(somente em party) e então  serão teleportado para o local. O portal criado não irá funcionar mais até porque somente ambos irá poder passar pelo portal do outro lado no caso.

 

adicionar na tag xml da spell:


needtarget="1" params="1" range="1" 

range="1" = distância necessária para poder castar a spell. 1 = Player próximo um do outro.

 

E irá ficar assim:


<instant name="test" words="test" lvl="0" needtarget="1" params="1" range="1" maglv="0" manapercent="0" soul="0" exhaustion="1000" prem="0" enabled="1" script="test.lua"/>

 

Spell .lua

  Mostrar conteúdo oculto


local config = {storage = 8001}--Seleciona a storage 8001 e separa entre 3, exemplo - "8001, 8002, 8003", Entao nao use nenhuma dessas 3 storages em outros scripts.
local cfg = {storage = 8000, Tempo = 1*60}  --1 minuto. Tempo que poderá passar no piso ao redor do Teleport.

local function doSavePlayerPos(uid, storage, pos)
doCreatureSetStorage(uid, storage, pos.x)
doCreatureSetStorage(uid, storage+1, pos.y)
doCreatureSetStorage(uid, storage+2, pos.z)
end

function onCastSpell(cid, var)
local target = variantToNumber(var)
local party = getPartyMembers(cid)
local targetIsPartyMember = false

local TeleportID = 1387
local Teleport = {
config = {
ToPos = {x = 0, y = 0, z = 0}, -- Local onde o jogador será teleportado coloquei 0 porque caso outro jogador tente entrar não possa ser teleportado somente a quem o cara usou a spell
TPos = {x = 309, y = 287, z = 7}, -- Local onde o jogador será teleportado
Pos = getCreaturePosition(cid),
Time = 10, --Quanto tempo irá durar o Teleport 10 segundos
},
}

function removeTeleport(Teleport)
local t = getTileItemById(Teleport.config.Pos, TeleportID)
if t then
doRemoveItem(t.uid, 1)
doSendMagicEffect(Teleport.config.Pos, CONST_ME_POFF)
end
end

if type(party) == "table" then
for _, member in pairs(party) do
if member == target then
targetIsPartyMember = true
break
end
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa esta em party para castar essa spell e, o target precisa ser um membro da sua party!")
return false
end

if targetIsPartyMember then
doCreateTeleport(TeleportID, Teleport.config.ToPos,Teleport.config.Pos)
addEvent(removeTeleport, Teleport.config.Time * 1000, Teleport)
setPlayerStorageValue(target, cfg.storage, os.time()+cfg.Tempo)
setPlayerStorageValue(cid, cfg.storage, os.time()+cfg.Tempo)
doSavePlayerPos(target, config.storage, getThingPos(target))
doSavePlayerPos(cid, config.storage, getThingPos(cid))
doTeleportThing(target, Teleport.config.TPos)
doTeleportThing(cid, Teleport.config.TPos)
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você só pode usar essa spell em membros da sua party.")
end
return TRUE
end

 

 

-------------------------------------------------------------------------------------------------------------------

 

Sim tem sim, mas você vai adicionar uma action no piso para onde o Player irá ser teleportado.

 

Tag Movements.xml


<movevent type="StepIn" actionid="9002" event="script" value="Piso-TPos.lua"/>

Piso-TPos.lua

  Mostrar conteúdo oculto


function onStepIn(cid, item, position, fromPosition)
local cfg ={
	Pos = {x = 309, y = 287, z = 7}, --Local de onde o player irá nascer ao acessar o Teleport Criado.
	TimeEffect = 11,-- Tempo em segundos que o efeito vai surgir no Tile. 11 = 10 segundos. sempre coloque 1 segundo a mais.
	Storage = 7000
}

function Effect()
	if isPlayer(cid) then
		doSendMagicEffect(cfg.Pos, CONST_ME_POFF)
	end
end
	  
if (getPlayerStorageValue(cid, cfg.Storage) - os.time() <= 0) then
    setPlayerStorageValue(cid, cfg.Storage, os.time() + 3600) -- por quanto tempo irá demorar para quando o player pisar novamente no Tile irá ficar surgindo o efeito. 3600 = 60 minutos
	
   T = 1
  while T ~= cfg.TimeEffect do
        addEvent(Effect, T*1000)
          T = T + 1
  end
end 

return TRUE
end

 

 

-------------------------------------------------------------------------------------------------------------------

 

Porque só salva a posição do Jogador que usou a spell.


doSavePlayerPos(cid, config.storage, getThingPos(cid))

Eu acho que tive uma solução para todos que entrarem no portal criado.

 

Substituir esse no lugar do outro spell .lua

  Mostrar conteúdo oculto


function onCastSpell(cid, var)
function CreateTeleport(position, itemid)
	local uid = doCreateItem(itemid, 1, position)
		doSetItemActionId(uid, 9003)
	end
	
local TeleportID = 1387
local Teleport = {
config = {
Pos = getCreaturePosition(cid),
Time = 10, --Quanto tempo irá durar o Teleport 10 segundos
},
}

function removeTeleport(Teleport)
local t = getTileItemById(Teleport.config.Pos, TeleportID)
if t then
doRemoveItem(t.uid, 1)
doSendMagicEffect(Teleport.config.Pos, CONST_ME_POFF)
end
end

addEvent(CreateTeleport, 1, Teleport.config.Pos, TeleportID)
addEvent(removeTeleport, Teleport.config.Time * 1000, Teleport)
return TRUE
end

 

 

 

Movements.xml adicionar essa tag.


<movevent type="StepIn" actionid="9003" event="script" value="teleport2.lua"/>

 

em Movements/scripts criar um arquivo com nome. Teleport2.lua e adicionar isso dentro.

  Mostrar conteúdo oculto


function onStepIn(cid, item, position, fromPosition)
local config = {storage = 8001}--Seleciona a storage 8001 e separa entre 3, exemplo - "8001, 8002, 8003", Entao nao use nenhuma dessas 3 storages em outros scripts.
local cfg = {storage = 8000, Tempo = 1*60, Pos = {x = 309, y = 287, z = 7}}  --1 minuto. Tempo que poderá passar no piso ao redor do Teleport.
local function doSavePlayerPos(uid, storage, pos)
doCreatureSetStorage(uid, storage, pos.x)
doCreatureSetStorage(uid, storage+1, pos.y)
doCreatureSetStorage(uid, storage+2, pos.z)
end
doSavePlayerPos(cid, config.storage, getThingPos(cid))
setPlayerStorageValue(cid, cfg.storage, os.time()+cfg.Tempo)
doTeleportThing(cid, cfg.Pos)
return TRUE
end

 

 

OBS: Lembrando que o tempo do teleport criado tem que ser menor que o tempo para entrar no outro Teleport assim o player(s) voltará para o local de onde o Teleport foi criado.

 

a.thumb.png.ed4b273b11cee105d399d3cad047f5a2.png

Link para o post
Compartilhar em outros sites
10 horas atrás, Black Fenix disse:

a.thumb.png.ed4b273b11cee105d399d3cad047f5a2.png

 

Afinal qual você vai usar, o com Party ou que o DEKU pediu? 

Enfim mude esse:

doSetItemActionId(uid, 9003)

Por esse:

doItemSetAttribute(uid, "aid", 9003)

Se não funcionar verifique se em seu 050-function tem essa função.

function doItemSetActionId(uid, aid)
    return doItemSetAttribute(uid, "aid", aid)
end

Se não tiver adicionar. e testa.

Link para o post
Compartilhar em outros sites

@Roy to usando como deku pediu , agr ficou mais completo! vlw , assim que conseguir por para levar o target e o player pra position direto , e deixar o portal no chao agradeço! vlw mais 1 vez

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo