Browse Source

registerDatablock update in-place.
Maintains load order for datablock files that are overridden by registerDatablock.

OTHGMars 5 years ago
parent
commit
6534957496
1 changed files with 7 additions and 5 deletions
  1. 7 5
      Templates/BaseGame/game/core/utility/scripts/module.cs

+ 7 - 5
Templates/BaseGame/game/core/utility/scripts/module.cs

@@ -124,14 +124,16 @@ function SimSet::registerDatablock(%scopeSet, %datablockFilePath, %isExclusive)
             if ((!%locked && !%isExclusive)&&($reportModuleFileConflicts))
                 error("found" SPC %datablockFilePath SPC "duplicate file!");
             if (!%locked || (%locked && %isExclusive))
-            {
-                DatablockFilesList.erase(%i);
+            { // Replacing an existing entry, update in-place
+                DatablockFilesList.setKey(%fullPath, %i);
+                DatablockFilesList.setValue(%isExclusive, %i);
+                %locked = true; //Done, but don't return and bypass trace logging below
             }
+            break;
         }
    }
-   //if we're not locked, or we are exclusive, go ahead and add it to the pile
-   //(ensures exclusives get re-added after that erasure)
-   if (!%locked || %isExclusive)
+   //if we're not locked, go ahead and add it to the pile
+   if (!%locked)
        DatablockFilesList.add(%fullPath,%isExclusive);
    if ($traceModuleCalls)
       DatablockFilesList.echo();