Jump to content

"BUG" na tabela


Recommended Posts

Olá pessoal, estou com um problema no meu sistema de prisão, a tabela que salva o veículo funciona normalmente em todas as partes do script, porém, na função onPlayerWasted a tabela parece que não funciona, não sei se tem algum outro resource dando algum tipo de conflito/bug

Segue o código abaixo:

local positions = { 
    {x = 1536, y = -1675.5, z = 12}, 
    {x = 2185, y = -1757, z = 12},
	{x = 777.6, y = -1387.5, z = 12}, 
    {x = -1568.1, y = 661.18, z = 6},
	{x = 2290.18, y = 2420.7, z = 10}
}

local cadeias = {
	{-1283.88013, 1200.47180, 13.01935},
	{-1283.51514, 1207.08447, 13.02033},
	{-1283.46167, 1213.87219, 13.02705},
	{-1284.11597, 1220.69495, 13.01871}
}

local IDS = {
	[490] = true,
	[598] = true,
	[596] = true,
	[597] = true,
	[560] = true
}

local timerArrested = {}

function createPrisonMarker(source)
	for _, v in ipairs(positions) do 
		if isPlayerPolice(source) then
			if not marker then
				local marker = createMarker(v.x, v.y, v.z, 'cylinder', 3.0, 10, 10, 10, 255, source)
				createBlipAttachedTo(marker, 30, 2, 255, 255, 255, 255, 0, 9999, source)
			end
		end
	end 
end

function onResourceStart()
	for _, player in ipairs(getElementsByType("player")) do
		createPrisonMarker(player)
	end
end
addEventHandler("onResourceStart", resourceRoot, onResourceStart)

local carros = {}
function onPlayerVehicleEnter(theVehicle, seat, jacked)
	local idModel = getElementModel(theVehicle)
	if IDS[idModel] then
		carros[source] = theVehicle
		print(carros[source]) -- retorna tabela
		print(getElementModel(carros[source])) -- retorna id
	end
end
addEventHandler('onPlayerVehicleEnter', root, onPlayerVehicleEnter)

function onPrender(police, _, target)
    if isPlayerPolice(police) then
		local target = getPlayerFromPartialName(target)
		if not target then
			return outputChatBox('#bebebeJogador inválido', police, 255, 255, 255, true)
		end
		local px, py, pz = getElementPosition(police)
		local bx, by, bz = getElementPosition(target)
		local dist = getDistanceBetweenPoints3D(px, py, pz, bx, by, bz)
		if target == police then
			return outputChatBox('#bebebeVocê não pode prender a si mesmo', police, 255, 255, 255, true)
		end
		if getPlayerWantedLevel(target) == 0 then
			return outputChatBox('#bebebe Este jogador não está sendo procurado', police, 255, 255, 255, true)
		end
		if isPedInVehicle(police) then
			return outputChatBox('#bebebeVocê não pode prender de dentro da viatura', police, 255, 255, 255, true)
		end
		if isPedInVehicle(target) then
			return outputChatBox('#bebebeVocê não pode prender um bandido enquanto ele estiver dentro de um veículo', police, 255, 255, 255, true)
		end
		if dist >= 2.5 then
			return outputChatBox('#bebebeVocê precisa chegar mais perto para prender', police, 255, 255, 255, true)
		end
		if not carros[police] then
			return outputChatBox('#bebebeEntre na VIATURA e saia para poder prender', police, 255, 255, 255, true)
		end
		warpPlayerInVTR(police, target)
	end
end
addCommandHandler('prender', onPrender)

function onPlayerCommand(command)
	cancelEvent()	
end

function onMarkerHit(hitElement, d)
	if hitElement and d then
		if getElementType(hitElement) == "vehicle" then
			local police = getVehicleOccupant(hitElement, 0)
			if carros[police] then
				local pregados = getAttachedElements(hitElement)
				for _, preso in ipairs(pregados) do
					if not isElement(preso) then return end
					
					if getElementData(preso, 'navtr') then
						removeElementData(preso, 'navtr')
					end
					setElementData(preso, 'arrested', true)
					
					detachElements(preso, hitElement)
					
					setPedAnimation(preso)
					toggleAllControls(preso, true)
					setPlayerInPrison(preso, "controls")

					local wanted = getPlayerWantedLevel(preso)
					local tempo = 30000 * wanted
					timerArrested[preso] = setTimer(function(p) 
						onSoltar(p)
					end, tempo, 1, preso)
					triggerClientEvent(preso, "onClientPlayerArrested", resourceRoot, "add", tempo)
					
					local niv = getPlayerWantedLevel(preso)
					local premio = 1000*niv
					givePlayerMoney(police, premio)
					outputChatBox('#bebebeVocê prendeu um procurado nível #00ffff'..niv..'#bebebe e ganhou #00ffff$'..premio..'#bebebe de prêmio', police, 255, 255, 255, true)		
				end
			end
		end
	end
