Jump to content

Colshape pegada al jugador


Anzo

Recommended Posts

Posted (edited)

Hola, estoy tratando de hacer una "zona para matar zombies automáticamentecon una colshape, pero quisiera saber que puedo usar para que la colshape se vaya moviendo según a donde el jugador se mueva, es decir que la posición se actualice o algo así. Lo que quiero es que mientras te muevas (supongamos que es 20 el radio de la colshape) y un zombie entre a la colshape se muera, y si tu te acercas a ellos y haces que entren también se mueren.

He leído que es complicado hacer algo como esto (que la colshape te siga) pero nunca he probado así que no puedo decir nada, aunque tampoco se me ocurre nada.

Pensaba hacerlo con getDistanceBetweenPoints3D pero creo que es más eficiente hacerlo con la colshape.

Edited by Anzo
Posted

Ten en cuenta algo: 

Usa una variable para comprobar si el colshape esta creado o no, para que no cree miles en el onClientRender. Y otra, actualiza la posicion con setElementPosition.

Posted

Todavía no he probado nada pero tengo una duda, con attachElements no funcionará? la wiki dice que también sirve con colshapes  pero busque en unos post y dicen que no se puede usar con colshapes... De todas formas más tarde si probaré de las dos maneras

Posted (edited)

Bueno, ya lo hice de la manera que me dijiste y funcionó perfecto, gracias.

Pero tengo una pregunta, esto no daría lag?

local cols = {}

function frameCol()
	if (cols[localPlayer])  then
		local x,y,z= getElementPosition(localPlayer)
		setElementPosition(cols[localPlayer], x,y,z)
	end
end
addEventHandler("onClientRender", root, frameCol)

(La colshape la estoy creando por un comando, esa es solo la parte cuando se actualiza la posición)

Edited by Anzo
Posted

Si que puedes hacerlo con attachElements disculpa, acabo de ver u un script que tenia de detectar la velocidad de otros coches con la patrulla me funcionaba con eso mismo.

Posted

Y cómo sería?...

function createCol()
	if (not autoZombieKillEnabled) then
		local x,y,_ = getElementPosition(localPlayer)
		cols[localPlayer] = createColCircle(x,y, 10)
		attachElements(cols[localPlayer], localPlayer, x,y)
		autoZombieKillEnabled = true
		outputChatBox("Col creada")
	else
		autoZombieKillEnabled = false
		if isElement((cols[localPlayer])) then
			destroyElement(cols[localPlayer])
			cols[localPlayer] = nil 
			outputChatBox("Col destruida")
		end
	end
end
addCommandHandler("col", createCol)

Ahí crea la col y todo, pero no la pega al jugador (se queda en lugar que se creó y va matando a los zombies)

Posted (edited)
attachElements(cols[localPlayer], localPlayer)

No sé si tiene mucho que ver, pero pruébalo. De todos modos, te aconsejaría que lo hagas server-side y triggees en caso de que entre un zombie (no sé que lado usa el script de zombies, pero supongo que se puede hacer sincronización).

Edited by aka Blue
Posted

Siempre pensé que era obligatorio poner los x,y,z, creo que debo leer más la wiki :'v.

Gracias @aka Blue

Y lo tengo hecho así:

--Client
local cols = {}


function createCol()
	if (not autoZombieKillEnabled) then
		local x,y,_ = getElementPosition(localPlayer)
		cols[localPlayer] = createColCircle(x,y, 10)
		attachElements(cols[localPlayer], localPlayer)
		autoZombieKillEnabled = true
		outputChatBox("Col creada")
	else
		autoZombieKillEnabled = false
		if isElement((cols[localPlayer])) then
			destroyElement(cols[localPlayer])
			cols[localPlayer] = nil 
			outputChatBox("Col destruida")
		end
	end
end
addCommandHandler("col", createCol)

function onClientHit(hit)
	if (source == cols[localPlayer]) then
		if (getElementType(hit) == "ped") and (getElementData(hit, "zombie")) then 
			outputChatBox("Zombie ha entrado")
			triggerServerEvent("autoZombieKill", getLocalPlayer(), hit)
		end
	end
end
addEventHandler("onClientColShapeHit", root, onClientHit)

--Server
function autoZombieKill(hit)
	killPed(hit, source)
end
addEvent("autoZombieKill", true)
addEventHandler("autoZombieKill", root, autoZombieKill)

 

Posted
32 minutes ago, Anzo said:

Siempre pensé que era obligatorio poner los x,y,z, creo que debo leer más la wiki :'v.

Gracias @aka Blue

Y lo tengo hecho así:


--Client
local cols = {}


function createCol()
	if (not autoZombieKillEnabled) then
		local x,y,_ = getElementPosition(localPlayer)
		cols[localPlayer] = createColCircle(x,y, 10)
		attachElements(cols[localPlayer], localPlayer)
		autoZombieKillEnabled = true
		outputChatBox("Col creada")
	else
		autoZombieKillEnabled = false
		if isElement((cols[localPlayer])) then
			destroyElement(cols[localPlayer])
			cols[localPlayer] = nil 
			outputChatBox("Col destruida")
		end
	end
end
addCommandHandler("col", createCol)

function onClientHit(hit)
	if (source == cols[localPlayer]) then
		if (getElementType(hit) == "ped") and (getElementData(hit, "zombie")) then 
			outputChatBox("Zombie ha entrado")
			triggerServerEvent("autoZombieKill", getLocalPlayer(), hit)
		end
	end
end
addEventHandler("onClientColShapeHit", root, onClientHit)

--Server
function autoZombieKill(hit)
	killPed(hit, source)
end
addEvent("autoZombieKill", true)
addEventHandler("autoZombieKill", root, autoZombieKill)

 

Eso no funciona?

Posted
2 hours ago, Anzo said:

Si lo hace, solo quería saber si era mejor hacer la col desde server directamente, pero de que sirve, sirve. 

No, no es necesario, así está bien y es mejor opción que hacerlo en el server.

  • Like 1
  • Recently Browsing   0 members

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