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

Project1

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

[有事请教] 求不改数据库物品序号,能更改物品顺序的东西

[复制链接]

Lv2.观梦者

梦石
0
星屑
338
在线时间
169 小时
注册时间
2022-7-14
帖子
108
跳转到指定楼层
1
发表于 2023-1-10 22:36:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
33星屑
本帖最后由 蜜橘团子 于 2023-1-10 22:54 编辑

物品顺序有问题,我不能改物品序号,因为有太多关联的事件数据了,改了很可能有问题

很多人也不可能刚开始做一个游戏,就已经完美设定好了游戏过程中出现的全部的物品的顺序,这是不能确定的事情,
作者一开始也不知道有什么物品,而且那些物品很可能在游戏制作过程中就会变化,
但事件里的得失物品又一般必须得得做出来啊,如果刻意不做反而最后更容易出错
很多时候物品都不能是完美的顺序序号,就算退一万步序号它完美了,那也不是可以自由操控和改动的,有些时候和一些人总是热爱修改
我现在没有找到自由操控物品序号的方法

现在我很多物品的顺序有点乱,一些手雷在前面,一些手雷在后面,一些火箭炮又在前面,一些砍刀又在后面
我只能确保他们可能接近,但我不能自由操控整个物品的顺序,数据库的物品不像是随便拖动就可以控制的

我有时候不想第一个物品是一个喷雾,我有时候想让它是一把女性手枪,我有时候想让它是军用匕首
这可能是很容易会去想的,但我现在不能轻松去做这件事
因为我一开始并没有想到让两个物品之间横跨几十个序号,并且不放在首尾,虽然尾可以加长,但首不行

我没有办法自由控制物品顺序
请问有这样可以控制顺序的插件吗?有关于物品顺序的,比如说给物品加个备注代码啊,调整权重什么的。
我就能在纸上计划出来
数据库的序号我不想管,因为我不是完美主义者

我只是想要改变背包里物品的顺序

因为背包里的物品是玩家会看见和实际操作的,有很多影响的

可能别人的游戏会不影响,但我的背包会很影响,我有很多摩托罗拉和M1911,高爆手雷,炸药之类的频繁使用的东西
我想用它杀死僵尸和蠕虫

默认的物品序号如果成完全体后,就真的很难操控,不能随便调整

我想要另一种可以改变物品在背包里面的前后顺序的一种插件

如果不可能自定义排序

那我可能想要一个可以根据物品获得时间来排序物品的
这是很多游戏很常见的,因为我先获得这个物品,所以这个物品在前面
这样的逻辑,玩家或许会比我现在的情况更加可以接受

请问有任何关于物品顺序的插件咩!
我觉得这不是一个不可理喻的功能
可能是一个良性的功能,它总是会有用和起到作用的

请大家帮帮我,谢谢!!



最佳答案

查看完整内容

