delta-force-core 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/engine.js ADDED
@@ -0,0 +1,141 @@
1
+ // =====================================================
2
+ // delta-force-core 引擎
3
+ //
4
+ // 官方数据 + 用户覆盖层 → 统一的抽签 / 查询接口
5
+ // =====================================================
6
+ import { OPERATORS } from './data/operators.js';
7
+ import { WEAPONS } from './data/weapons.js';
8
+ import { EQUIPMENT } from './data/equipment.js';
9
+ import { AMMO } from './data/ammo.js';
10
+ // -----------------------------------------------------
11
+ // 内部工具
12
+ // -----------------------------------------------------
13
+ function pick(list) {
14
+ if (list.length === 0)
15
+ throw new Error('[delta-force-core] 待抽取的列表为空');
16
+ return list[Math.floor(Math.random() * list.length)];
17
+ }
18
+ /** undefined 视为 true(缺省允许普通模式) */
19
+ function matchAllowNormal(filter, value) {
20
+ if (filter === undefined)
21
+ return true;
22
+ return (value ?? true) === filter;
23
+ }
24
+ function pickFromTiers(tiers, options = {}) {
25
+ const { tier, allowNormal } = options;
26
+ const valid = tiers.filter((t) => (tier === undefined || t.tier === tier) && matchAllowNormal(allowNormal, t.allowNormal));
27
+ if (valid.length === 0) {
28
+ throw new Error(`[delta-force-core] 没有符合条件的装备等级(tier=${tier ?? '*'},allowNormal=${allowNormal ?? '*'})`);
29
+ }
30
+ return pick(valid.flatMap((t) => t.items));
31
+ }
32
+ function findInTiers(tiers, id) {
33
+ for (const t of tiers) {
34
+ const hit = t.items.find((i) => i.id === id);
35
+ if (hit)
36
+ return hit;
37
+ }
38
+ return undefined;
39
+ }
40
+ // -----------------------------------------------------
41
+ // createEngine
42
+ // -----------------------------------------------------
43
+ export function createEngine(options = {}) {
44
+ const { qualityOverride = {}, aliasOverride = {}, tagOverride = {} } = options;
45
+ // ---------- 数据视图 ----------
46
+ const getOperators = () => OPERATORS;
47
+ const getWeapons = () => WEAPONS;
48
+ const getAmmo = () => AMMO;
49
+ const getEquipment = () => EQUIPMENT;
50
+ const listAllOperators = () => OPERATORS.flatMap((g) => g.operators);
51
+ const listAllWeapons = () => WEAPONS.flatMap((g) => g.weapons);
52
+ // ---------- 抽签 ----------
53
+ function getRandomOperator(category) {
54
+ if (!category)
55
+ return pick(listAllOperators());
56
+ const group = OPERATORS.find((g) => g.category === category);
57
+ if (!group) {
58
+ throw new Error(`[delta-force-core] 未找到兵种分类 "${category}",可用:${OPERATORS.map((g) => g.category).join(' / ')}`);
59
+ }
60
+ return pick(group.operators);
61
+ }
62
+ function getRandomWeapon(opt = {}) {
63
+ const { category, quality, allowNormal } = opt;
64
+ const pool = [];
65
+ for (const group of WEAPONS) {
66
+ if (category && group.category !== category)
67
+ continue;
68
+ for (const w of group.weapons) {
69
+ if (!matchAllowNormal(allowNormal, w.allowNormal))
70
+ continue;
71
+ if (quality && qualityOverride[w.id] !== quality)
72
+ continue;
73
+ pool.push(w);
74
+ }
75
+ }
76
+ if (pool.length === 0) {
77
+ throw new Error(`[delta-force-core] 没有符合条件的武器(category=${category ?? '*'},quality=${quality ?? '*'},allowNormal=${allowNormal ?? '*'})`);
78
+ }
79
+ return pick(pool);
80
+ }
81
+ function getRandomAmmo(opt = {}) {
82
+ const { caliber } = opt;
83
+ const pool = caliber ? AMMO.filter((a) => a.caliber === caliber) : AMMO.slice();
84
+ return pick(pool);
85
+ }
86
+ const getRandomArmor = (o) => pickFromTiers(EQUIPMENT.armors, o);
87
+ const getRandomHelmet = (o) => pickFromTiers(EQUIPMENT.helmets, o);
88
+ const getRandomBackpack = (o) => pickFromTiers(EQUIPMENT.backpacks, o);
89
+ const getRandomChestRig = (o) => pickFromTiers(EQUIPMENT.chest_rigs, o);
90
+ function getRandomLoadout(o = {}) {
91
+ const { allowNormal } = o;
92
+ return {
93
+ operator: getRandomOperator(),
94
+ weapon: getRandomWeapon({ allowNormal }),
95
+ armor: getRandomArmor({ allowNormal }),
96
+ helmet: getRandomHelmet({ allowNormal }),
97
+ backpack: getRandomBackpack(),
98
+ chestRig: getRandomChestRig(),
99
+ };
100
+ }
101
+ // ---------- 查询 ----------
102
+ const findOperatorById = (id) => listAllOperators().find((o) => o.id === id);
103
+ const findWeaponById = (id) => listAllWeapons().find((w) => w.id === id);
104
+ const findAmmoById = (id) => AMMO.find((a) => a.id === id);
105
+ const findArmorById = (id) => findInTiers(EQUIPMENT.armors, id);
106
+ const findHelmetById = (id) => findInTiers(EQUIPMENT.helmets, id);
107
+ const findBackpackById = (id) => findInTiers(EQUIPMENT.backpacks, id);
108
+ const findChestRigById = (id) => findInTiers(EQUIPMENT.chest_rigs, id);
109
+ const findWeaponsByCaliber = (caliber) => listAllWeapons().filter((w) => w.caliber === caliber);
110
+ const findAmmoByCaliber = (caliber) => AMMO.filter((a) => a.caliber === caliber);
111
+ function findWeaponByAlias(alias) {
112
+ const hit = Object.entries(aliasOverride).find(([, list]) => list.includes(alias));
113
+ if (!hit)
114
+ return undefined;
115
+ return findWeaponById(hit[0]);
116
+ }
117
+ // ---------- 用户层 ----------
118
+ const getWeaponQuality = (id) => qualityOverride[id];
119
+ const getAliases = (id) => aliasOverride[id] ?? [];
120
+ const getTags = (id) => tagOverride[id] ?? [];
121
+ const listOperatorCategories = () => OPERATORS.map((g) => g.category);
122
+ const listWeaponCategories = () => WEAPONS.map((g) => g.category);
123
+ return {
124
+ // 数据视图
125
+ getOperators, getWeapons, getAmmo, getEquipment,
126
+ // 抽签
127
+ getRandomOperator, getRandomWeapon, getRandomAmmo,
128
+ getRandomArmor, getRandomHelmet, getRandomBackpack, getRandomChestRig,
129
+ getRandomLoadout,
130
+ // 查询
131
+ findOperatorById, findWeaponById, findAmmoById,
132
+ findArmorById, findHelmetById, findBackpackById, findChestRigById,
133
+ findWeaponsByCaliber, findAmmoByCaliber, findWeaponByAlias,
134
+ // 用户层
135
+ getWeaponQuality, getAliases, getTags,
136
+ // 列表
137
+ listOperatorCategories, listWeaponCategories,
138
+ listAllOperators, listAllWeapons,
139
+ };
140
+ }
141
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,42 +1,10 @@
1
- import type { Operator, Weapon, ArmorItem, BackpackItem, ChestRigItem, Loadout, WeaponOptions, LoadoutOptions } from './types.js';
2
- export * from './data.js';
1
+ import type { Engine } from './types.js';
3
2
  export * from './types.js';
