Jump to content

Que se cree solo una vez pero funcione varias veces


Anzo

Recommended Posts

Probablemente no hayan entendido el titulo, pero lo explicare:

Tengo un boss que crea unas armas en su cuerpo cuando tiene  menos de 5000 de vida, use una variable como 'if not k then' k = true para que solo se crearan las armas sola una vez cuando le dispares y tenga -5000 de vida, esto lo hice para que no se crearan muchas armas y después daría muchos errores. 

El boss es este:

(client)

function kk(attacker,weapois,ww)
	if (attacker) then
		if (isElement(attacker)) then
			if (getElementType(attacker) == "player") then
				if (getElementType(source) == "ped") then
					if (getElementData(source,"Apocal") == true) then
						local healthMyBBoss = exports.extra_health:getElementExtraHealth(source)
						if (healthMyBBoss < 5000) then
						local wX,wY,wZ = getElementPosition(source)
							if not kasd then
								if ( getElementData(localPlayer, "thes") == true) then
									weapon = createWeapon("m4",  wX,wY,wZ)
									attachElements(weapon,source,0,0,0,0,5,90)
									setWeaponClipAmmo(weapon,99999)
									setWeaponState(weapon, "firing")
									setWeaponProperty(weapon,"fire_rotation",0,-5,0)
									weapon11 = createWeapon("m4",  wX,wY,wZ)
									attachElements(weapon11,source,0,0,0,0,5,90)
									setWeaponClipAmmo(weapon11,99999)
									setWeaponState(weapon11, "firing")
									setWeaponProperty(weapon11,"fire_rotation",0,-5,0)
									--weapon2
									weapon2 = createWeapon("m4",  wX,wY,wZ)
									attachElements(weapon2,source,0+0.2,0,0,0,5,90)
									setWeaponClipAmmo(weapon2,99999)
									setWeaponState(weapon2, "firing")
									setWeaponProperty(weapon2,"fire_rotation",0,-5,0)
									weapon2223 = createWeapon("m4",  wX,wY,wZ)
									attachElements(weapon2223,source,0+0.2,0,0,0,5,90)
									setWeaponClipAmmo(weapon2223,99999)
									setWeaponState(weapon2223, "firing")
									setWeaponProperty(weapon2223,"fire_rotation",0,-5,0)
								
									--weapon3
									weapon3 = createWeapon("m4",  wX,wY,wZ)
									attachElements(weapon3,source,0+0.2,0,0,0,5,-90)
									setWeaponClipAmmo(weapon3,99999)
									setWeaponState(weapon3, "firing")
									setWeaponProperty(weapon3,"fire_rotation",0,-5,0)
								
									--weapon4
									weapon4 = createWeapon("m4",  wX,wY,wZ)
									attachElements(weapon4,source,0,0,0,0,5,-90)
									setWeaponClipAmmo(weapon4,99999)
									setWeaponState(weapon4, "firing")
									setWeaponProperty(weapon4,"fire_rotation",0,-5,0)
									kasd = true
								end
							end
						end
					end
				end
			end
		end
	end
end
addEventHandler("onClientPedDamage", root, kk)

Ahí use un elementData para ver si podía hacer que se activen cuando el boss aparezca, pero con elementData no me funciono así que use esa variable para que se creen solo una vez las armas aunque le dispares más veces, el problema es que solo funciona una vez, si el boss muere y aparece de nuevo y le disparan teniendo -5000 de vida no le aparecerán las armas, yo quiero eso, que se creen siempre que tenga -5000 de vida pero, que las armas solo se creen una vez. Me explico, si le quito la variable esa las armas se crearan infinitamente si le sigues disparando al boss, y cuando muera, dará error en los destroyElement porque había muchas creo. 

(server)

function botSpawn(thePlayers,mathd)
	local BBoss = exports.slothbot:spawnBot ( 1131.78918, -2036.76990, 69.00781, 0, 18,  0, 0,  team,  24,  "hunting" )
	Booty = BBoss
	local setHealth = exports.extra_health:setElementExtraHealth(BBoss, 2)
	setElementData(BBoss, "currenthealth", exports.extra_health:getElementExtraHealth(BBoss))
	setElementData(BBoss,"Apocal",true)
	setElementData(BBoss,"name","Apocal")
	cblip = createBlipAttachedTo(BBoss,23)
	setPedStat(BBoss,71,1000)
	outputChatBox("#666666'#D50000Apocal#666666' #ffffffha aparecido cerca del hospital de Los #D50000Santos-",getRootElement(),255,255,255,true)
	setTimer(spawnClones,58000,1)
	setElementData(root, "thes", true)

