From 6f010acfca8ec57105a3cd3bc959ed61be206e13 Mon Sep 17 00:00:00 2001 From: MadByte Date: Wed, 31 Jul 2024 14:14:56 +0000 Subject: [PATCH] Changed mod path for loading bundles from the server to be relative (!389) **Before merging: Please test on a real Windows installation if possible!** I tested this on Linux as well as inside a Windows VM hosted on Linux, but wasn't able to test it on a real Windows installation. This commit fixes an issue with loading bundles from a native Linux server: When compiling the server natively for Linux & installing some mods, everything works except for mods trying to load bundles from the server. Reason is a malformed path to the bundle: ```ts 2024-07-30 23:48:16.968 +02:00|0.14.9.1.30626|Error|Default| EXCEPTION: System.IO.DirectoryNotFoundException: Could not find a part of the path "C:\home\USER\Games\escape-from-tarkov\drive_c\SPTarkov\user\mods\Bloody-Bullet-Wounds\bundles\assets\systems\effects\particlesystems\effects.bundle". ``` `process.cwd()` returns the linux-agnostic path of course, but for some reason it also returns `C:`. Changing the line to `modpath.slice(0, -1).replace(/\\/g, "/");` seems to work and the bundles seem to get loaded without issues (did a quick test raid), even without passing the absolute path to the mod. I tried to check why that is, and I think node is able to [get the cwd and resolve the relative path](https://github.com/nodejs/node/blob/4d1d88118b39d26aa33caa87e413683595d14788/src/path.cc#L101) by itself.. Reviewed-on: https://dev.sp-tarkov.com/SPT/Server/pulls/389 Co-authored-by: MadByte Co-committed-by: MadByte --- project/src/loaders/BundleLoader.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/src/loaders/BundleLoader.ts b/project/src/loaders/BundleLoader.ts index 8965bb9e..637284ef 100644 --- a/project/src/loaders/BundleLoader.ts +++ b/project/src/loaders/BundleLoader.ts @@ -55,7 +55,7 @@ export class BundleLoader { ).manifest; for (const bundleManifest of bundleManifestArr) { - const absoluteModPath = path.join(process.cwd(), modpath).slice(0, -1).replace(/\\/g, "/"); + const relativeModPath = modpath.slice(0, -1).replace(/\\/g, "/"); const bundleLocalPath = `${modpath}bundles/${bundleManifest.key}`.replace(/\\/g, "/"); if (!this.bundleHashCacheService.calculateAndMatchHash(bundleLocalPath)) { @@ -64,7 +64,7 @@ export class BundleLoader { const bundleHash = this.bundleHashCacheService.getStoredValue(bundleLocalPath); - this.addBundle(bundleManifest.key, new BundleInfo(absoluteModPath, bundleManifest, bundleHash)); + this.addBundle(bundleManifest.key, new BundleInfo(relativeModPath, bundleManifest, bundleHash)); } }