/*: 2 * @target MV 3 * @plugindesc v1.0 对物品顺序进行重新排列。 4 * @author 2D_猫 5 * @url https://space.bilibili.com/137028995 6 * 7 * @help 8 * * 使用方法:在数据库为物品命名时,物品名称前加上“x>”前缀,“x”是一个正整数,代 9 * 表该物品的排列优先级,也就是说,数字越小的物品在物品栏中越靠前。未加“x>”前缀 10 * 的物品,将按照该物品的默认顺序排列在加了“x>”前缀的物品的 ...

Lv4.逐梦者

梦石
0
星屑
5469
在线时间
397 小时
注册时间
2021-12-4
帖子
417
2
发表于 2023-1-10 22:36:06 | 只看该作者
JAVASCRIPT 代码复制下载
  1. /*:
  2. 2
  3.  * @target     MV
  4. 3
  5.  * @plugindesc v1.0 对物品顺序进行重新排列。
  6. 4
  7.  * @author     2D_猫
  8. 5
  9.  * @url        [url]https://space.bilibili.com/137028995[/url]
  10. 6
  11.  *
  12. 7
  13.  * @help
  14. 8
  15.  * * 使用方法:在数据库为物品命名时,物品名称前加上“x>”前缀,“x”是一个正整数,代
  16. 9
  17.  * 表该物品的排列优先级,也就是说,数字越小的物品在物品栏中越靠前。未加“x>”前缀
  18. 10
  19.  * 的物品,将按照该物品的默认顺序排列在加了“x>”前缀的物品的后面。
  20. 11
  21.  *
  22. 12
  23.  * * 使用条款:免费用于任何商业或非商业目的;允许在保留原作者信息的前提下修改代
  24. 13
  25.  * 码;请在你的项目中致谢“2D_猫”,谢谢!:)
  26. 14
  27.  *
  28. 15
  29.  * |\      /|          _
  30. 16
  31.  * |-\____/-|         //
  32. 17
  33.  * |        |        //
  34. 18
  35.  * |  O O   |_______//
  36. 19
  37.  *  \__^___/         \
  38. 20
  39.  *    |              |
  40. 21
  41.  *    / __  ______   \
  42. 22
  43.  *   / /  \ \    / /\ \
  44. 23
  45.  *  /_/    \_\  /_/  \_\
  46. 24
  47.  */
  48. 25
  49.  
  50. 26
  51. (() => {
  52. 27
  53.         Window_ItemList.prototype.makeItemList = function() {
  54. 28
  55.                 this._data = $gameParty.allItems().filter(item => this.includes(item));
  56. 29
  57.                 if (this.includes(null)) {
  58. 30
  59.                         this._data.push(null);
  60. 31
  61.                 }
  62. 32
  63.  
  64. 33
  65.                 // 按照“x>”顺序重新排序物品
  66. 34
  67.                 this._data.sort((a, b) => {               
  68. 35
  69.                         let aOrderNum = parseInt(a.name.split(">")[0]);
  70. 36
  71.                         if (aOrderNum.toString() === 'NaN') aOrderNum = Infinity;
  72. 37
  73.                         let bOrderNum = parseInt(b.name.split(">")[0]);
  74. 38
  75.                         if (bOrderNum.toString() === 'NaN') bOrderNum = Infinity;
  76. 39
  77.  
  78. 40
  79.                         return aOrderNum - bOrderNum;
  80. 41
  81.                 });
  82. 42
  83.         };
  84. 43
  85.  
  86. 44
  87.         Window_ItemList.prototype.drawItem = function(index) {
  88. 45
  89.                 const item = this.itemAt(index);
  90. 46
  91.  
  92. 47
  93.                 if (item) {
  94. 48
  95.                         // 获取物品去掉“x>”后的名称
  96. 49
  97.                         let newItemName = item.name.split(">")[1];
  98. 50
  99.                         if (newItemName) item.newName = newItemName;
  100. 51
  101.                         else                         item.newName = item.name;
  102. 52
  103.  
  104. 53
  105.                         const numberWidth = this.numberWidth();
  106. 54
  107.                         const rect = this.itemLineRect(index);
  108. 55
  109.                         this.changePaintOpacity(this.isEnabled(item));
  110. 56
  111.                         this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
  112. 57
  113.                         this.drawItemNumber(item, rect.x, rect.y, rect.width);
  114. 58
  115.                         this.changePaintOpacity(1);
  116. 59
  117.                 }
  118. 60
  119.         };
  120. 61
  121.  
  122. 62
  123.         Window_Base.prototype.drawItemName = function(item, x, y, width) {
  124. 63
  125.                 if (item) {
  126. 64
  127.                         const iconY = y + (this.lineHeight() - ImageManager.iconHeight) / 2;
  128. 65
  129.                         const textMargin = ImageManager.iconWidth + 4;
  130. 66
  131.                         const itemWidth = Math.max(0, width - textMargin);
  132. 67
  133.                         this.resetTextColor();
  134. 68
  135.                         this.drawIcon(item.iconIndex, x, iconY);
  136. 69
  137.                         // 显示物品去掉“x>”后的名称
  138. 70
  139.                         this.drawText(item.newName, x + textMargin, y, itemWidth);
  140. 71
  141.                 }
  142. 72
  143.         };
  144. 73
  145. })();

