你好,我正在使用 yep_equip 核心插件,并试图将武器槽组锁定在如图所示的红色圆圈位置。
我本可以在编辑器中添加更多的装备槽位,但游戏中的一些角色拥有不同的槽位配置,例如武器和副手、没有武器,或者通过备注标签(notetags)额外增加两个火焰或精华槽位。
我在想是否有某种插件可以实现这一功能。
数据库中的“锁定装备”特性会锁定整个装备类型,因此它会锁定全部四个武器槽位,包括那个放有摇滚可乐的槽位。我没能找到仅锁定单个槽位的MV插件,但编写一个小插件即可实现此功能。将此代码保存为 LockedEquipSlots.js,放入你的 js/plugins 文件夹中,并在插件管理器中将其置于 YEP_EquipCore 下方:
/*:
* @plugindesc 锁定特定的装备槽位。请置于 YEP_EquipCore 下方。
* @help
* 角色注释标签:
* <Locked Slots: 2, 3, 4>
* 槽位编号从装备列表顶部开始计数,起始值为 1。
*
* 脚本调用:
* $gameActors.actor(1).unlockSlot(2);
* $gameActors.actor(1).lockSlot(2);
*/
(function() {
Game_Actor.prototype.lockedSlots = function() {
if (!this._lockedSlots) {
var match = this.actor().note.match(/<Locked Slots:\s*([\d,\s]+)>/i);
this._lockedSlots = match ? match[1].split(',').map(Number) : [];
}
return this._lockedSlots;
};
Game_Actor.prototype.lockSlot = function(slot) {
if (!this.lockedSlots().contains(slot)) this._lockedSlots.push(slot);
};
Game_Actor.prototype.unlockSlot = function(slot) {
this._lockedSlots = this.lockedSlots().filter(function(s) {
return s !== slot;
});
};
// YEP_EquipCore 的槽位窗口直接调用了这个保存的函数,
// 因此在此处进行钩子处理可以覆盖菜单、优化和清除功能
var _isEquipChangeOk = Yanfly.Equip.Game_Actor_isEquipChangeOk;
Yanfly.Equip.Game_Actor_isEquipChangeOk = function(slotId) {
if (this.lockedSlots().contains(slotId + 1)) return false;
return _isEquipChangeOk.call(this, slotId);
};
})();
然后,在角色的注释框中添加 <Locked Slots: 2, 3, 4>。这些数字从装备列表顶部开始计数,所以在你的截图中对应的是那三个空的武器槽位。它们将显示为灰色,玩家无法选择它们,且“优化”和“清除”功能也会跳过它们。
如果你希望在游戏中后期解锁某个槽位,请使用带有 $gameActors.actor(1).unlockSlot(2) 的脚本事件命令。这将为角色 1 解锁槽位 2,而使用 lockSlot 则可以再次将其锁定。
那么你是怎么做到的?
锁定单个插槽比锁定整个武器类型更适合这种情况,尤其是对于那些拥有不同插槽布局的角色。延迟解锁选项也让进度保持灵活。
我不知道那是什么意思,但我更喜欢使用 Note One,否则装甲数据库会变得一团糟。