end
addEventHandler("onMarkerHit", resourceRoot, onMarkerHit)

function onPlayerWasted(totalAmmo, killer, killerWeapon, bodypart, stealth)
	if isElement(source) then
		onSoltarWasted(source)
	end
end
addEventHandler("onPlayerWasted", root, onPlayerWasted)

function onSoltarWasted(source)
    if isPlayerPolice(source) then
        local vtr = carros[source]
		print(vtr) -- retorna a tabela
		print(getElementModel(vtr)) -- da erro e retorna false
        if vtr and isElement(vtr) then
            local pregados = getAttachedElements(vtr)
            for _, preso in ipairs(pregados) do
                if preso and isElement(preso) then
                    detachElements(preso, vtr)
					setPedAnimation(preso)
                    if getElementData(preso, "navtr") then
                        removeElementData(preso, "navtr")
                    end
                    removeEventHandler('onPlayerCommand', preso, onPlayerCommand)
                    toggleAllControls(preso, true)
					local x,y,z = getElementPosition(preso)
					setElementPosition(preso,x+1.5,y+1.5,z+1)
                end
            end
        end
    end
end

function warpPlayerInVTR(police, preso)
	setElementData(preso, 'navtr', true)		                     
	addEventHandler('onPlayerCommand', preso, onPlayerCommand)
	
	local vtr = carros[police]
	attachElements(preso, vtr, 0.2, -1.5, 0, 0, 0, 90)
	
	takeAllWeapons(preso)
	toggleAllControls(preso, false)
	setPedAnimation(preso, 'ped','CAR_dead_LHS')
	
	local vrx, vry, vrz = getElementRotation(vtr)
	setElementRotation(preso, vrx, vry, vrz+83)	
	
	warpPedIntoVehicle(police, vtr)
	outputChatBox('#bebebeLeve o preso para a delegacia mais próxima #00ffff(sirenes azuis).', police, 255, 255, 255,true)
end

function onSoltar(preso)
	removeEventHandler('onPlayerCommand', preso, onPlayerCommand)
	removeElementData(preso, 'arrested')
	
	setElementDimension(preso, 0)
	setElementPosition(preso, -1607.02698, 715.03778, 12.53868)
	
	toggleControl(preso, "fire", true)
	toggleControl(preso, "aim_weapon", true)
	toggleControl(preso, "next_weapon", true)
	toggleControl(preso, "previous_weapon", true)
	
	setPlayerWantedLevel(preso, 0)
	
	if timerArrested[preso] then
		if isTimer(timerArrested[preso]) then
			killTimer(timerArrested[preso])
		end
		timerArrested[preso] = nil
	end
	triggerClientEvent(preso, "onClientPlayerArrested", resourceRoot, "remove")
end

function onPlayerQuit()
	local account = getPlayerAccount(source)
	if account and not isGuestAccount(account) then
		if timerArrested[source] then
			if isTimer(timerArrested[source]) then
				local time = getTimerDetails(timerArrested[source])
				setAccountData(account, "jailTime", time)
				killTimer(timerArrested[source])
			else
				local statusJailTime = getAccountData(account, "jailTime")
				if statusJailTime then
					setAccountData(account, "jailTime", false)
				end
			end
			timerArrested[source] = nil
		end
		local status = getElementData(source,"arrested")
		if status then
			setAccountData(account, "arrested", true)
		else
			local statusArrested = getAccountData(account, "arrested")
			if statusArrested then
				setAccountData(account, "arrested", false)
			end
		end
		if getElementData(source, "navtr") then
			setAccountData(account, "jailTime", 180000)
			setAccountData(account, "arrested", true)
		end
	end
end
addEventHandler("onPlayerQuit", root, onPlayerQuit)

function onPlayerLogin(_, account)
	local status = getAccountData(account, "arrested")
	if status then
		setElementData(source, "arrested", true)
		local tempo = getAccountData(account, "jailTime")
		timerArrested[source] = setTimer(function(p) 
			onSoltar(p)
		end, tempo, 1, source)
		triggerClientEvent(source, "onClientPlayerArrested", resourceRoot, "add", tempo)
		setPlayerInPrison(source, "controls")
	end
	createPrisonMarker(source)
