设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 9853|回复: 28
打印 上一主题 下一主题

[原创发布] 用于制作武功秘籍的自用的插件共享啦!

[复制链接]

Lv4.逐梦者

梦石
0
星屑
7427
在线时间
948 小时
注册时间
2017-9-27
帖子
583
跳转到指定楼层
1
发表于 2017-10-6 22:42:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 梦想家大魔王 于 2017-10-29 21:36 编辑

代码里有一点小BUG,实测不影响使用,但既然发现了还是改一下好了。
JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // SuTao_EquipToLearn.js
  3. //=============================================================================
  4. /*:
  5.  * @plugindesc 装备特定武器、装备,在战斗中汲取一定经验后学会新技能。
  6.  * @author sutao80216
  7.  *
  8.  * @param 汲取固定经验
  9.  * @type select
  10.  * @option 固定(默认值)
  11.  * @value true
  12.  * @option 不固定
  13.  * @value false
  14.  * @desc 无论战斗规模,每场战斗汲取的经验值固定。
  15.  * true - 固定(默认);false - 不固定。
  16.  * @default true
  17.  *
  18.  * @param 固定经验值
  19.  * @type number
  20.  * @min 0
  21.  * @desc 每场战斗固定汲取的经验值。
  22.  * 默认值:10
  23.  * @default 10
  24.  *
  25.  * @param 经验值比例
  26.  * @desc 汲取固定经验关闭时,汲取经验值与战斗经验的比例。它可
  27.  * 以是浮点数或表达式,如this.level/10或0.1,this为装备者。
  28.  * @default Math.ceil(this.mdf / 15) * 0.2
  29.  *
  30.  * @param 完成周目数变量ID
  31.  * @type number
  32.  * @min 0
  33.  * @desc 保存已完成周目数的变量ID。
  34.  * 默认值:1
  35.  * @default 1
  36.  *
  37.  * @param 每周目增加可研习武功数量
  38.  * @type number
  39.  * @min 0
  40.  * @desc 每完成一个周目,增加的可研习武功数量。
  41.  * 默认值:1
  42.  * @default 1
  43.  *
  44.  * @help
  45.  * Version 1.0
  46.  *
  47.  * 建议配合YEP_ItemCore, YEP_EquipCore以及YEP_X_EquipRequirements来使用本插件。
  48.  * 如果使用了上述插件,请将本插件置于它们之下。
  49.  *
  50.  * ================Notetag================
  51.  * 适用于Weapon, Armor等可以装备到身上的物品。
  52.  * <EquipToLearn: max_exp, skill_id, force_learn>
  53.  *   max_exp:     习得技能所需要之经验值总量,不可省略。
  54.  *   skill_id:    可以习得的技能之ID,不可省略。
  55.  *   force_learn: 是否可以重新学习曾经学会但被遗忘的技能,可省略。
  56.  *                0 - 否(默认);1 - 是。
  57.  * 【注意】如果输入了多条上述指令,仅有最顶部的一条生效。
  58.  */
  59. var Imported = Imported || {};
  60. Imported.SuTao_EquipToLearn = true;
  61. var SuTao = SuTao || {};
  62. SuTao.ETL = SuTao.ETL || {};
  63. SuTao.ETL.version = 1.0;
  64.  
  65. (function ($) {
  66.     'use strick';
  67.     $.Paramaters = PluginManager.parameters('SuTao_EquipToLearn');
  68.     $.Param = $.Param || {};
  69.     $.Param.gainSolidExp = eval(String($.Paramaters['汲取固定经验'] || 'true'));
  70.     $.Param.solidExp = Number($.Paramaters['固定经验值']) || 10;
  71.     $.Param.expPercent = String($.Paramaters['经验值比例']);
  72.     $.Param.circleCountId = Number($.Paramaters['完成周目数变量ID']) || 0;
  73.     $.Param.maxCountPerCircle = Number($.Paramaters['每周目增加可研习武功数量']) || 0;
  74.  
  75.     //=============================================================================
  76.     // DataManager
  77.     //=============================================================================
  78.  
  79.     $.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
  80.     DataManager.isDatabaseLoaded = function () {
  81.         if (!$.DataManager_isDatabaseLoaded.call(this)) return false;
  82.         if (!SuTao._loaded_EquipToLearn) {
  83.             this.processEquipToLearnNotetags($dataWeapons);
  84.             this.processEquipToLearnNotetags($dataArmors);
  85.             SuTao._loaded_EquipToLearn = true;
  86.         }
  87.         return true;
  88.     };
  89.  
  90.     DataManager.processEquipToLearnNotetags = function (group) {
  91.         var regexp1 = /[ ]*<[ ]*EquipToLearn:[ ]*(\d+),[ ]*(\d+)[,]?[ ]*(\d+)?[ ]*>[ ]*/i;
  92.  
  93.         for (var n = 1; n < group.length; n++) {
  94.             var obj = group[n];
  95.             var notedata = obj.note.split(/[\r\n]+/);
  96.             // 初始化修炼信息
  97.             obj.EquipToLearn = {
  98.                 'max_exp': 0,
  99.                 'skill_id': 0,
  100.                 'force_learn': false
  101.             };
  102.  
  103.             for (var i = 0; i < notedata.length; i++) {
  104.                 var line = notedata[i];
  105.                 if (line.match(regexp1)) {
  106.                     obj.EquipToLearn.max_exp = parseInt(RegExp.$1);
  107.                     obj.EquipToLearn.skill_id = parseInt(RegExp.$2);
  108.                     obj.EquipToLearn.force_learn = parseInt(RegExp.$3) > 0;
  109.                     // 一件装备只能修炼一个技能
  110.                     break;
  111.                 }
  112.             }
  113.         }
  114.     };
  115.  
  116.     //=============================================================================
  117.     // Game_Actor
  118.     //=============================================================================
  119.     $.Game_Actor_gainExp = Game_Actor.prototype.gainExp;
  120.     Game_Actor.prototype.gainExp = function (exp) {
  121.         // 先调用原始方法
  122.         $.Game_Actor_gainExp.call(this, exp);
  123.         var equip = {};
  124.         this._expPercent = eval($.Param.expPercent) || 0.1;
  125.         var _exp = $.Param.gainSolidExp ? $.Param.solidExp : exp * this._expPercent;
  126.         var _ret = {};
  127.  
  128.         for (var i = 0; i < this._equips.length; i++) {
  129.             // 如果装备栏是空的则下一个
  130.             if (!this._equips[i].object()) continue;
  131.             equip = this._equips[i].object();
  132.             // 如果不是可修炼型装备则下一个
  133.             if (equip.EquipToLearn.max_exp <= 0 || equip.EquipToLearn.skill_id <= 0) continue;
  134.             // 更新修炼经验,如果经验积满则学习新技能
  135.             _ret = this.updateEquipToLearns(equip, _exp);
  136.             // 如果可以学习新技能,并且相关技能以前没有学习过或者可以重复学习,则可以学会新技能。
  137.             // 有些秘籍被设置成不能重复修炼,是为了兼容
  138.             // MrTS_SimpleSkillLeveling与SRD_SkillExtender这两个插件。
  139.             if (_ret.canLearn && (!this._equipToLearns[_ret.id].learned || equip.EquipToLearn.force_learn)) {
  140.                 if (!this.isLearnedSkill(equip.EquipToLearn.skill_id)) {
  141.                     if (!!this._learnedCount) {
  142.                         // this._learnedCount++;
  143.                     } else {
  144.                         this._learnedCount = 0;
  145.                     }
  146.                     // 检查通过秘籍习得的技能数量是否达到当前周目的上限
  147.                     if ($.Param.circleCountId > 0 && $.Param.maxCountPerCircle > 0) {
  148.                         var _circle = $gameVariables.value($.Param.circleCountId);
  149.                         var _maxCount = 10 + $.Param.maxCountPerCircle * _circle;
  150.                         if (this._learnedCount < _maxCount) {
  151.                             this.learnSkill(equip.EquipToLearn.skill_id);
  152.                             this._learnedCount++;
  153.                         }
  154.                     } else if (this._learnedCount < 10) {
  155.                         this.learnSkill(equip.EquipToLearn.skill_id);
  156.                         this._learnedCount++;
  157.                     }
  158.  
  159.                 }
  160.  
  161.                 this._equipToLearns[_ret.id].learned = true;
  162.             }
  163.         }
  164.     };
  165.  
  166.     // 参数item是具体类型的物品,如道具、武器、防具等,而非抽象的Game_Item
  167.     // 参数exp是要更新(增长)的经验值
  168.     Game_Actor.prototype.updateEquipToLearns = function (item, exp) {
  169.         // 如果数组未声明则初始化之
  170.         this._equipToLearns = this._equipToLearns || [];
  171.         if (!!Imported.YEP_ItemCore) {
  172.             // 兼容YEP_ItemCore引入的独立物品
  173.             // 统统转换为基础物品
  174.             item = DataManager.getBaseItem(item);
  175.         }
  176.  
  177.         var _matchId = -1;
  178.         var _canLearn = false;
  179.  
  180.         // 如果数组不空则会遍历之
  181.         this._equipToLearns.every(function (obj, id) {
  182.             // 如果已有相关记录
  183.             if (obj.item.etypeId === item.etypeId && obj.item.id === item.id) {
  184.                 // 保存对应的序号
  185.                 _matchId = id;
  186.                 // 处理经验值
  187.                 obj.exp += exp;
  188.                 // 如果经验值已经积满
  189.                 if (obj.exp >= item.EquipToLearn.max_exp) {
  190.                     // 可以学习新技能了
  191.                     _canLearn = true;
  192.                     // 避免经验值溢出
  193.                     obj.exp = obj.item.EquipToLearn.max_exp;
  194.                 }
  195.                 // 中断遍历
  196.                 return false;
  197.             }
  198.             // 没有相关记录则继续遍历直至完成
  199.             return true;
  200.         }, this);
  201.  
  202.         // 序号没有变化,表示没找到相关记录
  203.         if (_matchId < 0) {
  204.             // 生成记录数据对象
  205.             var obj = {};
  206.             obj.item = item;
  207.             obj.exp = Math.min(exp, item.EquipToLearn.max_exp);
  208.             _canLearn = obj.exp >= item.EquipToLearn.max_exp;
  209.             obj.learned = false;
  210.             // 添加对象到数组
  211.             _matchId = this._equipToLearns.push(obj) - 1;
  212.         }
  213.         // 返回装备相关记录在数组中的id,以及是否可学新技能
  214.         return {
  215.             'id': _matchId,
  216.             'canLearn': _canLearn
  217.         };
  218.     };
  219.  
  220.     //=============================================================================
  221.     // Window_EquipSlot
  222.     //=============================================================================
  223.     $.Window_EquipSlot_drawItem = Window_EquipSlot.prototype.drawItem;
  224.     Window_EquipSlot.prototype.drawItem = function (index) {
  225.         $.Window_EquipSlot_drawItem.call(this, index);
  226.         if (this._actor) {
  227.             var rect = this.itemRectForText(index);
  228.             var _exp = 0;
  229.             var _maxExp = 0;
  230.             var _newText1 = '    %1\%';
  231.             var _newText2 = '  %1\%';
  232.             var _nameText = '';
  233.             var _percent = 0;
  234.  
  235.             if (!!this._actor._equipToLearns) {
  236.                 var obj = {};
  237.                 var _itemEquip = {};
  238.                 for (var i = 0, len = this._actor._equipToLearns.length; i < len; i++) {
  239.                     if (!this._actor._equipToLearns[i]) continue;
  240.                     obj = this._actor._equipToLearns[i];
  241.                     _itemEquip = this._actor.equips()[index];
  242.                     if (!!Imported.YEP_ItemCore) {
  243.                         // 兼容YEP_ItemCore引入的独立物品
  244.                         // 统统转换为基础物品
  245.                         _itemEquip = DataManager.getBaseItem(_itemEquip);
  246.                     }
  247.                     if (_itemEquip && obj.item.etypeId === _itemEquip.etypeId && obj.item.id === _itemEquip.id) {
  248.                         _exp = obj.exp;
  249.                         _maxExp = obj.item.EquipToLearn.max_exp;
  250.                         _percent = _exp * 100 / _maxExp;
  251.                         if (_percent < 10) {
  252.                             _nameText = _newText1.format(_percent.toFixed(2));
  253.                         } else if (_percent < 100) {
  254.                             _nameText = _newText2.format(_percent.toFixed(2));
  255.                         } else {
  256.                             _nameText = '研习完毕';
  257.                         }
  258.  
  259.                         break;
  260.                     }
  261.                 }
  262.             }
  263.             this.changePaintOpacity(this.isEnabled(index));
  264.             if (_percent >= 100) {
  265.                 this.changeTextColor(this.textColor(13));
  266.             } else {
  267.                 this.changeTextColor(this.textColor(24));
  268.             }
  269.             if (!!Imported.YEP_ItemCore) {
  270.                 // 启用了YEP_ItemCore.js,使用插件附带的装备显示界面
  271.                 // 此处第二个参数的修正量适用于1024x640大小的游戏窗口
  272.                 this.drawText(_nameText, rect.x + 372, rect.y, 96, this.lineHeight(), 'right');
  273.             } else {
  274.                 // 没有启用YEP_ItemCore.js,使用默认的装备显示界面
  275.                 // 此处第二个参数的修正量适用于默认的816x624大小的游戏窗口
  276.                 this.drawText(_nameText, rect.x + 360, rect.y, 96, this.lineHeight(), 'right');
  277.             }
  278.             this.changePaintOpacity(true);
  279.             this.changeTextColor(this.systemColor());
  280.         }
  281.     };
  282. })(SuTao.ETL);



