Jump to content

Tablas cancelEvent()


#Dv^

Recommended Posts

Posted

Hola, estoy intentando hacer una especie de godmode por tablas, pero no consigo hacer que no haga daño a otros, otros a mi no pero yo sí a otros, estoy con esto de hace días y no conseguí hacer que funcione como espero
 


local dm = {}


addEventHandler("onClientResourceStart", resourceRoot,
	function()
		dm[localPlayer] = false
	end
)

addCommandHandler( "dm",
	function( localPlayer )
		local mode = dm[ localPlayer ]
		if mode == true then
			dm[ localPlayer ] = false
			print("DM OFF")
		else
			dm[ localPlayer ] = true
			print("DM ON")
		end
	end
)


addEventHandler("onClientPlayerDamage", root,
	function( attacker, weapon, bodypart )
		if dm [attacker] == true then
			cancelEvent()
		elseif dm [localPlayer] == true then
			cancelEvent()
		end
	end
)

 

Posted

Cambia el elseif y hazlo todo de una. 

if dm [attacker] == true or dm[source] == true then

PD: No entiendo para qué el uso de tablas, es mas, ni funcionaría porque debes sincronizarlo (creo)

Posted (edited)

Me lo había dicho de esta manera, pero tampoco funcionó

 

--Server

local dm = { }

addCommandHandler( "dm",
	function( player )
		local mode = dm[ player ]
		if mode == nil then
			dm[ player ] = true
		elseif dm[player] == false then
			dm[player] = false
		else
			if mode == true then
				dm[ player ] = false
			end
		end
    	triggerClientEvent(player,"getTable",root, dm)
	end
)

--Client

local godmode = {}

addEvent("getTable", true)
addEventHandler("getTable",root,
	function(table)
  		if table then
      		godmode = table
      	end
  	end
)

addEventHandler("onClientPlayerDamage", root,
	function( atac )
		if godmode [atac] == true or godmode[ localPlayer ] == true then
			cancelEvent( )
		end
	end
)

 

Edited by Slash14
Posted

Por lo visto te guiaste por un ejemplo mío. Úsalo sin miedo, solamente que el primer script es tipo 'shared' para que los datos de la tabla, que los sacas con la función, se envíen a cliente sin problema, es decir, se pueda usar en cliente-servidor:

-- Shared

local dmTable = { }

addCommandHandler( "dm",
	function( player )
		local estado = dmTable[ player ]
		if estado == nil then
			dmTable[ player ] = { }
			dmTable[ player ] = true
			outputChatBox( "#ffffffGodmode #00ff00activado#ffffff satisfactoriamente", player, 255, 255, 255, true )
		else
			if estado == true then
				dmTable[ player ] = nil
				outputChatBox( "#ffffffGodmode #800000desactivado#ffffff satisfactoriamente", player, 255, 255, 255, true )
			end
		end
	end
)

function isGodmodeEnabled( player )
	if player then
		if dmTable[ player ] == nil then
			return false
		else
			if dmTable[ player ] == true then
				return true
			end
		end
	end
end

-- Cliente

addEventHandler("onClientPlayerDamage", root,
	function( attacker )
		if isGodmodeEnabled( attacker ) or isGodmodeEnabled( source ) then
			cancelEvent( )
		end
	end
)

PD: No uses localPlayer en onClientPlayerDamage, como indica la wiki, el 'source' de ese evento es el jugador que sale herido.

Posted

Me sale este error, que "isGodModeEnabled" no es global

 

attempt to call global "isGodModeEnabled" (a nil value)

 

Posted
2 hours ago, aka Blue said:

Por lo visto te guiaste por un ejemplo mío. Úsalo sin miedo, solamente que el primer script es tipo 'shared' para que los datos de la tabla, que los sacas con la función, se envíen a cliente sin problema, es decir, se pueda usar en cliente-servidor:


-- Shared

local dmTable = { }

addCommandHandler( "dm",
	function( player )
		local estado = dmTable[ player ]
		if estado == nil then
			dmTable[ player ] = { }
			dmTable[ player ] = true
			outputChatBox( "#ffffffGodmode #00ff00activado#ffffff satisfactoriamente", player, 255, 255, 255, true )
		else
			if estado == true then
				dmTable[ player ] = nil
				outputChatBox( "#ffffffGodmode #800000desactivado#ffffff satisfactoriamente", player, 255, 255, 255, true )
			end
		end
	end
)

function isGodmodeEnabled( player )
	if player then
		if dmTable[ player ] == nil then
			return false
		else
			if dmTable[ player ] == true then
				return true
			end
		end
	end
end

-- Cliente

addEventHandler("onClientPlayerDamage", root,
	function( attacker )
		if isGodmodeEnabled( attacker ) or isGodmodeEnabled( source ) then
			cancelEvent( )
		end
	end
)

PD: No uses localPlayer en onClientPlayerDamage, como indica la wiki, el 'source' de ese evento es el jugador que sale herido.


Un script "shared" no comparte las variables, crea sus propias para cada side.

Posted
16 hours ago, Slash14 said:

¿Qué debo hacer para que funcione como espero?

Deberías sincronizar la tabla cada vez que alguien usara el godmode, básicamente lo que hacen los element datas, ¿por qué no usas element datas?

Posted

No quería usar elementData por que según lo que leí por el foro o según lo que yo entendí es que elementData según como se use, puede generar consumo del Cpu, pero si me equivoco expliquenme

Posted
37 minutes ago, Slash14 said:

No quería usar elementData por que según lo que leí por el foro o según lo que yo entendí es que elementData según como se use, puede generar consumo del Cpu, pero si me equivoco expliquenme

Pero al sincronizar la tabla estás haciendo lo mismo.

Posted

Ohh listo, no había leído bien lo que posteaste, gracias por las respuestas

6 hours ago, Tomas said:

básicamente lo que hacen los element data

 

  • Recently Browsing   0 members

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