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

[教程] 【服务端】[GMS083] 飞镖、子弹等道具如何实现消耗完毕自动补充

[复制链接]

4

主题

12

回帖

111

积分

注册会员

积分
111
发表于 2025-2-20 21:32:39 | 显示全部楼层 |阅读模式
如果你需要自动补充飞镖、子弹等消耗品的数量,又或者不想它们被消耗,可以参考这个方法。


本教程以北斗服务端(https://github.com/BeiDouMS/BeiDou-Server)为基础进行制作

本次思路为服务端在接收到投掷飞镖、子弹等道具时对消耗函数进行修改时其对指定道具进行自动补充或者不消耗。
打开源码路径:gms-server/src/main/java/org/gms/net/server/channel/handlers/RangedAttackHandler.java


按下Ctrl+F搜索
  1. InventoryManipulator.removeFromSlot(c, InventoryType.USE, slot, bulletConsume, false, true);    //减去消耗品指定栏位物品数量
复制代码

可以看到这里是减少消耗品数量的函数,通过分析函数参数得知 bulletConsume 为数量
因此我们可以从这里入手,通过改变 bulletConsume 的数量达到增加或者不消耗的目的。

这里以修复平衡之怒自动补充为例(北斗里已经修复了):

1、首先我们需要定义一个变量用于储存补充的数量,在
  1. short bulletCount = 1;
复制代码
下方加上
  1. short supplement = 0;   //用于补充平衡之怒的变量
复制代码

2、在
  1. boolean cbow = ItemConstants.isArrowForCrossBow(id);
复制代码
下方增加
  1. if (id == ItemId.BALANCED_FURY && (item.getQuantity() - bulletCount) <= 10) {   //平衡之怒低于10,则自动补充,如果设置数值过低时,会造成出拳平A
  2.         supplement = (short) -ItemInformationProvider.getInstance().getSlotMax(c,id);  //设定补充到限制的最高数值
  3. }
复制代码
下方增加
  1. if (supplement < 0 ) {
  2.         bulletConsume = supplement;     //将消耗飞镖设为补充飞镖
  3. }
复制代码


至此,平衡之怒数量低于10的时候会自动补充。

如果不想让飞镖、子弹被消耗,可以简单粗暴的将第3步改成这样
  1. if (id >= 2070000 && id <= 2070018) {        //此范围内的飞镖不被消耗,其它ID可自行添加判断
  2.         bulletConsume = 0;        //将不消耗飞镖
  3. }
复制代码


评分

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

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|蘑菇物语

GMT+8, 2025-4-20 07:33 , Processed in 0.052188 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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