查看: 3753|回复: 10

[有事请教] 想做个被动技能,需要装备某类型的武器才能有效果

[复制链接]
梦石
0
星屑
3081
在线时间
236 小时
注册时间
2021-4-22
回帖
203
发表于 2021-7-29 20:39:14 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
想做个被动技能,需要装备某类型的武器或装备才能有效果。
有个这个技能并装备了该类武器才有加成效果
有没有这样插件可以用的?
梦石
0
星屑
768
在线时间
171 小时
注册时间
2021-2-3
回帖
25
发表于 2021-7-30 00:17:48 | 显示全部楼层
飞猫云有这个插件
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2021-7-31 10:25:46 | 显示全部楼层
本帖最后由 tseyik 于 2021-7-31 10:34 编辑

NUUN_PassiveSkill.js[pre lang="ruby"]/*:-----------------------------------------------------------------------------------
* NUUN_PassiveSkill.js
*
* Copyright (C) 2021 NUUN
* This software is released under the MIT License.
* http://opensource.org/licenses/mit-license.php
* -------------------------------------------------------------------------------------
*/
/*:
* @target MZ
* @plugindesc パッシブスキル
* @author NUUN
* @version 1.1.1
* @base NUUN_Base
*
* @help
* パッシブスキルを実装します。
* スキルを習得していれば指定した武器のステータスが反映されます。
* 発動条件は指定することで特定の条件でのみ発動するパッシブスキルを作ることが出来ます。条件はプラグインパラメータで
* 設定し、そのリストIDを指定することで判定します。条件は複数指定可能です。すべての条件が一致した時にパッシブスキルが反映されます。
*
* スキルのメモ欄
* <PassiveSkill:[id]> [id]:適用する武器ID
* <PassiveSkill:10> 武器ID10番の武器のステータスが反映されます。
*
* <PassiveConditions:[id],[id],....> [id]:発動条件で設定したリスト番号
* <PassiveConditions:1> 発動条件リストID1番の条件が一致したときに発動します。
* <PassiveConditions:1,2,3> 発動条件リストID1,2,3番の条件が全て一致したときに発動します。
*
* 発動条件
* 上限値 指定した数値以下の値なら反映されます。
* 下限値 指定した数値以上の値なら反映されます。
* 例
* 対象:HP 上限値:30 下限値:0 HPが30%以下の時に反映します。
* 対象:HP 上限値:80 下限値:30 HPが30%~80%の時に反映します。
* 対象:MP 上限値:0 下限値:80 MPが80%以上の時に反映します。
* 対象:TP 上限値:0 下限値:100 TPが100%の時に反映します。
* 対象:State ステートID:6 ステート6番のステートに掛かっている時に反映します。
* 対象:StateR ステートID:5 ステート5番のステートに掛かっていない時に反映します。
* 対象:Turn 上限値:0 下限値:10 10ターン目以降に反映します。
* 対象:Turn 上限値:3 下限値:0 3ターン目まで反映します。
* 対象:GVal ゲーム変数:5 上限値:30 下限値:10 ゲーム変数5番が10以上30以下の時に反映します。
* 対象:GSwc ゲーム変数スイッチ:5 ゲームスイッチがtrueの時に反映します。
* 対象:Equip 武器タイプ:10 武器タイプ10番の武器を装備しているに反映します。武器タイプを設定している場合は防具タイプの設定は無視されます。
* 対象:Equip 防具タイプ:8 防具タイプ8番の武器を装備しているに反映します。
*
* このプラグインはNUUN_Baseが必要です。
*
*
* 利用規約
* このプラグインはMITライセンスで配布しています。
*
* 更新履歴
* 2021/7/29 Ver.1.1.1
* 処理の修正。
* 2021/7/28 Ver.1.1.0
* ステートに掛かっていない時に反映させる機能を追加。
* 特定の武器、防具タイプを装備している時のみ反映させる機能を追加。
* 特定の状況でステータスの表示がされていなかった問題を修正。
* 2021/7/27 Ver.1.0.0
* 初版
*
* @param PassiveSkillConditions
* @text 発動条件
* @desc パッシブスキルを発動する条件を設定します。
* @type struct<Conditions>[]
*
* @param PassiveSkillType
* @text パッシブスキルタイプID
* @desc パッシブスキルのスキルタイプID。
* @type number
* @default 0
*
*
*/
/*~struct~Conditions:
*
* @param ParamConditions
* @text 対象
* @desc パラメータの対象を指定します。[上限値][下限値] 下限値0で[上限値]以上
* @type select
* @option HP
* @value 'HP'
* @option MP
* @value 'MP'
* @option TP
* @value 'TP'
* @option ステート適用
* @value 'State'
* @option ステート除外
* @value 'StateR'
* @option 装備タイプ
* @value 'Equip'
* @option ターン
* @value 'Turn'
* @option ゲーム変数
* @value 'GVal'
* @option スイッチ
* @value 'GSwc'
* @default 'HP'
*
* @param UpLimit
* @text 上限値
* @desc 上限値
* @type number
* @default 100
*
* @param DwLimit
* @text 下限値
* @desc 下限値
* @type number
* @default 0
*
* @param EquipWeapon
* @text 武器タイプ
* @desc 武器タイプを指定します。指定した武器タイプを装備している時に反映します。(武器)
* @type number
* @default 0
*
* @param EquipArmor
* @text 防具タイプ
* @desc 防具タイプを指定します。指定した防具タイプを装備している時に反映します。(武器)
* @type number
* @default 0
*
* @param StateId
* @text ステートID
* @desc ステートIDを指定します。指定した状態に掛かっている時に反映します。
* @type state
* @default 0
*
* @param VariableId
* @text ゲーム変数
* @desc ゲーム変数を指定します。[上限値][下限値] 下限値0で[上限値]以上(ゲーム変数)
* @type variable
* @default 0
*
* @param SwitchId
* @text ゲームスイッチ
* @desc ゲームスイッチを指定します。trueの時に反映します。(スイッチ)
* @type switch
* @default 0
*
*/
var Imported = Imported || {};
Imported.NUUN_PassiveSkill = true;

