210 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local enabled = true
 | |
| 
 | |
| Citizen.CreateThread(function()
 | |
| 	while (true) do
 | |
| 		local playerPed = PlayerPedId()
 | |
| 		if (DoesEntityExist(playerPed)) then
 | |
| 			TriggerServerEvent("mh_Parking:syncPlayerPosition", GetEntityCoords(playerPed))
 | |
| 		end
 | |
| 		
 | |
| 		Citizen.Wait(3000)
 | |
| 	end
 | |
| end)
 | |
| 
 | |
| Citizen.CreateThread(function()
 | |
|     while (true) do
 | |
|         Citizen.Wait(5 * 60 * 1000)
 | |
| 
 | |
|         local vehicle = GetVehiclePedIsIn(PlayerPedId())
 | |
|         if (DoesEntityExist(vehicle)) then
 | |
|             TriggerEvent("mh_Parking:updateVehicle", vehicle)
 | |
|         end
 | |
|     end
 | |
| end)
 | |
| 
 | |
| Citizen.CreateThread(function()
 | |
| 	Citizen.Wait(3000)
 | |
| 
 | |
| 	local isInVehicle = false
 | |
| 	local currentVehiclePlate = nil
 | |
| 	local wasDead = false
 | |
| 
 | |
| 	while (true) do
 | |
| 		Citizen.Wait(50)
 | |
| 		
 | |
|         local playerPed = PlayerPedId()
 | |
| 
 | |
| 		if (not isInVehicle and IsPedInAnyVehicle(playerPed)) then
 | |
| 			-- entered vehicle
 | |
| 
 | |
| 			isInVehicle = true
 | |
| 
 | |
| 			if (enabled) then
 | |
| 				local vehicle = GetVehiclePedIsIn(playerPed, false)
 | |
| 				if (NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
 | |
| 					local networkId = NetworkGetNetworkIdFromEntity(vehicle)
 | |
| 					SetNetworkIdCanMigrate(netId, true)
 | |
| 					local modifications = GetVehicleModifications(vehicle)
 | |
| 
 | |
| 					currentVehiclePlate = GetVehicleNumberPlateText(vehicle)
 | |
| 
 | |
| 					TriggerServerEvent("mh_Parking:enteredVehicle", networkId, currentVehiclePlate, modifications)
 | |
| 
 | |
| 					Log("Vehicle " .. currentVehiclePlate .. " entered")
 | |
| 				end
 | |
| 			end
 | |
| 		elseif (isInVehicle and not IsPedInAnyVehicle(playerPed, false)) then
 | |
| 			-- left vehicle
 | |
| 
 | |
| 			isInVehicle = false
 | |
| 
 | |
| 			if (enabled and not wasDead) then
 | |
| 				local vehicle = GetVehiclePedIsIn(playerPed, true)
 | |
| 
 | |
| 				if (vehicle ~= 0) then
 | |
| 					if (NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
 | |
| 						local networkId = NetworkGetNetworkIdFromEntity(vehicle)
 | |
| 						SetNetworkIdCanMigrate(netId, true)
 | |
| 						local modifications = GetVehicleModifications(vehicle)
 | |
| 
 | |
| 						TriggerServerEvent("mh_Parking:leftVehicle", networkId, modifications)
 | |
| 
 | |
| 						Log("Vehicle " .. GetVehicleNumberPlateText(vehicle) .. " left")
 | |
| 
 | |
| 						-- if vehicle is deleted soon after
 | |
| 						Citizen.CreateThread(function()
 | |
| 							local veh = vehicle
 | |
| 							local plate = GetVehicleNumberPlateText(veh)
 | |
| 							local startTime = GetGameTimer()
 | |
| 							local playerPed = PlayerPedId()
 | |
| 							local playerPos
 | |
| 
 | |
| 							while (true) do
 | |
| 								Citizen.Wait(0)
 | |
| 
 | |
| 								if (GetGameTimer() - startTime >= 1000) then
 | |
| 									break
 | |
| 								end
 | |
| 
 | |
| 								if (not DoesEntityExist(veh)) then
 | |
| 									TriggerServerEvent("mh_Parking:deleteVehicle", plate, false)
 | |
| 
 | |
| 									Log("Vehicle " .. currentVehiclePlate .. " left and deleted after exit")
 | |
| 
 | |
| 									currentVehiclePlate = nil
 | |
| 									break
 | |
| 								end
 | |
| 								
 | |
| 								playerPed = PlayerPedId()
 | |
| 								playerPos = GetEntityCoords(playerPed)
 | |
| 								vehPos = GetEntityCoords(veh)
 | |
| 
 | |
| 								if (Vdist(playerPos.x, playerPos.y, playerPos.z, vehPos.x, vehPos.y, vehPos.z) > 50.0) then
 | |
| 									currentVehiclePlate = nil
 | |
| 									break
 | |
| 								end
 | |
| 							end
 | |
| 							
 | |
| 							currentVehiclePlate = nil
 | |
| 						end)
 | |
| 					end
 | |
| 				elseif (currentVehiclePlate) then
 | |
| 					TriggerServerEvent("mh_Parking:deleteVehicle", currentVehiclePlate, false)
 | |
| 
 | |
| 					Log("Vehicle " .. currentVehiclePlate .. " left and deleted")
 | |
| 
 | |
| 					currentVehiclePlate = nil
 | |
| 				end
 | |
| 			end
 | |
| 		end
 | |
| 
 | |
| 		if (not wasDead and IsPlayerDead(PlayerId())) then
 | |
| 			wasDead = true
 | |
| 		elseif (wasDead and not IsPlayerDead(PlayerId())) then
 | |
| 			Citizen.CreateThread(function()
 | |
| 				Citizen.Wait(1000)
 | |
| 
 | |
| 				wasDead = false
 | |
| 			end)
 | |
| 		end
 | |
| 	end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("mh_Parking:setVehicleMods")
 | |
| AddEventHandler("mh_Parking:setVehicleMods", function(netId, plate, modifications)
 | |
| 	if (not IsModelInCdimage(modifications[1])) then
 | |
| 		Log("Setting mods for " .. plate .. " failed. The model does NOT exist.")
 | |
| 		TriggerServerEvent("mh_Parking:modelDoesNotExist", plate)
 | |
| 		return
 | |
| 	end
 | |
| 
 | |
| 	local timer = GetGameTimer()
 | |
| 	while (not NetworkDoesEntityExistWithNetworkId(netId)) do
 | |
| 		Citizen.Wait(0)
 | |
| 
 | |
| 		if (GetGameTimer() - 10000 > timer) then
 | |
| 			Log("Setting mods for " .. plate .. " failed after 10s")
 | |
| 			TriggerServerEvent("mh_Parking:setVehicleModsFailed", plate)
 | |
| 			return
 | |
| 		end
 | |
| 	end
 | |
| 
 | |
| 	local vehicle = NetworkGetEntityFromNetworkId(netId)
 | |
| 
 | |
|     if (DoesEntityExist(vehicle) and NetworkHasControlOfEntity(vehicle)) then
 | |
| 		Log("Setting modifications for vehicle " .. plate)
 | |
| 		
 | |
|         SetVehicleModifications(vehicle, plate, modifications)
 | |
| 		TriggerServerEvent("mh_Parking:setVehicleModsSuccess", plate)
 | |
| 	else
 | |
| 		Log("Setting mods failed for vehicle " .. plate .. ". Vehicle does not exist")
 | |
| 		TriggerServerEvent("mh_Parking:setVehicleModsFailed", plate)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| AddEventHandler("mh_Parking:updateVehicle", function(vehicle)
 | |
| 	if (vehicle == nil) then
 | |
| 		Log("^1[ERROR] \"vehicle\" was nil while trying to update a vehicle!")
 | |
| 		return
 | |
| 	end
 | |
| 
 | |
| 	if (DoesEntityExist(vehicle) and NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
 | |
| 		Log("Triggering manual update of vehicle")
 | |
| 
 | |
| 		local networkId = NetworkGetNetworkIdFromEntity(vehicle)
 | |
| 		local modifications = GetVehicleModifications(vehicle)
 | |
| 
 | |
| 		TriggerServerEvent("mh_Parking:updateVehicle", networkId, modifications)
 | |
| 	end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("mh_Parking:enable")
 | |
| AddEventHandler("mh_Parking:enable", function(enable)
 | |
| 	if (enable == nil) then
 | |
| 		Log("^1[ERROR] \"enable\" was nil while trying to enable/disable script!")
 | |
| 		return
 | |
| 	end
 | |
| 
 | |
| 	enabled = enable
 | |
| 
 | |
| 	if (enabled) then
 | |
| 		Log("AdvancedParking enabled")
 | |
| 	else
 | |
| 		Log("AdvancedParking disabled")
 | |
| 	end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("mh_Parking:notification")
 | |
| AddEventHandler("mh_Parking:notification", function(msg)
 | |
|     SetNotificationTextEntry('STRING')
 | |
|     AddTextComponentSubstringPlayerName(msg)
 | |
|     DrawNotification(false, true)
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("mh_Parking:renderScorched")
 | |
| AddEventHandler("mh_Parking:renderScorched", function(vehicleNetId, scorched)
 | |
| 	local vehicle = NetworkGetEntityFromNetworkId(vehicleNetId)
 | |
| 	if (DoesEntityExist(vehicle)) then
 | |
| 		SetEntityRenderScorched(vehicle, scorched)
 | |
| 	end
 | |
| end)
 | 
