mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-20 19:04:40 +01:00
implement npc shop
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.BuyGoodsRspOuterClass;
|
||||
import emu.grasscutter.net.proto.ShopGoodsOuterClass;
|
||||
|
||||
public class PacketBuyGoodsRsp extends BasePacket {
|
||||
public PacketBuyGoodsRsp(int shopType, int boughtNum, ShopGoodsOuterClass.ShopGoods sg) {
|
||||
super(PacketOpcodes.BuyGoodsRsp);
|
||||
|
||||
BuyGoodsRspOuterClass.BuyGoodsRsp buyGoodsRsp = BuyGoodsRspOuterClass.BuyGoodsRsp.newBuilder()
|
||||
.setShopType(shopType)
|
||||
.setBoughtNum(boughtNum)
|
||||
.addGoodsList(ShopGoodsOuterClass.ShopGoods.newBuilder()
|
||||
.mergeFrom(sg)
|
||||
.setBoughtNum(boughtNum)
|
||||
).build();
|
||||
|
||||
this.setData(buyGoodsRsp);
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,60 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.shop.ShopInfo;
|
||||
import emu.grasscutter.game.shop.ShopManager;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.GetShopRspOuterClass.GetShopRsp;
|
||||
import emu.grasscutter.net.proto.GetShopRspOuterClass;
|
||||
import emu.grasscutter.net.proto.ItemParamOuterClass;
|
||||
import emu.grasscutter.net.proto.ShopGoodsOuterClass.ShopGoods;
|
||||
import emu.grasscutter.net.proto.ShopOuterClass.Shop;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketGetShopRsp extends BasePacket {
|
||||
|
||||
public PacketGetShopRsp(int shopType) {
|
||||
|
||||
public PacketGetShopRsp(Player inv, int shopType) {
|
||||
super(PacketOpcodes.GetShopRsp);
|
||||
|
||||
GetShopRsp proto = GetShopRsp.newBuilder()
|
||||
.setShop(Shop.newBuilder().setShopType(shopType))
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
// TODO: CityReputationLevel
|
||||
Shop.Builder shop = Shop.newBuilder()
|
||||
.setShopType(shopType)
|
||||
.setCityId(1) //mock
|
||||
.setCityReputationLevel(10); //mock
|
||||
|
||||
ShopManager manager = Grasscutter.getGameServer().getShopManager();
|
||||
if (manager.getShopData().get(shopType) != null) {
|
||||
List<ShopInfo> list = manager.getShopData().get(shopType);
|
||||
List<ShopGoods> goodsList = new ArrayList<>();
|
||||
for (ShopInfo info : list) {
|
||||
ShopGoods.Builder goods = ShopGoods.newBuilder()
|
||||
.setGoodsId(info.getGoodsId())
|
||||
.setGoodsItem(ItemParamOuterClass.ItemParam.newBuilder().setItemId(info.getGoodsItem().getId()).setCount(info.getGoodsItem().getCount()).build())
|
||||
.setScoin(info.getScoin())
|
||||
.setHcoin(info.getHcoin())
|
||||
.setBoughtNum(inv.getGoodsLimitNum(info.getGoodsId()))
|
||||
.setBuyLimit(info.getBuyLimit())
|
||||
.setBeginTime(info.getBeginTime())
|
||||
.setEndTime(info.getEndTime())
|
||||
.setNextRefreshTime(info.getNextRefreshTime())
|
||||
.setMinLevel(info.getMinLevel())
|
||||
.setMaxLevel(info.getMaxLevel())
|
||||
.addAllPreGoodsIdList(info.getPreGoodsIdList())
|
||||
.setMcoin(info.getMcoin())
|
||||
.setDisableType(info.getDisableType())
|
||||
.setSecondarySheetId(info.getSecondarySheetId());
|
||||
if (info.getCostItemList() != null) {
|
||||
goods.addAllCostItemList(info.getCostItemList().stream().map(x -> ItemParamOuterClass.ItemParam.newBuilder().setItemId(x.getId()).setCount(x.getCount()).build()).collect(Collectors.toList()));
|
||||
}
|
||||
goodsList.add(goods.build());
|
||||
}
|
||||
shop.addAllGoodsList(goodsList);
|
||||
}
|
||||
|
||||
this.setData(GetShopRspOuterClass.GetShopRsp.newBuilder().setShop(shop).build());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user