查看: 2092|回复: 9

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

[复制链接]
梦石
0
星屑
338
在线时间
169 小时
注册时间
2022-7-14
回帖
83
发表于 2023-1-10 22:36:05 | 显示全部楼层 |阅读模式
悬赏33星屑已解决
本帖最后由 蜜橘团子 于 2023-1-10 22:54 编辑

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

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

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

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

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

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

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

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

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

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

如果不可能自定义排序

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

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

请大家帮帮我,谢谢!!



最佳答案

查看完整内容

[pre lang="javascript" line="1" file="itemOrder.js"]/*: 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 * 的物品 ...
梦石
2
星屑
8479
在线时间
463 小时
注册时间
2021-12-4
回帖
486

MZ评测员

发表于 2023-1-10 22:36:06 | 显示全部楼层
[pre lang="javascript" line="1" file="itemOrder.js"]/*:
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>”前缀的物品的后面。
11
*
12
* * 使用条款:免费用于任何商业或非商业目的;允许在保留原作者信息的前提下修改代
13
* 码;请在你的项目中致谢“2D_猫”,谢谢!:)
14
*
15
* |\      /|          _
16
* |-\____/-|         //
17
* |        |        //
18
* |  O O   |_______//
19
*  \__^___/         \
20
*    |              |
21
*    / __  ______   \
22
*   / /  \ \    / /\ \
23
*  /_/    \_\  /_/  \_\
24
*/
25

26
(() => {
27
        Window_ItemList.prototype.makeItemList = function() {
28
                this._data = $gameParty.allItems().filter(item => this.includes(item));
29
                if (this.includes(null)) {
30
                        this._data.push(null);
31
                }
32
               
33
                // 按照“x>”顺序重新排序物品
34
                this._data.sort((a, b) => {               
35
                        let aOrderNum = parseInt(a.name.split(">")[0]);
36
                        if (aOrderNum.toString() === 'NaN') aOrderNum = Infinity;
37
                        let bOrderNum = parseInt(b.name.split(">")[0]);
38
                        if (bOrderNum.toString() === 'NaN') bOrderNum = Infinity;
39
                       
40
                        return aOrderNum - bOrderNum;
41
                });
42
        };
43

44
        Window_ItemList.prototype.drawItem = function(index) {
45
                const item = this.itemAt(index);
46
               
47
                if (item) {
48
                        // 获取物品去掉“x>”后的名称
49
                        let newItemName = item.name.split(">")[1];
50
                        if (newItemName) item.newName = newItemName;
51
                        else                         item.newName = item.name;
52
               
53
                        const numberWidth = this.numberWidth();
54
                        const rect = this.itemLineRect(index);
55
                        this.changePaintOpacity(this.isEnabled(item));
56
                        this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
57
                        this.drawItemNumber(item, rect.x, rect.y, rect.width);
58
                        this.changePaintOpacity(1);
59
                }
60
        };
61

62
        Window_Base.prototype.drawItemName = function(item, x, y, width) {
63
                if (item) {
64
                        const iconY = y + (this.lineHeight() - ImageManager.iconHeight) / 2;
65
                        const textMargin = ImageManager.iconWidth + 4;
66
                        const itemWidth = Math.max(0, width - textMargin);
67
                        this.resetTextColor();
68
                        this.drawIcon(item.iconIndex, x, iconY);
69
                        // 显示物品去掉“x>”后的名称
70
                        this.drawText(item.newName, x + textMargin, y, itemWidth);
71
                }
72
        };
73
})();[/pre]
感觉这个可以试试

评分

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

查看全部评分

回复

使用道具 举报

梦石
0
星屑
5269
在线时间
733 小时
注册时间
2013-1-18
回帖
525
发表于 2023-1-11 00:27:23 | 显示全部楼层
用过以后说一下效果可以吗。我也想用,但是很怕会造成物品混乱了。
回复

使用道具 举报

梦石
0
星屑
383
在线时间
37 小时
注册时间
2020-3-22
回帖
8
发表于 2023-1-11 18:37:02 | 显示全部楼层
本帖最后由 风雨妙 于 2023-1-12 10:40 编辑

