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 a343038d4..ba3770b44 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -410,4 +410,5 @@ public interface BIReason { int COMPARENUM_LEVEL_REWARD = 1306; // 比数字小游戏过关奖励 int COMPARENUM_TOTAL_REWARD = 1307; // 比数字小游戏章节累计奖励 + int MAXESPECIALEQUIPHANDLE = 1309; //法宝最高上限回滚处理 } \ No newline at end of file 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 6f558e7be..4a0c743e2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -1,10 +1,12 @@ package com.ljsd.jieling.handler; +import com.alibaba.fastjson.JSON; import com.ljsd.GameApplication; import com.ljsd.jieling.config.clazzStaticCfg.HeroStaticConfig; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.jbean.ActivityMission; @@ -49,6 +51,7 @@ import rpc.protocols.PlayerInfoProto; import util.TimeUtils; import java.util.*; +import java.util.stream.Collectors; @Component public class GetPlayerInfoHandler extends BaseHandler{ @@ -120,13 +123,9 @@ public class GetPlayerInfoHandler extends BaseHandler{ } CommonProto.Player player = CBean2Proto.getPlayer(userId, user.getPlayerInfoManager(), user.getPlayerInfoManager().getMapId(), user.getMapManager().getCurMapId(),user.getMapManager()); CommonProto.SuddenlyBossInfo suddenlyBossInfo = CommonProto.SuddenlyBossInfo.newBuilder().setSuddBossId(mapManager.getSuddenlyBoss()).setEndTime(mapManager.getSuddenlyBossEndTime()).setFindMapId(mapManager.getFindSuddenlyBossMapId()).build(); -// CommonProto.VipBaseInfo vipInfoProto = CommonProto.VipBaseInfo.newBuilder() -// .setHadTakeLevelBox(playerInfoManager.getHadTakeLevelBoxVip()) -// .setVipLevel(playerInfoManager.getVipLevel()).build(); CommonProto.PlayerBindPhone playerBindPhone = CommonProto.PlayerBindPhone.newBuilder() .setPhoneNum(user.getPlayerInfoManager().getPhoneBindInfo().getPhoneNum()) .setState(user.getPlayerInfoManager().getPhoneBindInfo().getState()).build(); - NewRechargeInfo newRechargeInfo = playerInfoManager.getNewRechargeInfo(); HeroManager heroManager = user.getHeroManager(); Map totalCountMap = heroManager.getTotalCount(); int alreadyCount =0; @@ -251,17 +250,8 @@ public class GetPlayerInfoHandler extends BaseHandler{ PlayerLogic.getInstance().soulPrintHandBookDispose(user); // 心愿抽卡 旧玩家兼容 wishOldUserRandomNumInit(user); - //hotfix 月卡 -// PlayerLogic.getInstance().getMonthCardInfo(user); -// int monthline = STableManager.getConfig(SMonthcardConfig.class).get(Global.MONTHCARDID).getPrice(); -// int lmonthline = STableManager.getConfig(SMonthcardConfig.class).get(Global.LMONTHCARDID).getPrice(); -// if(newRechargeInfo.getMonthRr()>=monthline&&playerInfoManager.getMonthCard().getOrDefault(1,0)==0){ -// user.getPlayerInfoManager().getMonthCard().put(Global.MONTHCARDID, (int) (System.currentTimeMillis() / 1000)); -// } -// if(newRechargeInfo.getsMonthRr()>=lmonthline&&playerInfoManager.getMonthCard().getOrDefault(2,0)==0){ -// user.getPlayerInfoManager().getMonthCard().put(Global.LMONTHCARDID, (int) (System.currentTimeMillis() / 1000)); -// Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.RECHARGE_BUY.getType(),Global.LMONTHCARDID)); -// } + // 法宝最高等级处理 + maxEspecialEquipHandle(user); // 四灵试炼初始化 FourChallengeLogic.getInstance().firstGetTimes(user); @@ -559,4 +549,48 @@ public class GetPlayerInfoHandler extends BaseHandler{ } } + /** + * 法宝最高等级处理 + * @param user + * @throws Exception + */ + private void maxEspecialEquipHandle(User user) throws Exception { + // 公用数据 + List heroList = user.getHeroManager().getHeroMap().values().stream().collect(Collectors.toList()); + Map heroMap = SCHero.getsCHero(); + Map> talismanaStarMap = SEquipTalismana.equipTalismanaStarMap; + int maxLimit = SSpecialConfig.getIntegerValue(SSpecialConfig.EquipTalismanaUpperLimit); + ArrayList itemList = new ArrayList<>(); + + for (Hero hero : heroList) { + // 获取英雄的法宝信息 + int[] equipTalismana = heroMap.get(hero.getTemplateId()).getEquipTalismana(); + if (equipTalismana == null || equipTalismana.length < 2) { + continue; + } + // 验证最高等级是否满足 + int level = hero.getOriginalEspecialEquipLevel(); + if (level <= maxLimit){ + continue; + } + // 获得道具 + TreeMap talismanaTreeMap = new TreeMap<>(talismanaStarMap.get(equipTalismana[1])); + Map subMap = talismanaTreeMap.subMap(maxLimit, level); + for (SEquipTalismana talismana : subMap.values()) { + itemList.add(talismana.getRankupBasicMaterial()); + } + // 设置等级到最高 + hero.updateEspecial(maxLimit); + // 更新战力 + Poster.getPoster().dispatchEvent(new SaveHeroForceEvent(user.getId(),hero.getId())); + LOGGER.info("===========法宝最高等级处理道具返还,玩家id:{},法宝:{},原始等级:{},当前等级:{},返还道具:{}",user.getId(),equipTalismana[1],level,maxLimit,JSON.toJSONString(itemList)); + } + // 道具进入背包 + ItemUtil.drop(user,itemList, BIReason.MAXESPECIALEQUIPHANDLE); + // 邮件提醒 + String title = SErrorCodeEerverConfig.getI18NMessage("fabao_mail_title"); + String content = SErrorCodeEerverConfig.getI18NMessage("fabao_mail_txt"); + MailLogic.getInstance().sendMail(user.getId(),title,content,"",TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME); + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fabaolv.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fabaolv.java new file mode 100644 index 000000000..7ae4df16b --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fabaolv.java @@ -0,0 +1,36 @@ +package com.ljsd.jieling.kefu; + +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.activity.event.SaveHeroForceEvent; +import com.ljsd.jieling.logic.dao.Hero; +import com.ljsd.jieling.logic.dao.root.User; +import config.SCHero; + +import java.util.Map; + +/** + * @Author hj + * @Date 2021/10/28 17:35:00 + * @Description: 英雄法宝 命令: \\fabaolv 角色id 英雄名#法宝等级 + * @Version 1.0 + */ +public class Cmd_fabaolv extends GmRoleAbstract { + @Override + public boolean exec(String[] args) throws Exception { + String[] split = args[0].split("#"); + if (split.length < 2){ + return false; + } + User user = getUser(); + Map heroMap = user.getHeroManager().getHeroMap(); + for (Hero hero : heroMap.values()) { + SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); + if (scHero.getReadingName().equals(split[0])){ + hero.updateEspecial(Integer.parseInt(split[1])); + // 更新战力 + Poster.getPoster().dispatchEvent(new SaveHeroForceEvent(user.getId(),hero.getId())); + } + } + return true; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java index 80801d969..5b00d9106 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java @@ -426,20 +426,25 @@ public class Hero extends MongoBase implements Comparable,Cloneable { } public int getEspecialEquipLevel() { + int max = SSpecialConfig.getIntegerValue(SSpecialConfig.EquipTalismanaUpperLimit); + return especialEquipLevel>max ? max : especialEquipLevel; + } + + public int getOriginalEspecialEquipLevel() { return especialEquipLevel; } public int getEspecialEquipLevelByHongmeng(HeroManager heroManager, String heroId) { // 英雄在共鳴池中 - if (heroManager.getResonances().values().contains(heroId)) { - // 法宝 - HongMengAddAttribute hongMengAddAttribute = heroManager.getResonanceAddition().get(HongMengAttributeEnum.MAGIC_WEAPON); - if (hongMengAddAttribute != null) { - // 对比本身和共鸣等级,选高的 - return especialEquipLevel >= hongMengAddAttribute.value ? especialEquipLevel : hongMengAddAttribute.value; - } - } - return especialEquipLevel; +// if (heroManager.getResonances().values().contains(heroId)) { +// // 法宝 +// HongMengAddAttribute hongMengAddAttribute = heroManager.getResonanceAddition().get(HongMengAttributeEnum.MAGIC_WEAPON); +// if (hongMengAddAttribute != null) { +// // 对比本身和共鸣等级,选高的 +// return especialEquipLevel >= hongMengAddAttribute.value ? especialEquipLevel : hongMengAddAttribute.value; +// } +// } + return getEspecialEquipLevel(); } public Set getJewelInfo() { 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 2707f776b..dddd80351 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 @@ -5464,12 +5464,6 @@ public class HeroLogic { MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.HONGMENG_STELE_NEW_HAND_INDICATION.getNumber(), builder.build(), true); } } - - // 不够6个无法开启鸿蒙阵 - /*if (hongmengs.size() < Integer.parseInt(openLevel[0])) { - return; - }*/ - // 守卫/使者英雄池 Map guards = heroManager.getHongmengGuards(); // 英雄装备 @@ -5483,7 +5477,6 @@ public class HeroLogic { hongMengAddAttributeEquip = new HongMengAddAttribute(0, defaultValue); soulEquip = new HongMengAddAttribute(0, defaultValue); spiritEquip = new HongMengAddAttribute(0, defaultValue); - especialEquipLevel = new HongMengAddAttribute(0, defaultValue); break; } // 装备 @@ -5491,8 +5484,6 @@ public class HeroLogic { // 魂宝 灵宝 soulOrSpirit(soulEquip, 1, equipMap, hero); soulOrSpirit(spiritEquip, 2, equipMap, hero); - // 法宝 - especialAdd(especialEquipLevel, hero); } } @@ -5518,7 +5509,6 @@ public class HeroLogic { 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); /*** ============================= 开始组装鸿蒙阵信息 ==================================== **/ 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 fade412ad..b01dfa7bb 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 @@ -704,6 +704,10 @@ public class ItemLogic { } int especialEquipId = scHero.getEquipTalismana()[1]; + int maxLimit = SSpecialConfig.getIntegerValue(SSpecialConfig.EquipTalismanaUpperLimit); + if (hero.getEspecialEquipLevel() >= maxLimit){ + throw new ErrorCodeException(ErrorCode.newDefineCode("法宝已最大限制等级")); + } SEquipTalismana sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId).get(hero.getEspecialEquipLevel()); if (sEquipTalismana == null || sEquipTalismana.getRankupBasicMaterial() == null|| sEquipTalismana.getRankupBasicMaterial().length==0) { throw new ErrorCodeException(ErrorCode.newDefineCode("法宝已最大等级")); diff --git a/tablemanager/src/main/java/config/SSpecialConfig.java b/tablemanager/src/main/java/config/SSpecialConfig.java index 5b27e4034..33f4be737 100644 --- a/tablemanager/src/main/java/config/SSpecialConfig.java +++ b/tablemanager/src/main/java/config/SSpecialConfig.java @@ -132,6 +132,7 @@ public class SSpecialConfig implements BaseConfig { public static final String CHANGE_CAMP_COST = "ChangeCampCost";//神转换阵营消耗 public static final String GodSignOpenStar = "GodSignOpenStar";//神印格子开启所需神将星级 public static final String ChangingPosUnlock = "ChangingPosUnlock";//3个变身卡化身位解锁所需的化身之力等级 + public static final String EquipTalismanaUpperLimit = "EquipTalismanaUpperLimit ";//法宝等级上限 @Override public void init() throws Exception {