Schmedium
This commit is contained in:
@@ -112,27 +112,21 @@ end
|
||||
|
||||
local function clearChangedOffset(vehicle)
|
||||
if not vehicle then return end
|
||||
local md = vehicle:getModData()
|
||||
if not md or md["isChangedTowedAttachment"] ~= true then return end
|
||||
end
|
||||
|
||||
local function restoreTowBarDefaults(vehicle)
|
||||
if not vehicle then return end
|
||||
|
||||
local script = vehicle:getScript()
|
||||
local changedId = md["towBarChangedAttachmentId"] or vehicle:getTowAttachmentSelf()
|
||||
local attachment = script and script:getAttachmentById(changedId) or nil
|
||||
if attachment then
|
||||
local offset = attachment:getOffset()
|
||||
local storedShift = tonumber(md["towBarChangedOffsetZShift"])
|
||||
if storedShift ~= nil then
|
||||
attachment:getOffset():set(offset:x(), offset:y(), offset:z() - storedShift)
|
||||
else
|
||||
local zShift = offset:z() > 0 and -1 or 1
|
||||
attachment:getOffset():set(offset:x(), offset:y(), offset:z() + zShift)
|
||||
if script and script.getMass then
|
||||
local scriptMass = tonumber(script:getMass())
|
||||
if scriptMass and scriptMass > 0 then
|
||||
vehicle:setMass(scriptMass)
|
||||
end
|
||||
end
|
||||
|
||||
md["isChangedTowedAttachment"] = false
|
||||
md["towBarChangedAttachmentId"] = nil
|
||||
md["towBarChangedOffsetZShift"] = nil
|
||||
vehicle:transmitModData()
|
||||
vehicle:constraintChanged()
|
||||
vehicle:updateTotalMass()
|
||||
end
|
||||
|
||||
local function applyRigidTow(towingVehicle, towedVehicle, attachmentA, attachmentB)
|
||||
@@ -169,31 +163,7 @@ end
|
||||
|
||||
local function refreshTowBarState(vehicle)
|
||||
if not vehicle then return end
|
||||
local md = vehicle:getModData()
|
||||
if not md then return end
|
||||
|
||||
local front = vehicle:getVehicleTowedBy()
|
||||
local rear = vehicle:getVehicleTowing()
|
||||
|
||||
local isTowed = false
|
||||
if front then
|
||||
local frontMd = front:getModData()
|
||||
if md["towed"] == true or (frontMd and frontMd["isTowingByTowBar"] == true) then
|
||||
isTowed = true
|
||||
end
|
||||
end
|
||||
|
||||
local isTowing = false
|
||||
if rear then
|
||||
local rearMd = rear:getModData()
|
||||
if rearMd and rearMd["towed"] == true and rearMd["isTowingByTowBar"] == true then
|
||||
isTowing = true
|
||||
end
|
||||
end
|
||||
|
||||
md["towed"] = isTowed
|
||||
md["isTowingByTowBar"] = isTowed or isTowing
|
||||
vehicle:transmitModData()
|
||||
setTowBarModelVisible(vehicle, vehicle:getVehicleTowedBy() ~= nil)
|
||||
end
|
||||
|
||||
local function refreshAround(vehicle)
|
||||
@@ -205,25 +175,10 @@ end
|
||||
|
||||
local function restoreDefaultsIfLeadLost(vehicle)
|
||||
if not vehicle then return end
|
||||
local md = vehicle:getModData()
|
||||
if not md then return end
|
||||
if vehicle:getVehicleTowedBy() ~= nil then return end
|
||||
if md["towed"] ~= true and md.towBarOriginalMass == nil and md.towBarOriginalBrakingForce == nil then return end
|
||||
|
||||
if md.towBarOriginalScriptName then vehicle:setScriptName(md.towBarOriginalScriptName) end
|
||||
if md.towBarOriginalMass ~= nil then vehicle:setMass(md.towBarOriginalMass) end
|
||||
if md.towBarOriginalBrakingForce ~= nil then vehicle:setBrakingForce(md.towBarOriginalBrakingForce) end
|
||||
vehicle:constraintChanged()
|
||||
vehicle:updateTotalMass()
|
||||
|
||||
md["towed"] = false
|
||||
md.towBarOriginalScriptName = nil
|
||||
md.towBarOriginalMass = nil
|
||||
md.towBarOriginalBrakingForce = nil
|
||||
if vehicle:getVehicleTowing() == nil then
|
||||
md["isTowingByTowBar"] = false
|
||||
end
|
||||
vehicle:transmitModData()
|
||||
clearChangedOffset(vehicle)
|
||||
restoreTowBarDefaults(vehicle)
|
||||
|
||||
setTowBarModelVisible(vehicle, false)
|
||||
end
|
||||
@@ -277,18 +232,6 @@ local function restoreFrontLink(playerObj, link)
|
||||
middle:setScriptName("notTowingA_Trailer")
|
||||
sendAttach(playerObj, front, middle, a, b)
|
||||
|
||||
local frontMd = front:getModData()
|
||||
local middleMd = middle:getModData()
|
||||
if frontMd then
|
||||
frontMd["isTowingByTowBar"] = true
|
||||
front:transmitModData()
|
||||
end
|
||||
if middleMd then
|
||||
middleMd["isTowingByTowBar"] = true
|
||||
middleMd["towed"] = true
|
||||
middle:transmitModData()
|
||||
end
|
||||
|
||||
setTowBarModelVisible(middle, true)
|
||||
refreshAround(front)
|
||||
refreshAround(middle)
|
||||
@@ -305,6 +248,14 @@ local function resolveDetachPair(towingVehicle, towedVehicle)
|
||||
local resolvedTowing = towingVehicle
|
||||
local resolvedTowed = resolvedTowing and resolvedTowing:getVehicleTowing() or nil
|
||||
|
||||
if resolvedTowed == nil and towedVehicle == nil and resolvedTowing and resolvedTowing:getVehicleTowedBy() then
|
||||
local front = resolvedTowing:getVehicleTowedBy()
|
||||
if front and front:getVehicleTowing() == resolvedTowing then
|
||||
resolvedTowed = resolvedTowing
|
||||
resolvedTowing = front
|
||||
end
|
||||
end
|
||||
|
||||
if resolvedTowed == nil and towedVehicle and towedVehicle:getVehicleTowedBy() then
|
||||
resolvedTowing = towedVehicle:getVehicleTowedBy()
|
||||
resolvedTowed = towedVehicle
|
||||
@@ -488,13 +439,8 @@ LT.performDetachWrapper = function(playerObj, towingVehicle, towedVehicle)
|
||||
|
||||
restoreDefaultsIfLeadLost(resolvedTowing)
|
||||
restoreDefaultsIfLeadLost(resolvedTowed)
|
||||
refreshAround(resolvedTowing)
|
||||
refreshAround(resolvedTowed)
|
||||
|
||||
queueAction(playerObj, 12, function(_, v) restoreDefaultsIfLeadLost(v); refreshAround(v) end, resolvedTowing)
|
||||
queueAction(playerObj, 12, function(_, v) restoreDefaultsIfLeadLost(v); refreshAround(v) end, resolvedTowed)
|
||||
queueAction(playerObj, 30, function(_, v) restoreDefaultsIfLeadLost(v); refreshAround(v) end, resolvedTowing)
|
||||
queueAction(playerObj, 30, function(_, v) restoreDefaultsIfLeadLost(v); refreshAround(v) end, resolvedTowed)
|
||||
|
||||
setTowBarModelVisible(resolvedTowed, false)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user