feat: modpack-bundled sorting rules + B41/B42 build pair

- data/modpack_rules/helldrinx.txt: bundled rules for HellDrinx FULL/LITE
- app.py auto-injects modpack rules when a trigger wsid is in input;
  user-supplied rules are appended after and override on conflict
- MANUAL_BUILD_PAIRS: betterLockpicking (B41) ↔ NFsBetterLockpicking (B42)
- mlos_sort.py: minor adjustments (kept in lockstep across api/worker)
This commit is contained in:
2026-05-04 15:58:39 +00:00
parent b73325882e
commit cee433f47e
4 changed files with 242 additions and 25 deletions

View File

@@ -32,7 +32,26 @@ from typing import Dict, List, Optional, Tuple
# Constants (mirrors MLOS_sorting.lua)
# -----------------------------------------------------------------------------
PREORDER: Dict[str, int] = {"ModManager": 1, "ModManagerServer": 2, "modoptions": 3}
PREORDER: Dict[str, int] = {
# B41 in-game MLOS sorter (wsid 3180893708) + server companion + vanilla
# mod options panel — slot at the very front by historical MLOS convention.
"ModManager": 1,
"ModManagerServer": 2,
"modoptions": 3,
# Project-specific forced order: tsarslib is a foundational lib that many
# vehicle/map mods require, so it must precede them. AquatsarYachtClub +
# AquatsarRVAddon + ProjectRVInterior42 form an authored cluster whose
# interior overlays only render correctly in this exact order. Slots 4-7
# land them immediately after the management tools, before any category-
# sorted content.
"tsarslib": 4,
"AquatsarYachtClubB42": 5,
"AquatsarRVAddon": 6,
"PROJECTRVInterior42": 7,
# damnlib (wsid 3171167894) — same nature as tsarslib: foundational lib
# consumed by many B42 mods. Slots after the Aquatsar block.
"damnlib": 8,
}
RAW_CATEGORY_ORDER: List[str] = [
"coreRequirement",