Postado Maio 1, 2021 4 anos -- Edit -- Editei o script aqui no tópico com a solução, para quem quiser usar -- Solucionado -- Bom guys, estou precisando de ajuda para colocar um efeito e fazer uma verificação (vou explicar melhor abaixo) no script a seguir . Imagens para melhor entendimento no final do tópico. Script (Movements/Step-in) Spoiler local config = { pos1 = {x=424, y=1753, z=7}, -- Posição aonde sera criado o item pos2 = {x=407, y=1759, z=7}, -- Posição aonde sera criado o item pos3 = {x=391, y=1751, z=7}, -- Posição aonde sera criado o item pos4 = {x=404, y=1766, z=7}, -- Posição aonde sera criado o item item = 3537, -- id do item step = 25, -- efeito ao passar pelo teleport time = 5 -- tempo que o item vai sumir em segundos } function DelTp() local t1 = getTileItemById(config.pos1, config.item) local t2 = getTileItemById(config.pos2, config.item) local t3 = getTileItemById(config.pos3, config.item) local t4 = getTileItemById(config.pos4, config.item) if t1.uid ~= 0 then doRemoveItem(t1.uid, 1) doSendMagicEffect(config.pos1, 25) elseif t2.uid ~= 0 then doRemoveItem(t2.uid, 1) doSendMagicEffect(config.pos2, 25) elseif t3.uid ~= 0 then doRemoveItem(t3.uid, 1) doSendMagicEffect(config.pos3, 25) elseif t4.uid ~= 0 then doRemoveItem(t4.uid, 1) doSendMagicEffect(config.pos41, 25) end end function onStepIn(cid, item, position, fromPosition) local teleport = math.random(1, 4) local p1 = {x=424, y=1754, z=7} local p2 = {x=407, y=1760, z=7} local p3 = {x=391, y=1752, z=7} local p4 = {x=404, y=1767, z=7} if teleport == 1 then doTeleportThing(cid, p1) doCreateItem(config.item, 1, config.pos1) end if teleport == 2 then doTeleportThing(cid, p2) doCreateItem(config.item, 1, config.pos2) end if teleport == 3 then doTeleportThing(cid, p3) doCreateItem(config.item, 1, config.pos3) end if teleport == 4 then doTeleportThing(cid, p4) doCreateItem(config.item, 1, config.pos4) end addEvent(DelTp, config.time*1000) addEvent(function() if isCreature(cid) then doSendMagicEffect(getThingPos(cid), config.step) end end, 200) return true end Significados para melhor entendimento: posição final = posição para onde o jogador vai ao ser teleportado. p1 ao p4 no script = posições para onde o jogador poderá ser teleportado ao entrar no tp. pos1 ao pos4 no script = posições onde serão criados os itens (nesse caso uma porta) 1 sqm acima da posição final. O que esse script faz? 1 - Ao passar por um teleport o jogador será teleportado para uma das 4 posições pré-definidas (por chance no math.random). 2 - Ao mesmo tempo que o jogar é teleportado ao passar pelo TP será criado um item (no caso dos testes, uma porta) 1 sqm a cima do jogador em uma das 4 posições finais. (de acordo com a posição que ele foi parar, ou seja, se ele foi pra posição 1 não irá criar o item nas outras) 3 - 5 segundos depois de passar pelo tp, criar o item (no caso uma porta), o item será removido. A ajuda que necessito: Da forma que está ele funciona 100%, mas retorna erro porque o script tenta remover as "portas" (os itens) das 4 posições diferentes. Spoiler 1 - Eu não sei como verificar se já existe o item naquela posição para depois remover, para assim, só remover se o script confirmar que existe a "porta" (o item) naquela posição. 2 - Eu queria saber também como eu coloco para quando remover as "portas" (os itens) aparecer um efeito onde eles foram removidos (no caso efeito número 35). Vídeo do script funcionando: Spoiler tp.mp4 Se alguém puder me ajudar nesses dois quesitos ficarei agradecido. Qualquer dúvida é só dizer que eu tento explicar. (Minhas explicações sempre confundem ao invés de ajudarem rs) Agradeço desde já. Editado Maio 1, 2021 4 anos por Yamili (veja o histórico de edições)
Postado Maio 1, 2021 4 anos Solução É porque a função getTileItemById não esta sendo usada corretamente nessa parte: if t1 and t2 and t3 and t4 then Você precisa verificar se existe algum item checando se id ou o unique id é diferente de 0. Tipo assim: if t1.uid ~= 0 then doRemoveItem(t1.uid, 1) end Você precisa fazer isso pra cada posição que quiser remover o item, e se quiser adicionar o efeito basta colocar junto a função doSendMagicEffect: if t1.uid ~= 0 then doRemoveItem(t1.uid, 1) doSendMagicEffect(config.pos1, 0000) end
Postado Maio 1, 2021 4 anos Autor 42 minutos atrás, MaTTch disse: É porque a função getTileItemById não esta sendo usada corretamente nessa parte: if t1 and t2 and t3 and t4 then Você precisa verificar se existe algum item checando se id ou o unique id é diferente de 0. Tipo assim: if t1.uid ~= 0 then doRemoveItem(t1.uid, 1) end Você precisa fazer isso pra cada posição que quiser remover o item, e se quiser adicionar o efeito basta colocar junto a função doSendMagicEffect: if t1.uid ~= 0 then doRemoveItem(t1.uid, 1) doSendMagicEffect(config.pos1, 0000) end Fiz seguindo o que você disse e funcionou. Mudei a parte do DelTp pra seguinte: Spoiler function DelTp() local t1 = getTileItemById(config.pos1, config.item) local t2 = getTileItemById(config.pos2, config.item) local t3 = getTileItemById(config.pos3, config.item) local t4 = getTileItemById(config.pos4, config.item) if t1.uid ~= 0 then doRemoveItem(t1.uid, 1) doSendMagicEffect(config.pos1, 25) elseif t2.uid ~= 0 then doRemoveItem(t2.uid, 1) doSendMagicEffect(config.pos2, 25) elseif t3.uid ~= 0 then doRemoveItem(t3.uid, 1) doSendMagicEffect(config.pos3, 25) elseif t4.uid ~= 0 then doRemoveItem(t4.uid, 1) doSendMagicEffect(config.pos4, 25) end end Eu não sei muito sobre scripts, então fiz desse jeito aí. Se tiver problema em colocar assim ou tiver alguma forma melhor de fazer isso me diga. No mais, dúdiva solucionada rep ++ Editado Maio 1, 2021 4 anos por Yamili (veja o histórico de edições)
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.