ContentLoader——FIX——PACK

If you liked this item, please rate it up on Steam Workshop page.

Author: Cave

Last revision: 25 Feb at 21:58 UTC

File size: 11.19 KB

On Steam Workshop

Description:
Darkly77-ContentLoader | Pack Workflow & Rules

For mod developers. Includes new Pack flow + legacy compatibility.


新老MOD都能用,适应新版本
可以取消订阅旧的“[Utility] ContentLoader”
Both the new and old MODs can be used.Adapt to the new versio.
The subscription for the old "[Utility] ContentLoader" can be cancelled.

中文:Pack 方法与规则

1) 快速开始(推荐)

var ContentLoader = get_node("/root/ModLoader/Darkly77-ContentLoader/ContentLoader")

var ok = ContentLoader.load_pack_from_content_data(
"res://mods-unpacked/MyMod/content_data/my_content.tres",
"pack_my_mod_main",
"MyName-MyMod",
true
)
if not ok:
push_error("Content pack load failed")

2) Pack 三种加载方式

  • load_pack_from_content_data(path, pack_id, mod_name, auto_activate)
    从现有 ContentData 直接桥接到 Pack(最推荐)。
  • load_pack(pack_data_path, mod_name, auto_activate)
    直接加载 ContentPackData 资源文件。
  • load_pack_data(pack_resource, mod_name, auto_activate)
    运行时构造 ContentPackData 后直接注册。

3) 运行时控制 API

  • activate_pack(pack_id):激活已注册 pack。
  • deactivate_pack(pack_id):移除该 pack 注入内容。
  • reset_packs_to_active():按激活顺序重建,保证覆盖顺序稳定。
  • get_pack_ids() / get_active_pack_ids():查询 pack 列表。

4) 规则事项(重点)

  • pack_id 必须全局唯一且长期稳定。
  • mod_name 固定且规范(建议 AuthorName-ModName)。
  • weapons_characters 与 weapons 必须一一对应。
  • auto_activate=false 时,必须手动 activate_pack(pack_id)。
  • 同一批内容不要同时走 Pack 与 load_data,避免重复注入。
  • 所有 my_id 必须全局唯一(角色/道具/武器/挑战)。
  • 不要手动调用内部方法(如 _install_data)。

5) 兼容旧方法(老 Mod 可继续用)

  • 仍兼容:load_data()、load_data_by_dictionary()、load_data_by_content_data()。
  • 老 Mod 无需立刻迁移。
  • 新 Mod 建议优先 Pack;迁移期可“先 Pack,失败回退旧方法”。

6) 新旧双通道模板

var ContentLoader = get_node("/root/ModLoader/Darkly77-ContentLoader/ContentLoader")
var path = "res://mods-unpacked/MyMod/content_data/my_content.tres"
var pack_id = "pack_my_mod_main"

var ok = false
if ContentLoader.has_method("load_pack_from_content_data"):
ok = ContentLoader.load_pack_from_content_data(path, pack_id, "MyName-MyMod", true)

if not ok:
ContentLoader.load_data(path, "MyName-MyMod")


English: Pack Workflow & Rules

1) Quick Start (Recommended)

var ContentLoader = get_node("/root/ModLoader/Darkly77-ContentLoader/ContentLoader")

var ok = ContentLoader.load_pack_from_content_data(
"res://mods-unpacked/MyMod/content_data/my_content.tres",
"pack_my_mod_main",
"MyName-MyMod",
true
)
if not ok:
push_error("Content pack load failed")

2) Three Pack Loading Methods

  • load_pack_from_content_data(path, pack_id, mod_name, auto_activate)
    Bridge existing ContentData into Pack flow (preferred).
  • load_pack(pack_data_path, mod_name, auto_activate)
    Load a ContentPackData resource file directly.
  • load_pack_data(pack_resource, mod_name, auto_activate)
    Register a runtime-created ContentPackData resource.

3) Runtime Control API

  • activate_pack(pack_id): activate a registered pack.
  • deactivate_pack(pack_id): remove resources injected by that pack.
  • reset_packs_to_active(): rebuild active packs in deterministic order.
  • get_pack_ids() / get_active_pack_ids(): inspect pack lists.

4) Rules (Important)

  • pack_id must be globally unique and stable.
  • Keep mod_name stable and explicit (recommended: AuthorName-ModName).
  • weapons_characters must map 1:1 with weapons.
  • If auto_activate=false, call activate_pack(pack_id) manually.
  • Do not load the same content through both Pack and load_data flows.
  • All my_id values must be globally unique.
  • Do not call internal methods directly (such as _install_data).

5) Legacy Compatibility (Old Mods Still Work)

  • Still supported: load_data(), load_data_by_dictionary(), load_data_by_content_data().
  • Legacy mods do not need immediate migration.
  • New mods should prefer Pack; migration path: "Pack first, fallback to legacy."

6) Dual-Path Template (Pack + Legacy Fallback)

var ContentLoader = get_node("/root/ModLoader/Darkly77-ContentLoader/ContentLoader")
var path = "res://mods-unpacked/MyMod/content_data/my_content.tres"
var pack_id = "pack_my_mod_main"

var ok = false
if ContentLoader.has_method("load_pack_from_content_data"):
ok = ContentLoader.load_pack_from_content_data(path, pack_id, "MyName-MyMod", true)

if not ok:
ContentLoader.load_data(path, "MyName-MyMod")