From 3410399bba9b48e34602fc5088a2dd6787f4711f Mon Sep 17 00:00:00 2001 From: lunarcleint <88809950+lunarcleint@users.noreply.github.com> Date: Sat, 3 Feb 2024 00:15:39 -0700 Subject: [PATCH] EMPTY SCRIPT FIX V2!!! --- .../backend/assets/AssetsLibraryList.hx | 53 ++++++++++++++----- source/funkin/backend/scripting/HScript.hx | 7 +-- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/source/funkin/backend/assets/AssetsLibraryList.hx b/source/funkin/backend/assets/AssetsLibraryList.hx index b1edfbf7..177f1736 100644 --- a/source/funkin/backend/assets/AssetsLibraryList.hx +++ b/source/funkin/backend/assets/AssetsLibraryList.hx @@ -6,6 +6,9 @@ import lime.utils.AssetLibrary; class AssetsLibraryList extends AssetLibrary { public var libraries:Array = []; + public var rootLibs:Array = []; + public var assetsLibs:Array = []; + @:allow(funkin.backend.system.Main) @:allow(funkin.backend.system.MainState) private var __defaultLibraries:Array = []; @@ -16,6 +19,7 @@ class AssetsLibraryList extends AssetLibrary { libraries.remove(lib); return lib; } + public function existsSpecific(id:String, type:String, source:AssetSource = BOTH) { if (!id.startsWith("assets/") && exists('assets/$id', type)) return true; @@ -94,20 +98,31 @@ class AssetsLibraryList extends AssetLibrary { return content; } - public function getSpecificAsset(id:String, type:String, source:AssetSource = BOTH):Dynamic { + public function getSpecificAsset(id:String, type:String, source:AssetSource = BOTH, ?avoidRoot:Bool = false):Dynamic { try { - if (!id.startsWith("assets/")) { - var ass = getSpecificAsset('assets/$id', type, source); - if (ass != null) { - return ass; - } - } - for(k=>e in libraries) { - if (shouldSkipLib(k, source)) continue; + var fileFromAssets:Bool = id.startsWith("assets/"); - var asset = e.getAsset(id, type); - if (asset != null) { - return asset; + if (!fileFromAssets) { + var ass = getSpecificAsset('assets/$id', type, source); + if (ass != null) + return ass; + } + + if (fileFromAssets) { + for (lib in assetsLibs) { + if (shouldSkipLib(libraries.indexOf(lib), source)) continue; + + var asset = lib.getAsset(id, type); + if (asset != null) + return asset; + } + } else if (!avoidRoot) { + for (lib in rootLibs) { + if (shouldSkipLib(libraries.indexOf(lib), source)) continue; + + var asset = lib.getAsset(id, type); + if (asset != null) + return asset; } } return null; @@ -127,6 +142,9 @@ class AssetsLibraryList extends AssetLibrary { public override inline function getAsset(id:String, type:String):Dynamic return getSpecificAsset(id, type, BOTH); + public inline function getAssetSafe(id:String, type:String):Dynamic + return getSpecificAsset(id, type, BOTH, true); + public override function isLocal(id:String, type:String) { return true; } @@ -155,8 +173,17 @@ class AssetsLibraryList extends AssetLibrary { addLibrary(d); } - public function addLibrary(lib:AssetLibrary) { + public function addLibrary(lib:AssetLibrary) @:privateAccess { libraries.insert(0, lib); + + var finalLib:AssetLibrary = lib; + if (finalLib is openfl.utils.AssetLibrary) + finalLib = cast(finalLib, openfl.utils.AssetLibrary).__proxy; + + if (finalLib is IModsAssetLibrary) + assetsLibs.push(finalLib); + else + rootLibs.push(finalLib); return lib; } } diff --git a/source/funkin/backend/scripting/HScript.hx b/source/funkin/backend/scripting/HScript.hx index e615b238..a43055fd 100644 --- a/source/funkin/backend/scripting/HScript.hx +++ b/source/funkin/backend/scripting/HScript.hx @@ -6,6 +6,7 @@ import hscript.Expr.ModuleDecl; import hscript.Expr.Error; import hscript.Parser; import openfl.Assets; +import lime.utils.AssetType; import hscript.*; class HScript extends Script { @@ -29,7 +30,8 @@ class HScript extends Script { interp = new Interp(); - code = Assets.exists(path) ? Assets.getText(path) : null; + // We use getAssetSafe to prevent crash from empty file (null which would check root (big crash)) -lunar + code = Assets.exists(path) ? Paths.assetsTree.getAssetSafe(path, TEXT) : null; parser = initParser(); folderlessPath = Path.directory(path); __importedPaths = [path]; @@ -53,8 +55,7 @@ class HScript extends Script { public override function loadFromString(code:String) { try { - if (code != null && code.trim() != "") - expr = parser.parseString(code, fileName); + expr = parser.parseString(code, fileName); } catch(e:Error) { _errorHandler(e); } catch(e) {