Postado Janeiro 2, 2019 6 anos 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.
Postado Janeiro 3, 2019 6 anos @Roy Script muito boa, mas pq só a vocação que usou a magia do teleporte pode sair ? tem como resolver isso ?
Postado Janeiro 3, 2019 6 anos 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 Janeiro 3, 2019 6 anos por Roy (veja o histórico de edições)
Postado Janeiro 3, 2019 6 anos Autor 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.
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.