4
- /**
5
- * 随机抽取一名干员。
6
- *
7
- * @param category 兵种分类("突击兵" | "支援兵" | "工程兵" | "侦察兵")。不传则从全部干员中抽取。
8
- * @throws 当传入的分类不存在或该分类下没有干员时抛错。
9
- *
10
- * @example
11
- * getRandomOperator(); // 任意干员
12
- * getRandomOperator('突击兵'); // 只从突击兵里抽
13
- */
14
- export declare function getRandomOperator(category?: string): Operator;
15
- /**
16
- * 随机抽取一把武器,支持按武器分类 / 品质 / 普通模式可用性过滤。
17
- *
18
- * @example
19
- * getRandomWeapon(); // 任意武器
20
- * getRandomWeapon({ category: '突击步枪' }); // 只抽突击步枪
21
- * getRandomWeapon({ quality: '金色' }); // 只抽金色
22
- * getRandomWeapon({ allowNormal: true }); // 只抽普通模式可用的
23
- * getRandomWeapon({ category: '狙击步枪', quality: '金色' });
24
- */
25
- export declare function getRandomWeapon(options?: WeaponOptions): Weapon;
26
- /** 随机防具 */
27
- export declare function getRandomArmor(allowNormal?: boolean): ArmorItem;
28
- /** 随机头盔 */
29
- export declare function getRandomHelmet(allowNormal?: boolean): ArmorItem;
30
- /** 随机背包 */
31
- export declare function getRandomBackpack(): BackpackItem;
32
- /** 随机弹挂 */
33
- export declare function getRandomChestRig(): ChestRigItem;
34
- /**
35
- * 随机生成一套完整的战术配置。
36
- *
37
- * @example
38
- * const loadout = getRandomLoadout();
39
- * const normalLoadout = getRandomLoadout({ allowNormal: true });
40
- */
41
- export declare function getRandomLoadout(options?: LoadoutOptions): Loadout;
3
+ export { OPERATORS } from './data/operators.js';
4
+ export { WEAPONS } from './data/weapons.js';
5
+ export { EQUIPMENT } from './data/equipment.js';
6
+ export { AMMO } from './data/ammo.js';
7
+ export { createEngine } from './engine.js';
8
+ export declare const defaultEngine: Engine;
9
+ export declare const getOperators: () => readonly import("./types.js").OperatorCategory[], getWeapons: () => readonly import("./types.js").WeaponCategory[], getAmmo: () => readonly import("./types.js").Ammo[], getEquipment: () => import("./types.js").Equipment, getRandomOperator: (category?: string) => import("./types.js").Operator, getRandomWeapon: (options?: import("./types.js").WeaponOptions) => import("./types.js").Weapon, getRandomAmmo: (options?: import("./types.js").AmmoOptions) => import("./types.js").Ammo, getRandomArmor: (options?: import("./types.js").TierOptions) => import("./types.js").EquipmentItem, getRandomHelmet: (options?: import("./types.js").TierOptions) => import("./types.js").EquipmentItem, getRandomBackpack: (options?: import("./types.js").TierOptions) => import("./types.js").EquipmentItem, getRandomChestRig: (options?: import("./types.js").TierOptions) => import("./types.js").EquipmentItem, getRandomLoadout: (options?: import("./types.js").LoadoutOptions) => import("./types.js").Loadout, findOperatorById: (id: string) => import("./types.js").Operator | undefined, findWeaponById: (id: string) => import("./types.js").Weapon | undefined, findAmmoById: (id: string) => import("./types.js").Ammo | undefined, findArmorById: (id: string) => import("./types.js").EquipmentItem | undefined, findHelmetById: (id: string) => import("./types.js").EquipmentItem | undefined, findBackpackById: (id: string) => import("./types.js").EquipmentItem | undefined, findChestRigById: (id: string) => import("./types.js").EquipmentItem | undefined, findWeaponsByCaliber: (caliber: string) => import("./types.js").Weapon[], findAmmoByCaliber: (caliber: string) => import("./types.js").Ammo[], findWeaponByAlias: (alias: string) => import("./types.js").Weapon | undefined, getWeaponQuality: (weaponId: string) => import("./types.js").WeaponQuality | undefined, getAliases: (id: string) => readonly string[], getTags: (id: string) => readonly string[], listOperatorCategories: () => string[], listWeaponCategories: () => string[], listAllOperators: () => import("./types.js").Operator[], listAllWeapons: () => import("./types.js").Weapon[];
42
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,QAAQ,EAER,MAAM,EACN,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAkC3B;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAY7D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAsBnE;AAsBD,WAAW;AACX,wBAAgB,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAE/D;AAED,WAAW;AACX,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAEhE;AAED,WAAW;AACX,wBAAgB,iBAAiB,IAAI,YAAY,CAEhD;AAED,WAAW;AACX,wBAAgB,iBAAiB,IAAI,YAAY,CAEhD;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAWtE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAQ,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAW,gBAAgB,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,eAAO,MAAM,aAAa,EAAE,MAAuB,CAAC;AAEpD,eAAO,MAEL,YAAY,0DACZ,UAAU,wDACV,OAAO,8CACP,YAAY,wCAGZ,iBAAiB,wDACjB,eAAe,iFACf,aAAa,6EACb,cAAc,sFACd,eAAe,sFACf,iBAAiB,sFACjB,iBAAiB,sFACjB,gBAAgB,mFAGhB,gBAAgB,6DAChB,cAAc,2DACd,YAAY,yDACZ,aAAa,kEACb,cAAc,kEACd,gBAAgB,kEAChB,gBAAgB,kEAChB,oBAAoB,sDACpB,iBAAiB,oDACjB,iBAAiB,8DAGjB,gBAAgB,wEAChB,UAAU,qCACV,OAAO,qCAGP,sBAAsB,kBACtB,oBAAoB,kBACpB,gBAAgB,yCAChB,cAAc,qCACC,CAAC"}
package/dist/index.js CHANGED
@@ -1,133 +1,33 @@
1
1
  // =====================================================
