扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 111|回复: 0

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

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    2025-2-4 02:05
  • 签到天数: 110 天

    连续签到: 2 天

    [LV.6]常住居民II

    2327

    主题

    395

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10465
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13215

    灌水之王

    发表于 2024-11-22 13:40:00 | 显示全部楼层 |阅读模式
    代码里有一点小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. *
    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. (function($){
    65.     'use strick';
    66.     $.Paramaters = PluginManager.parameters('SuTao_EquipToLearn');
    67.     $.Param = $.Param || {};
    68.     $.Param.gainSolidExp = eval(String($.Paramaters['汲取固定经验'] || 'true'));
    69.     $.Param.solidExp = Number($.Paramaters['固定经验值']) || 10;
    70.     $.Param.expPercent = String($.Paramaters['经验值比例']);
    71.     $.Param.circleCountId = Number($.Paramaters['完成周目数变量ID']) || 0;
    72.     $.Param.maxCountPerCircle = Number($.Paramaters['每周目增加可研习武功数量']) || 0;
    73.     //=============================================================================
    74.     // DataManager
    75.     //=============================================================================
    76.     $.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
    77.     DataManager.isDatabaseLoaded = function(){
    78.         if(!$.DataManager_isDatabaseLoaded.call(this))returnfalse;
    79.         if(!SuTao._loaded_EquipToLearn){
    80.             this.processEquipToLearnNotetags($dataWeapons);
    81.             this.processEquipToLearnNotetags($dataArmors);
    82.             SuTao._loaded_EquipToLearn = true;
    83.         }
    84.         returntrue;
    85.     };
    86.     DataManager.processEquipToLearnNotetags = function(group){
    87.         var regexp1 = /[]*[]*/i;
    88.         for(var n = 1; n < group.length; n++){
    89.             var obj = group[n];
    90.             var notedata = obj.note.split(/[\r\n]+/);
    91.             // 初始化修炼信息
    92.             obj.EquipToLearn = {
    93.                 'max_exp': 0,
    94.                 'skill_id': 0,
    95.                 'force_learn': false
    96.             };
    97.             for(var i = 0; i < notedata.length; i++){
    98.                 var line = notedata[i];
    99.                 if(line.match(regexp1)){
    100.                     obj.EquipToLearn.max_exp = parseInt(RegExp.$1);
    101.                     obj.EquipToLearn.skill_id = parseInt(RegExp.$2);
    102.                     obj.EquipToLearn.force_learn = parseInt(RegExp.$3) > 0;
    103.                     // 一件装备只能修炼一个技能
    104.                     break;
    105.                 }
    106.             }
    107.         }
    108.     };
    109.     //=============================================================================
    110.     // Game_Actor
    111.     //=============================================================================
    112.     $.Game_Actor_gainExp = Game_Actor.prototype.gainExp;
    113.     Game_Actor.prototype.gainExp = function(exp){
    114.         // 先调用原始方法
    115.         $.Game_Actor_gainExp.call(this, exp);
    116.         var equip = {};
    117.         this._expPercent = eval($.Param.expPercent) || 0.1;
    118.         var _exp = $.Param.gainSolidExp ? $.Param.solidExp : exp * this._expPercent;
    119.         var _ret = {};
    120.         for(var i = 0; i < this._equips.length; i++){
    121.             // 如果装备栏是空的则下一个
    122.             if(!this._equips[i].object())continue;
    123.             equip = this._equips[i].object();
    124.             // 如果不是可修炼型装备则下一个
    125.             if(equip.EquipToLearn.max_exp  0){
    126.                         var _circle = $gameVariables.value($.Param.circleCountId);
    127.                         var _maxCount = 10 + $.Param.maxCountPerCircle * _circle;
    128.                         if(this._learnedCount < _maxCount){
    129.                             this.learnSkill(equip.EquipToLearn.skill_id);
    130.                             this._learnedCount++;
    131.                         }
    132.                     }elseif(this._learnedCount < 10){
    133.                         this.learnSkill(equip.EquipToLearn.skill_id);
    134.                         this._learnedCount++;
    135.                     }
    136.                 }
    137.                 this._equipToLearns[_ret.id].learned = true;
    138.             }
    139.         }
    140.     };
    141.     // 参数item是具体类型的物品,如道具、武器、防具等,而非抽象的Game_Item
    142.     // 参数exp是要更新(增长)的经验值
    143.     Game_Actor.prototype.updateEquipToLearns = function(item, exp){
    144.         // 如果数组未声明则初始化之
    145.         this._equipToLearns = this._equipToLearns || [];
    146.         if(!!Imported.YEP_ItemCore){
    147.             // 兼容YEP_ItemCore引入的独立物品
    148.             // 统统转换为基础物品
    149.             item = DataManager.getBaseItem(item);
    150.         }
    151.         var _matchId = -1;
    152.         var _canLearn = false;
    153.         // 如果数组不空则会遍历之
    154.         this._equipToLearns.every(function(obj, id){
    155.             // 如果已有相关记录
    156.             if(obj.item.etypeId === item.etypeId && obj.item.id === item.id){
    157.                 // 保存对应的序号
    158.                 _matchId = id;
    159.                 // 处理经验值
    160.                 obj.exp += exp;
    161.                 // 如果经验值已经积满
    162.                 if(obj.exp >= item.EquipToLearn.max_exp){
    163.                     // 可以学习新技能了
    164.                     _canLearn = true;
    165.                     // 避免经验值溢出
    166.                     obj.exp = obj.item.EquipToLearn.max_exp;
    167.                 }
    168.                 // 中断遍历
    169.                 returnfalse;
    170.             }
    171.             // 没有相关记录则继续遍历直至完成
    172.             returntrue;
    173.         }, this);
    174.         // 序号没有变化,表示没找到相关记录
    175.         if(_matchId < 0){
    176.             // 生成记录数据对象
    177.             var obj = {};
    178.             obj.item = item;
    179.             obj.exp = Math.min(exp, item.EquipToLearn.max_exp);
    180.             _canLearn = obj.exp >= item.EquipToLearn.max_exp;
    181.             obj.learned = false;
    182.             // 添加对象到数组
    183.             _matchId = this._equipToLearns.push(obj) - 1;
    184.         }
    185.         // 返回装备相关记录在数组中的id,以及是否可学新技能
    186.         return{
    187.             'id': _matchId,
    188.             'canLearn': _canLearn
    189.         };
    190.     };
    191.     //=============================================================================
    192.     // Window_EquipSlot
    193.     //=============================================================================
    194.     $.Window_EquipSlot_drawItem = Window_EquipSlot.prototype.drawItem;
    195.     Window_EquipSlot.prototype.drawItem = function(index){
    196.         $.Window_EquipSlot_drawItem.call(this, index);
    197.         if(this._actor){
    198.             var rect = this.itemRectForText(index);
    199.             var _exp = 0;
    200.             var _maxExp = 0;
    201.             var _newText1 = '    %1\%';
    202.             var _newText2 = '  %1\%';
    203.             var _nameText = '';
    204.             var _percent = 0;
    205.             if(!!this._actor._equipToLearns){
    206.                 var obj = {};
    207.                 var _itemEquip = {};
    208.                 for(var i = 0, len = this._actor._equipToLearns.length; i < len; i++){
    209.                     if(!this._actor._equipToLearns[i])continue;
    210.                     obj = this._actor._equipToLearns[i];
    211.                     _itemEquip = this._actor.equips()[index];
    212.                     if(!!Imported.YEP_ItemCore){
    213.                         // 兼容YEP_ItemCore引入的独立物品
    214.                         // 统统转换为基础物品
    215.                         _itemEquip = DataManager.getBaseItem(_itemEquip);
    216.                     }
    217.                     if(_itemEquip && obj.item.etypeId === _itemEquip.etypeId && obj.item.id === _itemEquip.id){
    218.                         _exp = obj.exp;
    219.                         _maxExp = obj.item.EquipToLearn.max_exp;
    220.                         _percent = _exp * 100 / _maxExp;
    221.                         if(_percent < 10){
    222.                             _nameText = _newText1.format(_percent.toFixed(2));
    223.                         }elseif(_percent < 100){
    224.                             _nameText = _newText2.format(_percent.toFixed(2));
    225.                         }else{
    226.                             _nameText = '研习完毕';
    227.                         }
    228.                         break;
    229.                     }
    230.                 }
    231.             }
    232.             this.changePaintOpacity(this.isEnabled(index));
    233.             if(_percent >= 100){
    234.                 this.changeTextColor(this.textColor(13));
    235.             }else{
    236.                 this.changeTextColor(this.textColor(24));
    237.             }
    238.             if(!!Imported.YEP_ItemCore){
    239.                 // 启用了YEP_ItemCore.js,使用插件附带的装备显示界面
    240.                 // 此处第二个参数的修正量适用于1024x640大小的游戏窗口
    241.                 this.drawText(_nameText, rect.x + 372, rect.y, 96, this.lineHeight(), 'right');
    242.             }else{
    243.                 // 没有启用YEP_ItemCore.js,使用默认的装备显示界面
    244.                 // 此处第二个参数的修正量适用于默认的816x624大小的游戏窗口
    245.                 this.drawText(_nameText, rect.x + 360, rect.y, 96, this.lineHeight(), 'right');
    246.             }
    247.             this.changePaintOpacity(true);
    248.             this.changeTextColor(this.systemColor());
    249.         }
    250.     };
    251. })(SuTao.ETL);
    复制代码






                本帖来自P1论坛作者梦想家大魔王,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=403267  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-10 11:33 , Processed in 0.135139 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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