随便玩玩 发表于 2024-4-17 15:49:18

想看看怎么修复

fall 发表于 2024-12-14 20:45:53

学习一下

lindy0101 发表于 2025-9-16 01:37:42

6666666666666666

黄世成 发表于 2026-3-14 12:00:25

123336666666666666666

qq183195582031 发表于 2026-3-16 00:46:50

修复未开启宠物的情况下使用宠物食品的物品BUG

qq183195582031 发表于 2026-3-16 00:47:26

这个BUG会导致物品栏甚至角色锁定,修复办法:

aiuu 发表于 2026-5-3 17:28:32

这个端的BUG有点多哦

aiuu 发表于 2026-5-3 17:37:47

AI说你这段无法解决问题 还是有可能卡死他给了个自认为完美的版本
MaplePet pet = c.getPlayer().getPet(slot);
slea.readInt();
slea.readShort();
int itemId = slea.readInt();

// 安全校验:宠物不存在或食物ID无效时直接中断,避免后续空指针
if (pet == null || itemId <= 0) {
    c.getSession().write(MaplePacketCreator.enableActions());
    return;
}

boolean gainCloseness = Randomizer.nextInt(101) > 50;

// 常量,方便你调整数值
final int FULLNESS_MAX = 100;
final int FULLNESS_INCREASE = 30;
final int CLOSENESS_MAX = 30000;

if (pet.getFullness() < FULLNESS_MAX) {
    // === 喂养成功 ===
    pet.setFullness(Math.min(pet.getFullness() + FULLNESS_INCREASE, FULLNESS_MAX));

    if (gainCloseness && pet.getCloseness() < CLOSENESS_MAX) {
      int newCloseness = Math.min(pet.getCloseness() + 1, CLOSENESS_MAX);
      pet.setCloseness(newCloseness);
      if (newCloseness >= ExpTable.getClosenessNeededForLevel(pet.getLevel() + 1)) {
            pet.setLevel(pet.getLevel() + 1);
      }
    }

    // 总是发送更新包
    c.getSession().write(PetPacket.updatePet(pet, c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((byte) pet.getInventoryPosition()), true));
    c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PetPacket.commandResponse(c.getPlayer().getId(), slot, 1, true), true);

} else {
    // === 宠物已饱,喂养失败 ===
    if (gainCloseness) {
      int newCloseness = Math.max(pet.getCloseness() - 1, 0);
      pet.setCloseness(newCloseness);
      if (newCloseness < ExpTable.getClosenessNeededForLevel(pet.getLevel())) {
            pet.setLevel(pet.getLevel() - 1);
      }
      // 修复锁定的关键:必须发送更新包!
      c.getSession().write(PetPacket.updatePet(pet, c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((byte) pet.getInventoryPosition()), true));
    }

    c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PetPacket.commandResponse(c.getPlayer().getId(), slot, 1, false), true);
}

// 扣除食物(无论成功失败)
MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, false);
页: 1 2 3 4 5 [6]
查看完整版本: 修复未开启宠物的情况下使用宠物食品的物品BUG