From 3c5b576b0af8667daee979b3c54d34b2e0174e97 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Wed, 10 Jun 2020 11:47:39 +0800 Subject: [PATCH] =?UTF-8?q?TASK=E3=80=90ID1006322=E3=80=91=E3=80=90?= =?UTF-8?q?=E5=AE=9D=E7=AE=B1=E4=BC=98=E5=8C=96=E3=80=91=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=87=AA=E9=80=89=E5=AE=9D=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/mongo/MongoUtil.java | 2 +- .../ljsd/jieling/globals/GlobalItemType.java | 1 + .../handler/UseAndPriceItemHandler.java | 2 + .../ljsd/jieling/logic/dao/RechargeInfo.java | 2 +- .../ljsd/jieling/logic/item/ItemLogic.java | 65 +++++++++++++++++++ .../com/ljsd/jieling/util/CBean2Proto.java | 6 +- .../java/com/ljsd/jieling/util/ItemUtil.java | 3 + tablemanager/src/main/java/config/SItem.java | 4 +- 8 files changed, 78 insertions(+), 7 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java index 367de96dc..e6bb20e5c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java @@ -196,7 +196,7 @@ public class MongoUtil { } - }, new LinkedList<>(ids), 2); + }, new LinkedList<>(ids), 300); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java index b8e87c608..27df12aea 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java @@ -5,6 +5,7 @@ public interface GlobalItemType { int ALL_DROP = 1; //全部掉落 int WEIGHT_DROP = 2; //随机掉落 int SUCCESSIVELY_RANDOM = 3; // 依次随机 + int SELETEONE = 4; //n 选1 // 物品类型 int GEM = 3; // 钻石Id(充值获得) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java index 7188b49ce..fbccaebba 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java @@ -41,6 +41,8 @@ public class UseAndPriceItemHandler extends BaseHandleruid={},itemNum={},openBoxLimits={}",uid,item.getItemNum(),openBoxLimits); throw new ErrorCodeException(ErrorCode.ITEM_USE_ONE_MAX); } + if (sItem.getUseType() ==2){ //n 选1 + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } if (sItem.getUseType() ==0){ throw new ErrorCodeException(ErrorCode.ITEM_USE_NOT); } @@ -153,6 +156,68 @@ public class ItemLogic { } + /** + * 使用选择宝箱道具 + */ + public void useItem(ISession iSession,List itemList,int itemId) throws Exception { + int msgId = MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE; + int uid = iSession.getUid(); + User user = UserManager.getUser(uid); + if (itemList.size() == 0 ){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + int openBoxLimits = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().getOpenBoxLimits(); + for (CommonProto.Item item :itemList){ + SItem sItem = SItem.getsItemMap().get(item.getItemId()); + if (item.getItemNum() > openBoxLimits){ + LOGGER.info("useItem ==>uid={},itemNum={},openBoxLimits={}",uid,item.getItemNum(),openBoxLimits); + throw new ErrorCodeException(ErrorCode.ITEM_USE_ONE_MAX); + } + if (sItem.getUseType() !=2){ //n 选1 + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + } + + StringBuilder cost = new StringBuilder(); + + Map itemMap = new HashMap<>(); + Map cardMap = new HashMap<>(); + Map equipMap = new HashMap<>(); + Map randomMap = new HashMap<>(); + + int num=0; + for (CommonProto.Item item :itemList){ + if (cost.length() == 0){ + cost = new StringBuilder(item.getItemId() + "#" + item.getItemNum()); + }else{ + cost.append("|").append(item.getItemId()).append("#").append(item.getItemNum()); + } + SItem sItem = SItem.getsItemMap().get(item.getItemId()); + num+=item.getItemNum(); + ItemUtil.combineReward(user,true,sItem.getRewardGroup(), 1f,itemMap,cardMap,equipMap,randomMap,0); + + } + int[][] costItemArr = StringUtil.parseFiledInt2(cost.toString()); + + boolean result = ItemUtil.itemCost(user, costItemArr,BIReason.USER_ITEM,0); + if (!result){ + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); + } + + if(!itemMap.containsKey(itemId)&&!cardMap.containsKey(itemId)&&!equipMap.containsKey(itemId)&&!randomMap.containsKey(itemId)){ + throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); + } + + //drop + int[][] dropItems = new int[1][]; + dropItems[0] = new int[2]; + dropItems[0][0] = itemId; + dropItems[0][1] = num; + CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropItems, BIReason.USER_ITEM); + sendUseAndPriceItemMessage(iSession, msgId, drop); + } + + /** * 分解装备 * @param iSession diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index 363b4d783..4e917b71e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -142,7 +142,8 @@ public class CBean2Proto { public static CommonProto.Equip getEquipProto(PropertyItem equip){ - Map propertyValueByIdMap = equip.getPropertyValueByIdMap(); + //前端读表 + // Map propertyValueByIdMap = equip.getPropertyValueByIdMap(); Map secondValueByIdMap = equip.getSecondValueByIdMap(); CommonProto.Equip.Builder equipProto =CommonProto.Equip.newBuilder() .setEquipId(equip.getEquipId()) @@ -151,8 +152,7 @@ public class CBean2Proto { .setIsLocked(equip.getIsLocked()); if(equip instanceof Equip){ Equip tempEquip =(Equip)equip; - equipProto.setMainAttribute(parseFromMap(propertyValueByIdMap).get(0)) - .addAllSecondAttribute(parseFromMap(secondValueByIdMap)) + equipProto .addAllSecondAttribute(parseFromMap(secondValueByIdMap)) .setRebuildLevel(tempEquip.getRebuildLevel()) .setSkillId(tempEquip.getSkill()); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index 02ae69fcf..40d7666cf 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -157,6 +157,8 @@ public class ItemUtil { addEquip(user, equipMap, dropBuilder,reason); } + + private static void combineRewardDropGroup(User user, int[] dropGroupIds, float dropRatio, Map itemMap, Map cardMap, Map equipMap, Map randomMap) { for (int dropGroupId : dropGroupIds) { if(MapLogic.getInstance().getDifficultyReward().containsKey(dropGroupId)){ @@ -373,6 +375,7 @@ public class ItemUtil { } switch (sRewardGroup.getIsUpset()) { + case GlobalItemType.SELETEONE: case GlobalItemType.ALL_DROP: getMap(user,StringUtil.parseFiledInt(rewardStr),itemMap,cardMap,equipMap,randomMap,dropRatio); break; diff --git a/tablemanager/src/main/java/config/SItem.java b/tablemanager/src/main/java/config/SItem.java index cb164f65d..4e3313a76 100644 --- a/tablemanager/src/main/java/config/SItem.java +++ b/tablemanager/src/main/java/config/SItem.java @@ -15,7 +15,7 @@ public class SItem implements BaseConfig { private int itemBaseType; //道具类型(该道具在哪个背包显示) private int quantity; private int useType; //使用类型0不使用 1掉落组 2N选1 - private int rewardGroup; + private int[] rewardGroup; private int usePerCount; private boolean isopen; private int isSave; @@ -61,7 +61,7 @@ public class SItem implements BaseConfig { return useType; } - public int getRewardGroup() { + public int[] getRewardGroup() { return rewardGroup; }