(() => {
  const parameters = PluginManager.parameters('NUUN_PassiveSkill');
  const PassiveSkillConditions = (NUUN_Base_Ver >= 113 ? (DataManager.nuun_structureData(parameters['PassiveSkillConditions'])) : null) || [];
  const PassiveSkillType = Number(parameters['PassiveSkillType'] || 0);

  Game_Actor.prototype.getPassiveSkill = function(item) {
    return item.meta.PassiveSkill ? Number(item.meta.PassiveSkill) : 0;
  };

  Game_Actor.prototype.getPassiveConditions = function(item) {
    return item.meta.PassiveConditions ? item.meta.PassiveConditions.split(',') : [];
  };

  Game_Actor.prototype.isPassiveSkill = function(item) {
    const passive = this.getPassiveSkill(item);
    if (passive > 0) {
      const conditions = this.getPassiveConditions(item);
      const list = PassiveSkillConditions;
      this.setPassive = true;
      const every = conditions.every(id => this.skillConditions(list[Number(id.trim()) - 1]));
      this.setPassive = false;
      if (every) {
        return passive;
      }
      return 0;
    }
    return passive;
  };

  Game_Actor.prototype.skillConditions = function(list) {
    switch (list.ParamConditions) {
      case 'HP':
        return this.hp >= this.mhp * list.DwLimit / 100 && (list.UpLimit > 0 ? (this.hp <= this.mhp * list.UpLimit / 100) : true);
      case 'MP':
        return this.mp >= this.mmp * list.DwLimit / 100 && (list.UpLimit > 0 ? (this.mp <= this.mmp * list.UpLimit / 100) : true);
      case 'TP':
        return this.tp >= this.maxTp() * list.DwLimit / 100 && (list.UpLimit > 0 ? this.tp <= this.maxTp() * list.UpLimit / 100 : true);
      case 'State':
        return this._states.find(id => id === list.StateId);
      case 'StateR':
        return !(this._states.some(id => id === list.StateId));
      case 'Equip':
        return list.EquipWeapon > 0 ? this.isEquippedWeaponType(list.EquipWeapon) : this.isEquippedArmorType(list.EquipWeapon);
      case 'Turn':
        return this.turnCount() >= list.DwLimit && (list.UpLimit > 0 ? this.turnCount() <= list.UpLimit : true);
      case 'GVal':
        return $gameVariables.value(list.VariableId) >= list.DwLimit &&
         (list.UpLimit > 0 ? $gameVariables.value(list.VariableId) <= list.UpLimit : true);
      case 'GSwc':
        return $gameSwitches.value(list.SwitchId);
    }
    return false;
  };

  Game_Actor.prototype.isEquippedWeaponType = function(type) {
    return this.equips().some(equip => equip && equip.wtypeId === type);
  };

  Game_Actor.prototype.isEquippedArmorType = function(type) {
    return this.equips().some(equip => equip && equip.atypeId === type);
  };

  Game_Actor.prototype.setPassiveSkill = function() {
    const passiveSkills = [];
    const passiveSkillList = this._skills.filter(item => this.getPassiveSkill($dataSkills[item]));
    passiveSkillList.forEach(itemId => {
      const item = $dataSkills[itemId];
      const weapon = this.isPassiveSkill(item);
      if (weapon > 0) {
        passiveSkills.push($dataWeapons[weapon]);
      }
    });
    return passiveSkills;
  };

  const _Game_Actor_paramPlus = Game_Actor.prototype.paramPlus;
  Game_Actor.prototype.paramPlus = function(paramId) {
    let value = _Game_Actor_paramPlus.call(this, paramId);
    if (this._passiveCalc) {
      return value;
    }
    this._passiveCalc = true;
    value += this.paramPassive(paramId);
    this._passiveCalc = false;
    return value;
  };

  Game_Actor.prototype.paramPassive = function(paramId) {
    let value = 0;
    for (const item of this.setPassiveSkill()) {
      if (item) {
        value += item.params[paramId];
      }
    }
    return value;
  };

  const _Game_Actor_traitObjects = Game_Actor.prototype.traitObjects;
  Game_Actor.prototype.traitObjects = function() {
    const objects = _Game_Actor_traitObjects.call(this);
    if (this._passiveCalc) {
      return objects;
    }
    this._passiveCalc = true;
    const passiveObjects = this.setPassiveSkill();
    this._passiveCalc = false;
    return objects.concat(passiveObjects);
  };

  const _Game_Actor_addedSkillTypes = Game_Actor.prototype.addedSkillTypes;
  Game_Actor.prototype.addedSkillTypes = function() {
    const traits = _Game_Actor_addedSkillTypes.call(this);
    if ($gameParty.inBattle()) {
      return traits.filter(id => id !== PassiveSkillType);
    }
    return traits;
  };

})();[/pre]

