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

Project1

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

[已经解决] 大家都是怎么解决物品排序问题的?

[复制链接]

Lv2.观梦者

梦石
0
星屑
429
在线时间
175 小时
注册时间
2013-11-2
帖子
131
跳转到指定楼层
1
发表于 2017-7-16 21:37:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RM系列一直都是用物品编号排的顺序。
如果事先不空出位置可能会造成位置不够顺序混乱的情况,
请问有能解决这个问题的技巧或者插件吗?
搜索是一件比发帖容易的事,因此我绝对是搜不到满意答案才来发帖的。

Lv1.梦旅人

梦石
0
星屑
55
在线时间
407 小时
注册时间
2011-4-10
帖子
359
2
发表于 2017-7-16 21:56:33 | 只看该作者
自定义生成持有物品列表的方法,按照你需要的规则排序。

点评

嗯……是根本的解决办法,但我不会脚本。  发表于 2017-7-16 22:03
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1314
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

3
发表于 2017-7-16 23:01:27 | 只看该作者
首先有什么实际问题嘛。。其实关于排序的话对Window_Itemlist在makeItemList时对this._data的操作修改下就行了
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
595
在线时间
899 小时
注册时间
2010-11-13
帖子
1023
4
发表于 2020-7-12 19:29:05 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6954
在线时间
639 小时
注册时间
2012-7-29
帖子
173
5
发表于 2020-7-13 09:25:38 | 只看该作者
物品排序确实是让人不爽的问题。

对于差异巨大的物品,一个比较简单粗暴的方式,就是楼主所说的留空,每种物品都留100个空,基本用不完,就是翻找起来麻烦点。

曾经有个思路,前提是游戏执行物品的操作全部放弃事件改用脚本。启动游戏时,遍历物品数据,以物品名称为键,物品对象为值,生成一个全新的物品数据键值对。调用物品数据时不使用id,而是使用物品名称。也可以用物品的其他属性作为键,非常灵活。这样一来,在编辑器数据库里就可以随意改变物品顺序而不影响游戏执行了。配合数据库里按Shift批量复制,可以使浏览变得非常方便。

纯事件党用不了上面的方法。如果编辑器能实现这样的功能就好了——可以在数据库调整物品顺序,并且所有该物品相关的事件也全部自动修改编号id。很多IDE都有这功能,可惜MV暂时没有(mvUCCU或许可以做到?)。

虽然个人能力不足,没有实现上述功能,但是我有个自用的小技巧,也可以方便在编辑器中浏览。实现这个技巧的过程比上面两种思路都简单,不过相应的效果不如上面两种思路明显。

在编辑器中为物品命名时,按照类别加个前缀,如“HP药:私酿药酒”、“主线1-1:父亲烧了一半的信”。这样在数据库中浏览时会更加方便,用Ctrl+F查找,可以一个接一个浏览具有相同前缀的物品。进入游戏时,直接操作$dataItems,将所有前缀去掉。

我的命名方式是前后缀之间用中文冒号 : 隔开。如果跟我一样,可以插入下面的代码,启动游戏时将数据中物品名称的前缀删除。
JAVASCRIPT 代码复制
  1. for(var i = 1; i < $dataItems.length; i++){
  2.     let name = $dataItems[i]["name"];
  3.     let index = name.indexOf(":");
  4.     if (index != -1){
  5.         $dataItems[i]["name"] = name.slice(index + 1);
  6.     }
  7. }

以上共列举了四种思路,分别是多留空、数据改为键值对、拓展调顺序自动改事件功能、加备注前缀。

点评

从热帖进来的,忽然发现原来是坟?Σ(⊙▽⊙"a  发表于 2020-7-13 09:27

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 666

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1282
在线时间
257 小时
注册时间
2021-2-16
帖子
247
6
发表于 2022-4-14 11:16:48 | 只看该作者
本帖最后由 tuxyin 于 2022-4-14 11:55 编辑

根据 铅笔描绘的思念 的提示,提供一种方法:

重写下面两个方法,在数据库中的所有物品乱序的情况下,物品名称前加上“x>”,比如:10>手机;3>手表;5>衣服。然后物品就可以按照:手表,衣服,手机的顺序排列显示。

PS:下方的代码是在MZ中测试通过的,MV的话仅供参考。

JAVASCRIPT 代码复制
  1. Window_ItemList.prototype.makeItemList = function() {
  2.     this._data = $gameParty.allItems().filter(item => this.includes(item));
  3.     if (this.includes(null)) {
  4.         this._data.push(null);
  5.     }
  6.  
  7.     // 按照“x>”顺序重新排序物品
  8.     this._data.sort((a, b) => {
  9.         let aOrderNum = parseInt(a.name.split(">")[0]);
  10.         let bOrderNum = parseInt(b.name.split(">")[0]);
  11.         return aOrderNum - bOrderNum;
  12.     });
  13. };
  14.  
  15. Window_ItemList.prototype.drawItem = function(index) {
  16.     const item = this.itemAt(index);
  17.  
  18.     // 显示物品名称时,去掉“x>”
  19.     let newItemName = item.name.split(">")[1];
  20.     if (newItemName) item.name = newItemName;
  21.  
  22.     if (item) {
  23.         const numberWidth = this.numberWidth();
  24.         const rect = this.itemLineRect(index);
  25.         this.changePaintOpacity(this.isEnabled(item));
  26.         this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
  27.         this.drawItemNumber(item, rect.x, rect.y, rect.width);
  28.         this.changePaintOpacity(1);
  29.     }
  30. };
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 04:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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