wesssley Posted June 8, 2023 Share Posted June 8, 2023 (edited) Estou com um script e criei algumas binds, na mesma tecla, porém executa funções diferentes, e para executar a função tem que estar no marker, o código (apenas das binds) é esse: ------------- exemplo1 function bindexemplo1() for i, v in ipairs(getElementsByType("player")) do bindKey(v, "g", "down", function1) end end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), bindexemplo1) function bindexemplo11() bindKey(source, "g", "down", function1) end addEventHandler("onPlayerJoin", getRootElement(), bindexemplo11) ------------- exemplo2 function bindexemplo2() for i, v in ipairs(getElementsByType("player")) do bindKey(v, "g", "down", function2) end end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), bindexemplo2) function bindexemplo22() bindKey(source, "g", "down", function2) end addEventHandler("onPlayerJoin", getRootElement(), bindexemplo22) queria saber se dá algum problema usar a mesma tecla para executar as funções diferentes, deixando claro que no inicio das funções coloquei para que se o player estiver no marker então executa com a bind, cada função é um marker diferente. Existe algum problema nisso? se sim tem alguma forma correta para usar? edit: Até então não deu nenhum debug e estava funcionando tudo perfeitamente, só queria saber se pode ocasionar algum bug futuramente ou se tem como "otimizar" o código. Edited June 8, 2023 by wesssley Link to comment
Other Languages Moderators Lord Henry Posted June 8, 2023 Other Languages Moderators Share Posted June 8, 2023 (edited) Prefira usar variáveis predefinidas. Troque todos os getResourceRootElement(getThisResource()) por resourceRoot. Troque todos os getRootElement() por root. Ao usar getElementsByType, a ordem dos elementos não importa. O pairs é um pouco mais rápido que o ipairs. Troque todos os ipairs por pairs. Por não ser necessário o índice, você pode ignorar a variável i dos loops, trocando eles por _ (underline). Troque todos os i dos loops por _ Não adicione o mesmo evento várias vezes. No seu exemplo você está adicionando 2 onPlayerJoin e 2 onResourceStart. Coloque todos os bindKey na mesma função onde está o onPlayerJoin e o onResourceStart. Delete as funções e eventos repetidos. Edited June 8, 2023 by Lord Henry Link to comment
Other Languages Moderators Lord Henry Posted June 8, 2023 Other Languages Moderators Share Posted June 8, 2023 Dica sobre os markers: Crie uma tabela com todos os markers para poupar espaço na memória mantendo todos eles na mesma variável. É melhor fazer assim do que vários createMarkers em variáveis diferentes. local theMarkers = { createMarker(0, 0, 3.5, "cylinder"), createMarker(0, 4, 3.5, "cylinder"), createMarker(0, -4, 3.5, "cylinder"), } function function1(keyPresser, key, keyState) -- Função que é ativada ao apertar a tecla bindada G. if isElementWithinMarker (keyPresser, theMarkers[1]) then -- Se o jogador que apertou a tecla estiver dentro do primeiro marker, então: -- Faz tal coisa. elseif isElementWithinMarker (keyPresser, theMarkers[2]) then -- Senão, se ele estiver no segundo marker, então: -- Faz outra coisa. elseif isElementWithinMarker (keyPresser, theMarkers[3]) then -- E assim por diante. -- Faz outra coisa. end end -- Não precisa da function2, pois todos os markers ativarão a function1 que vai determinar oq cada um faz. 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