Maaster Posted February 15, 2021 Share Posted February 15, 2021 Bom, estou com uma duvida aqui, queria saber se ao usar muito getElementData vai pesar e causar lags no servidor, se sim, como eu poderia fazer o codigo abaixo: if getElementData(source,"algemado") then outputChatBox("#000000[#FF0000 Erro #000000]#FFFFFF Você não pode pegar um carro enquanto esta algemado!", source, 255, 255, 255, true) return end if getElementData(source,"preso") then outputChatBox("#000000[#FF0000 Erro #000000]#FFFFFF Você não pode pegar um carro dentro da prisao!", source, 255, 255, 255, true) return end if getElementData(source,"emArena") then outputChatBox("#000000[#FF0000 Erro #000000]#FFFFFF Você não pode pegar um carro em arenas!", source, 255, 255, 255, true) return end if getElementData(source,"AirNew>Entrada>BoateSF") then outputChatBox("#000000[#FF0000 Erro #000000]#FFFFFF Você não pegar um carro na boate!", source, 255, 255, 255, true) return end if getElementData(source,"astronaut:isJobber") then outputChatBox("#000000[#FF0000 Erro #000000]#FFFFFF Você não pode pegar um carro enquanto trabalha!", source, 255, 255, 255, true) return end if getElementData(source,"PegouCarro") then outputChatBox("#000000[#FF0000 Erro #000000]#FFFFFF Espere 15 segundos para pegar outro carro !", source, 255, 255, 255, true) return end Link to comment
Other Languages Moderators Lord Henry Posted February 16, 2021 Other Languages Moderators Share Posted February 16, 2021 Sim, pesa. Evite-o. Prefira tabelas. 1 Link to comment
Maaster Posted February 16, 2021 Author Share Posted February 16, 2021 6 hours ago, Lord Henry said: Sim, pesa. Evite-o. Prefira tabelas. Tabelas? if getElementData(source,"algemado") or getElementData(source,"preso") or getElementData(source,"emArena") or getElementData(source,"AirNew>Entrada>BoateSF") or getElementData(source,"astronaut:isJobber") then outputChatBox("#000000[#FF0000 Erro #000000]#FFFFFF Você não pode pegar um carro aqui!", source, 255, 255, 255, true) return end voce diz para fazer algo assim, ou daria no mesmo? Link to comment
LucasST Posted February 16, 2021 Share Posted February 16, 2021 Não, exemplo seria invés de utilizar Vários Element Data, você poderia utilizar 1 para guardar todos esses Valores em Uma Tabela, e a setando no player. 1 Link to comment
Maaster Posted February 16, 2021 Author Share Posted February 16, 2021 53 minutes ago, LucasST said: Não, exemplo seria invés de utilizar Vários Element Data, você poderia utilizar 1 para guardar todos esses Valores em Uma Tabela, e a setando no player. Entendi, e se por exemplo, eu colocar todas as arenas do servidor na dimensao 10, e em vez de setar o ElementData "emArena" para depois bloquear os comandos e teclas, apenas usar isso: addEventHandler("onClientKey", root, function (button, press) if (getElementDimension(getLocalPlayer()) == 10) then if button == "F1" or button == "F5" or button == "F5" or button == "o" or button == "m" or button == "i" then cancelEvent() end end end seria melhor? Link to comment
Other Languages Moderators Lord Henry Posted February 16, 2021 Other Languages Moderators Share Posted February 16, 2021 Essas elementDatas são temporárias? Ou vc salva elas quando os jogadores deslogam? 1 Link to comment
Maaster Posted February 16, 2021 Author Share Posted February 16, 2021 15 minutes ago, Lord Henry said: Essas elementDatas são temporárias? Ou vc salva elas quando os jogadores deslogam? São temporárias, ativam quando o player esta em um local especifico ou acontece algo especifico com ele, como ser algemado ou levar dano Link to comment
Other Languages Moderators Lord Henry Posted February 16, 2021 Other Languages Moderators Share Posted February 16, 2021 Daria pra fazer com tabelas usando o jogador como índice. Seria bem mais leve. A única coisa é que se reiniciar o resource, perde a data. E tem que ter certeza de remover a data se o jogador sair do servidor. 1 Link to comment
Maaster Posted February 16, 2021 Author Share Posted February 16, 2021 Just now, Lord Henry said: Daria pra fazer com tabelas usando o jogador como índice. Seria bem mais leve. A única coisa é que se reiniciar o resource, perde a data. E tem que ter certeza de remover a data se o jogador sair do servidor. Como posso fazer isso? Link to comment
Other Languages Moderators Lord Henry Posted February 16, 2021 Other Languages Moderators Share Posted February 16, 2021 Exemplo maroto de como seria construída a tabela: local tableMarota = {} -- Tabela vazia que será preenchida pelos jogadores e suas respectivas datas. Você pode fazer uma tabela separada por cada tipo ou então utilizar sub-tabelas dentro de uma tabela geral como esta. addCommandHandler ("preso", function (thePlayer, cmd) if (tableMarota[thePlayer]) then -- Se já existe este item na tabela, então: tableMarota[thePlayer] = nil -- Apaga este item da tabela. outputChatBox ("Você não está mais sendo considerado preso.", thePlayer) else -- Se não existe o item tableMarota[thePlayer] na tabela, então: tableMarota[thePlayer] = true -- Adiciona o item na tabela com valor true (poderia ser qualquer um exceto false e nil) outputChatBox ("Você agora está sendo considerado preso.", thePlayer) end end) Obs: Isso deve ser feito dentro do resource que usa essa data. 1 Link to comment
Maaster Posted February 16, 2021 Author Share Posted February 16, 2021 4 minutes ago, Lord Henry said: Exemplo maroto de como seria construída a tabela: local tableMarota = {} -- Tabela vazia que será preenchida pelos jogadores e suas respectivas datas. Você pode fazer uma tabela separada por cada tipo ou então utilizar sub-tabelas dentro de uma tabela geral como esta. addCommandHandler ("preso", function (thePlayer, cmd) if (tableMarota[thePlayer]) then -- Se já existe este item na tabela, então: tableMarota[thePlayer] = nil -- Apaga este item da tabela. outputChatBox ("Você não está mais sendo considerado preso.", thePlayer) else -- Se não existe o item tableMarota[thePlayer] na tabela, então: tableMarota[thePlayer] = true -- Adiciona o item na tabela com valor true (poderia ser qualquer um exceto false e nil) outputChatBox ("Você agora está sendo considerado preso.", thePlayer) end end) Obs: Isso deve ser feito dentro do resource que usa essa data. mas n daria no mesmo? os ElementData que mais estou usando, sao ativados ao estar em alguma arena ou trabalho, n ate o jogador deslogar Link to comment
Other Languages Moderators Lord Henry Posted February 16, 2021 Other Languages Moderators Share Posted February 16, 2021 ElementDatas consomem processamento para manter sincronizado com os outros jogadores. A não ser que você deixe configurado para não sincronizar. Link to comment
Maaster Posted February 16, 2021 Author Share Posted February 16, 2021 Hmm... e como eu posso configurar para não ser sincronizado, e oque afetaria isso no script? Link to comment
Other Languages Moderators Lord Henry Posted February 16, 2021 Other Languages Moderators Share Posted February 16, 2021 (edited) Se a elementData for verificada pelos outros jogadores (como policiais por exemplo), se não for sincronizado eles não vão saber a data do jogador que eles estão verificando a ficha. Então nem sempre é uma boa ideia desativar a sincronização. Mas em casos onde é usado somente pelo próprio jogador, basta você inserir um parâmetro false depois do valor do setElementData, desativando a sincronização. setElementData (thePlayer, "NomeData", valor, false) Utilizando tabelas, se for feita em um script server-side, já vai estar sincronizado com todos os jogadores pois todos tem acesso a mesma tabela. Além de poupar processamento. Edited February 16, 2021 by Lord Henry Link to comment
Maaster Posted February 16, 2021 Author Share Posted February 16, 2021 3 minutes ago, Lord Henry said: Se a elementData for verificada pelos outros jogadores (como policiais por exemplo), se não for sincronizado eles não vão saber a data do jogador que eles estão verificando a ficha. Então nem sempre é uma boa ideia desativar a sincronização. Mas em casos onde é usado somente pelo próprio jogador, basta você inserir um parâmetro false depois do valor do setElementData, desativando a sincronização. setElementData (thePlayer, "NomeData", valor, false) Utilizando tabelas, se for feita em um script server-side, já vai estar sincronizado com todos os jogadores pois todos tem acesso a mesma tabela. Além de poupar processamento. O 'valor' seria 'true' e 'false' certo? Link to comment
Other Languages Moderators Lord Henry Posted February 16, 2021 Other Languages Moderators Share Posted February 16, 2021 Depende do seu script. O valor que ele está setando nas elementDatas. Link to comment
Maaster Posted February 16, 2021 Author Share Posted February 16, 2021 1 minute ago, Lord Henry said: Depende do seu script. O valor que ele está setando nas elementDatas. Entendi, mais voltando a pergunta que fiz la em cima, usar getElementDimension pra verificar se o jogador esta na arena, ficaria mais leve? Link to comment
Other Languages Moderators Lord Henry Posted February 16, 2021 Other Languages Moderators Share Posted February 16, 2021 (edited) Sim, seria mais leve do que ElementDatas. Mas saiba que torna o sistema burlável e jogadores que não estão realmente na arena podem ser considerados apenas por estarem na dimensão 10. Você também pode adicionar o getElementInterior para considerar apenas jogadores que estão no interior 0 (exterior). Edited February 16, 2021 by Lord Henry Link to comment
Maaster Posted February 16, 2021 Author Share Posted February 16, 2021 Entendi, obrigado!! e uma ultima duvida, quando um jogador leva dano, ele recebe o ElementData "emCombate", e depois de 10 segundos o ElementData "emCombate" é removido, isso não usa muito processamento? function tomouDano ( attacker ) if not getElementData ( source, "emCombate" ) then if not (attacker) then return end if getElementType(attacker) == "player" then setElementData ( source, "emCombate", true ) setTimer ( setElementData, 10000, 1, source, "emCombate", false ) end end end addEventHandler ( "onClientPlayerDamage", getLocalPlayer(), tomouDano ) Link to comment
Other Languages Moderators Lord Henry Posted February 16, 2021 Other Languages Moderators Share Posted February 16, 2021 Sim usa. Ainda mais por usar setTimer. 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