diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index d6a77149c..38f4fb95b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -191,7 +191,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.RECHARGE_BUY.getType(),Global.LMONTHCARDID)); } // 刷新鸿蒙阵 -// HeroLogic.getInstance().addOrUpdateHongmeng(user); + HeroLogic.getInstance().addOrUpdateHongmeng(user); // 组装鸿蒙阵信息 List hongmengHeroInfos = new ArrayList<>(); Map resonances = heroManager.getResonances(); @@ -205,12 +205,13 @@ public class GetPlayerInfoHandler extends BaseHandler{ hongmengHeroInfos.add(hongmengHeroInfo); } List hongmengAdditions = new ArrayList<>(); - Map resonanceAddition = heroManager.getResonanceAddition(); - for (Map.Entry entry : resonanceAddition.entrySet()) { + Map resonanceAddition = heroManager.getResonanceAddition(); + for (Map.Entry entry : resonanceAddition.entrySet()) { PlayerInfoProto.HongmengAddition hongmengAddition = PlayerInfoProto.HongmengAddition .newBuilder() .setAdditionType(entry.getKey().getPropertyId()) - .setValue(entry.getValue()) + .setValue(entry.getValue().value) + .setHeroTid(entry.getValue().heroTid) .build(); hongmengAdditions.add(hongmengAddition); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java index 86764eccd..46e936ce8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java @@ -37,7 +37,7 @@ public class HeroManager extends MongoBase { // 共鸣英雄<格子id,冷却时间> private Map resonancesTime = new HashMap<>(); // 共鸣加成 - private Map resonanceAddition = new HashMap<>(); + private Map resonanceAddition = new HashMap<>(); // 鸿蒙碑等级 private int hongmengTablet; // 鸿蒙碑最大等级 @@ -51,7 +51,6 @@ public class HeroManager extends MongoBase { public void updateRandomPoolByType(int type,Map map){ randomPoolByType.put(type,map); updateString("randomPoolByType." + type, map); - } public Map getItemMap() { @@ -175,11 +174,11 @@ public class HeroManager extends MongoBase { updateString("resonancesTime."+ index, time); } - public Map getResonanceAddition() { + public Map getResonanceAddition() { return resonanceAddition; } - public void setResonanceAddition(Map resonanceAddition) { + public void setResonanceAddition(Map resonanceAddition) { this.resonanceAddition = resonanceAddition; updateString("resonanceAddition", resonanceAddition); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HongMengAddAttribute.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HongMengAddAttribute.java new file mode 100644 index 000000000..b2d9f3fe4 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HongMengAddAttribute.java @@ -0,0 +1,11 @@ +package com.ljsd.jieling.logic.dao; + +public class HongMengAddAttribute { + public int heroTid; + public int value; + + public HongMengAddAttribute(int heroTid, int value) { + this.heroTid = heroTid; + this.value = value; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 211dc617c..18c228f86 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -3423,20 +3423,19 @@ public class HeroLogic{ return Integer.compare(hero2.getStar(), hero1.getStar()); } }); - List hongmengs = heroManager.getHongmengGuard(); - hongmengs.clear(); + List hongmengs = new ArrayList<>(); + int defaultValue = 1000; // 只要任意鸿蒙守卫中有未穿戴装备的部位,就不会触发装备共鸣,共鸣区域放入神将时不再自动卸下装备 1:不卸下装备 - int isUnloadEquip = 1; - + HongMengAddAttribute hongMengAddAttributeEquip = new HongMengAddAttribute(0, defaultValue); // 只要任意鸿蒙守卫未穿戴魂宝/灵宝,或强化等级为0,便不会触发对应宝物的共鸣 - int soulEquip = 1000; - int spiritEquip = 1000; + HongMengAddAttribute soulEquip = new HongMengAddAttribute(0, defaultValue); + HongMengAddAttribute spiritEquip = new HongMengAddAttribute(0, defaultValue); // 共鸣等级=鸿蒙守卫中最低的等级 - int resonanceLevel = 1000; + HongMengAddAttribute resonanceLevel = new HongMengAddAttribute(0, defaultValue); // 共鸣法宝=鸿蒙守卫中法宝强化最低等级 - int especialEquipLevel = 1000; + HongMengAddAttribute especialEquipLevel = new HongMengAddAttribute(0, defaultValue); // 是否开启鸿蒙碑 int tablet = 1; @@ -3448,41 +3447,18 @@ public class HeroLogic{ if (values2.contains(hero.getId())) { continue; } - if (hero.getEquipByPositionMap().size() != 4 && isUnloadEquip == 1) { - isUnloadEquip = 0; - } - if (hero.getJewelInfo().isEmpty()) { - soulEquip = 0; - spiritEquip = 0; - } else { - for (String jewel : hero.getJewelInfo()) { - PropertyItem propertyItem = equipMap.get(jewel); - if (propertyItem == null) { - soulEquip = 0; - spiritEquip = 0; - } else { - SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(propertyItem.getEquipId()); - if (config == null) { - continue; - } - // getLocation 1魂宝 2灵宝 - if (config.getLocation() == 1) { - soulEquip = propertyItem.getLevel() < soulEquip ? propertyItem.getLevel() : soulEquip; - } else { - spiritEquip = propertyItem.getLevel() < soulEquip ? propertyItem.getLevel() : soulEquip; - } - } - } - } - if (hero.getEspecialEquipLevel() < especialEquipLevel) { - especialEquipLevel = hero.getEspecialEquipLevel(); - } + // 装备 + hongmengEquip(hongMengAddAttributeEquip, hero); + // 魂宝 灵宝 + soulOrSpirit(soulEquip, spiritEquip, equipMap, hero); + // 法宝 + especialAdd(especialEquipLevel, hero); + // 是否开启鸿蒙碑 if (hero.getLevel() < Integer.parseInt(openLevel[1])) { tablet = 0; } - if (hero.getLevel() < resonanceLevel) { - resonanceLevel = hero.getLevel(); - } + // 等级 + hongmengLevel(resonanceLevel, hero); hongmengs.add(hero.getId()); if (hongmengs.size() >= Integer.parseInt(openLevel[0])) { break; @@ -3492,14 +3468,35 @@ public class HeroLogic{ return; } heroManager.setHongmengGuard(hongmengs); + // 第一个格子免费开启 + Map resonances = heroManager.getResonances(); + if (!resonances.containsKey(1)) { + resonances.put(1, ""); + heroManager.setResonances(resonances); + } // 计算共鸣属性 - Map resonanceAddition = heroManager.getResonanceAddition(); + Map resonanceAddition = heroManager.getResonanceAddition(); resonanceAddition.clear(); - resonanceAddition.put(HongMengAttributeEnum.LEVEL, resonanceLevel == 1000 ? 0 : resonanceLevel); - resonanceAddition.put(HongMengAttributeEnum.EQUIP, isUnloadEquip); - resonanceAddition.put(HongMengAttributeEnum.SOUL_EQUIP, soulEquip == 1000 ? 0 : soulEquip); - resonanceAddition.put(HongMengAttributeEnum.SPIRIT_EQUIP, spiritEquip == 1000 ? 0 : spiritEquip); - resonanceAddition.put(HongMengAttributeEnum.MAGIC_WEAPON, especialEquipLevel == 1000 ? 0 : especialEquipLevel); + if (resonanceLevel.value == defaultValue) { + resonanceLevel.value = 0; + } + if (hongMengAddAttributeEquip.value == defaultValue) { + hongMengAddAttributeEquip.value = 0; + } + if (soulEquip.value == defaultValue) { + soulEquip.value = 0; + } + if (spiritEquip.value == defaultValue) { + spiritEquip.value = 0; + } + if (especialEquipLevel.value == defaultValue) { + especialEquipLevel.value = 0; + } + resonanceAddition.put(HongMengAttributeEnum.LEVEL, resonanceLevel); + resonanceAddition.put(HongMengAttributeEnum.EQUIP, hongMengAddAttributeEquip); + resonanceAddition.put(HongMengAttributeEnum.SOUL_EQUIP, soulEquip); + resonanceAddition.put(HongMengAttributeEnum.SPIRIT_EQUIP, spiritEquip); + resonanceAddition.put(HongMengAttributeEnum.MAGIC_WEAPON, especialEquipLevel); heroManager.setResonanceAddition(resonanceAddition); // 鸿蒙碑 if (tablet == 1 && heroManager.getHongmengTablet() == 0) { @@ -3508,6 +3505,95 @@ public class HeroLogic{ } } + /** + * 鸿蒙阵对神将等级加成 + * @param resonanceLevel + * @param hero + */ + public void hongmengLevel(HongMengAddAttribute resonanceLevel, Hero hero) { + if (hero.getLevel() < resonanceLevel.value) { + resonanceLevel.value = hero.getLevel(); + resonanceLevel.heroTid = hero.getTemplateId(); + } + } + + /** + * 鸿蒙阵对法宝加成 + * @param especialEquipLevel + * @param hero + */ + public void especialAdd(HongMengAddAttribute especialEquipLevel, Hero hero) { + if (hero.getEspecialEquipLevel() < especialEquipLevel.value) { + especialEquipLevel.value = hero.getEspecialEquipLevel(); + especialEquipLevel.heroTid = hero.getTemplateId(); + } + } + + /** + * 鸿蒙阵对魂宝灵宝加成 + * @param soulEquip + * @param spiritEquip + * @param equipMap + * @param hero + */ + public void soulOrSpirit(HongMengAddAttribute soulEquip, HongMengAddAttribute spiritEquip, Map equipMap, Hero hero) { + if (hero.getJewelInfo().isEmpty()) { + soulEquip.value = 0; + spiritEquip.value = 0; + soulEquip.heroTid = 0; + spiritEquip.heroTid = 0; + } else { + for (String jewel : hero.getJewelInfo()) { + PropertyItem propertyItem = equipMap.get(jewel); + if (propertyItem == null) { + soulEquip.value = 0; + spiritEquip.value = 0; + soulEquip.heroTid = 0; + spiritEquip.heroTid = 0; + } else { + SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(propertyItem.getEquipId()); + if (config == null) { + continue; + } + // getLocation 1魂宝 2灵宝 + if (config.getLocation() == 1) { + soulEquip.value = propertyItem.getLevel() < soulEquip.value ? propertyItem.getLevel() : soulEquip.value; + soulEquip.heroTid = hero.getTemplateId(); + } else { + spiritEquip.value = propertyItem.getLevel() < soulEquip.value ? propertyItem.getLevel() : soulEquip.value; + spiritEquip.heroTid = hero.getTemplateId(); + } + } + } + } + } + + /** + * 鸿蒙阵对装备加成 + * @param hongMengAddAttributeEquip + * @param hero + */ + public void hongmengEquip(HongMengAddAttribute hongMengAddAttributeEquip, Hero hero) { + if (hero.getEquipByPositionMap().size() != 4) { + hongMengAddAttributeEquip.value = -1; + hongMengAddAttributeEquip.heroTid = 0; + } + if (hongMengAddAttributeEquip.value > 0) { + for (Integer value : hero.getEquipByPositionMap().values()) { + SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(value); + if (sEquipConfig == null) { + hongMengAddAttributeEquip.value = -1; + hongMengAddAttributeEquip.heroTid = 0; + break; + } + if (sEquipConfig.getStar() < hongMengAddAttributeEquip.value) { + hongMengAddAttributeEquip.value = sEquipConfig.getQuality(); + hongMengAddAttributeEquip.heroTid = hero.getTemplateId(); + } + } + } + } + /** * 开启共鸣区域格子 * @param session @@ -3595,20 +3681,23 @@ public class HeroLogic{ User user = UserManager.getUser(session.getUid()); HeroManager heroManager = user.getHeroManager(); Map resonances = heroManager.getResonances(); - String resonanceInfo = resonances.get(index); - if (resonanceInfo == null || resonanceInfo.isEmpty()) { + String heroId = resonances.get(index); + if (heroId == null || heroId.isEmpty()) { LOGGER.info("unLoadResonance uid=>{} the index not open=>{}", user.getId(), index); throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF); } - Hero hero = heroManager.getHero(resonanceInfo); + Hero hero = heroManager.getHero(heroId); if (hero == null) { - LOGGER.info("unLoadResonance uid=>{} cur hero is null {}", user.getId(), resonanceInfo); + LOGGER.info("unLoadResonance uid=>{} cur hero is null {}", user.getId(), heroId); throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF); } heroManager.updateResonances(index, ""); heroManager.updateResonancesTime(index, TimeUtils.now() + SSpecialConfig.getIntegerValue(SSpecialConfig.HONGMENG_LATTICE_WAIT_TIME) * 1000); - heroManager.updateResonances(index, resonanceInfo); - MessageUtil.sendMessage(session, 1, messageType.getNumber(), null); + HeroInfoProto.ResonanceResponse resonanceResponse = HeroInfoProto.ResonanceResponse + .newBuilder() + .setLeftTime(SSpecialConfig.getIntegerValue(SSpecialConfig.HONGMENG_LATTICE_WAIT_TIME)) + .build(); + MessageUtil.sendMessage(session, 1, messageType.getNumber(), resonanceResponse); } /**