烁灵 发表于 2024-8-16 09:34:41

简易物品指定职业不可使用

本帖最后由 烁灵 于 2024-8-16 10:53 编辑

在物品备注中设置,指定的职业不可使用该物品或只有指定职业可以使用该物品





脚本:保存为 ClassCannotUseItem.js
//=============================================================================
/*:
* ClassCannotUseItem.js
* @plugindesc v1.00 物品不能被指定职业使用
* @author 烁灵 更多脚本请访问 www.hknmtt.com
*
* @help
* 在物品备注中填写:
* <职业N不可用>
* 则 N 号职业不可使用该物品
* <职业N可用>
* 则只有 N 号职业可以使用该物品(不能重复使用本项备注)
* N为职业编号,从1开始
*/
//=============================================================================
(()=>{
    let reg = /<职业(\s*+\s*)不可用>/
    let reg2 = /<职业(\s*+\s*)可用>/
    var sl_Scene_Battle_onActorOk = Scene_Battle.prototype.onActorOk;
    Scene_Battle.prototype.onActorOk = function() {
      let action = BattleManager.inputtingAction();
      let actor = this._actorWindow.actor()
      if (this._actorCommandWindow.currentSymbol() == 'item') {
            if (!action.testApply(actor)) {
                SoundManager.playBuzzer();
                this._actorWindow.activate();
                return
            }
      }
      return sl_Scene_Battle_onActorOk.call(this)
    };
   
    Game_Action.prototype.meetsClassCannotUseItem = function(target) {
      let checkClass = false;
      if (this.isItem() && target.isActor()) {
            let item = this.item();
            checkClass = item.note.split("\n").some(line => {
                line = line.trim();
                if (line.match(reg)) {
                  if (target._classId == parseInt(RegExp.$1.trim())) {
                        return true;
                  }
                }
                return false;
            });
      }
      return checkClass;
    }
    Game_Action.prototype.meetsClassCanUseItem = function(target) {
      let checkClass = true;
      if (this.isItem() && target.isActor()) {
            let item = this.item();
            checkClass = item.note.split("\n").every(line => {
                line = line.trim();
                if (line.match(reg2)) {
                  if (target._classId != parseInt(RegExp.$1.trim())) {
                        return false;
                  }
                }
                return true;
            });
      }
      return checkClass;
    }
    var sl_Game_Action_testApply = Game_Action.prototype.testApply;
    Game_Action.prototype.testApply= function(target) {
      let result = sl_Game_Action_testApply.call(this, target)
      return result && !this.meetsClassCannotUseItem(target) && this.meetsClassCanUseItem(target);
    };
})()

页: [1]
查看完整版本: 简易物品指定职业不可使用