SuTao_EquipToLearn.7z (3.49 KB, 下载次数: 334)

评分

参与人数 6星屑 +120 +6 收起 理由
lebujue + 1 塞糖
q119498229 + 1 精品文章
山有木兮浩 + 1 塞糖
余烬之中 + 120 + 1 原创发布
walf_man + 1 塞糖
白嫩白嫩的 + 1 塞糖

查看全部评分

Lv1.梦旅人

梦石
0
星屑
235
在线时间
37 小时
注册时间
2017-10-2
帖子
2
2
发表于 2017-10-7 12:39:53 | 只看该作者
哇,厉害了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14623
在线时间
718 小时
注册时间
2011-7-16
帖子
1428

开拓者

3
发表于 2017-10-7 20:45:43 | 只看该作者
哇哇,这么厉害啊,拿去研究下了
RMMV网络插件,开源免费,内含服务器端,无需强制登录,云数据,弹幕,云存档,排名,兑换码,版本检测,可自由上架下架删除。q群399090587
免打包运行MV游戏,云游戏,安卓App雷神游戏厅,在线玩游戏,上传下载游戏
开源游戏:重装机兵之重装归来【RMMV制作】全球首款按照美剧分季分集的方式发布的游戏
体素画 -- MV画3D像素图的画板
RMMV显示3D模型和场景的插件
RMMV显示spine骨骼动画的插件
RMMV秘密通道插件
突破敌群数量上限8个的插件
在rmmv中显示gif动态图片的插件
一款可以在mv游戏界面的任意位置显示任意文字的插件
RMMV Toast 插件 带物品得失提示,可以设置开启关闭 兼容yep itemcore
制作一个改名卡道具插件、调整标题页面菜单的插件、在标题页面之前显示大段文字的插件、标题页面显示版本号的插件
物品得失自动提示自动上色自动换行插件
我的Q群 663889472
另外,我的插件、范例、游戏都在这里
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1534
在线时间
387 小时
注册时间
2012-8-28
帖子
59
4
发表于 2017-10-10 21:14:18 | 只看该作者
请问一下放在那里啊?怎么显示不出来?