[pre lang="javascript"]//=============================================================================
// XYZ_ItemSort.js
//=============================================================================
var Imported = Imported || {};
Imported.ItemSort = true;

var XYZ = XYZ || {};
XYZ.ItemSort = XYZ.ItemSort || {};
XYZ.ItemSort.version = 1.00;
/*:
* @plugindesc 道具排序.
* @author DawnKing
*
* @help
* F8打开控制台
* getItemInfo(道具编号) 打印单个道具的排序优先
* getItemListInfo()     打印全部道具的排序优先,不进行排序 排除没填名字的
* getItemListInfoSort() 打印排序后的 道具输出情况,该顺序与游戏中的排序顺序一致
*
*/

XYZ.Parameters = PluginManager.parameters('XYZ_ItemSort');

// ============================================================================
// 重写
// ============================================================================
Window_ItemList.prototype.makeItemList = function() {
    this._data = $gameParty.allItems().filter(function(item) {
        return this.includes(item);
    }, this);
    if (this.includes(null)) {
        this._data.push(null);
    }
    this._data.sort(function(a, b) {
        var aLevel = a.meta['排序优先'] || 0;
        var bLevel = b.meta['排序优先'] || 0;
        return aLevel - bLevel;
    });
};

// Window_SkillList.prototype.makeItemList = function() {
//     if (this._actor) {
//         this._data = this._actor.skills().filter(function(item) {
//             return this.includes(item);
//         }, this);
//         this._data.sort(function(a, b) {
//             var aLevel = a.meta['排序优先'] || 0;
//             var bLevel = b.meta['排序优先'] || 0;
//             return aLevel - bLevel;
//         });
//     } else {
//         this._data = [];
//     }
// };

// ============================================================================
// 控制台调试方法
// ============================================================================
getItemInfo = function(itemId) {
    var item = $dataItems[itemId];
    if (!item) { return; }
    if (item.name === '') { return; }
    console.log(item.name + ' --> 排序优先:' + (item.meta['排序优先'] || 0))
};

getItemListInfo = function() {
    for (var item of $dataItems) {
        if (!item) { continue; }
        if (item.name === '') { continue; }
        console.log(item.name + ' --> 排序优先:' + (item.meta['排序优先'] || 0))
    }
};

getItemListInfoSort = function() {
    var data = [];
    for (var item of $dataItems) {
        if (!item) { continue; }
        if (item.name === '') { continue; }
        data.push(item);
    }
    data.sort(function(a, b) {
        var aLevel = a.meta['排序优先'] || 0;
        var bLevel = b.meta['排序优先'] || 0;
        return aLevel - bLevel;
    });
    for (var item of data) {
        if (!item) { continue; }
        if (item.name === '') { continue; }
        console.log(item.name + ' --> 排序优先:' + (item.meta['排序优先'] || 0))
    }
};[/pre]
在道具备注栏填<排序优先:10>

评分

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

查看全部评分

回复

使用道具 举报

梦石
0
星屑
338
在线时间
169 小时
注册时间
2022-7-14
回帖
83
 楼主| 发表于 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个都有物品,你再想靠备注,操控前面几十个物品的顺序,就是很困难的,他们会洗牌一样混乱,虽然不会出问题,但是会打乱


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


回复

使用道具 举报

梦石
0
星屑
5269
在线时间
733 小时
注册时间
2013-1-18
回帖
525
发表于 2023-1-12 00:28:13 | 显示全部楼层

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

使用道具 举报

梦石
2
星屑
8479
在线时间
463 小时
注册时间
2021-12-4
回帖
486

MZ评测员

发表于 2023-1-12 01:45:09 | 显示全部楼层
蜜橘团子 发表于 2023-1-11 19:10
我暂时没有用那个,因为那个要改名字,改名字是一件更严重的事情
如果要换插件什么的很麻烦,而且要改的 ...

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

使用道具 举报

梦石
0
星屑
782
在线时间
56 小时
注册时间
2017-8-8
回帖
30
发表于 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
回复

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部