From 9e98c54057fddca0144830e9a7cd4ccc6e7dd374 Mon Sep 17 00:00:00 2001 From: HRiggs Date: Thu, 12 Feb 2026 17:55:25 -0500 Subject: [PATCH] Working --- .../Landtrain/LandtrainTowSyncClient.lua | 53 ++++- .../LandtrainTowbarChainsRebuild.lua | 183 +++++++++++++++--- .../Landtrain/LandtrainTowSyncServer.lua | 16 +- tools/java/BaseVehicleConstraintPatch.java | 169 +++++++++++++++- tools/java/LandtrainConstraintAuthHelper.java | 133 +++++++++++++ zombie/vehicles/BaseVehicle.class | Bin 283278 -> 282693 bytes .../LandtrainConstraintAuthHelper.class | Bin 1724 -> 4842 bytes 7 files changed, 512 insertions(+), 42 deletions(-) diff --git a/42.13/media/lua/client/Landtrain/LandtrainTowSyncClient.lua b/42.13/media/lua/client/Landtrain/LandtrainTowSyncClient.lua index d533793..8dd5060 100644 --- a/42.13/media/lua/client/Landtrain/LandtrainTowSyncClient.lua +++ b/42.13/media/lua/client/Landtrain/LandtrainTowSyncClient.lua @@ -45,14 +45,51 @@ local function resolveVehicle(id) return getVehicleById(id) end +local function reconcilePairState(vehicleA, vehicleB, attachmentA, attachmentB) + if not vehicleA or not vehicleB then return end + + if TowBarMod.Utils and TowBarMod.Utils.updateAttachmentsForRigidTow then + TowBarMod.Utils.updateAttachmentsForRigidTow(vehicleA, vehicleB, attachmentA, attachmentB) + end + + local towingMd = vehicleA:getModData() + local towedMd = vehicleB:getModData() + local currentScript = vehicleB:getScriptName() + + if towingMd then + towingMd["isTowingByTowBar"] = true + vehicleA:transmitModData() + end + if towedMd then + if towedMd.towBarOriginalScriptName == nil and currentScript ~= "notTowingA_Trailer" then + towedMd.towBarOriginalScriptName = currentScript + end + if towedMd.towBarOriginalMass == nil then + towedMd.towBarOriginalMass = vehicleB:getMass() + end + if towedMd.towBarOriginalBrakingForce == nil then + towedMd.towBarOriginalBrakingForce = vehicleB:getBrakingForce() + end + towedMd["isTowingByTowBar"] = true + towedMd["towed"] = true + vehicleB:transmitModData() + end + + vehicleB:setScriptName("notTowingA_Trailer") + if TowBarMod.Hook and TowBarMod.Hook.setVehiclePostAttach then + pcall(TowBarMod.Hook.setVehiclePostAttach, nil, vehicleB) + end + log("reconcilePairState A=" .. tostring(vehicleA:getId()) .. " B=" .. tostring(vehicleB:getId()) + .. " attachmentA=" .. tostring(attachmentA) .. " attachmentB=" .. tostring(attachmentB)) +end + local function applyAttachSync(args) if not args then return end local vehicleA = resolveVehicle(args.vehicleA) local vehicleB = resolveVehicle(args.vehicleB) - if not vehicleA or not vehicleB then return end - - if vehicleA:getVehicleTowing() == vehicleB and vehicleB:getVehicleTowedBy() == vehicleA then + if not vehicleA or not vehicleB then + log("applyAttachSync skipped: missing vehicle A=" .. tostring(args.vehicleA) .. " B=" .. tostring(args.vehicleB)) return end @@ -63,7 +100,15 @@ local function applyAttachSync(args) return end - vehicleA:addPointConstraint(nil, vehicleB, attachmentA, attachmentB) + if vehicleA:getVehicleTowing() == vehicleB and vehicleB:getVehicleTowedBy() == vehicleA then + log("applyAttachSync already linked A=" .. tostring(vehicleA:getId()) .. " B=" .. tostring(vehicleB:getId())) + else + log("applyAttachSync addPointConstraint A=" .. tostring(vehicleA:getId()) .. " B=" .. tostring(vehicleB:getId()) + .. " attachmentA=" .. tostring(attachmentA) .. " attachmentB=" .. tostring(attachmentB)) + vehicleA:addPointConstraint(nil, vehicleB, attachmentA, attachmentB) + end + + reconcilePairState(vehicleA, vehicleB, attachmentA, attachmentB) end local function safeBreak(vehicle) diff --git a/42.13/media/lua/client/Landtrain/LandtrainTowbarChainsRebuild.lua b/42.13/media/lua/client/Landtrain/LandtrainTowbarChainsRebuild.lua index 4739296..371273d 100644 --- a/42.13/media/lua/client/Landtrain/LandtrainTowbarChainsRebuild.lua +++ b/42.13/media/lua/client/Landtrain/LandtrainTowbarChainsRebuild.lua @@ -20,6 +20,10 @@ local function log(msg) end end +local function vehicleId(vehicle) + return vehicle and vehicle:getId() or "nil" +end + local function hasAttachment(vehicle, attachmentId) if vehicle == nil or attachmentId == nil then return false end local script = vehicle:getScript() @@ -180,6 +184,18 @@ local function restoreDefaultsIfLeadLost(vehicle) clearChangedOffset(vehicle) restoreTowBarDefaults(vehicle) + local md = vehicle:getModData() + if md then + md["towed"] = false + if vehicle:getVehicleTowing() == nil then + md["isTowingByTowBar"] = false + md.towBarOriginalScriptName = nil + md.towBarOriginalMass = nil + md.towBarOriginalBrakingForce = nil + end + vehicle:transmitModData() + end + setTowBarModelVisible(vehicle, false) end @@ -208,12 +224,104 @@ local function sendAttach(playerObj, towingVehicle, towedVehicle, attachmentA, a end end -local function captureFrontLink(middleVehicle) +local function isLinkedPair(towingVehicle, towedVehicle) + if not towingVehicle or not towedVehicle then return false end + return towingVehicle:getVehicleTowing() == towedVehicle and towedVehicle:getVehicleTowedBy() == towingVehicle +end + +local function markTowBarPair(towingVehicle, towedVehicle) + local towingMd = towingVehicle and towingVehicle:getModData() or nil + local towedMd = towedVehicle and towedVehicle:getModData() or nil + + if towingMd then + towingMd["isTowingByTowBar"] = true + towingVehicle:transmitModData() + end + if towedMd then + local currentScript = towedVehicle and towedVehicle:getScriptName() or nil + if towedMd.towBarOriginalScriptName == nil and currentScript ~= "notTowingA_Trailer" then + towedMd.towBarOriginalScriptName = currentScript + end + if towedMd.towBarOriginalMass == nil and towedVehicle then + towedMd.towBarOriginalMass = towedVehicle:getMass() + end + if towedMd.towBarOriginalBrakingForce == nil and towedVehicle then + towedMd.towBarOriginalBrakingForce = towedVehicle:getBrakingForce() + end + towedMd["isTowingByTowBar"] = true + towedMd["towed"] = true + towedVehicle:transmitModData() + end +end + +local function ensurePairAttached(playerObj, towingVehicle, towedVehicle, preferredA, preferredB, alwaysSend) + if not playerObj or not towingVehicle or not towedVehicle then + log("ensurePairAttached skipped: missing refs A=" .. tostring(vehicleId(towingVehicle)) .. " B=" .. tostring(vehicleId(towedVehicle))) + return false + end + if towingVehicle == towedVehicle or towingVehicle:getId() == towedVehicle:getId() then + log("ensurePairAttached skipped: identical vehicles id=" .. tostring(vehicleId(towingVehicle))) + return false + end + if wouldCreateTowLoop(towingVehicle, towedVehicle) then + log("ensurePairAttached skipped: loop A=" .. tostring(vehicleId(towingVehicle)) .. " B=" .. tostring(vehicleId(towedVehicle))) + return false + end + + local attachmentA, attachmentB = resolvePair(towingVehicle, towedVehicle, preferredA, preferredB) + if not hasAttachment(towingVehicle, attachmentA) or not hasAttachment(towedVehicle, attachmentB) then + log("ensurePairAttached skipped: missing attachment A=" .. tostring(attachmentA) .. " B=" .. tostring(attachmentB) + .. " ids=" .. tostring(vehicleId(towingVehicle)) .. "->" .. tostring(vehicleId(towedVehicle))) + return false + end + + applyRigidTow(towingVehicle, towedVehicle, attachmentA, attachmentB) + towedVehicle:setScriptName("notTowingA_Trailer") + markTowBarPair(towingVehicle, towedVehicle) + + local linked = isLinkedPair(towingVehicle, towedVehicle) + log("ensurePairAttached pair=" .. tostring(vehicleId(towingVehicle)) .. "->" .. tostring(vehicleId(towedVehicle)) + .. " linked=" .. tostring(linked) .. " alwaysSend=" .. tostring(alwaysSend) + .. " attachmentA=" .. tostring(attachmentA) .. " attachmentB=" .. tostring(attachmentB)) + + if linked and TowBarMod.Hook and TowBarMod.Hook.setVehiclePostAttach then + pcall(TowBarMod.Hook.setVehiclePostAttach, nil, towedVehicle) + end + + if alwaysSend or not linked then + sendAttach(playerObj, towingVehicle, towedVehicle, attachmentA, attachmentB) + elseif TowBarMod.Hook and TowBarMod.Hook.setVehiclePostAttach then + queueAction(playerObj, 10, TowBarMod.Hook.setVehiclePostAttach, towedVehicle) + end + + setTowBarModelVisible(towedVehicle, true) + refreshAround(towingVehicle) + refreshAround(towedVehicle) + return true +end + +local function captureFrontLinks(middleVehicle) if not middleVehicle then return nil end - local frontVehicle = middleVehicle:getVehicleTowedBy() - if not frontVehicle or frontVehicle == middleVehicle then return nil end - local a, b = resolvePair(frontVehicle, middleVehicle) - return { front = frontVehicle, middle = middleVehicle, a = a, b = b } + + local links = {} + local cursor = middleVehicle + local visited = {} + + while cursor do + if visited[cursor] then break end + visited[cursor] = true + + local frontVehicle = cursor:getVehicleTowedBy() + if not frontVehicle then break end + if frontVehicle == cursor or visited[frontVehicle] then break end + + local a, b = resolvePair(frontVehicle, cursor) + table.insert(links, { front = frontVehicle, middle = cursor, a = a, b = b }) + cursor = frontVehicle + end + + if #links == 0 then return nil end + return links end local function restoreFrontLink(playerObj, link) @@ -225,23 +333,21 @@ local function restoreFrontLink(playerObj, link) if front == middle or front:getId() == middle:getId() then return end if wouldCreateTowLoop(front, middle) then return end - local a, b = resolvePair(front, middle, link.a, link.b) - if not hasAttachment(front, a) or not hasAttachment(middle, b) then return end - - applyRigidTow(front, middle, a, b) - middle:setScriptName("notTowingA_Trailer") - sendAttach(playerObj, front, middle, a, b) - - setTowBarModelVisible(middle, true) - refreshAround(front) - refreshAround(middle) + ensurePairAttached(playerObj, front, middle, link.a, link.b, false) end -local function queueRestoreFront(playerObj, link, delay) - if not playerObj or not link then return end - queueAction(playerObj, delay or 12, function(character, linkArg) - restoreFrontLink(character, linkArg) - end, link) +local function restoreFrontLinks(playerObj, links) + if not links then return end + for _, link in ipairs(links) do + restoreFrontLink(playerObj, link) + end +end + +local function queueRestoreFrontLinks(playerObj, links, delay) + if not playerObj or not links then return end + queueAction(playerObj, delay or 12, function(character, linksArg) + restoreFrontLinks(character, linksArg) + end, links) end local function resolveDetachPair(towingVehicle, towedVehicle) @@ -411,16 +517,31 @@ LT.performAttachWrapper = function(playerObj, towingVehicle, towedVehicle, attac if towingVehicle == towedVehicle or towingVehicle:getId() == towedVehicle:getId() then return end if wouldCreateTowLoop(towingVehicle, towedVehicle) then return end - local frontLink = captureFrontLink(towingVehicle) + local frontLinks = captureFrontLinks(towingVehicle) + log("performAttachWrapper begin pair=" .. tostring(vehicleId(towingVehicle)) .. "->" .. tostring(vehicleId(towedVehicle)) + .. " frontLinks=" .. tostring(frontLinks and #frontLinks or 0)) original(playerObj, towingVehicle, towedVehicle, attachmentA, attachmentB) - restoreFrontLink(playerObj, frontLink) - queueRestoreFront(playerObj, frontLink, 12) - queueRestoreFront(playerObj, frontLink, 30) + restoreFrontLinks(playerObj, frontLinks) + queueRestoreFrontLinks(playerObj, frontLinks, 12) + queueRestoreFrontLinks(playerObj, frontLinks, 30) - setTowBarModelVisible(towedVehicle, true) - refreshAround(towingVehicle) - refreshAround(towedVehicle) + ensurePairAttached(playerObj, towingVehicle, towedVehicle, attachmentA, attachmentB, false) + + local attachState = { + towing = towingVehicle, + towed = towedVehicle, + attachmentA = attachmentA, + attachmentB = attachmentB + } + queueAction(playerObj, 14, function(character, state) + if not state then return end + ensurePairAttached(character, state.towing, state.towed, state.attachmentA, state.attachmentB, true) + end, attachState) + queueAction(playerObj, 34, function(character, state) + if not state then return end + ensurePairAttached(character, state.towing, state.towed, state.attachmentA, state.attachmentB, true) + end, attachState) end LT.performDetachWrapper = function(playerObj, towingVehicle, towedVehicle) @@ -430,12 +551,12 @@ LT.performDetachWrapper = function(playerObj, towingVehicle, towedVehicle) local resolvedTowing, resolvedTowed = resolveDetachPair(towingVehicle, towedVehicle) if resolvedTowing == nil or resolvedTowed == nil then return end - local frontLink = captureFrontLink(resolvedTowing) + local frontLinks = captureFrontLinks(resolvedTowing) original(playerObj, resolvedTowing, resolvedTowed) - restoreFrontLink(playerObj, frontLink) - queueRestoreFront(playerObj, frontLink, 12) - queueRestoreFront(playerObj, frontLink, 30) + restoreFrontLinks(playerObj, frontLinks) + queueRestoreFrontLinks(playerObj, frontLinks, 12) + queueRestoreFrontLinks(playerObj, frontLinks, 30) restoreDefaultsIfLeadLost(resolvedTowing) restoreDefaultsIfLeadLost(resolvedTowed) diff --git a/42.13/media/lua/server/Landtrain/LandtrainTowSyncServer.lua b/42.13/media/lua/server/Landtrain/LandtrainTowSyncServer.lua index ddbe444..8043bb1 100644 --- a/42.13/media/lua/server/Landtrain/LandtrainTowSyncServer.lua +++ b/42.13/media/lua/server/Landtrain/LandtrainTowSyncServer.lua @@ -70,8 +70,12 @@ local function processAttach(item) log("attach sync failed: server link not established A=" .. tostring(vehicleA:getId()) .. " B=" .. tostring(vehicleB:getId())) return end + else + log("attach sync already linked A=" .. tostring(vehicleA:getId()) .. " B=" .. tostring(vehicleB:getId())) end + log("attach sync broadcast A=" .. tostring(vehicleA:getId()) .. " B=" .. tostring(vehicleB:getId()) + .. " attachmentA=" .. tostring(attachmentA) .. " attachmentB=" .. tostring(attachmentB)) sendServerCommand("landtrain", "forceAttachSync", { vehicleA = vehicleA:getId(), vehicleB = vehicleB:getId(), @@ -94,7 +98,8 @@ end local function processPending() if #pending == 0 then return end - for i = #pending, 1, -1 do + local remaining = {} + for i = 1, #pending do local item = pending[i] item.ticks = item.ticks - 1 if item.ticks <= 0 then @@ -103,17 +108,24 @@ local function processPending() elseif item.kind == "detach" then processDetach(item) end - table.remove(pending, i) + else + table.insert(remaining, item) end end + pending = remaining end local function onClientCommand(module, command, player, args) if module == "vehicle" and command == "attachTrailer" then + log("queue attach from " .. tostring(player and player:getUsername() or "unknown") + .. " A=" .. tostring(args and args.vehicleA) .. " B=" .. tostring(args and args.vehicleB) + .. " attachmentA=" .. tostring(args and args.attachmentA) .. " attachmentB=" .. tostring(args and args.attachmentB)) queueSync("attach", player, args) elseif module == "vehicle" and command == "detachTrailer" then + log("queue detach(vehicle) from " .. tostring(player and player:getUsername() or "unknown")) queueSync("detach", player, args) elseif module == "towbar" and command == "detachTowBar" then + log("queue detach(towbar) from " .. tostring(player and player:getUsername() or "unknown")) queueSync("detach", player, args) end end diff --git a/tools/java/BaseVehicleConstraintPatch.java b/tools/java/BaseVehicleConstraintPatch.java index e392c68..45e217c 100644 --- a/tools/java/BaseVehicleConstraintPatch.java +++ b/tools/java/BaseVehicleConstraintPatch.java @@ -4,6 +4,7 @@ import java.nio.file.Paths; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.InsnList; @@ -11,6 +12,7 @@ import org.objectweb.asm.tree.InsnNode; import org.objectweb.asm.tree.LdcInsnNode; import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.tree.VarInsnNode; /** * Patches zombie.vehicles.BaseVehicle for Landtrain chain support: @@ -20,10 +22,21 @@ import org.objectweb.asm.tree.MethodNode; public final class BaseVehicleConstraintPatch { private static final String TARGET_NAME = "addPointConstraint"; private static final String CONSTRAINT_CHANGED_NAME = "constraintChanged"; + private static final String AUTHORIZATION_CHANGED_NAME = "authorizationChanged"; + private static final String AUTHORIZATION_CLIENT_COLLIDE_NAME = "authorizationClientCollide"; + private static final String AUTHORIZATION_SERVER_COLLIDE_NAME = "authorizationServerCollide"; + private static final String AUTHORIZATION_SERVER_ON_SEAT_NAME = "authorizationServerOnSeat"; private static final String IS_ENTER_BLOCKED_NAME = "isEnterBlocked"; private static final String IS_ENTER_BLOCKED2_NAME = "isEnterBlocked2"; private static final String CLINIT_NAME = ""; private static final String VOID_NOARG_DESC = "()V"; + private static final String AUTHORIZATION_CHANGED_DESC = + "(Lzombie/characters/IsoGameCharacter;)V"; + private static final String AUTHORIZATION_CLIENT_COLLIDE_DESC = + "(Lzombie/characters/IsoPlayer;)V"; + private static final String AUTHORIZATION_SERVER_COLLIDE_DESC = "(SZ)V"; + private static final String AUTHORIZATION_SERVER_ON_SEAT_DESC = + "(Lzombie/characters/IsoPlayer;Z)V"; private static final String ENTER_BLOCKED_DESC = "(Lzombie/characters/IsoGameCharacter;I)Z"; private static final String EXIT_BLOCKED_DESC = "(Lzombie/characters/IsoGameCharacter;I)Z"; private static final String EXIT_BLOCKED2_DESC = "(I)Z"; @@ -31,6 +44,11 @@ public final class BaseVehicleConstraintPatch { private static final String BREAK_DESC_OBJECT_BOOL = "(ZLjava/lang/Boolean;)V"; private static final String BREAK_DESC_PRIMITIVE_BOOL = "(ZZ)V"; private static final String BASE_VEHICLE_OWNER = "zombie/vehicles/BaseVehicle"; + private static final String BULLET_OWNER = "zombie/core/physics/Bullet"; + private static final String BULLET_ADD_ROPE = "addRopeConstraint"; + private static final String BULLET_ADD_POINT = "addPointConstraint"; + private static final String BULLET_ADD_ROPE_DESC = "(IIFFFFFFF)I"; + private static final String BULLET_ADD_POINT_DESC = "(IIFFFFFF)I"; private static final String GET_DRIVER_DESC = "()Lzombie/characters/IsoGameCharacter;"; private static final String HELPER_OWNER = "zombie/vehicles/LandtrainConstraintAuthHelper"; private static final String HELPER_METHOD = "resolveConstraintDriver"; @@ -41,6 +59,27 @@ public final class BaseVehicleConstraintPatch { "(Lzombie/vehicles/BaseVehicle;Lzombie/characters/IsoGameCharacter;I)Z"; private static final String HELPER_ENTER_BLOCKED2 = "isEnterBlocked2Landtrain"; private static final String HELPER_ENTER_BLOCKED2_DESC = "(Lzombie/vehicles/BaseVehicle;I)Z"; + private static final String HELPER_AUTHORIZATION_CHANGED = + "authorizationChangedLandtrain"; + private static final String HELPER_AUTHORIZATION_CHANGED_DESC = + "(Lzombie/vehicles/BaseVehicle;Lzombie/characters/IsoGameCharacter;)V"; + private static final String HELPER_AUTHORIZATION_CLIENT_COLLIDE = + "authorizationClientCollideLandtrain"; + private static final String HELPER_AUTHORIZATION_CLIENT_COLLIDE_DESC = + "(Lzombie/vehicles/BaseVehicle;Lzombie/characters/IsoPlayer;)V"; + private static final String HELPER_AUTHORIZATION_SERVER_COLLIDE = + "authorizationServerCollideLandtrain"; + private static final String HELPER_AUTHORIZATION_SERVER_COLLIDE_DESC = + "(Lzombie/vehicles/BaseVehicle;SZ)V"; + private static final String HELPER_AUTHORIZATION_SERVER_ON_SEAT = + "authorizationServerOnSeatLandtrain"; + private static final String HELPER_AUTHORIZATION_SERVER_ON_SEAT_DESC = + "(Lzombie/vehicles/BaseVehicle;Lzombie/characters/IsoPlayer;Z)V"; + + private static final class AddPointPatchStats { + int removedBreakCalls; + int forcedRigidCalls; + } private BaseVehicleConstraintPatch() { } @@ -59,18 +98,49 @@ public final class BaseVehicleConstraintPatch { new ClassReader(original).accept(classNode, 0); int removedCalls = 0; + int forcedRigidCalls = 0; int inspectedAddPointMethods = 0; int patchedConstraintDriverCalls = 0; int patchedEnterBlockedCalls = 0; int patchedEnterBlocked2Calls = 0; + int patchedAuthorizationChangedMethods = 0; + int patchedAuthorizationClientCollideMethods = 0; + int patchedAuthorizationServerCollideMethods = 0; + int patchedAuthorizationServerOnSeatMethods = 0; for (MethodNode method : classNode.methods) { if (TARGET_NAME.equals(method.name) && isTargetAddPointConstraint(method.desc)) { inspectedAddPointMethods++; - removedCalls += patchAddPointConstraint(method); + AddPointPatchStats stats = patchAddPointConstraint(method); + removedCalls += stats.removedBreakCalls; + forcedRigidCalls += stats.forcedRigidCalls; } else if (CONSTRAINT_CHANGED_NAME.equals(method.name) && VOID_NOARG_DESC.equals(method.desc)) { patchedConstraintDriverCalls += patchConstraintChangedDriverCalls(method); + } else if (AUTHORIZATION_CHANGED_NAME.equals(method.name) + && AUTHORIZATION_CHANGED_DESC.equals(method.desc)) { + patchedAuthorizationChangedMethods += patchMethodDelegateToHelper( + method, + HELPER_AUTHORIZATION_CHANGED, + HELPER_AUTHORIZATION_CHANGED_DESC); + } else if (AUTHORIZATION_CLIENT_COLLIDE_NAME.equals(method.name) + && AUTHORIZATION_CLIENT_COLLIDE_DESC.equals(method.desc)) { + patchedAuthorizationClientCollideMethods += patchMethodDelegateToHelper( + method, + HELPER_AUTHORIZATION_CLIENT_COLLIDE, + HELPER_AUTHORIZATION_CLIENT_COLLIDE_DESC); + } else if (AUTHORIZATION_SERVER_COLLIDE_NAME.equals(method.name) + && AUTHORIZATION_SERVER_COLLIDE_DESC.equals(method.desc)) { + patchedAuthorizationServerCollideMethods += patchMethodDelegateToHelper( + method, + HELPER_AUTHORIZATION_SERVER_COLLIDE, + HELPER_AUTHORIZATION_SERVER_COLLIDE_DESC); + } else if (AUTHORIZATION_SERVER_ON_SEAT_NAME.equals(method.name) + && AUTHORIZATION_SERVER_ON_SEAT_DESC.equals(method.desc)) { + patchedAuthorizationServerOnSeatMethods += patchMethodDelegateToHelper( + method, + HELPER_AUTHORIZATION_SERVER_ON_SEAT, + HELPER_AUTHORIZATION_SERVER_ON_SEAT_DESC); } else if (IS_ENTER_BLOCKED_NAME.equals(method.name) && ENTER_BLOCKED_DESC.equals(method.desc)) { patchedEnterBlockedCalls += patchEnterBlockedCall( @@ -98,11 +168,36 @@ public final class BaseVehicleConstraintPatch { + inspectedAddPointMethods + ")"); } + if (forcedRigidCalls < 1) { + throw new IllegalStateException( + "Expected to force at least 1 rope->point constraint call, patched " + + forcedRigidCalls); + } if (patchedConstraintDriverCalls < 1) { throw new IllegalStateException( "Expected to patch at least 1 constraintChanged getDriver call, patched " + patchedConstraintDriverCalls); } + if (patchedAuthorizationChangedMethods < 1) { + throw new IllegalStateException( + "Expected to patch authorizationChanged, patched " + + patchedAuthorizationChangedMethods); + } + if (patchedAuthorizationClientCollideMethods < 1) { + throw new IllegalStateException( + "Expected to patch authorizationClientCollide, patched " + + patchedAuthorizationClientCollideMethods); + } + if (patchedAuthorizationServerCollideMethods < 1) { + throw new IllegalStateException( + "Expected to patch authorizationServerCollide, patched " + + patchedAuthorizationServerCollideMethods); + } + if (patchedAuthorizationServerOnSeatMethods < 1) { + throw new IllegalStateException( + "Expected to patch authorizationServerOnSeat, patched " + + patchedAuthorizationServerOnSeatMethods); + } if (patchedEnterBlockedCalls < 1) { throw new IllegalStateException( "Expected to patch isEnterBlocked call, patched " + patchedEnterBlockedCalls); @@ -123,8 +218,18 @@ public final class BaseVehicleConstraintPatch { System.out.println( "Patched BaseVehicle.class; removed breakConstraint calls: " + removedCalls + + ", forced rigid constraints: " + + forcedRigidCalls + ", constraint driver hooks: " + patchedConstraintDriverCalls + + ", auth hooks (changed/client/server/seat): " + + patchedAuthorizationChangedMethods + + "/" + + patchedAuthorizationClientCollideMethods + + "/" + + patchedAuthorizationServerCollideMethods + + "/" + + patchedAuthorizationServerOnSeatMethods + ", enter-block hooks: " + patchedEnterBlockedCalls + "/" @@ -139,8 +244,8 @@ public final class BaseVehicleConstraintPatch { .equals(methodDesc); } - private static int patchAddPointConstraint(MethodNode method) { - int patched = 0; + private static AddPointPatchStats patchAddPointConstraint(MethodNode method) { + AddPointPatchStats stats = new AddPointPatchStats(); InsnList insns = method.instructions; for (AbstractInsnNode node = insns.getFirst(); node != null; ) { @@ -160,12 +265,27 @@ public final class BaseVehicleConstraintPatch { replacement.add(new InsnNode(Opcodes.POP)); insns.insert(node, replacement); insns.remove(node); - patched++; + stats.removedBreakCalls++; + } else if (node instanceof MethodInsnNode call + && BULLET_OWNER.equals(call.owner) + && BULLET_ADD_ROPE.equals(call.name) + && BULLET_ADD_ROPE_DESC.equals(call.desc)) { + // Drop the rope-length float and call Bullet.addPointConstraint(...) instead. + insns.insertBefore(call, new InsnNode(Opcodes.POP)); + MethodInsnNode replacement = + new MethodInsnNode( + Opcodes.INVOKESTATIC, + BULLET_OWNER, + BULLET_ADD_POINT, + BULLET_ADD_POINT_DESC, + false); + insns.set(call, replacement); + stats.forcedRigidCalls++; } node = next; } - return patched; + return stats; } private static int patchConstraintChangedDriverCalls(MethodNode method) { @@ -198,6 +318,45 @@ public final class BaseVehicleConstraintPatch { return patched; } + private static int patchMethodDelegateToHelper( + MethodNode method, String helperMethod, String helperDesc) { + InsnList insns = new InsnList(); + + int localIndex = 0; + int maxStack = 0; + if ((method.access & Opcodes.ACC_STATIC) == 0) { + insns.add(new VarInsnNode(Opcodes.ALOAD, 0)); + localIndex = 1; + maxStack = 1; + } + + Type[] argumentTypes = Type.getArgumentTypes(method.desc); + for (Type argumentType : argumentTypes) { + insns.add(new VarInsnNode(argumentType.getOpcode(Opcodes.ILOAD), localIndex)); + localIndex += argumentType.getSize(); + maxStack += argumentType.getSize(); + } + + insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, HELPER_OWNER, helperMethod, helperDesc, false)); + + Type returnType = Type.getReturnType(method.desc); + if (returnType.getSort() == Type.VOID) { + insns.add(new InsnNode(Opcodes.RETURN)); + } else { + insns.add(new InsnNode(returnType.getOpcode(Opcodes.IRETURN))); + } + + method.instructions.clear(); + method.instructions.add(insns); + method.tryCatchBlocks.clear(); + if (method.localVariables != null) { + method.localVariables.clear(); + } + method.maxLocals = Math.max(method.maxLocals, localIndex); + method.maxStack = Math.max(method.maxStack, maxStack); + return 1; + } + private static int patchEnterBlockedCall( MethodNode method, String targetCallName, diff --git a/tools/java/LandtrainConstraintAuthHelper.java b/tools/java/LandtrainConstraintAuthHelper.java index a5e594b..016e22b 100644 --- a/tools/java/LandtrainConstraintAuthHelper.java +++ b/tools/java/LandtrainConstraintAuthHelper.java @@ -1,8 +1,12 @@ package zombie.vehicles; +import java.util.ArrayDeque; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; import zombie.characters.IsoGameCharacter; +import zombie.characters.IsoPlayer; /** * Resolves the effective driver for constraint auth in chained towing. @@ -62,4 +66,133 @@ public final class LandtrainConstraintAuthHelper { private static boolean isVehicleBeingTowedInLandtrain(BaseVehicle vehicle) { return vehicle != null && vehicle.getVehicleTowedBy() != null; } + + public static void authorizationChangedLandtrain(BaseVehicle vehicle, IsoGameCharacter character) { + if (vehicle == null) { + return; + } + + if (character != null) { + applyAuthorizationAcrossChain( + vehicle, BaseVehicle.Authorization.Local, character.getOnlineID(), false); + } else { + applyAuthorizationAcrossChain(vehicle, BaseVehicle.Authorization.Server, -1, false); + } + } + + public static void authorizationClientCollideLandtrain(BaseVehicle vehicle, IsoPlayer driver) { + if (vehicle == null || driver == null || vehicle.getDriver() != null) { + return; + } + + applyAuthorizationAcrossChain( + vehicle, BaseVehicle.Authorization.LocalCollide, driver.getOnlineID(), true); + } + + public static void authorizationServerCollideLandtrain( + BaseVehicle vehicle, short playerID, boolean isCollide) { + if (vehicle == null) { + return; + } + if (vehicle.isNetPlayerAuthorization(BaseVehicle.Authorization.Local)) { + return; + } + + if (isCollide) { + applyAuthorizationAcrossChain( + vehicle, BaseVehicle.Authorization.LocalCollide, playerID, false); + return; + } + + BaseVehicle.Authorization auth = + playerID == -1 ? BaseVehicle.Authorization.Server : BaseVehicle.Authorization.Local; + applyAuthorizationAcrossChain(vehicle, auth, playerID, false); + } + + public static void authorizationServerOnSeatLandtrain( + BaseVehicle vehicle, IsoPlayer player, boolean enter) { + if (vehicle == null || player == null) { + return; + } + + BaseVehicle vehicleA = vehicle.getVehicleTowing(); + BaseVehicle vehicleB = vehicle.getVehicleTowedBy(); + if (vehicle.isNetPlayerId((short) -1) && enter) { + if (vehicleA != null && vehicleA.getDriver() == null) { + vehicle.addPointConstraint( + null, vehicleA, vehicle.getTowAttachmentSelf(), vehicleA.getTowAttachmentSelf()); + } else if (vehicleB != null && vehicleB.getDriver() == null) { + vehicle.addPointConstraint( + null, vehicleB, vehicle.getTowAttachmentSelf(), vehicleB.getTowAttachmentSelf()); + } else { + applyAuthorizationAcrossChain( + vehicle, BaseVehicle.Authorization.Local, player.getOnlineID(), false); + } + } else if (vehicle.isNetPlayerId(player.getOnlineID()) && !enter) { + if (vehicleA != null && vehicleA.getDriver() != null) { + vehicleA.addPointConstraint( + null, vehicle, vehicleA.getTowAttachmentSelf(), vehicle.getTowAttachmentSelf()); + } else if (vehicleB != null && vehicleB.getDriver() != null) { + vehicleB.addPointConstraint( + null, vehicle, vehicleB.getTowAttachmentSelf(), vehicle.getTowAttachmentSelf()); + } else { + applyAuthorizationAcrossChain(vehicle, BaseVehicle.Authorization.Server, -1, false); + } + } + } + + private static List collectConnectedChain(BaseVehicle start) { + ArrayList chain = new ArrayList<>(); + if (start == null) { + return chain; + } + + ArrayDeque pending = new ArrayDeque<>(); + Set visitedIds = new HashSet<>(); + pending.add(start); + + while (!pending.isEmpty()) { + BaseVehicle cursor = pending.removeFirst(); + if (cursor == null) { + continue; + } + + int id = cursor.getId(); + if (!visitedIds.add(id)) { + continue; + } + + chain.add(cursor); + BaseVehicle front = cursor.getVehicleTowedBy(); + BaseVehicle rear = cursor.getVehicleTowing(); + if (front != null && front != cursor) { + pending.add(front); + } + if (rear != null && rear != cursor) { + pending.add(rear); + } + } + + return chain; + } + + private static void applyAuthorizationAcrossChain( + BaseVehicle start, + BaseVehicle.Authorization authorization, + int playerId, + boolean refreshSimulation) { + long now = System.currentTimeMillis(); + for (BaseVehicle vehicle : collectConnectedChain(start)) { + if (vehicle == null) { + continue; + } + vehicle.setNetPlayerAuthorization(authorization, playerId); + if (refreshSimulation) { + vehicle.authSimulationTime = now; + if (vehicle.interpolation != null) { + vehicle.interpolation.clear(); + } + } + } + } } diff --git a/zombie/vehicles/BaseVehicle.class b/zombie/vehicles/BaseVehicle.class index 7ac58c874c5958c81f6c2638bd1c9f73325a0d9e..a93c7ad824cdea28b7430f3248d8843bf36521dd 100644 GIT binary patch delta 76279 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%0Ay&Xjt6)j$e0&4*k#v+#M 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 TmRUDC&`s7V>u$SnrmXv4O_)3M diff --git a/zombie/vehicles/LandtrainConstraintAuthHelper.class b/zombie/vehicles/LandtrainConstraintAuthHelper.class index 69071351f9d35b1a8d8c1f54cfd80c64f9d14f5f..b092a3c75cd9bde0470a389edd6100e7fed27fe9 100644 GIT binary patch literal 4842 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 delta 171 zcmWNLOAf(M7=^!5r0uFtLZb0BbN6F)}i+5Q`9h&g49j zbIvz-X!rfQKY^IT&E4B3@n(t$i>#QCH&<_%Q`l(p@#0cZScyD7iYjGlrm4>3IvE