2
2
  // delta-force-core 主入口
3
+ //
4
+ // 默认引擎 = 官方数据 + 空覆盖层
5
+ // 懒人一行可用:import { getRandomWeapon } from 'delta-force-core'
6
+ // 高级用法: import { createEngine } from 'delta-force-core'
3
7
  // =====================================================
4
- import { OPERATORS, WEAPONS, EQUIPMENT } from './data.js';
5
- // 重新导出数据与类型,方便 `import { OPERATORS } from 'delta-force-core'`
6
- export * from './data.js';
8
+ import { createEngine } from './engine.js';
9
+ // ---------- 类型 ----------
7
10
  export * from './types.js';
8
- // -----------------------------------------------------
9
- // 内部工具
10
- // -----------------------------------------------------
11
- /** 从数组里随机取一个元素 */
12
- function pick(list) {
13
- if (list.length === 0)
14
- throw new Error('[delta-force-core] 待抽取的列表为空');
15
- return list[Math.floor(Math.random() * list.length)];
16
- }
17
- /** 把分类数组里所有条目拉平 */
18
- function flatten(groups, key) {
19
- return groups.flatMap((g) => g[key]);
20
- }
21
- /** 通用 allowNormal 过滤(undefined 表示不过滤) */
22
- function matchAllowNormal(allowNormal, value) {
23
- if (allowNormal === undefined)
24
- return true;
25
- // 未标注 allowNormal 的默认视为 true(允许普通模式)
26
- return (value ?? true) === allowNormal;
27
- }
28
- // -----------------------------------------------------
29
- // 1. 随机干员
30
- // -----------------------------------------------------
31
- /**
32
- * 随机抽取一名干员。
33
- *
34
- * @param category 兵种分类("突击兵" | "支援兵" | "工程兵" | "侦察兵")。不传则从全部干员中抽取。
35
- * @throws 当传入的分类不存在或该分类下没有干员时抛错。
36
- *
37
- * @example
38
- * getRandomOperator(); // 任意干员
39
- * getRandomOperator('突击兵'); // 只从突击兵里抽
40
- */
41
- export function getRandomOperator(category) {
42
- if (!category) {
43
- return pick(flatten(OPERATORS, 'operators'));
44
- }
45
- const group = OPERATORS.find((g) => g.category === category);
46
- if (!group) {
47
- throw new Error(`[delta-force-core] 未找到兵种分类 "${category}",可用分类:${OPERATORS.map((g) => g.category).join(' / ')}`);
48
- }
49
- return pick(group.operators);
50
- }
51
- // -----------------------------------------------------
52
- // 2. 随机武器
53
- // -----------------------------------------------------
54
- /**
55
- * 随机抽取一把武器,支持按武器分类 / 品质 / 普通模式可用性过滤。
56
- *
57
- * @example
58
- * getRandomWeapon(); // 任意武器
59
- * getRandomWeapon({ category: '突击步枪' }); // 只抽突击步枪
60
- * getRandomWeapon({ quality: '金色' }); // 只抽金色
61
- * getRandomWeapon({ allowNormal: true }); // 只抽普通模式可用的
62
- * getRandomWeapon({ category: '狙击步枪', quality: '金色' });
63
- */
64
- export function getRandomWeapon(options = {}) {
65
- const { category, quality, allowNormal } = options;
66
- const pool = [];
67
- for (const group of WEAPONS) {
68
- if (category && group.category !== category)
69
- continue;
70
- for (const weapon of group.weapons) {
71
- if (quality && weapon.quality !== quality)
72
- continue;
73
- if (!matchAllowNormal(allowNormal, weapon.allowNormal))
74
- continue;
75
- pool.push(weapon);
76
- }
77
- }
78
- if (pool.length === 0) {
79
- throw new Error(`[delta-force-core] 没有符合条件的武器(category=${category ?? '*'},quality=${quality ?? '*'},allowNormal=${allowNormal ?? '*'})`);
80
- }
81
- return pick(pool);
82
- }
83
- // -----------------------------------------------------
84
- // 3. 随机装备(内部 / 也可单独导出)
85
- // -----------------------------------------------------
86
- function pickFromTiers(tiers, allowNormal, field = 'items') {
87
- // 先按 allowNormal 过滤等级
88
- const validTiers = tiers.filter((t) => matchAllowNormal(allowNormal, t.allowNormal));
89
- if (validTiers.length === 0) {
90
- throw new Error('[delta-force-core] 没有符合条件的装备等级');
91
- }
92
- // 再把所有条目拉平抽取
93
- const pool = validTiers.flatMap((t) => t[field]);
94
- return pick(pool);
95
- }
96
- /** 随机防具 */
97
- export function getRandomArmor(allowNormal) {
98
- return pickFromTiers(EQUIPMENT.armors, allowNormal);
99
- }
100
- /** 随机头盔 */
101
- export function getRandomHelmet(allowNormal) {
102
- return pickFromTiers(EQUIPMENT.helmets, allowNormal);
103
- }
104
- /** 随机背包 */
105
- export function getRandomBackpack() {
106
- return pickFromTiers(EQUIPMENT.backpacks);
107
- }
108
- /** 随机弹挂 */
109
- export function getRandomChestRig() {
110
- return pickFromTiers(EQUIPMENT.chest_rigs);
111
- }
112
- // -----------------------------------------------------
113
- // 4. 随机完整战术配置
114
- // -----------------------------------------------------
115
- /**
116
- * 随机生成一套完整的战术配置。
117
- *
118
- * @example
119
- * const loadout = getRandomLoadout();
120
- * const normalLoadout = getRandomLoadout({ allowNormal: true });
121
- */
122
- export function getRandomLoadout(options = {}) {
123
- const { allowNormal } = options;
124
- return {
125
- operator: getRandomOperator(),
126
- weapon: getRandomWeapon({ allowNormal }),
127
- armor: getRandomArmor(allowNormal),
128
- helmet: getRandomHelmet(allowNormal),
129
- backpack: getRandomBackpack(),
130
- chestRig: getRandomChestRig(),
131
- };
132
- }
11
+ // ---------- 官方数据(只读) ----------
12
+ export { OPERATORS } from './data/operators.js';
13
+ export { WEAPONS } from './data/weapons.js';
14
+ export { EQUIPMENT } from './data/equipment.js';
15
+ export { AMMO } from './data/ammo.js';
16
+ // ---------- 引擎工厂 ----------
17
+ export { createEngine } from './engine.js';
18
+ // -----------------------------------------------------
19
+ // 默认引擎:官方数据 + 空覆盖层
20
+ // -----------------------------------------------------
21
+ export const defaultEngine = createEngine();
22
+ export const {
23
+ // 数据视图
24
+ getOperators, getWeapons, getAmmo, getEquipment,
25
+ // 抽签
26
+ getRandomOperator, getRandomWeapon, getRandomAmmo, getRandomArmor, getRandomHelmet, getRandomBackpack, getRandomChestRig, getRandomLoadout,
27
+ // 查询
28
+ findOperatorById, findWeaponById, findAmmoById, findArmorById, findHelmetById, findBackpackById, findChestRigById, findWeaponsByCaliber, findAmmoByCaliber, findWeaponByAlias,
29
+ // 用户层
30
+ getWeaponQuality, getAliases, getTags,
31
+ // 列表
32
+ listOperatorCategories, listWeaponCategories, listAllOperators, listAllWeapons, } = defaultEngine;
133
33
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,uBAAuB;AACvB,EAAE;AACF,qBAAqB;AACrB,4DAA4D;AAC5D,2DAA2D;AAC3D,wDAAwD;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,2BAA2B;AAC3B,cAAc,YAAY,CAAC;AAE3B,iCAAiC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAQ,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAW,gBAAgB,CAAC;AAE3C,6BAA6B;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,wDAAwD;AACxD,mBAAmB;AACnB,wDAAwD;AACxD,MAAM,CAAC,MAAM,aAAa,GAAW,YAAY,EAAE,CAAC;AAEpD,MAAM,CAAC,MAAM;AACX,OAAO;AACP,YAAY,EACZ,UAAU,EACV,OAAO,EACP,YAAY;AAEZ,KAAK;AACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB;AAEhB,KAAK;AACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB;AAEjB,MAAM;AACN,gBAAgB,EAChB,UAAU,EACV,OAAO;AAEP,KAAK;AACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GACf,GAAG,aAAa,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,92 +1,119 @@
1
- /** 干员 */
1
+ /** 品质 —— 官方数据不提供,由用户层评估 */
2
+ export type WeaponQuality = '绿色' | '蓝色' | '紫色' | '金色';
2
3
  export interface Operator {
3
4
  id: string;
4
5
  name: string;
5
- features: string;
6
+ features?: string;
7
+ description?: string;
8
+ image?: string;
6
9
  }
