系统目标

为 RPG Maker MZ 中的物品、武器和护甲引入 独立随机属性品级系统 ,使每件物品都可能成为独一无二的装备,并根据品级和偏差生成属性。

完成功能
  1. 使原本堆叠的道具变为独立个体,每件装备拥有唯一的 ID
  2. 每件物品可以随机生成属性和效果值。根据备注栏定义的范围,自动生成攻击、防御、生命恢复等随机数值。
  3. 引入 品级 (Grade)偏差 (Deviation) 双轴控制属性分布。
  4. 自动为物品生成名称前缀及售价调整。
  5. 保存和读取时保持独立实例数据。

独立物品实例

基础原型 :来源于数据库中的物品、武器、护甲($dataItems 等)
每件独立物品由 LIM.Inde.data 管理,每个实例包含:

1
2
3
4
5
6
7
8
9
10
11
12
{
id: 唯一ID, // 系统内部生成,避免ID冲突
type: "item"|"weapon"|"armor", // 物品类型
originalId: 原始基础物品ID, // 对应 $dataItems/$dataWeapons/$dataArmors 的ID
data: {
props: { id: value }, // RPG Maker 内置参数,如 atk, def
effects: { effectCode: value }, // RPG Maker 效果类属性,如 hp_recover
isRandom: true/false, // 是否使用随机属性
P: 0~1, // 品级比例(Grade)
D: 0~1 // 偏差比例(Deviation)
}
}

物品备注

1
2
3
4
5
<Independent Item>                 // 开启独立系统
<props_atk: 10~50> // 攻击力范围随机
<props_def: 5~20> // 防御力范围随机
<props_mat: 10> // 魔法攻击固定值
<effects_hpRecover: 100~500> // 效果类 生命回复随机属性
  • 可定义任意多的属性。不局限RPGMAKER的基础属性,都可以写到props|effects内。
  • 支持最小值~最大值区间。

算法分析

它的核心任务是将总能量(由 P 决定)分配给 N 个属性,同时通过离散度(由 D 决定)控制分配的极端程度。

核心公式

装备品质 (P)
  1. 生成一个 [-1, 1] 之间的正态分布随机数。
  2. 取其绝对值得到装备品质 (P)。
确定资源总包
  1. 每个属性的值范围是 0 到 1(即 0% 到 100%)。
  2. 目标总值 T = 属性数量 × P。
生成原始权重
  1. 在利用正态分布为每个属性生成一个基础权重,这一步决定了“随机感”。
  2. 偏差修正: 使用 D 控制标准差。D 越大,随机生成的权重差异就越大。
  3. 指数处理: 对生成的随机数取 e 的次幂(Math.exp)。这样做是为了确保所有权重均为正数,且在大偏差时能产生极少数的“极品高数值”,模拟自然波动。
初始等比缩放
  1. 将生成的原始权重映射到资源总包中。
  2. 计算权重总和 $SumW$。
  3. 每个属性的初始潜力值 $x_i = (\frac{Weight_i}{SumW}) \times T$。
边界修正迭代
  1. 最关键的“多退少补”环节,通过最多 20 次循环解决溢出问题
  2. 检查溢出: 如果某个属性 $x_i > 1$,将其强制设为 $1$,并将超出的部分($x_i - 1$)存入“溢出池”。
  3. 检查过低: 如果某个属性 $x_i < 0$,将其强制设为 $0$,并将缺失的部分存入“补偿池”。
  4. 重分配: 如果总包多出了资源(溢出 > 补偿),就将多余资源平均分配给那些还没达到 1 的属性;如果总包缺少资源(补偿 > 溢出),就从那些还没降到 0 的属性中平均扣除。
  5. 重复: 直到所有属性都在 $[0, 1]$ 范围内,且总和等于 $T$。
实际数值映射

最后一步是将计算出的 $[0, 1]$ 之间的潜力值 $potential$ 转换为策划配置的具体数值:
$\text{最终值} = \text{配置最小值} + (\text{配置最大值} - \text{配置最小值}) \times potential$
最后进行四舍五入取整。

“先根据 $P$ 算出总能量,再根据 $D$ 用正态分布生成一组随机权重。
通过比例缩放把能量分给各属性,如果分多了(超过100%)或分负了。
就通过迭代循环把这部分差值摊派给其他合法的属性,直到总能量守恒且所有属性不越界。”