end
addEventHandler("onPlayerLogin", root, onPlayerLogin)

function setPlayerInPrison(source, type)
	setElementDimension(source, 2)
	setElementPosition(source, unpack(cadeias[math.random(#cadeias)]))
	if type == "controls" then
		toggleControl(source, "fire", false)
		toggleControl(source, "aim_weapon", false)
		toggleControl(source, "next_weapon", false)
		toggleControl(source, "previous_weapon", false)
	end
end

local policeACLs =
{
    aclGetGroup("Console"),
    -- aclGetGroup("FT"),
    -- aclGetGroup("ROTA"),
	-- aclGetGroup("CORE"),
	-- aclGetGroup("CHOQUE"),
	-- aclGetGroup("EXE"),
}

function isPlayerPolice(p)
    local acc = getPlayerAccount(p)

    if not acc then return false end
    if isGuestAccount(acc) then return false end

    local object = getAccountName(acc)

    for _,group in ipairs(policeACLs) do
        if isObjectInACLGroup("user."..object,group) then
            return true
        end
    end
    return false
end

function getPlayerFromPartialName(name)
    local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil
    if name then
        for _, player in ipairs(getElementsByType("player")) do
            local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower()
            if name_:find(name, 1, true) then
                return player
            end
        end
    end
end

 

  • Haha 1
Link to comment
  • Other Languages Moderators

Substitua as funções onPlayerWasted e onSoltarWasted por essa:

function onPlayerDied(totalAmmo, killer, killerWeapon, bodypart, stealth) -- Não use nome de evento como nome de função.
	if isPlayerPolice(source) then
		local vtr = carros[source]
		print(vtr) -- retorna a tabela
		print(getElementModel(vtr)) -- da erro e retorna false
		if vtr and isElement(vtr) then
			local pregados = getAttachedElements(vtr)
			for _, preso in ipairs(pregados) do
				if preso and isElement(preso) then
					detachElements(preso, vtr)
					setPedAnimation(preso)
					if getElementData(preso, "navtr") then
						removeElementData(preso, "navtr")
					end
					removeEventHandler('onPlayerCommand', preso, onPlayerCommand)
					toggleAllControls(preso, true)
					local x,y,z = getElementPosition(preso)
					setElementPosition(preso,x+1.5,y+1.5,z+1)
				end
			end
		end
	end
end
addEventHandler("onPlayerWasted", root, onPlayerDied)

 

  • Like 1
Link to comment
5 minutes ago, Lord Henry said:

Substitua as funções onPlayerWasted e onSoltarWasted por essa:


function onPlayerDied(totalAmmo, killer, killerWeapon, bodypart, stealth) -- Não use nome de evento como nome de função.
	if isPlayerPolice(source) then
		local vtr = carros[source]
		print(vtr) -- retorna a tabela
		print(getElementModel(vtr)) -- da erro e retorna false
		if vtr and isElement(vtr) then
			local pregados = getAttachedElements(vtr)
			for _, preso in ipairs(pregados) do
				if preso and isElement(preso) then
					detachElements(preso, vtr)
					setPedAnimation(preso)
					if getElementData(preso, "navtr") then
						removeElementData(preso, "navtr")
					end
					removeEventHandler('onPlayerCommand', preso, onPlayerCommand)
					toggleAllControls(preso, true)
					local x,y,z = getElementPosition(preso)
					setElementPosition(preso,x+1.5,y+1.5,z+1)
				end
			end
		end
	end
end
addEventHandler("onPlayerWasted", root, onPlayerDied)

 

Continua a mesma coisa

  • Haha 1
Link to comment

Visualmente não vi erro na tabela. Então fui testar e funcionou, dei kill e ele printou o elemento veículo e seu id.

Obs: Se ficar um tempo fora do veículo o f1 tem um sistema para destruir o veículo, ai vai dar erro. (verificando um veículo que já foi destruído)

Edited by MaligNos
  • Like 1
Link to comment
3 hours ago, MaligNos said:

Visualmente não vi erro na tabela. Então fui testar e funcionou, dei kill e ele printou o elemento veículo e seu id.

Obs: Se ficar um tempo fora do veículo o f1 tem um sistema para destruir o veículo, ai vai dar erro. (verificando um veículo que já foi destruído)

Pois é, está tudo normal, acho que está dando algum conflito no servidor que estou utilizando ele, vou tentar resolver isso.

  • Haha 1
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...