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

[教程] MapleStory v83 伤害皮肤

[复制链接]

43

主题

31

回帖

356

积分

管理员

积分
356
发表于 昨天 19:11 | 显示全部楼层 |阅读模式


我这伤害皮肤的实现和 [GMS083 技能 Buff 倒计时](https://moguwuyu.com/thread-38-1-2.html) 的实现有着异曲同工之处,都是投机取巧的方法。当然这是一年前完成的作品,如果现在让我重新写的话我估计会写得更好,但也不会有什么质的提升。我很久没碰083了暂时也不想折腾这个东西,现在只是把去年完成的东西分享出来,至于其他的以后再说。

关于伤害皮肤的演示可以看 [GMS083 伤害皮肤可联机](https://www.bilibili.com/video/BV1jGnzzgEH3) 这个视频同样录制于去年。

该示例支持联机显示而非本地自慰版,不支持动态皮肤如一些火焰特效的,不支持最新版的“亿”之类的字样显示,只能是纯数字。

我在尝试了很多错误的方法之后最终找到这一条偷鸡方法,正如第一段内容所说,该实现方法和BUFF倒计时一样,也是靠着篡改StringPool实现的。

如果你有认真读过我发的所有文章的话,那你是完全有能力在不看这篇教程的情况下,独自完成所有工作的。

你可以通过原生伤害数字图片顺藤摸瓜,找到显示伤害数值的方法在客户端的 `CAnimationDisplayer::Effect_HP`

仔细阅读这个方法的伪代码,你就可以发现,伤害数字是一个个加载的,比如你造成的伤害是 `9630`,客户端绘制伤害数字的时候会把这个值拆成 `9` `6` `3` `0` 四个数字,然后依次去wz里加载对应的图片出来显示。

那么实际上和BUFF倒计时一样,我们去篡改客户端拆分后的数字,比如 `9` 我们给他改成 `10XXXX9`,这里面的 `XXXX` 就可以作为我们的皮肤 id。

> 和BUFF倒计时不一样的是,倒计时是直接绕过了SP,这里面还是要借用SP调取返回值的,需要在SP里加入自定义的返回值。这个其实我在介绍SP的时候有提到过,如果你有认真看过[北斗插件修改StringPool汉化和新增自定义的字符串组](https://moguwuyu.com/thread-13-1-1.html)的话,应该就会了

那不就很简单了,只需要在wz中存0-9这10个图片的地方,插入`10XXXX0`-`10XXXX9`若N个图片,然后在客户端把原本的0-9改成`10XXXX0`-`10XXXX9`,那就实现了不同的皮肤效果了,皮肤的ID只需要配合自定义封包,让服务端传一下(由于要联机显示,所以要传玩家ID和皮肤ID两个值),事情就成了。

这个方法还需要你自己能编写写轮眼功能,这样才能批量把高版本的皮肤存成10XXXXX的名称形式,或者你有其他的方法实现这个伤害皮肤那更好。



购买主题 本主题需向作者支付 500 蘑菇币 才能浏览
有问题欢迎跟帖提问。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|蘑菇物语

GMT+8, 2025-10-4 06:36 , Processed in 0.073277 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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