Jump to content

Usar getElementData pesa?


Recommended Posts

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
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
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

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.

  • Thanks 1
Link to comment
  • Other Languages Moderators

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.

  • Thanks 1
Link to comment
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

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 by Lord Henry
Link to comment
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

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 by Lord Henry
Link to comment

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...