end
addEventHandler("onResourceStart",getResourceRootElement(getThisResource()), botSpawn)

 

Ahí use un setElementData(root, "thes", true) para ver si funcionaba, pero no.

 

Edited by Anzo
Link to comment

Supongo que quieres esto:

local weapons = {}
local spawnedWeapons = false

function kk(attacker,weapois,ww)
	if (attacker) then
		if (isElement(attacker)) then
			if (getElementType(attacker) == "player") then
				if (getElementType(source) == "ped") then
					if (getElementData(source,"Apocal") == true) then
						local healthMyBBoss = exports.extra_health:getElementExtraHealth(source)
						if (healthMyBBoss < 5000) then
						local wX,wY,wZ = getElementPosition(source)
							if not spawnedWeapons then
								if ( getElementData(localPlayer, "thes") == true) then
									weapons
									for i = 1, 5 do
										weapon = createWeapon("m4",  wX,wY,wZ)
										attachElements(weapon,source,0,0,0,0,5,90)
										setWeaponClipAmmo(weapon,99999)
										setWeaponState(weapon, "firing")
										setWeaponProperty(weapon,"fire_rotation",0,-5,0)
										table.insert(weapons, weapon)
									end
									spawnedWeapons = true
								end
							end
						end
					end
				end
			end
		end
	end
end
addEventHandler("onClientPedDamage", root, kk)

function onWasted(killer, weapon, bodypart)
    if (getElementData(source,"Apocal") == true) then
		for i, k in ipairs(weapons) do
			destroyElement(k)
		end
		spawnedWeapons = false
	end
end
 
-- add the event handler
addEventHandler("onClientPedWasted", getRootElement(), onWasted)

function botSpawn(thePlayers,mathd)
	local BBoss = exports.slothbot:spawnBot ( 1131.78918, -2036.76990, 69.00781, 0, 18,  0, 0,  team,  24,  "hunting" )
	Booty = BBoss
	local setHealth = exports.extra_health:setElementExtraHealth(BBoss, 2)
	setElementData(BBoss, "currenthealth", exports.extra_health:getElementExtraHealth(BBoss))
	setElementData(BBoss,"Apocal",true)
	setElementData(BBoss,"name","Apocal")
	cblip = createBlipAttachedTo(BBoss,23)
	setPedStat(BBoss,71,1000)
	outputChatBox("#666666'#D50000Apocal#666666' #ffffffha aparecido cerca del hospital de Los #D50000Santos-",getRootElement(),255,255,255,true)
	setTimer(spawnClones,58000,1)
end
addEventHandler("onResourceStart",getResourceRootElement(getThisResource()), botSpawn)

 

Link to comment

No sé porque no me deja editar el otro post pero bueno, ya pude solucionarlo :D

Lo que hice fue crear un trigger desde client que tuviera algo como: variable = false y después pasarlo a server con triggerClientEvent y ponerlo en la parte cuando se muera el boss, así cuando se muera se desactiva y la función se pueda ejecutar siempre que el boss muera; no sé si haya otra forma mejor de hacerlo pero de este método me funciono y la verdad no se me ocurre otra forma de hacerlo. 

PD: Si alguien sabre otra manera más eficiente de hacerlo que porfavir la diga :v

Edited by Anzo
Link to comment
  • 3 weeks later...
1 hour ago, DarkNeSsOak said:

Disculpa puedes pasarme El script Como lo solucionastee plox

Lo que habia hecho antes era esto: 

function fali()
  armas = false
end
addEvent("cancel",true)
addEventHandler("cancel",root, fali

Y en la parte donde moria el boss: triggerClientEvent("cancel",source)

Pero es mejor usar algo como esto:

local bossWeapons = false
local E_weapon = {}
local eRot

if (bossWeapons == false) then
	for i=1, 8 do
		E_weapon[i] = createWeapon("m4", posx, posy, posz)
		eRot = eRot + 30*i
		attachElements(E_weapon[i], source, 0, 0, 0, 0, 5, eRot)
		setWeaponClipAmmo(E_weapon[i], 99999)
		setWeaponState(E_weapon[i], "firing")
		setWeaponProperty(E_weapon[i], "fire_rotation", 0, -5, 0)
	end
	bossWeapons = true
end

 

Link to comment
  • Recently Browsing   0 members

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