forked from Simnation/Main
ed
This commit is contained in:
parent
88ffeb3375
commit
87623c8379
27 changed files with 2865 additions and 1705 deletions
193
resources/[carscripts]/AdvancedParking/client/client.lua
Normal file
193
resources/[carscripts]/AdvancedParking/client/client.lua
Normal file
|
@ -0,0 +1,193 @@
|
|||
|
||||
-- script status on startup
|
||||
local enabled = true
|
||||
|
||||
-- update vehicle on server side
|
||||
local function UpdateVehicle(vehicle, reason)
|
||||
local tuning = GetVehicleTuning(vehicle)
|
||||
LogDebug("Updating vehicle \"%s\" (%s)", tuning[1], reason)
|
||||
|
||||
TriggerServerEvent(
|
||||
"AP:updateVehicle",
|
||||
NetworkGetNetworkIdFromEntity(vehicle),
|
||||
GetEntityModel(vehicle),
|
||||
tuning,
|
||||
GetVehicleStatus(vehicle),
|
||||
GetVehicleExtraValues(vehicle),
|
||||
reason
|
||||
)
|
||||
end
|
||||
exports("UpdateVehicle", function(vehicle)
|
||||
if (not DoesEntityExist(vehicle) or not NetworkGetEntityIsNetworked(vehicle)) then return end
|
||||
|
||||
UpdateVehicle(vehicle, "Resource \"" .. GetInvokingResource() .. "\"")
|
||||
end)
|
||||
|
||||
-- when a player entered a vehicle
|
||||
local function EnteredVehicle(vehicle)
|
||||
if (not DoesEntityExist(vehicle) or not NetworkGetEntityIsNetworked(vehicle) or IsVehicleBlacklisted(vehicle)) then return end
|
||||
|
||||
if (GetVehicleTypeRaw(vehicle) == 2) then
|
||||
TriggerServerEvent("AP:enteredTrailer", NetworkGetNetworkIdFromEntity(vehicle))
|
||||
end
|
||||
|
||||
UpdateVehicle(vehicle, "Player enter")
|
||||
end
|
||||
|
||||
-- when a player left a vehicle
|
||||
local function LeftVehicle(vehicle)
|
||||
if (not DoesEntityExist(vehicle) or not NetworkGetEntityIsNetworked(vehicle) or IsVehicleBlacklisted(vehicle)) then return end
|
||||
|
||||
if (GetVehicleTypeRaw(vehicle) == 2) then
|
||||
TriggerServerEvent("AP:leftTrailer", NetworkGetNetworkIdFromEntity(vehicle))
|
||||
end
|
||||
|
||||
UpdateVehicle(vehicle, "Player exit")
|
||||
end
|
||||
|
||||
-- localising loop natives
|
||||
local IsPedInAnyVehicle, GetVehiclePedIsIn, GetVehicleTrailerVehicle = IsPedInAnyVehicle, GetVehiclePedIsIn, GetVehicleTrailerVehicle
|
||||
|
||||
local isInVehicle = false
|
||||
AddEventHandler("gameEventTriggered", function(eventName, eventData)
|
||||
if (not enabled or isInVehicle or eventName ~= "CEventNetworkPlayerEnteredVehicle") then return end
|
||||
|
||||
-- entered vehicle
|
||||
isInVehicle = true
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local vehicle = eventData[2]
|
||||
local trailer = nil
|
||||
|
||||
EnteredVehicle(vehicle)
|
||||
|
||||
while (IsPedInAnyVehicle(playerPed)) do
|
||||
-- check for instant vehicle switch
|
||||
local newVehicle = GetVehiclePedIsIn(playerPed)
|
||||
if (vehicle ~= newVehicle) then
|
||||
LeftVehicle(vehicle)
|
||||
EnteredVehicle(newVehicle)
|
||||
|
||||
vehicle = newVehicle
|
||||
end
|
||||
|
||||
-- check for trailer
|
||||
local hasTrailer, newTrailer = GetVehicleTrailerVehicle(vehicle)
|
||||
if (hasTrailer) then
|
||||
if (trailer ~= newTrailer) then
|
||||
LeftVehicle(trailer)
|
||||
EnteredVehicle(newTrailer)
|
||||
end
|
||||
|
||||
trailer = newTrailer
|
||||
elseif (trailer) then
|
||||
LeftVehicle(trailer)
|
||||
|
||||
trailer = nil
|
||||
end
|
||||
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
-- left vehicle
|
||||
LeftVehicle(vehicle)
|
||||
if (trailer) then
|
||||
LeftVehicle(trailer)
|
||||
end
|
||||
|
||||
isInVehicle = false
|
||||
end)
|
||||
|
||||
-- setting tuning
|
||||
AddStateBagChangeHandler("ap_data", nil, function(bagName, key, value, _unused, replicated)
|
||||
if (bagName:find("entity") == nil or value == nil) then return end
|
||||
|
||||
local networkIdString = bagName:gsub("entity:", "")
|
||||
local networkId = tonumber(networkIdString)
|
||||
if (not WaitUntilEntityWithNetworkIdExists(networkId, 5000)) then return end
|
||||
|
||||
local vehicle = NetworkGetEntityFromNetworkId(networkId)
|
||||
if (not WaitUntilPlayerEqualsEntityOwner(vehicle, 5000)) then return end
|
||||
|
||||
if (Cleanup.submergedVehicles and IsEntityInWater(vehicle) and GetEntitySubmergedLevel(vehicle) >= 0.5) then
|
||||
local vehicleType = GetVehicleTypeRaw(vehicle)
|
||||
if (vehicleType ~= 5 and vehicleType ~= 15) then
|
||||
LogDebug("\"%s\" is submerged and will be deleted.", value[1][1])
|
||||
|
||||
DeleteSubmergedVehicle(vehicle)
|
||||
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
LogDebug("Setting properties for \"%s\"", value[1][1])
|
||||
|
||||
SetVehicleTuning(vehicle, value[1])
|
||||
SetVehicleStatus(vehicle, value[2])
|
||||
SetVehicleExtraValues(vehicle, value[3])
|
||||
|
||||
SetEntityCoordsNoOffset(vehicle, value[4].x, value[4].y, value[4].z, false, false, true)
|
||||
SetEntityRotation(vehicle, value[5].x, value[5].y, value[5].z)
|
||||
|
||||
TriggerEvent("AP:vehicleSpawned", vehicle)
|
||||
end)
|
||||
|
||||
|
||||
|
||||
-- notification for delete timer
|
||||
RegisterNetEvent("AP:showNotification", function(text)
|
||||
ShowNotification(text)
|
||||
end)
|
||||
|
||||
-- enables/disables the client sending enter/left events
|
||||
local function Enable(enable)
|
||||
assert(enable ~= nil and type(enable) == "boolean", "Parameter \"enable\" must be a bool!")
|
||||
|
||||
enabled = enable
|
||||
end
|
||||
exports("Enable", Enable)
|
||||
|
||||
-- export for force freezing vehicles
|
||||
if (forceUnfreezeVehicles) then
|
||||
local function FreezeVehicle(vehicle, freeze)
|
||||
TriggerServerEvent("AP:freezeVehicle", NetworkGetNetworkIdFromEntity(vehicle), freeze)
|
||||
end
|
||||
exports("FreezeVehicle", FreezeVehicle)
|
||||
end
|
||||
|
||||
|
||||
|
||||
local damageUpdates = {}
|
||||
AddEventHandler("gameEventTriggered", function (name, args)
|
||||
if (name ~= "CEventNetworkEntityDamage") then return end
|
||||
|
||||
local vehicle = args[1]
|
||||
if (not DoesEntityExist(vehicle) or not IsEntityAVehicle(vehicle)) then return end
|
||||
if (not NetworkGetEntityIsNetworked(vehicle)) then return end
|
||||
|
||||
local id = Entity(vehicle).state.ap_id
|
||||
if (not id) then return end
|
||||
|
||||
local plate = GetVehicleNumberPlateText(vehicle)
|
||||
|
||||
LogDebug("Damage detected on vehicle \"%s\" (%s)", plate, id)
|
||||
|
||||
if (damageUpdates[vehicle]) then
|
||||
damageUpdates[vehicle] = GetGameTimer() + 5000
|
||||
return
|
||||
end
|
||||
|
||||
damageUpdates[vehicle] = GetGameTimer() + 5000
|
||||
|
||||
while (damageUpdates[vehicle] > GetGameTimer()) do
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
damageUpdates[vehicle] = nil
|
||||
|
||||
if (not DoesEntityExist(vehicle) or NetworkGetEntityOwner(vehicle) ~= PlayerId()) then return end
|
||||
|
||||
LogDebug("Sending damage update to server for vehicle \"%s\" (%s)", plate, id)
|
||||
|
||||
TriggerServerEvent("AP:onVehicleDamage", NetworkGetNetworkIdFromEntity(vehicle), GetVehicleStatus(vehicle))
|
||||
end)
|
Loading…
Add table
Add a link
Reference in a new issue