* @help
* パッシブスキルを実装します。
* スキルを習得していれば指定した武器のステータスが反映されます。
* 発動条件は指定することで特定の条件でのみ発動するパッシブスキルを作ることが出来ます。条件はプラグインパラメータで
* 設定し、そのリストIDを指定することで判定します。条件は複数指定可能です。すべての条件が一致した時にパッシブスキルが反映されます。
*
* スキルのメモ欄
* <PassiveSkill:[id]> [id]:適用する武器ID
* <PassiveSkill:10> 武器ID10番の武器のステータスが反映されます。
*
* <PassiveConditions:[id],[id],....> [id]:発動条件で設定したリスト番号
* <PassiveConditions:1> 発動条件リストID1番の条件が一致したときに発動します。
* <PassiveConditions:1,2,3> 発動条件リストID1,2,3番の条件が全て一致したときに発動します。
*
* 発動条件
* 上限値 指定した数値以下の値なら反映されます。
* 下限値 指定した数値以上の値なら反映されます。
* 例
* 対象:HP 上限値:30 下限値:0 HPが30%以下の時に反映します。
* 対象:HP 上限値:80 下限値:30 HPが30%~80%の時に反映します。
* 対象:MP 上限値:0 下限値:80 MPが80%以上の時に反映します。
* 対象:TP 上限値:0 下限値:100 TPが100%の時に反映します。
* 対象:State ステートID:6 ステート6番のステートに掛かっている時に反映します。
* 対象:StateR ステートID:5 ステート5番のステートに掛かっていない時に反映します。
* 対象:Turn 上限値:0 下限値:10 10ターン目以降に反映します。
* 対象:Turn 上限値:3 下限値:0 3ターン目まで反映します。
* 対象:GVal ゲーム変数:5 上限値:30 下限値:10 ゲーム変数5番が10以上30以下の時に反映します。
* 対象:GSwc ゲーム変数スイッチ:5 ゲームスイッチがtrueの時に反映します。
* 対象:Equip 武器タイプ:10 武器タイプ10番の武器を装備しているに反映します。武器タイプを設定している場合は防具タイプの設定は無視されます。
* 対象:Equip 防具タイプ:8 防具タイプ8番の武器を装備しているに反映します。
*
* このプラグインはNUUN_Baseが必要です。
*
*
* 利用規約
* このプラグインはMITライセンスで配布しています。
*
* 更新履歴
* 2021/7/29 Ver.1.1.1
* 処理の修正。
* 2021/7/28 Ver.1.1.0
* ステートに掛かっていない時に反映させる機能を追加。
* 特定の武器、防具タイプを装備している時のみ反映させる機能を追加。
* 特定の状況でステータスの表示がされていなかった問題を修正。
* 2021/7/27 Ver.1.0.0
* 初版
*
回复 1 0

