系统目标
为 RPG Maker MZ 中的物品、武器和护甲引入 独立随机属性 和 品级系统 ,使每件物品都可能成为独一无二的装备,并根据品级和偏差生成属性。
完成功能
- 使原本堆叠的道具变为独立个体,每件装备拥有唯一的 ID
- 每件物品可以随机生成属性和效果值。根据备注栏定义的范围,自动生成攻击、防御、生命恢复等随机数值。
- 引入 品级 (Grade) 与 偏差 (Deviation) 双轴控制属性分布。
- 自动为物品生成名称前缀及售价调整。
- 保存和读取时保持独立实例数据。
独立物品实例
基础原型 :来源于数据库中的物品、武器、护甲($dataItems 等)
每件独立物品由 LIM.Inde.data 管理,每个实例包含:
1 | { |
物品备注
1 | <Independent Item> // 开启独立系统 |
- 可定义任意多的属性。不局限RPGMAKER的基础属性,都可以写到props|effects内。
- 支持最小值~最大值区间。
算法分析
它的核心任务是将总能量(由 P 决定)分配给 N 个属性,同时通过离散度(由 D 决定)控制分配的极端程度。
核心公式
装备品质 (P)
- 生成一个 [-1, 1] 之间的正态分布随机数。
- 取其绝对值得到装备品质 (P)。
确定资源总包
- 每个属性的值范围是 0 到 1(即 0% 到 100%)。
- 目标总值 T = 属性数量 × P。
生成原始权重
- 在利用正态分布为每个属性生成一个基础权重,这一步决定了“随机感”。
- 偏差修正: 使用 D 控制标准差。D 越大,随机生成的权重差异就越大。
- 指数处理: 对生成的随机数取 e 的次幂(Math.exp)。这样做是为了确保所有权重均为正数,且在大偏差时能产生极少数的“极品高数值”,模拟自然波动。
初始等比缩放
- 将生成的原始权重映射到资源总包中。
- 计算权重总和 $SumW$。
- 每个属性的初始潜力值 $x_i = (\frac{Weight_i}{SumW}) \times T$。
边界修正迭代
- 最关键的“多退少补”环节,通过最多 20 次循环解决溢出问题
- 检查溢出: 如果某个属性 $x_i > 1$,将其强制设为 $1$,并将超出的部分($x_i - 1$)存入“溢出池”。
- 检查过低: 如果某个属性 $x_i < 0$,将其强制设为 $0$,并将缺失的部分存入“补偿池”。
- 重分配: 如果总包多出了资源(溢出 > 补偿),就将多余资源平均分配给那些还没达到 1 的属性;如果总包缺少资源(补偿 > 溢出),就从那些还没降到 0 的属性中平均扣除。
- 重复: 直到所有属性都在 $[0, 1]$ 范围内,且总和等于 $T$。
实际数值映射
最后一步是将计算出的 $[0, 1]$ 之间的潜力值 $potential$ 转换为策划配置的具体数值:
$\text{最终值} = \text{配置最小值} + (\text{配置最大值} - \text{配置最小值}) \times potential$
最后进行四舍五入取整。
“先根据 $P$ 算出总能量,再根据 $D$ 用正态分布生成一组随机权重。
通过比例缩放把能量分给各属性,如果分多了(超过100%)或分负了。
就通过迭代循环把这部分差值摊派给其他合法的属性,直到总能量守恒且所有属性不越界。”