点评

跟别的插件一个用法。  发表于 2017-10-10 21:22
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1534
在线时间
387 小时
注册时间
2012-8-28
帖子
59
5
发表于 2017-10-10 21:25:05 | 只看该作者
关键是我一个都没用过
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7427
在线时间
948 小时
注册时间
2017-9-27
帖子
583
6
 楼主| 发表于 2017-10-10 21:32:03 | 只看该作者
asftuhtygj 发表于 2017-10-10 21:25
关键是我一个都没用过

好吧!
游戏工程目录里有个js文件夹,它里面还有个plugins文件夹,所有的插件(js文件)都是放这里。插件放进去后,用MV编辑器打开游戏工程,用插件管理器来控制插件。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1534
在线时间
387 小时
注册时间
2012-8-28
帖子
59
7
发表于 2017-10-11 08:18:02 | 只看该作者
太感谢了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1471
在线时间
239 小时
注册时间
2017-10-24
帖子
209
8
发表于 2017-10-29 00:39:52 | 只看该作者
这个无敌了 大神,我正要这个,用事件一顿做。有了这个简直就是大功告成!谢谢
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1471
在线时间
239 小时
注册时间
2017-10-24
帖子
209
9
发表于 2017-10-29 11:54:08 | 只看该作者
<EquipToLearn: max_exp, skill_id, force_learn>
  max_exp:     1000
  skill_id:    8
</EquipToLearn: max_exp, skill_id, force_learn>
你的那个秘笈,你看下我写的哪错了?有个问题大神,就是比如我设置的武功有20层,这个书能在右下角直接体现出现在到了多少层的数字不?比如后面的10层需要的经验更多怎么表示?谢谢大神。

点评

没有写上技能升级的功能,另外修炼进度我是用的百分比显示,没有显示具体数字。  发表于 2017-10-29 18:33
我这个是单行的,像下面这样写: <EquipToLearn: 1000, 8, 0>  发表于 2017-10-29 18:31
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1471
在线时间
239 小时
注册时间
2017-10-24
帖子
209
10
发表于 2017-10-29 20:45:01 | 只看该作者
谢谢大神。有两件事:
1.可以把这个做个升级吗,比如我说的可以练N层的?
2.下面有周目是怎么回事?还有周目所得的技能数量?
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 11:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表