找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 25|回复: 2

[客户端] GMS083 大背包 ExpandedItem

[复制链接]

3

主题

5

回帖

19

积分

新手上路

积分
19
发表于 昨天 20:49 | 显示全部楼层 |阅读模式
本帖最后由 foggy 于 2025-8-14 15:36 编辑

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

GMS083 大背包,是把原本 24x4 的背包往下扩展成两倍大背包的改动,项目主要是为了练手,实用性有限,自娱自乐倒是挺方便的。
在wz里面,UI.wz/UIWindows.img/Item/FullBackgrnd替换一下资源,客户端代码和替换的UI资源在附件中。

最后需要在服务端那边搜索 slotLimit 和 getSlotLimit() 相关的调用和实现,把数字96改成192,再把相关调用中用 byte 定义的slot和返回类型改成short就可以了。
这块我改的有点乱,明天再整理一下所有的改动部分。在服务端改类型(byte改short)可能还有雷点,需要观察测试。

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

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

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

编辑25.08.14
添加了服务端改动,改了客户端一个bug
目前尚存已知bug:
· 道具栏金币图标和金币数没有随道具栏扩展/缩小更新位置

· 在装备栏实际获得装备大于100时由于收发包的缘故会出现显示与实际不符,暂时可以通过设置新角色装备栏背包slotLimit=96限制,剩下的需要修改收发包相关的逻辑,还需要时间研究;非装备栏目前还能用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1蘑菇币 +100 收起 理由
leevccc + 100

查看全部评分

39

主题

19

回帖

282

积分

管理员

积分
282
发表于 7 小时前 | 显示全部楼层
这个我之前也研究过,考虑到封包大小限制,我最高只搞到126格,就是加多两行

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

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


另外背包数据还存在和角色数据一起发送的情况,所以你还要预留一部分给角色数据
有问题欢迎跟帖提问。

3

主题

5

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 5 小时前 | 显示全部楼层
本帖最后由 foggy 于 2025-8-14 14:25 编辑

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

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


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

别的栏还好,装备栏在超过100的时候就问题,可能要大改
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|蘑菇物语

GMT+8, 2025-8-14 19:03 , Processed in 0.074682 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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