使用道具 举报

梦石
0
星屑
124
在线时间
16 小时
注册时间
2021-7-8
回帖
7
发表于 2021-8-16 23:49:53 | 显示全部楼层
tseyik 发表于 2021-7-31 10:25
[fold=NUUN_PassiveSkill.js]/*:---------------------------------------------------------------------- ...

大佬,这个插件要用的BASE插件在哪下啊

点评

https://github.com/nuun888/MZ https://raw.githubusercontent.com/nuun888/MZ/master/NUUN_Base.js  发表于 2021-8-17 08:53
回复

使用道具 举报

梦石
0
星屑
124
在线时间
16 小时
注册时间
2021-7-8
回帖
7
发表于 2021-8-17 23:39:40 | 显示全部楼层
chinou 发表于 2021-8-16 23:49
大佬,这个插件要用的BASE插件在哪下啊

谢谢大佬
回复

使用道具 举报

梦石
0
星屑
210
在线时间
8 小时
注册时间
2012-4-11
回帖
6
发表于 2022-2-8 22:06:41 | 显示全部楼层
66666666666
回复

使用道具 举报

梦石
0
星屑
83
在线时间
14 小时
注册时间
2023-2-27
回帖
11
发表于 2023-3-9 09:53:20 | 显示全部楼层
大佬,不需要绑定武器或装备的被动技能的话,要怎么做呀?
回复

使用道具 举报

梦石
0
星屑
3081
在线时间
236 小时
注册时间
2021-4-22
回帖
203
 楼主| 发表于 2023-3-9 21:06:27 | 显示全部楼层
Tdow 发表于 2023-3-9 09:53
大佬,不需要绑定武器或装备的被动技能的话,要怎么做呀?

https://rpg.blue/thread-483487-1-1.html
回复

使用道具 举报

梦石
0
星屑
196
在线时间
23 小时
注册时间
2023-3-9
回帖
11
发表于 2023-3-10 07:46:00 | 显示全部楼层
xuexi!!!!!!!!!!!!!
回复

使用道具 举报

梦石
0
星屑
83
在线时间
14 小时
注册时间
2023-2-27
回帖
11
发表于 2023-3-10 17:18:47 | 显示全部楼层
本帖最后由 Tdow 于 2023-3-10 17:21 编辑
dabaxhei 发表于 2023-3-9 21:06
https://rpg.blue/thread-483487-1-1.html


他这个我试过,其实更像是个天赋系统,相当于给角色装备一些状态、增加属性等。如果我想做一个被动技能,比如在对战中低于1/2体力时触发,获得50%减伤,持续三回合,他的插件就实现不了了。我现在只能在敌群的战斗事件里写一个低体触发的条件来实现,但是太麻烦了,要给每个敌群都添加这个事件,而且设计别的技能的话又要这样添加事件,就会更加复杂,就想问问有没有插件能够方便实现的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部