From 8e8cc31b08dbc74e20e0a43ccc918b0d13130e11 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Fri, 3 Apr 2020 11:45:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Task=20=E3=80=90ID1006033=E3=80=91=E3=80=90?= =?UTF-8?q?=E6=96=B0=E6=88=98=E6=96=97=E7=89=88=E6=9C=AC=E3=80=91=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E8=A3=85=E5=A4=87=E5=90=88=E6=88=90=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clazzStaticCfg/ItemStaticConfig.java | 32 ++++++++++++++++++- .../com/ljsd/jieling/globals/BIReason.java | 4 ++- .../com/ljsd/jieling/hotfix/HotfixUtil.java | 4 ++- .../ljsd/jieling/logic/dao/RechargeInfo.java | 2 +- .../ljsd/jieling/logic/item/ItemLogic.java | 13 ++++++++ .../src/main/java/config/SEquipConfig.java | 9 ++++++ 6 files changed, 60 insertions(+), 4 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/ItemStaticConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/ItemStaticConfig.java index efc578183..8627d5e8b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/ItemStaticConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/ItemStaticConfig.java @@ -1,11 +1,15 @@ package com.ljsd.jieling.config.clazzStaticCfg; import com.ljsd.jieling.util.ItemUtil; +import config.SEquipConfig; import config.SRewardGroup; import config.SRewardItem; import manager.AbstractClassStaticConfig; +import manager.STableManager; import manager.Table; +import java.util.HashMap; +import java.util.Map; import java.util.Set; /** @@ -15,12 +19,13 @@ import java.util.Set; */ public class ItemStaticConfig extends AbstractClassStaticConfig { + private Map> euipTppes; @Override public void registConfigs(Set registConfigs) { registConfigs.add(SRewardItem.class.getAnnotation(Table.class).name()); registConfigs.add(SRewardGroup.class.getAnnotation(Table.class).name()); - + registConfigs.add(SEquipConfig.class.getAnnotation(Table.class).name()); } @Override @@ -31,5 +36,30 @@ public class ItemStaticConfig extends AbstractClassStaticConfig { } catch (Exception e) { LOGGER.error("SRewardItem|SRewardGroup init fail"); } + try { + euipTppes = new HashMap<>(); + Map config = STableManager.getConfig(SEquipConfig.class); + config.forEach((k,v)->{ + int type = v.getPosition(); + Map orDefault = euipTppes.getOrDefault(type, new HashMap<>()); + orDefault.putIfAbsent(v.getStar(),k); + euipTppes.putIfAbsent(type,orDefault); + }); + }catch (Exception e){ + LOGGER.error("exception"); + } } + + public Map> getEuipTppes() { + return euipTppes; + } + + public int getEquipByStar(int type, int star){ + Map integerIntegerMap = euipTppes.get(type); + if(null == integerIntegerMap){ + return 0; + } + return integerIntegerMap.getOrDefault(star,0); + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index 127a26155..6aa8994ea 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -113,7 +113,7 @@ public interface BIReason { int EXPEDITION_BOX_REWARD = 65;//猎妖之路宝箱奖励 int EXPEDITION_DROP_REWARD = 66;//猎妖之路奖励 - + int COMPLEX_EQUIP = 67;//合成装备 int ADVENTURE_UPLEVEL_CONSUME = 1000;//秘境升级 int SECRETBOX_CONSUME = 1001;//秘盒抽卡 @@ -209,6 +209,8 @@ public interface BIReason { int CHAMPIONM_EXCHANGE_CONSUME = 1050;//巅峰赛兑换 + int COMPLEX_EQUIP_CONSUME = 1051; //合成英雄 + diff --git a/serverlogic/src/main/java/com/ljsd/jieling/hotfix/HotfixUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/hotfix/HotfixUtil.java index fb248193c..b4f0299eb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/hotfix/HotfixUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/hotfix/HotfixUtil.java @@ -65,7 +65,9 @@ public class HotfixUtil implements IEventHandler { } LOGGER.debug("HotfixUtil->currVerion={},version={}", currVerion, version); - + if (SysUtil.isWindows()) { + return; + } //版本发生了变化,热更新 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java index 4cc10e184..f6a242941 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/RechargeInfo.java @@ -246,7 +246,7 @@ public class RechargeInfo extends MongoBase{ public void setMonthSaveAmt(int monthSaveAmt) { this.monthSaveAmt = monthSaveAmt; - updateString("monthSaveAmt",smonthSaveAmt); + updateString("monthSaveAmt",monthSaveAmt); } public int getSmonthSaveAmt() { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java index faece47ab..2087eb5ac 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java @@ -562,4 +562,17 @@ public class ItemLogic { ItemLogUtil.addLogQueue(itemLog); } + /** + * 获取指定装备的所有装备 过滤掉已穿戴 + * @param user + * @param equipid + * @return + */ + public static TreeSet getEquipByID(User user, int equipid) { + TreeSet equiplist = new TreeSet<>(); + user.getEquipManager().getEquipMap().entrySet().stream().filter(stringEquipEntry -> + StringUtil.isEmpty(stringEquipEntry.getValue().getHeroId()) && stringEquipEntry.getValue().getEquipId() == equipid + ).forEach(stringEquipEntry -> equiplist.add(stringEquipEntry.getKey())); + return equiplist; + } } diff --git a/tablemanager/src/main/java/config/SEquipConfig.java b/tablemanager/src/main/java/config/SEquipConfig.java index a8b39cd3b..03069efed 100644 --- a/tablemanager/src/main/java/config/SEquipConfig.java +++ b/tablemanager/src/main/java/config/SEquipConfig.java @@ -33,6 +33,7 @@ public class SEquipConfig implements BaseConfig { private int score; + private int star; @Override public void init() throws Exception { @@ -92,4 +93,12 @@ public class SEquipConfig implements BaseConfig { } public int getIfShow(){return ifShow; } + + public int getStar() { + return star; + } + + public void setStar(int star) { + this.star = star; + } } \ No newline at end of file From 64fabcd9d7068d77176d5d2203c3fca6b222424a Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Fri, 3 Apr 2020 11:45:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Task=20=E3=80=90ID1006033=E3=80=91=E3=80=90?= =?UTF-8?q?=E6=96=B0=E6=88=98=E6=96=97=E7=89=88=E6=9C=AC=E3=80=91=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E8=A3=85=E5=A4=87=E5=90=88=E6=88=90=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/equip/ComplexEquipHandler.java | 194 ++++++++++++++++++ .../main/java/config/SEquipStarsConfig.java | 37 ++++ 2 files changed, 231 insertions(+) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ComplexEquipHandler.java create mode 100644 tablemanager/src/main/java/config/SEquipStarsConfig.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ComplexEquipHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ComplexEquipHandler.java new file mode 100644 index 000000000..d1e87ab47 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ComplexEquipHandler.java @@ -0,0 +1,194 @@ +package com.ljsd.jieling.handler.equip; + +import com.ljsd.jieling.config.clazzStaticCfg.ItemStaticConfig; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.Equip; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.logic.item.ItemLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.CommonProto; +import com.ljsd.jieling.protocols.HeroInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.CBean2Proto; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SEquipStarsConfig; +import manager.STableManager; + +import java.util.*; + +/** + * Description: 合成装备 + * Author: zsx + * CreateDate: 2020/4/2 15:48 + */ +public class ComplexEquipHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.EQUIP_COMPLEX_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, HeroInfoProto.ComplexEquipRequest proto) throws Exception { + + int uid = iSession.getUid(); + User user = UserManager.getUser(uid); + if (user == null) { + throw new ErrorCodeException(ErrorCode.UNKNOWN); + } + if (proto.getStar() != 0) {//手动合成 + //check param and cnf + if (proto.getNum() <= 0) { + throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); + } + int needStar = proto.getStar() - 1; + if (needStar <= 0) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + int targetEquip = STableManager.getFigureConfig(ItemStaticConfig.class).getEquipByStar(proto.getType(), proto.getStar()); + if (targetEquip == 0) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + int equipId = STableManager.getFigureConfig(ItemStaticConfig.class).getEquipByStar(proto.getType(), needStar); + if (equipId == 0) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + Set equipByIDs = ItemLogic.getEquipByID(user, equipId); + + SEquipStarsConfig sEquipStarsConfig = STableManager.getConfig(SEquipStarsConfig.class).get(needStar); + if (null == sEquipStarsConfig) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + SEquipStarsConfig sTargetEquipStarsConfig = STableManager.getConfig(SEquipStarsConfig.class).get(proto.getStar()); + if (null == sTargetEquipStarsConfig) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + int needcount = sEquipStarsConfig.getRankupCount(); + if (equipByIDs.size() / needcount < proto.getNum()) { + //数据不够 + throw new ErrorCodeException(ErrorCode.UNKNOWN); + } + + //check cost + Map consumeMap = new HashMap<>(); + for (int i = 0; i < proto.getNum(); i++) { + int[][] sumConsume = sTargetEquipStarsConfig.getRankupResources(); + HeroLogic.getInstance().combinedAttribute(sumConsume, consumeMap); + } + boolean enough = ItemUtil.itemCost(user, consumeMap, BIReason.COMPLEX_EQUIP_CONSUME, 0); + if (!enough) { + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); + } + + //drop + int[][] dropItems = new int[1][]; + dropItems[0] = new int[2]; + dropItems[0][0] = targetEquip; + dropItems[0][1] = proto.getNum(); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropItems, BIReason.COMPLEX_EQUIP); + HeroInfoProto.ComplexEquipResponse.Builder response = HeroInfoProto.ComplexEquipResponse.newBuilder(); + + //remove hero + int i = 1; + for (String id : equipByIDs) { + if (i > proto.getNum() * needcount) { + break; + } + response.addEquipIds(id); + user.getEquipManager().remove(id); + i++; + } + response.setDrop(drop); + MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.EQUIP_COMPLEX_RESPONSE_VALUE, response.build(), true); + + } else { + + Map> euipTppes = STableManager.getFigureConfig(ItemStaticConfig.class).getEuipTppes(); + Map integerIntegerMap = new TreeMap<>(euipTppes.getOrDefault(proto.getType(), new HashMap<>())); + + Set equipadds =new HashSet<>(); + Map consumeMap = new HashMap<>(); + List< CommonProto.Equip> equips = new LinkedList<>(); + Set newids = new HashSet<>(); + for (Map.Entry entry : integerIntegerMap.entrySet()) { + //star conf + int targetstar = entry.getKey()+1; + SEquipStarsConfig sTargetEquipStarsConfig = STableManager.getConfig(SEquipStarsConfig.class).get(targetstar); + if (null == sTargetEquipStarsConfig) { + break; + } + SEquipStarsConfig sEquipStarsConfig = STableManager.getConfig(SEquipStarsConfig.class).get(entry.getKey()); + if (null == sEquipStarsConfig) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + + int targetEquipId = STableManager.getFigureConfig(ItemStaticConfig.class).getEquipByStar(proto.getType(), targetstar); + if (targetEquipId == 0) { + break; + } + int equipId = STableManager.getFigureConfig(ItemStaticConfig.class).getEquipByStar(proto.getType(),entry.getKey()); + if (equipId == 0) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + + + TreeSet equipByIDs = ItemLogic.getEquipByID(user, equipId); + int canConNum =equipByIDs.size()/sEquipStarsConfig.getRankupCount(); + if(canConNum<=0){ + continue; + } + //check cost + boolean enough; + int needcount=0; + + for (int i = 0; i < canConNum; i++) { + int[][] sumConsume = sEquipStarsConfig.getRankupResources(); + Map consumeMapTem = new HashMap<>(); + HeroLogic.getInstance().combinedAttribute(sumConsume, consumeMapTem); + enough = ItemUtil.checkCost(user, consumeMapTem); + if (!enough) { + break; + } + + //生成装备 混合消耗 + Equip equip = new Equip(user.getId(),targetEquipId); + user.getEquipManager().addEquip(user,equip); + newids.add(equip.getId());//后面合成可能会被删除 + + needcount += sEquipStarsConfig.getRankupCount(); + HeroLogic.getInstance().combinedAttribute(sumConsume, consumeMap); + } + + //消耗装备 + int i = 1; + for (String id : equipByIDs.descendingSet()) { + if (i > needcount) { + break; + } + if(!newids.contains(id)){ + equipadds.add(id); + }else { + newids.remove(id); + } + user.getEquipManager().remove(id); + i++; + } + } + for (String id:newids) { + equips.add(CBean2Proto.getEquipProto( user.getEquipManager().getEquipMap().get(id))); + } + ItemUtil.itemCost(user, consumeMap, BIReason.COMPLEX_EQUIP_CONSUME, 0); + CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder().addAllEquipId(equips); + HeroInfoProto.ComplexEquipResponse.Builder response = HeroInfoProto.ComplexEquipResponse.newBuilder(); + response.addAllEquipIds(equipadds); + response.setDrop(drop); + System.out.print(response.build().toString()); + MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.EQUIP_COMPLEX_RESPONSE_VALUE, response.build(), true); + } + } +} diff --git a/tablemanager/src/main/java/config/SEquipStarsConfig.java b/tablemanager/src/main/java/config/SEquipStarsConfig.java new file mode 100644 index 000000000..0260a8818 --- /dev/null +++ b/tablemanager/src/main/java/config/SEquipStarsConfig.java @@ -0,0 +1,37 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.Map; + +@Table(name ="EquipStarsConfig") +public class SEquipStarsConfig implements BaseConfig { + + private int id; + + private int rankupCount; + + private int[][] rankupResources; + + + @Override + public void init() throws Exception { + + } + + + public int getId() { + return id; + } + + public int getRankupCount() { + return rankupCount; + } + + public int[][] getRankupResources() { + return rankupResources; + } + + +} \ No newline at end of file