感觉这个可以试试

评分

参与人数 1+1 收起 理由
蜜橘团子 + 1 嗯嘿嘿嘿

查看全部评分

回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4532
在线时间
678 小时
注册时间
2013-1-18
帖子
709
3
发表于 2023-1-11 00:27:23 | 只看该作者
用过以后说一下效果可以吗。我也想用,但是很怕会造成物品混乱了。
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
383
在线时间
37 小时
注册时间
2020-3-22
帖子
8
4
发表于 2023-1-11 18:37:02 | 只看该作者
本帖最后由 风雨妙 于 2023-1-12 10:40 编辑

JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // XYZ_ItemSort.js
  3. //=============================================================================
  4. var Imported = Imported || {};
  5. Imported.ItemSort = true;
  6.  
  7. var XYZ = XYZ || {};
  8. XYZ.ItemSort = XYZ.ItemSort || {};
  9. XYZ.ItemSort.version = 1.00;
  10. /*:
  11.  * @plugindesc 道具排序.
  12.  * @author DawnKing
  13.  *
  14.  * @help
  15.  * F8打开控制台
  16.  * getItemInfo(道具编号) 打印单个道具的排序优先
  17.  * getItemListInfo()     打印全部道具的排序优先,不进行排序 排除没填名字的
  18.  * getItemListInfoSort() 打印排序后的 道具输出情况,该顺序与游戏中的排序顺序一致
  19.  *
  20.  */
  21.  
  22. XYZ.Parameters = PluginManager.parameters('XYZ_ItemSort');
  23.  
  24. // ============================================================================
  25. // 重写
  26. // ============================================================================
  27. Window_ItemList.prototype.makeItemList = function() {
  28.     this._data = $gameParty.allItems().filter(function(item) {
  29.         return this.includes(item);
  30.     }, this);
  31.     if (this.includes(null)) {
  32.         this._data.push(null);
  33.     }
  34.     this._data.sort(function(a, b) {
  35.         var aLevel = a.meta['排序优先'] || 0;
  36.         var bLevel = b.meta['排序优先'] || 0;
  37.         return aLevel - bLevel;
  38.     });
  39. };
  40.  
  41. // Window_SkillList.prototype.makeItemList = function() {
  42. //     if (this._actor) {
  43. //         this._data = this._actor.skills().filter(function(item) {
  44. //             return this.includes(item);
  45. //         }, this);
  46. //         this._data.sort(function(a, b) {
  47. //             var aLevel = a.meta['排序优先'] || 0;
  48. //             var bLevel = b.meta['排序优先'] || 0;
  49. //             return aLevel - bLevel;
  50. //         });
  51. //     } else {
  52. //         this._data = [];
  53. //     }
  54. // };
  55.  
  56. // ============================================================================
  57. // 控制台调试方法
  58. // ============================================================================
  59. getItemInfo = function(itemId) {
  60.     var item = $dataItems[itemId];
  61.     if (!item) { return; }
  62.     if (item.name === '') { return; }
  63.     console.log(item.name + ' --> 排序优先:' + (item.meta['排序优先'] || 0))
  64. };
  65.  
  66. getItemListInfo = function() {
  67.     for (var item of $dataItems) {
  68.         if (!item) { continue; }
  69.         if (item.name === '') { continue; }
  70.         console.log(item.name + ' --> 排序优先:' + (item.meta['排序优先'] || 0))
  71.     }
  72. };
  73.  
  74. getItemListInfoSort = function() {
  75.     var data = [];
  76.     for (var item of $dataItems) {
  77.         if (!item) { continue; }
  78.         if (item.name === '') { continue; }
  79.         data.push(item);
  80.     }
  81.     data.sort(function(a, b) {
  82.         var aLevel = a.meta['排序优先'] || 0;
  83.         var bLevel = b.meta['排序优先'] || 0;
  84.         return aLevel - bLevel;
  85.     });
  86.     for (var item of data) {
  87.         if (!item) { continue; }
  88.         if (item.name === '') { continue; }
  89.         console.log(item.name + ' --> 排序优先:' + (item.meta['排序优先'] || 0))
  90.     }
  91. };

