Incompletely implement about QuickUseWidgetReq

WARNING: with the consuming of material widget ( Example: bomb ),
this is just a implement designed to the decreasing of count

### Known Bug: No effects after using item but decrease. ###

If you know which Packet could make the effects, feel free to contribute!
This commit is contained in:
zhaodice 2022-06-03 15:06:17 +08:00 committed by Melledy
parent e140284d37
commit bbc398d374

View File

@ -0,0 +1,52 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.inventory.Inventory;
import emu.grasscutter.game.inventory.InventoryTab;
import emu.grasscutter.game.inventory.ItemType;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.QuickUseWidgetRspOuterClass.QuickUseWidgetRsp;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketPullRecentChatRsp;
@Opcodes(PacketOpcodes.QuickUseWidgetReq)
public class HandlerQuickUseWidgetReq extends PacketHandler {
/*
* WARNING: with the consuming of material widget ( Example: bomb ),
* this is just a implement designed to the decreasing of count
*
* ### Known Bug: No effects after using item but decrease. ###
*
* If you know which Packet could make the effects, feel free to contribute!
* */
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
QuickUseWidgetRsp.Builder proto = QuickUseWidgetRsp.newBuilder();
Player pl = session.getPlayer();
synchronized (pl) {
int materialId = pl.getWidgetId();
Inventory inventory = session.getPlayer().getInventory();
InventoryTab inventoryTab = inventory.getInventoryTab(ItemType.ITEM_MATERIAL);
GameItem item = inventoryTab.getItemById(materialId);
int remain = item.getCount();
if (remain > 0) {
remain--;
if (remain <= 0) {
proto.setRetcode(1);
} else {
proto.setRetcode(0);
}
proto.setMaterialId(materialId);
inventory.removeItem(item,1);// decrease count
BasePacket rsp = new BasePacket(PacketOpcodes.QuickUseWidgetRsp);
rsp.setData(proto);
session.send(rsp);
// but no effects in the game, feel free to implement it!
}
}
}
}