diff --git a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java index 9d0a6f4e6..8e25ee89e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java @@ -176,6 +176,9 @@ public enum ErrorCode implements IErrorCode { CROSS_YXLD_OVER(145,"赛季结算中"), RIDING_SWARD_BET_TWO(146,"一轮比赛最多押注两次!"), PRACTICE_LEVE_DOWN(147,"修行等级不足"), + SHOP_XIA_JIA(150,"商品已下架"), + SHOP_COLSE(151,"商店已关闭"), + SHOP_NO_ITEM(152,"商品不存在"), GUILD_NOT_AUTHORITY(300,"账号因错误发言导致相关功能封禁中,操作失败"), ; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index 6dfe39f00..c8b5fa9b7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -1,8 +1,6 @@ package com.ljsd.jieling.logic.store; import com.ljsd.jieling.core.FunctionIdEnum; -import com.ljsd.jieling.core.GlobalsDef; -import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; @@ -21,13 +19,15 @@ import com.ljsd.jieling.logic.mission.GameEvent; import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.*; +import config.SPlayerLevelConfig; +import config.SStoreConfig; +import config.SStoreTypeConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import rpc.protocols.CommonProto; import rpc.protocols.MessageTypeProto; import rpc.protocols.PlayerInfoProto; -import com.ljsd.jieling.util.*; -import config.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import util.TimeUtils; import java.util.*; @@ -191,7 +191,7 @@ public class StoreLogic implements IEventHandler { PlayerInfoProto.GetStoreInfosResponse.Builder builder = PlayerInfoProto.GetStoreInfosResponse.newBuilder(); Map storeInfoMap = storeManager.getStoreInfoMap(); checkStoreRefresh(user,storeInfoMap); - List storeInfos = new CopyOnWriteArrayList<>(); + List storeInfos = new ArrayList<>(storeInfoMap.size()); for (Map.Entry entry: storeInfoMap.entrySet()){ CommonProto.StoreInfo.Builder storeBuilder = getBuilder(entry.getValue()); storeInfos.add(storeBuilder.build()); @@ -210,6 +210,9 @@ public class StoreLogic implements IEventHandler { List builderList = new CopyOnWriteArrayList<>(); for (Map.Entry entry1: itemNumMap.entrySet()){ int itemId = entry1.getKey(); + if (!SStoreConfig.getSstoreConfigMap().containsKey(itemId)) { + continue; + } int buyNum = entry1.getValue(); CommonProto.StoreItem.Builder storeItemBuilder = CommonProto.StoreItem.newBuilder(); storeItemBuilder.setId(itemId); @@ -460,19 +463,16 @@ public class StoreLogic implements IEventHandler { * @throws Exception */ public static CommonProto.Drop buyStoreItem(int uid,int storeId, int itemId,int itemNum) throws Exception { - if (itemNum < 0|| itemNum >999){ LOGGER.info("buyStoreItem==> uid={},itemNum={}",uid,itemNum); throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } - User user = UserManager.getUser(uid); - - SStoreConfig sStoreConfig = SStoreConfig.getSstoreConfigMap().get(storeId==8?itemId%100000:itemId); String err = checkBuyGoodsAndUpdate(user,storeId, itemId,itemNum); if (!"".equals(err)){ throw new ErrorCodeException(ErrorCode.newDefineCode(err)); } + SStoreConfig sStoreConfig = SStoreConfig.getSstoreConfigMap().get(storeId==8?itemId%100000:itemId); int[][] goods = sStoreConfig.getGoods(); int length = goods.length; int[][] extraAdd = sStoreConfig.getExtraAdd(); @@ -532,8 +532,8 @@ public class StoreLogic implements IEventHandler { PlayerInfoProto.PrivilegeIndication.Builder indication = PlayerInfoProto.PrivilegeIndication.newBuilder(); int[] openPrivilege = sStoreConfig.getOpenPrivilege(); - for(int i=0;i storeInfoMap = user.getStoreManager().getStoreInfoMap(); if (!storeInfoMap.containsKey(storeId)){ LOGGER.info("buyStoreItem==> uid={},storeId={}",user.getId(),storeId); - return "no store"; + throw new ErrorCodeException(ErrorCode.SHOP_COLSE); + } + SStoreConfig sStoreConfig = SStoreConfig.getSstoreConfigMap().get(storeId == 8 ? itemId % 100000 : itemId); + if (sStoreConfig == null) { + LOGGER.info("buyStoreItem==> uid={},storeId={} item={}",user.getId(),storeId, itemId); + throw new ErrorCodeException(ErrorCode.SHOP_XIA_JIA); } - SStoreConfig sStoreConfig = SStoreConfig.getSstoreConfigMap().get(storeId==8?itemId%100000:itemId); StoreInfo storeInfo = storeInfoMap.get(storeId); Map itemNumMap =storeInfo.getItemNumMap(); if (!itemNumMap.containsKey(itemId)){ LOGGER.info("buyStoreItem==> uid={},itemId={}",user.getId(),itemId); - return "no goods"; + throw new ErrorCodeException(ErrorCode.SHOP_NO_ITEM); } - // if(storeId==Global.VIPSTORID){ // int vipLeve = user.getPlayerInfoManager().getVipLevel(); // if(vipLeve<(sStoreConfig.getSort()-1)){ @@ -576,7 +579,6 @@ public class StoreLogic implements IEventHandler { //// return "vip time limit 1"; //// } // } - PlayerManager playerInfoManager = user.getPlayerInfoManager(); int[] buyRule = sStoreConfig.getBuyRule(); if(buyRule!=null&&buyRule.length>0){ //充值金额购买条件判断 @@ -601,7 +603,7 @@ public class StoreLogic implements IEventHandler { check = limit > buyTimes; } if(!check){ - return "over limit"; + throw new ErrorCodeException(ErrorCode.HERO_MAX); } } int[][] cost = getCost(buyTimes ,itemNum, sStoreConfig.getCost(), sStoreConfig.getPremiumType(),sStoreConfig.getIsDiscount(),sStoreConfig.getDiscountDegree()); @@ -630,7 +632,7 @@ public class StoreLogic implements IEventHandler { for(;buyTimes