在道具备注栏填<排序优先:10>

评分

参与人数 1+1 收起 理由
蜜橘团子 + 1 我很赞同

查看全部评分

回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
338
在线时间
169 小时
注册时间
2022-7-14
帖子
108
5
 楼主| 发表于 2023-1-11 19:10:05 | 只看该作者
nhycs01 发表于 2023-1-11 00:27
用过以后说一下效果可以吗。我也想用,但是很怕会造成物品混乱了。

我暂时没有用那个,因为那个要改名字,改名字是一件更严重的事情
如果要换插件什么的很麻烦,而且要改的名字的插件比较普遍,我不想再叠buff,那个名字就很长很乱

我抓到一个这个,也是备注栏的,因为是备注所以无所谓,你删插件都没事,别人看不见,也没实际作用
https://forums.rpgmakerweb.com/index.php?threads/item-and-skill-sort-priority.90931/

缺点也有,假设你系统1有物品

你无法定义超过1个物品在系统第1个之前,所以最好你系统前面不要有物品,才能更自由得操作

假如你系统前100个都没有物品,那么你才能真正自定义100个顺序,1~2~3~100这样打备注

假如你系统前100个都有物品,你再想靠备注,操控前面几十个物品的顺序,就是很困难的,他们会洗牌一样混乱,虽然不会出问题,但是会打乱


不过楼下的回复好像更短,是中文,你都看看吧!


回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4532
在线时间
678 小时
注册时间
2013-1-18
帖子
709
6
发表于 2023-1-12 00:28:13 | 只看该作者

使用以后,我备注的<排序优先:1>,结果排到最后了……
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5469
在线时间
397 小时
注册时间
2021-12-4
帖子
417
7
发表于 2023-1-12 01:45:09 | 只看该作者
蜜橘团子 发表于 2023-1-11 19:10
我暂时没有用那个,因为那个要改名字,改名字是一件更严重的事情
如果要换插件什么的很麻烦,而且要改的 ...

是的,我也跟原作者反映过“用备注是不是比改名字更好,改名字还要另外取消显示”,不过他好像觉得“备注要一个一个翻看不像名字可以一次看到二十多个”什么的
感觉风雨妙的那个不错
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
729
在线时间
55 小时
注册时间
2017-8-8
帖子
34
8
发表于 2023-1-12 08:59:55 | 只看该作者
nhycs01 发表于 2023-1-12 00:28
使用以后,我备注的,结果排到最后了……

alevel - blevel 是升序 编号小的排在前面 因为默认值是0,所以1 就会排在所有的后面。一种方法是把默认的0改成100 另一种就是 改成 blevel - alevel 改成降序,从大到小排

点评

原来如此,感谢指点!  发表于 2023-1-12 09:58
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
383
在线时间
37 小时
注册时间
2020-3-22
帖子
8
9
发表于 2023-1-12 10:39:12 | 只看该作者
小秋橙 发表于 2023-1-12 01:45
是的,我也跟原作者反映过“用备注是不是比改名字更好,改名字还要另外取消显示”,不过他好像觉得“备注 ...

加了几个调试方法,F8打开控制台getItemListInfoSort() 调用这个方法,会把排序好的道具名和备注打印出来
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-5 05:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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