Project1

标题: 【MV·道具栏New提示】新获得道具在物品栏里绘制个New! [打印本页]

作者: VIPArcher    时间: 2018-12-30 08:12
标题: 【MV·道具栏New提示】新获得道具在物品栏里绘制个New!
本帖最后由 VIPArcher 于 2019-1-7 19:10 编辑

2019/1/7 更新了一下
修正了使用图标时没有正确使用坐标偏移量的bug
添加了一个开关设置,设定的开关开启时获得新道具将不会被记录为新道具
帖子里添加了一张效果图展示使用效果

获得新道具的时候在物品栏道具图标下添加一个 NEW! 的小图标
JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // VIPArcher_ShowNewItem.js
  3. //-----------------------------------------------------------------------------
  4. // Project1 论坛:https://rpg.blue/ 使用或转载请保留以上信息。
  5. //=============================================================================
  6. /*:
  7.  * 说明: 用到的素材储存于 img/system 文件夹中
  8.  * @plugindesc 获得新道具时在物品栏列表中添加一个 New 的小图标
  9.  * 图标可以使用自定的单独素材或者 IconSet.png 里的图标
  10.  * @author VIPArcher
  11.  *
  12.  * @param NewIcon
  13.  * @desc 设置为 数字 时使用 IconSet.png 中对应位置的图标
  14.  * 设置为 字符串 时使用 system 目录中对应文件名的素材
  15.  * @default NewIcon
  16.  * @dir img/system/
  17.  * @type file
  18.  *
  19.  * @param Switch
  20.  * @desc 不记录新物品开关,此开启时获得任何物品都不记录为新道具
  21.  * 默认: 0 (不使用开关控制)
  22.  * @default 0
  23.  * @type switch
  24.  *
  25.  * @param OffsetX
  26.  * @desc 图标相对位置的 X 坐标偏移
  27.  * 默认: 0
  28.  * @default 0
  29.  * @type number
  30.  *
  31.  * @param OffsetY
  32.  * @desc 图标相对位置的 Y 坐标偏移
  33.  * 默认: 0
  34.  * @default 0
  35.  * @type number
  36.  *
  37.  * @help 这个插件没有需要操作的指令,不需要帮助。
  38.  */
  39. var VIPArcher = VIPArcher || {};
  40. VIPArcher.ShowNewItem = {};
  41. VIPArcher.ShowNewItem.version = '1.1.0';
  42. VIPArcher.ShowNewItem.Parameters = PluginManager.parameters('VIPArcher_ShowNewItem');
  43. var newIcon = VIPArcher.ShowNewItem.Parameters["NewIcon"] || "NewIcon";
  44. VIPArcher.ShowNewItem.NewIcon = isNaN(newIcon) ? String(newIcon) : Number(newIcon);
  45. VIPArcher.ShowNewItem.Switch  = Number(VIPArcher.ShowNewItem.Parameters["Switch"])  || 0;
  46. VIPArcher.ShowNewItem.OffsetX = Number(VIPArcher.ShowNewItem.Parameters["OffsetX"]) || 0;
  47. VIPArcher.ShowNewItem.OffsetY = Number(VIPArcher.ShowNewItem.Parameters["OffsetY"]) || 0;
  48.  
  49. void function() {
  50.     var ShowNewItem = VIPArcher.ShowNewItem;
  51.     var _Scene_Boot_loadSystemImages = Scene_Boot.loadSystemImages;
  52.     Scene_Boot.loadSystemImages = function() {
  53.         _Scene_Boot_loadSystemImages.call(this);
  54.         if (isNaN(ShowNewItem.NewIcon)) {
  55.             ImageManager.reserveSystem(ShowNewItem.NewIcon);
  56.         }
  57.     };
  58.     var _Game_Party_initAllItems = Game_Party.prototype.initAllItems;
  59.     Game_Party.prototype.initAllItems = function() {
  60.         _Game_Party_initAllItems.call(this);
  61.         this._newIconList = {'I': {}, 'W': {}, 'A': {}};
  62.     };
  63.     Game_Party.prototype._newItemContainer = function(item) {
  64.         if (!item) {
  65.             return null;
  66.         } else if (DataManager.isItem(item)) {
  67.             return this._newIconList['I'];
  68.         } else if (DataManager.isWeapon(item)) {
  69.             return this._newIconList['W'];
  70.         } else if (DataManager.isArmor(item)) {
  71.             return this._newIconList['A'];
  72.         } else {
  73.             return null;
  74.         }
  75.     };
  76.     Game_Party.prototype._setNewIcon = function(item) {
  77.         var container = this._newItemContainer(item);
  78.         if (container && !this.itemIsNew(item)) container[item.id] = true;
  79.     };
  80.     Game_Party.prototype.itemIsNew = function(item) {
  81.         var container = this._newItemContainer(item);
  82.         if (container) {
  83.             return container[item.id];
  84.         } else {
  85.             return null;
  86.         }
  87.     };
  88.     Game_Party.prototype.removeNewIcon = function(item) {
  89.         var container = this._newItemContainer(item);
  90.         if (container) delete container[item.id];
  91.     };
  92.     var _Game_Party_gainItem = Game_Party.prototype.gainItem;
  93.     Game_Party.prototype.gainItem = function(item, amount, includeEquip) {
  94.         _Game_Party_gainItem.call(this, item, amount, includeEquip);
  95.         if (amount > 0 && !$gameSwitches.value(ShowNewItem.Switch)) this._setNewIcon(item);
  96.     };
  97.     var _Window_ItemList_drawItem = Window_ItemList.prototype.drawItem;
  98.     Window_ItemList.prototype.drawItem = function(index) {
  99.         _Window_ItemList_drawItem.call(this, index);
  100.         var item = this._data[index];
  101.         if (item && $gameParty.itemIsNew(item)) {
  102.             var rect = this.itemRect(index);
  103.             rect.width -= this.textPadding();
  104.             this.changePaintOpacity(this.isEnabled(item));
  105.             this.drawNewFlag(item, rect.x, rect.y);
  106.             this.changePaintOpacity(1);
  107.         }
  108.     };
  109.     Window_ItemList.prototype.drawNewFlag = function(item, x, y) {
  110.         var offsetX = ShowNewItem.OffsetX + 2;
  111.         var offsetY = ShowNewItem.OffsetY + 2;
  112.         if (isNaN(ShowNewItem.NewIcon)) {
  113.             var bitmap = ImageManager.loadSystem(ShowNewItem.NewIcon);
  114.             this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, x + offsetX, y + offsetY);
  115.         } else {
  116.             this.drawIcon(ShowNewItem.NewIcon, x + offsetX, y + offsetY);
  117.         }
  118.     };
  119.     var _Window_ItemList_select = Window_ItemList.prototype.select;
  120.     Window_ItemList.prototype.select = function(index) {
  121.         if (this.index() >=0) this.removeNewIcon();
  122.         _Window_ItemList_select.call(this, index);
  123.     };
  124.     Window_ItemList.prototype.removeNewIcon = function() {
  125.         $gameParty.removeNewIcon(this.item());
  126.         this.redrawItem(this.index());
  127.     };
  128.     var _Game_Actor_tradeItemWithParty = Game_Actor.prototype.tradeItemWithParty;
  129.     Game_Actor.prototype.tradeItemWithParty = function(newItem, oldItem) {
  130.         var _result = _Game_Actor_tradeItemWithParty.call(this, newItem, oldItem);
  131.         $gameParty.removeNewIcon(oldItem);
  132.         return _result;
  133.     };
  134. }();