7
- /** 干员分类(如:突击兵 / 支援兵 / 工程兵 / 侦察兵) */
8
10
  export interface OperatorCategory {
9
11
  category: string;
10
12
  operators: Operator[];
11
13
  }
12
- /** 武器 */
13
14
  export interface Weapon {
14
15
  id: string;
15
16
  name: string;
16
- /** 品质:绿色 / 蓝色 / 紫色 / 金色 */
17
- quality: string;
18
- /** 是否允许在普通模式使用 */
19
- allowNormal: boolean;
17
+ caliber?: string;
18
+ baseDamage?: number;
19
+ description?: string;
20
+ image?: string;
21
+ /** 是否允许在普通模式使用(缺省视为 true) */
22
+ allowNormal?: boolean;
20
23
  }
21
- /** 武器分类(如:突击步枪 / 冲锋枪 / ...) */
22
24
  export interface WeaponCategory {
23
25
  category: string;
24
26
  weapons: Weapon[];
25
27
  }
26
- /** 防具 / 头盔条目 */
27
- export interface ArmorItem {
28
- id: string;
29
- name: string;
30
- features?: string;
31
- comment?: string;
32
- }
33
- /** 防具 / 头盔 等级分组 */
34
- export interface ArmorTier {
35
- tier: number;
36
- /** 是否允许在普通模式使用(缺省视为允许) */
37
- allowNormal?: boolean;
38
- items: ArmorItem[];
39
- }
40
- /** 背包条目 */
41
- export interface BackpackItem {
28
+ export interface Ammo {
42
29
  id: string;
43
30
  name: string;
44
- comment?: string;
45
- }
46
- /** 背包等级分组 */
47
- export interface BackpackTier {
48
- tier: number;
49
- items: BackpackItem[];
31
+ /** 口径,如 '5.56x45mm' */
32
+ caliber: string;
33
+ description?: string;
34
+ image?: string;
50
35
  }
51
- /** 弹挂条目 */
52
- export interface ChestRigItem {
36
+ export interface EquipmentItem {
53
37
  id: string;
54
38
  name: string;
39
+ features?: string;
55
40
  comment?: string;
41
+ description?: string;
42
+ image?: string;
56
43
  }
57
- /** 弹挂等级分组 */
58
- export interface ChestRigTier {
44
+ export interface EquipmentTier {
59
45
  tier: number;
60
- items: ChestRigItem[];
46
+ allowNormal?: boolean;
47
+ items: EquipmentItem[];
61
48
  }
62
- /** 装备总览 */
63
49
  export interface Equipment {
64
- armors: ArmorTier[];
65
- helmets: ArmorTier[];
66
- backpacks: BackpackTier[];
67
- chest_rigs: ChestRigTier[];
50
+ armors: EquipmentTier[];
51
+ helmets: EquipmentTier[];
52
+ backpacks: EquipmentTier[];
53
+ chest_rigs: EquipmentTier[];
68
54
  }
69
- /** 一套完整战术配置 */
70
55
  export interface Loadout {
71
56
  operator: Operator;
72
57
  weapon: Weapon;
73
- armor: ArmorItem;
74
- helmet: ArmorItem;
75
- backpack: BackpackItem;
76
- chestRig: ChestRigItem;
58
+ armor: EquipmentItem;
59
+ helmet: EquipmentItem;
60
+ backpack: EquipmentItem;
61
+ chestRig: EquipmentItem;
62
+ }
63
+ /** 用户偏好覆盖层(全部可选) */
64
+ export interface EngineOptions {
65
+ /** 用户对武器品质的评估:weaponId → 品质 */
66
+ qualityOverride?: Record<string, WeaponQuality>;
67
+ /** 别名:entityId → 别名数组(可用于查询) */
68
+ aliasOverride?: Record<string, string[]>;
69
+ /** 个人标签:entityId → 标签数组(纯元数据,不影响抽签) */
70
+ tagOverride?: Record<string, string[]>;
77
71
  }
78
- /** getRandomWeapon 过滤选项 */
79
72
  export interface WeaponOptions {
80
- /** 武器大类,如 "突击步枪" */
81
73
  category?: string;
82
- /** 品质,如 "金色" / "紫色" / "蓝色" / "绿色" */
83
- quality?: string;
84
- /** true 只返回普通模式可用;false 只返回普通模式不可用;undefined 全部返回 */
74
+ /** 需要引擎启用了 qualityOverride 才有意义 */
75
+ quality?: WeaponQuality;
76
+ allowNormal?: boolean;
77
+ }
78
+ export interface TierOptions {
79
+ tier?: number;
85
80
  allowNormal?: boolean;
86
81
  }
87
- /** getRandomLoadout 选项 */
82
+ export interface AmmoOptions {
83
+ caliber?: string;
84
+ }
88
85
  export interface LoadoutOptions {
89
- /** 是否只使用普通模式可用的装备(武器 / 护甲 / 头盔) */
90
86
  allowNormal?: boolean;
91
87
  }
88
+ export interface Engine {
89
+ getOperators(): readonly OperatorCategory[];
90
+ getWeapons(): readonly WeaponCategory[];
91
+ getAmmo(): readonly Ammo[];
92
+ getEquipment(): Equipment;
93
+ getRandomOperator(category?: string): Operator;
94
+ getRandomWeapon(options?: WeaponOptions): Weapon;
95
+ getRandomAmmo(options?: AmmoOptions): Ammo;
96
+ getRandomArmor(options?: TierOptions): EquipmentItem;
97
+ getRandomHelmet(options?: TierOptions): EquipmentItem;
98
+ getRandomBackpack(options?: TierOptions): EquipmentItem;
99
+ getRandomChestRig(options?: TierOptions): EquipmentItem;
100
+ getRandomLoadout(options?: LoadoutOptions): Loadout;
101
+ findOperatorById(id: string): Operator | undefined;
102
+ findWeaponById(id: string): Weapon | undefined;
103
+ findAmmoById(id: string): Ammo | undefined;
104
+ findArmorById(id: string): EquipmentItem | undefined;
105
+ findHelmetById(id: string): EquipmentItem | undefined;
106
+ findBackpackById(id: string): EquipmentItem | undefined;
107
+ findChestRigById(id: string): EquipmentItem | undefined;
108
+ findWeaponsByCaliber(caliber: string): Weapon[];
109
+ findAmmoByCaliber(caliber: string): Ammo[];
110
+ findWeaponByAlias(alias: string): Weapon | undefined;
111
+ getWeaponQuality(weaponId: string): WeaponQuality | undefined;
112
+ getAliases(id: string): readonly string[];
113
+ getTags(id: string): readonly string[];
114
+ listOperatorCategories(): string[];
115
+ listWeaponCategories(): string[];
116
+ listAllOperators(): Operator[];
117
+ listAllWeapons(): Weapon[];
118
+ }
92
119
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,SAAS;AACT,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,SAAS;AACT,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,+BAA+B;AAC/B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,gBAAgB;AAChB,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,mBAAmB;AACnB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,WAAW;AACX,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,aAAa;AACb,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,WAAW;AACX,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,aAAa;AACb,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,WAAW;AACX,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,eAAe;AACf,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}