Working 42.20 MP

This commit is contained in:
2026-08-19 12:12:12 -04:00
parent e403323017
commit e99f3bbff9
22 changed files with 2262 additions and 825 deletions
@@ -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