使用到的素材(放到目录  img/system 中):

作者: 微笑的迪妮莎    时间: 2019-1-7 11:35
本帖最后由 微笑的迪妮莎 于 2019-1-7 11:36 编辑

会出错呢大佬
可能跟我用的其他插件冲突吧
作者: Fan723    时间: 2019-1-7 13:39
用自定义图标会报错,用系统图标可以显示,但会覆盖物品原有图标,插件参数无法调整坐标。
作者: 微笑的迪妮莎    时间: 2019-1-7 19:00
我游戏都进不去大佬
从新下载的

作者: 微笑的迪妮莎    时间: 2019-1-7 19:23
本帖最后由 微笑的迪妮莎 于 2019-1-7 19:25 编辑

大佬可以用了,不出错了,但是貌似不适用于我~~~



作者: 微笑的迪妮莎    时间: 2019-1-7 19:38
原来如此  会用了  谢谢大佬的辛劳创作

我已转发了 保留了版权
作者: 木雨乔    时间: 2019-4-14 00:42
微笑的迪妮莎 发表于 2019-1-7 19:38
原来如此  会用了  谢谢大佬的辛劳创作

我已转发了 保留了版权

哥们,你的物品简介怎么弄的
作者: wesleylsw    时间: 2019-4-14 22:24
大佬,我在物品栏里面没有出现这个显示,但是在装备里面选装备就会显示,这是怎么回事呀

1555251706(1).png (20.97 KB, 下载次数: 82)

1

1

作者: wesleylsw    时间: 2019-4-15 23:14
wesleylsw 发表于 2019-4-14 22:24
大佬,我在物品栏里面没有出现这个显示,但是在装备里面选装备就会显示,这是怎么回事呀 ...

装备里面是能看到这个标识,物品里面就不显示,我尝试把插件直接放在最后物品也不显示,不怎么会弄,能价个Q解决一下么,弄好有酬谢
作者: wtdming    时间: 2020-1-29 15:11
感谢分享!
作者: wtdming    时间: 2021-8-8 13:03
本帖最后由 wtdming 于 2021-8-8 13:06 编辑
wtdming 发表于 2020-1-29 15:11
感谢分享!


是啊,灌水了十分抱歉,都不知道用点评.......今天才看到。
额,抱歉抱歉又回复了一楼......
作者: wx7614140    时间: 2021-8-9 14:09
好东西收藏了蟹蟹!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1