foggy 发表于 2025-8-13 20:49:07

GMS083 大背包 ExpandedItem

本帖最后由 foggy 于 2025-8-17 11:26 编辑

最近开始学习逆向,感谢论坛大佬和DC大佬的无私分享,从一个汇编都不懂的小白到逐渐能看懂一些程序的运行逻辑了。分享一下这段时间努力的成果。

GMS083 大背包,是把原本 24x4 的背包往下扩展成两倍大背包的改动,项目主要是为了练手,实用性有限,自娱自乐倒是挺方便的。

在wz里面,UI.wz/UIWindows.img/Item/FullBackgrnd替换一下资源,客户端代码、服务端代码和替换的UI资源在附件中。

自我感觉难点还是在潜在没被发现的边界检查,已经在客户端尽可能把涉及到96/97的相关边界改了,但是玩起来应该还是会有bug,只能边发现边改了。

客户端很多原先 cmp eax, 60h 的地方要改成 cmp eax, 0xC0 操作码变多了,不得已最后打了一大堆CodeCave,不太优雅,只是粗糙的实现。

再次感谢各位大佬的热心回复,没有你们的善意解答和分享各种资源,还要走非常久的弯路,希望国内的私服开源氛围更进一步。

编辑2025/08
· 修复bug:道具栏金币图标和金币数没有随道具栏扩展/缩小更新位置
· 修复bug:在装备栏实际获得装备大于100时由于服务端发包逻辑出现显示错误
· 修复bug:背包道具数较多时点击背包排序会出现显示错误
· 修复bug:扩充道具栏按钮未在背包栏已扩满时显示灰色禁用状态
· 留意事项:可能存在的登陆包0x7D超上限风险,需要更多实际测试






leevccc 发表于 2025-8-14 11:57:51

这个我之前也研究过,考虑到封包大小限制,我最高只搞到126格,就是加多两行

如果你要做更大的背包,建议你计算一下背包这部分封包的大小峰值

你可以在 PacketCreator.java 中这个方法里算出单个格子占用多大
protected static void addItemInfo(final OutPacket p, Item item, boolean zeroPosition) {

另外背包数据还存在和角色数据一起发送的情况,所以你还要预留一部分给角色数据

foggy 发表于 2025-8-14 14:02:28

本帖最后由 foggy 于 2025-8-14 14:25 编辑

leevccc 发表于 2025-8-14 11:57
这个我之前也研究过,考虑到封包大小限制,我最高只搞到126格,就是加多两行

如果你要做更大的背包,建议 ...

我仔细看看...客户端涉及到大的数据结构看得头疼,比如UIItem这种一个引用经常偏移几百开外,我再啃啃

别的栏还好,装备栏在超过100的时候就问题,可能要大改 :L

foggy 发表于 2025-8-14 20:11:21

leevccc 发表于 2025-8-14 11:57
这个我之前也研究过,考虑到封包大小限制,我最高只搞到126格,就是加多两行

如果你要做更大的背包,建议 ...

我看了一遍,如果是装备好像大约是50-60字节左右,如果是现金装备还要再加个22字节左右,如果192件现金装备就有接近1万5字节,如果再买了192个宠物,总字节说不定还真会超65535字节 :lol 太恐怖了。这个项目很有意思,我再继续研究一下,真的会超的话试试能不能把包上限改成 unsigned int 32

远古天际 发表于 2025-8-14 23:01:07

冒险岛算是给你们玩明白了。

loveene 发表于 2025-8-25 15:07:15

根据大佬的教程~成功啦~
页: [1]
查看完整版本: GMS083 大背包 ExpandedItem