Working 42.20 MP
This commit is contained in:
@@ -4,6 +4,26 @@ TowBarMod.WreckerSync = TowBarMod.WreckerSync or {}
|
||||
|
||||
local Sync = TowBarMod.WreckerSync
|
||||
Sync.appliedLevels = Sync.appliedLevels or {}
|
||||
Sync.desiredPairs = Sync.desiredPairs or {}
|
||||
|
||||
local function argsPairKey(args)
|
||||
if type(args) ~= "table" then return nil end
|
||||
local wreckerId = tonumber(args.wrecker)
|
||||
local targetId = tonumber(args.target)
|
||||
if not wreckerId or not targetId then return nil end
|
||||
return tostring(wreckerId) .. ":" .. tostring(targetId)
|
||||
end
|
||||
|
||||
local function copyAttachArgs(args)
|
||||
return {
|
||||
wrecker = tonumber(args.wrecker),
|
||||
target = tonumber(args.target),
|
||||
wreckerSqlId = tonumber(args.wreckerSqlId),
|
||||
targetSqlId = tonumber(args.targetSqlId),
|
||||
targetAttachment = args.targetAttachment,
|
||||
heightLevel = tonumber(args.heightLevel) or 0
|
||||
}
|
||||
end
|
||||
|
||||
local function pairKeyContainsVehicle(key, vehicleId)
|
||||
local id = tostring(vehicleId)
|
||||
@@ -123,8 +143,10 @@ local function setScriptSafely(vehicle, scriptName)
|
||||
return true
|
||||
end
|
||||
|
||||
local function applyAttachSync(args)
|
||||
local function applyAttachSync(args, forceReattach)
|
||||
if not args then return end
|
||||
local desiredKey = argsPairKey(args)
|
||||
if desiredKey then Sync.desiredPairs[desiredKey] = copyAttachArgs(args) end
|
||||
local wrecker = getVehicleById(args.wrecker)
|
||||
local target = getVehicleById(args.target)
|
||||
if not wrecker or not target then return end
|
||||
@@ -138,7 +160,7 @@ local function applyAttachSync(args)
|
||||
local key = pairKey(wrecker, target)
|
||||
local canonicalLevel = tonumber(args.heightLevel) or 0
|
||||
local appliedLevel = Sync.appliedLevels[key]
|
||||
if isPairLinked(wrecker, target) and appliedLevel == canonicalLevel then
|
||||
if not forceReattach and isPairLinked(wrecker, target) and appliedLevel == canonicalLevel then
|
||||
Sync.appliedLevels[key] = canonicalLevel
|
||||
applyFreeRollingState(target)
|
||||
return
|
||||
@@ -167,6 +189,8 @@ end
|
||||
|
||||
local function applyDetachSync(args)
|
||||
if not args then return end
|
||||
local desiredKey = argsPairKey(args)
|
||||
if desiredKey then Sync.desiredPairs[desiredKey] = nil end
|
||||
local wrecker = getVehicleById(args.wrecker)
|
||||
local target = getVehicleById(args.target)
|
||||
if not target then return end
|
||||
@@ -203,6 +227,30 @@ end
|
||||
Sync.applyAttachSync = applyAttachSync
|
||||
Sync.applyDetachSync = applyDetachSync
|
||||
|
||||
local function forceReattachForDriver(character)
|
||||
if not character or type(character.getVehicle) ~= "function" then return end
|
||||
local wrecker = character:getVehicle()
|
||||
if not wrecker or not wrecker:isDriver(character) then return end
|
||||
|
||||
local wreckerMd = wrecker:getModData()
|
||||
if not wreckerMd or wreckerMd.wreckerTowActive ~= true then return end
|
||||
local targetId = tonumber(wreckerMd.wreckerTowedVehicleId)
|
||||
local target = targetId and getVehicleById(targetId) or nil
|
||||
if not target then return end
|
||||
|
||||
local targetMd = target:getModData()
|
||||
if not targetMd or tonumber(targetMd.wreckerTowingVehicleId) ~= wrecker:getId() then return end
|
||||
|
||||
applyAttachSync({
|
||||
wrecker = wrecker:getId(),
|
||||
target = target:getId(),
|
||||
wreckerSqlId = wrecker:getSqlId(),
|
||||
targetSqlId = wreckerMd.wreckerTowedVehicleSqlId,
|
||||
targetAttachment = wreckerMd.wreckerTargetAttachment,
|
||||
heightLevel = tonumber(wreckerMd.wreckerHeightLevel) or 0
|
||||
}, true)
|
||||
end
|
||||
|
||||
Events.OnServerCommand.Add(function(module, command, args)
|
||||
if module ~= "towbar" then return end
|
||||
if command == "wreckerAttachSync" then
|
||||
@@ -214,3 +262,9 @@ end)
|
||||
if Events.OnSpawnVehicleEnd then
|
||||
Events.OnSpawnVehicleEnd.Add(clearAppliedLevelForVehicle)
|
||||
end
|
||||
if Events.OnEnterVehicle then
|
||||
Events.OnEnterVehicle.Add(forceReattachForDriver)
|
||||
end
|
||||
if Events.OnSwitchVehicleSeat then
|
||||
Events.OnSwitchVehicleSeat.Add(forceReattachForDriver)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user