realasuramc Posted January 25, 2023 Share Posted January 25, 2023 (edited) Como ficar imortal após tp por 3 sec? Atualmente esse é meu sistema de tp gostaria de deixar ele melhor adicionando um tempo de 3 segundos imortal após dar o tp não entendo mt de script ent pode parecer burrice function tpCJ( source ) setElementPosition(source, 2466.6005859375, -1669.8226318359, 13.474987983704) setElementRotation(source, 0, 0, 0) outputChatBox("#FF3C00[ Teleporte ] #FF3C00 jogador "..getPlayerName(source).." #FF3C00foi para o CJ. [ /cj ]", root, 255, 255, 255, true) end addCommandHandler("cj", tpCJ) function tpShp( source ) setElementPosition(source, 1129.2374267578, -1468.4719238281, 15.740354537964) setElementRotation(source, 0, 0, 0) outputChatBox("#FF3C00[ Teleporte ] #FF3C00 jogador "..getPlayerName(source).." #FF3C00foi para o Shopping. [ /shp ]", root, 255, 255, 255, true) end addCommandHandler("shp", tpShp) function tpCnc( source ) setElementPosition(source, 552.06091308594, -1260.3699951172, 17.2421875) setElementRotation(source, 0, 0, 0) outputChatBox("#FF3C00[ Teleporte ] #FF3C00 jogador "..getPlayerName(source).." #FF3C00foi para a Concessionária. [ /conce ]", root, 255, 255, 255, true) end addCommandHandler("conce", tpCnc) function tpFav( source ) setElementPosition(source, 2159.4169921875, -979.93322753906, 70.526741027832) setElementRotation(source, 0, 0, 0) outputChatBox("#FF3C00[ Teleporte ] #FF3C00 jogador "..getPlayerName(source).." #FF3C00foi para a Favela da Aldeia. [ /aldeia ]", root, 255, 255, 255, true) end addCommandHandler("aldeia", tpFav) function tpArms( source ) setElementPosition(source, 2162.638671875, -1732.4927978516, 17.281345367432) setElementRotation(source, 0, 0, 0) outputChatBox("#FF3C00[ Teleporte ] #FF3C00 jogador "..getPlayerName(source).." #FF3C00foi para a Loja de Armas. [ /ljarmas ]", root, 255, 255, 255, true) end addCommandHandler("ljarmas", tpArms) function tpPvp( source ) setElementPosition(source, 437.10000610352, -6549.2001953125, 14.300000190735) setElementRotation(source, 0, 0, 0) outputChatBox("#FF3C00[ Teleporte ] #FF3C00 jogador "..getPlayerName(source).." #FF3C00foi jogar pvp. [ /pvp ]", root, 255, 255, 255, true) end addCommandHandler("pvp", tpPvp) Edited January 27, 2023 by Lord Henry Script convertido de HTML para Lua. Link to comment
Other Languages Moderators Lord Henry Posted January 27, 2023 Other Languages Moderators Share Posted January 27, 2023 (edited) Você pode melhorar seu código utilizando tabelas e loop em vez de ficar adicionando cada comando em uma função separada. Para deixar o jogador imortal, basta colocar uma elementData nele e verificar se ele tem essa data no client. Se tiver, cancela qualquer dano que ele recebe. server.lua local teleportes = { -- [comando] = {x, y, z, nome}, ["cj"] = {2466.6, -1669.82, 13.475, "o CJ"}, ["shp"] = {1129.24, -1468.47, 15.74, "o Shopping"}, ["conce"] = {552.06, -1260.37, 17.24, "a Concessionária"}, ["aldeia"] = {2159.42, -979.93, 17.24, "a Favela da Aldeia"}, ["ljarmas"] = {2162.64, -1732.49, 17.28, "a Loja de Armas"}, ["pvp"] = {437.1, -6549.2, 14.3, "a Área de PvP"}, } local imortais = {} function telePlayer (thePlayer, cmd) -- Função que é ativada pelo addCommandHandler. if teleportes[cmd] then -- Se o comando utilizado existe na tabela, então: if imortais[thePlayer] then -- Se o jogador ainda está imortal, então nada acontece. outputChatBox("Aguarde 3 segundos para teleportar novamente.", thePlayer, 255, 60, 0) return else imortais[thePlayer] = true -- Adiciona o jogador na tabela de imortais. setElementAlpha(thePlayer, 150) -- Deixa o player translúcido (fantasma) pra mostrar que está imortal. setElementData(thePlayer, "imortal", true) -- Coloca essa elementData nele pra deixá-lo imortal. setTimer(function() -- Depois de 3 segundos, tira o jogador da tabela de imortais, deixa ele opaco novamente e remove a data de imortal dele. imortais[thePlayer] = nil setElementAlpha(thePlayer, 255) removeElementData(thePlayer, "imortal") end, 3000, 1) end local x, y, z, nome = unpack(teleportes[cmd]) -- Pega as infos desse item da tabela e separa em variáveis. setElementPosition(thePlayer, x, y, z, true) -- Teleporta o player. -- setElementRotation(thePlayer, 0, 0, 0) outputChatBox("[Teleporte] O jogador #ffffff"..getPlayerName(thePlayer).." #FF3C00foi para "..nome..". [/"..cmd.."]", root, 255, 60, 0, true) -- Manda essa mensagem pra todo mundo. end end for cmd,v in pairs (teleportes) do -- Faz um loop pela tabela, adicionando todos os addCommandHandlers. addCommandHandler(cmd, telePlayer) end client.lua addEventHandler ("onClientPlayerDamage", root, function () if getElementData(source, "imortal") then -- Se o jogador que tomou dano tem essa elementData, então cancela o dano e nada acontece. cancelEvent() end end) addEventHandler ("onClientPlayerStealthKill", localPlayer, function (targetPlayer) if getElementData (targetPlayer, "imortal") then -- Se o jogador que está sendo alvo da facada fatal tiver essa elementData, impede que ele tome a facada e nada acontece. cancelEvent() end end) Edited January 27, 2023 by Lord Henry 1 Link to comment
realasuramc Posted January 27, 2023 Author Share Posted January 27, 2023 1 hour ago, Lord Henry said: Você pode melhorar seu código utilizando tabelas e loop em vez de ficar adicionando cada comando em uma função separada. Para deixar o jogador imortal, basta colocar uma elementData nele e verificar se ele tem essa data no client. Se tiver, cancela qualquer dano que ele recebe. server.lua local teleportes = { -- [comando] = {x, y, z, nome}, ["cj"] = {2466.6, -1669.82, 13.475, "o CJ"}, ["shp"] = {1129.24, -1468.47, 15.74, "o Shopping"}, ["conce"] = {552.06, -1260.37, 17.24, "a Concessionária"}, ["aldeia"] = {2159.42, -979.93, 17.24, "a Favela da Aldeia"}, ["ljarmas"] = {2162.64, -1732.49, 17.28, "a Loja de Armas"}, ["pvp"] = {437.1, -6549.2, 14.3, "a Área de PvP"}, } local imortais = {} function telePlayer (thePlayer, cmd) -- Função que é ativada pelo addCommandHandler. if teleportes[cmd] then -- Se o comando utilizado existe na tabela, então: if imortais[thePlayer] then -- Se o jogador ainda está imortal, então nada acontece. outputChatBox("Aguarde 3 segundos para teleportar novamente.", thePlayer, 255, 60, 0) return else imortais[thePlayer] = true -- Adiciona o jogador na tabela de imortais. setElementAlpha(thePlayer, 150) -- Deixa o player translúcido (fantasma) pra mostrar que está imortal. setElementData(thePlayer, "imortal", true) -- Coloca essa elementData nele pra deixá-lo imortal. setTimer(function() -- Depois de 3 segundos, tira o jogador da tabela de imortais, deixa ele opaco novamente e remove a data de imortal dele. imortais[thePlayer] = nil setElementAlpha(thePlayer, 255) removeElementData(thePlayer, "imortal") end, 3000, 1) end local x, y, z, nome = unpack(teleportes[cmd]) -- Pega as infos desse item da tabela e separa em variáveis. setElementPosition(thePlayer, x, y, z, true) -- Teleporta o player. -- setElementRotation(thePlayer, 0, 0, 0) outputChatBox("[Teleporte] O jogador #ffffff"..getPlayerName(thePlayer).." #FF3C00foi para "..nome..". [/"..cmd.."]", root, 255, 60, 0, true) -- Manda essa mensagem pra todo mundo. end end for cmd,v in pairs (teleportes) do -- Faz um loop pela tabela, adicionando todos os addCommandHandlers. addCommandHandler(cmd, telePlayer) end client.lua addEventHandler ("onClientPlayerDamage", root, function () if getElementData(source, "imortal") then -- Se o jogador que tomou dano tem essa elementData, então cancela o dano e nada acontece. cancelEvent() end end) addEventHandler ("onClientPlayerStealthKill", localPlayer, function (targetPlayer) if getElementData (targetPlayer, "imortal") then -- Se o jogador que está sendo alvo da facada fatal tiver essa elementData, impede que ele tome a facada e nada acontece. cancelEvent() end end) Cara mt obg to procurando alguns lugares pra estudar um pouco de script, cê, tem alguma recomendação? Link to comment
Other Languages Moderators Lord Henry Posted January 27, 2023 Other Languages Moderators Share Posted January 27, 2023 YouTube Este fórum Wiki do MTA Discord oficial do MTA Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now