diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java index 744e9494a..a1c3057b5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java @@ -308,7 +308,7 @@ public class EndExpeditionBattleRequest extends BaseHandler itemNum = new ArrayList<>(itemList.size()); itemList.forEach(item->{ itemId.add(item.getItemId()); - itemNum.add(item.getItemNum()); + itemNum.add((int)item.getItemNum()); }); ReportUtil.onReportEvent(user, ReportEventEnum.START_TIANGONG.getType(),user.getExpeditionManager().getExpeditionLeve(),oldlay-1,nodeInfo.getType(),"胜利",itemId,itemNum); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 2a4e20403..186fe5ae1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -2329,7 +2329,7 @@ public class MapLogic { List itemNumList = new ArrayList<>(); itemDrop.forEach(item->{ itemIdList.add(item.getItemId()); - itemNumList.add(item.getItemNum()); + itemNumList.add((int)item.getItemNum()); }); ReportUtil.onReportEvent(user,ReportEventEnum.COMPLETE_XINMO.getType(),checkFightId,sFloodConfig.getMonster(),MonsterUtil.getMonsterForce(new int[]{sFloodConfig.getMonster()}),new Date(),"",itemIdList,itemNumList,"成功"); } @@ -3156,7 +3156,7 @@ public class MapLogic { List itemNumList = new ArrayList<>(); itemDrop.forEach(item->{ itemIdList.add(item.getItemId()); - itemNumList.add(item.getItemNum()); + itemNumList.add((int)item.getItemNum()); }); ReportUtil.onReportEvent(user,ReportEventEnum.COMPLETE_DAILY_DUNGEON.getType(),id,sDailyChallengeConfig.getType(),sDailyChallengeConfig.getMonsterId(),MonsterUtil.getMonsterForce(new int[]{sDailyChallengeConfig.getMonsterId()}),new Date(),"",0,itemIdList,itemNumList,type==1?"挑战":"扫荡",isFailed?"失败":"通过"); user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_CHALLENGE,sDailyChallengeConfig.getType()); 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 c78263dfb..db4f9dc61 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 @@ -2347,7 +2347,7 @@ public class HeroLogic{ User user = UserManager.getUser(uid); int hasHeroNum = user.getHeroManager().getHeroMap().size(); int itemId = item.getItemId(); - int itemNum = item.getItemNum(); + int itemNum = (int)item.getItemNum(); SItem sItem = SItem.getsItemMap().get(itemId); if (sItem == null || itemNum <= 0 || itemNum >= Integer.MAX_VALUE) { throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); @@ -2758,7 +2758,7 @@ public class HeroLogic{ List itemNum = new ArrayList<>(itemList.size()); itemList.forEach(item->{ itemId.add(item.getItemId()); - itemNum.add(item.getItemNum()); + itemNum.add((int)item.getItemNum()); }); ReportUtil.onReportEvent(user,ReportEventEnum.HERO_COMPOSITION.getType(),String.valueOf(hero.getTemplateId()),hero.getLevel(user.getHeroManager()),hero.getStar(),itemId,itemNum); hero.setLevel(user,1); 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 0d8ca6c76..409a4dd02 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 @@ -70,11 +70,11 @@ public class ItemLogic { if (cost.length() == 0) { cost = new StringBuilder(item.getItemId() + "#" + item.getItemNum()); SItem sItem = SItem.getsItemMap().get(item.getItemId()); - reward = getStringBuilder(reward, item.getItemNum(), sItem.getResolveReward()); + reward = getStringBuilder(reward, (int)item.getItemNum(), sItem.getResolveReward()); } else { cost.append("|").append(item.getItemId()).append("#").append(item.getItemNum()); SItem sItem = SItem.getsItemMap().get(item.getItemId()); - reward = getStringBuilder(reward, item.getItemNum(), sItem.getResolveReward()); + reward = getStringBuilder(reward, (int)item.getItemNum(), sItem.getResolveReward()); } } int[][] costItemArr = StringUtil.parseFiledInt2(cost.toString()); @@ -173,11 +173,11 @@ public class ItemLogic { if (cost.length() == 0) { cost = new StringBuilder(item.getItemId() + "#" + item.getItemNum()); SItem sItem = SItem.getsItemMap().get(item.getItemId()); - reward = getStringBuilder(reward, item.getItemNum(), sItem.getRewardGroup()); + reward = getStringBuilder(reward, (int)item.getItemNum(), sItem.getRewardGroup()); } else { cost.append("|").append(item.getItemId()).append("#").append(item.getItemNum()); SItem sItem = SItem.getsItemMap().get(item.getItemId()); - reward = getStringBuilder(reward, item.getItemNum(), sItem.getRewardGroup()); + reward = getStringBuilder(reward, (int)item.getItemNum(), sItem.getRewardGroup()); } } int[][] costItemArr = StringUtil.parseFiledInt2(cost.toString()); @@ -209,7 +209,7 @@ public class ItemLogic { } - boolean use = ItemUtil.itemCost(user, new int[][]{{item.getItemId(), item.getItemNum()}}, BIReason.SKIN_USE_CONSUME, 1); + boolean use = ItemUtil.itemCost(user, new int[][]{{item.getItemId(), (int)item.getItemNum()}}, BIReason.SKIN_USE_CONSUME, 1); if (!use) { throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); } @@ -404,7 +404,7 @@ public class ItemLogic { List itemNum = new ArrayList<>(reportMap.size()); reportMap.forEach(item -> { itemId.add(item.getItemId()); - itemNum.add(item.getItemNum()); + itemNum.add((int)item.getItemNum()); }); ReportUtil.onReportEvent(user, ReportEventEnum.TREASURE_DECOMPOSITION.getType(), reportIdLevelQuality.toString(), itemId, itemNum); sendUseAndPriceItemMessage(session, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, drop); 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 9d9ad921e..b437476a0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -67,7 +67,7 @@ public class CBean2Proto { * @param itemNum 道具数量,一般是增量,-1 表示全量 * @return */ - public static CommonProto.Item getItem(Item item,int itemNum){ + public static CommonProto.Item getItem(Item item,long itemNum){ if(itemNum == -1){ itemNum = (int) item.getItemNum(); } 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 9bb64c3a5..df8d402c0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -576,8 +576,8 @@ public class ItemUtil { for (Map.Entry entry : itemMap.entrySet()) { SItem sItem = SItem.getsItemMap().get (entry.getKey()); - int itemNumlimit = sItem.getItemNumlimit(); - int itemNum = entry.getValue().intValue(); + long itemNumlimit = sItem.getItemNumlimit(); + long itemNum = entry.getValue().intValue(); if(itemNum <= 0){ continue; } @@ -628,7 +628,7 @@ public class ItemUtil { ReportUtil.onReportEvent(user,ReportEventEnum.GET_ITEM.getType(),itemNum,String.valueOf(reason),item.getItemId()); - baseItemReport(user,item.getItemId(),itemNum,1,reason); + baseItemReport(user,item.getItemId(),(int)itemNum,1,reason); if(sItem.getId() == Global.EXP){ userLevelUp(user,itemNum); @@ -694,8 +694,8 @@ public class ItemUtil { for (Map.Entry entry : itemMap.entrySet()) { SItem sItem = SItem.getsItemMap().get (entry.getKey()); - int itemNumlimit = sItem.getItemNumlimit(); - int itemNum = entry.getValue().intValue(); + long itemNumlimit = sItem.getItemNumlimit(); + long itemNum = entry.getValue().intValue(); if(itemNum <= 0){ continue; } @@ -746,7 +746,7 @@ public class ItemUtil { ReportUtil.onReportEvent(user,ReportEventEnum.GET_ITEM.getType(),itemNum,String.valueOf(reason),item.getItemId()); - baseItemReport(user,item.getItemId(),itemNum,1,reason); + baseItemReport(user,item.getItemId(),(int)itemNum,1,reason); if(sItem.getId() == Global.EXP){ userLevelUp(user,itemNum); @@ -799,7 +799,7 @@ public class ItemUtil { /** * 玩家升级 //zsx 保留 TODO 由事件分发到 playlogic 去处理 */ - public static void userLevelUp(User user, int addExp) throws Exception { + public static void userLevelUp(User user, long addExp) throws Exception { PlayerManager playerInfoManager = user.getPlayerInfoManager(); if (addExp <= 0) { return; @@ -808,7 +808,7 @@ public class ItemUtil { if (playerInfoManager.getExp() >= maxExp) { return; } - int curExp = MathUtils.setBetweenWithMax(playerInfoManager.getExp() + addExp, 0, maxExp); + int curExp = MathUtils.setBetweenWithMax(playerInfoManager.getExp() + (int)addExp, 0, maxExp); int oldLevel = playerInfoManager.getLevel(); SPlayerLevelConfig sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(oldLevel); int levelUpExp; diff --git a/tablemanager/src/main/java/config/SItem.java b/tablemanager/src/main/java/config/SItem.java index 93adbff35..e3c4e824f 100644 --- a/tablemanager/src/main/java/config/SItem.java +++ b/tablemanager/src/main/java/config/SItem.java @@ -27,7 +27,7 @@ public class SItem implements BaseConfig { private int ifopen; private int ifResolve; private String resolveReward; - private int itemNumlimit; + private long itemNumlimit; private int[][] extraReward; private int recycle; @@ -108,7 +108,7 @@ public class SItem implements BaseConfig { return resolveReward; } - public int getItemNumlimit() { + public long getItemNumlimit() { return itemNumlimit; } diff --git a/worldserver/src/main/java/com/world/logic/HeroLogic.java b/worldserver/src/main/java/com/world/logic/HeroLogic.java index 5a88c6e74..167e5e3d2 100644 --- a/worldserver/src/main/java/com/world/logic/HeroLogic.java +++ b/worldserver/src/main/java/com/world/logic/HeroLogic.java @@ -1,2956 +1,4 @@ package com.world.logic; - -import com.ljsd.fight.FamilyHeroInfo; -import com.ljsd.jieling.chat.logic.ChatLogic; -import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig; -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.exception.ErrorCode; -import com.ljsd.jieling.exception.ErrorCodeException; -import com.ljsd.jieling.globals.BIReason; -import com.ljsd.jieling.globals.Global; -import com.ljsd.jieling.globals.GlobalItemType; -import com.ljsd.jieling.jbean.ActivityMission; -import com.ljsd.jieling.jbean.ActivityProgressInfo; -import com.ljsd.jieling.ktbeans.ReportEventEnum; -import com.ljsd.jieling.ktbeans.ReportUtil; -import com.ljsd.jieling.logic.activity.ActivityType; -import com.ljsd.jieling.logic.activity.event.*; -import com.ljsd.jieling.logic.activity.eventhandler.HeroFiveStarGetEventHandler; -import com.ljsd.jieling.logic.activity.eventhandler.LeveGiftEventHander; -import com.ljsd.jieling.logic.dao.*; -import com.ljsd.jieling.logic.dao.root.User; -import com.ljsd.jieling.logic.expedition.ExpeditionLogic; -import com.ljsd.jieling.logic.fight.CombatLogic; -import com.ljsd.jieling.logic.fight.passiveSkillCal.PassiveskillCalEnum; -import com.ljsd.jieling.logic.hero.HeroAttributeEnum; -import com.ljsd.jieling.logic.item.ItemLogic; -import com.ljsd.jieling.logic.mission.GameEvent; -import com.ljsd.jieling.network.server.ProtocolsManager; -import com.ljsd.jieling.network.session.ISession; -import com.ljsd.jieling.util.*; -import config.*; -import manager.STableManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import rpc.protocols.CommonProto; -import rpc.protocols.HeroInfoProto; -import rpc.protocols.MapInfoProto; -import rpc.protocols.MessageTypeProto; -import util.MathUtils; -import util.StringUtil; -import util.TimeUtils; - -import java.math.BigDecimal; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; - public class HeroLogic { - private static final Logger LOGGER = LoggerFactory.getLogger(HeroLogic.class); - private HeroLogic(){ - //英雄事件监听 - Poster.getPoster().listenEvent(new HeroFiveStarGetEventHandler(), HeroFiveStarGetEvent.class); - Poster.getPoster().listenEvent(new LeveGiftEventHander(), UserLevelEvent.class); - } - - - public static List transTemplate = new ArrayList<>(); - public static List equipSkillPositionTemaplge = new ArrayList<>(6); - private static Map> transTemplateByHeroPropertyName = new HashMap<>(); - - private static List pokemonTemplate = new ArrayList<>(); - static { - transTemplate.add(HeroAttributeEnum.CurHP.getPropertyId()); // 生命 - transTemplate.add(HeroAttributeEnum.Hp.getPropertyId()); // 最大生命 - transTemplate.add(HeroAttributeEnum.Attack.getPropertyId()); // 攻击力 - transTemplate.add(HeroAttributeEnum.PhysicalDefence.getPropertyId());// 护甲 - transTemplate.add(HeroAttributeEnum.MagicDefence.getPropertyId()); // 魔抗 - transTemplate.add(HeroAttributeEnum.Speed.getPropertyId()); // 速度 - transTemplate.add(HeroAttributeEnum.DamageBocusFactor.getPropertyId()); // 伤害加成系数 - transTemplate.add(HeroAttributeEnum.DamageReduceFactor.getPropertyId()); // 伤害减免系数 - transTemplate.add(HeroAttributeEnum.Hit.getPropertyId()); // 命中率 - transTemplate.add(HeroAttributeEnum.Dodge.getPropertyId()); // 闪避率 - transTemplate.add(HeroAttributeEnum.CritFactor.getPropertyId()); // 暴击率 - transTemplate.add(HeroAttributeEnum.CritDamageFactor.getPropertyId()); // 暴击伤害系数 - transTemplate.add(HeroAttributeEnum.AntiCritDamageFactor.getPropertyId()); // 抗暴率 - transTemplate.add(HeroAttributeEnum.TreatFacter.getPropertyId()); // 治疗加成系数 - transTemplate.add(HeroAttributeEnum.CureFacter.getPropertyId()); // 受治疗 -// transTemplate.add(HeroAttributeEnum.PVPDamageBocusFactor.getPropertyId()); // pvp 增伤 -// transTemplate.add(HeroAttributeEnum.PVPDamageReduceFactor.getPropertyId()); // pvp 减伤 - transTemplate.add(HeroAttributeEnum.DifferDemonsBocusFactor.getPropertyId()); // 增加受到的异妖伤害 - transTemplate.add(HeroAttributeEnum.DifferDemonsReduceFactor.getPropertyId()); // 异妖减伤率 -// transTemplate.add(HeroAttributeEnum.FireDamageBonusFactor.getPropertyId()); // 火系伤害加成系数 - transTemplate.add(HeroAttributeEnum.FireDamageReduceFactor.getPropertyId()); // 火系伤害减免系数 -// transTemplate.add(HeroAttributeEnum.WindDamageBonusFactor.getPropertyId()); // 风系伤害加成系数 - transTemplate.add(HeroAttributeEnum.WindDamageReduceFactor.getPropertyId()); // 风系伤害减免系数 -// transTemplate.add(HeroAttributeEnum.WaterDamageBonusFactor.getPropertyId()); // 冰系伤害加成系数 - transTemplate.add(HeroAttributeEnum.WaterDamageReduceFactor.getPropertyId());// 冰系伤害减免系数 -// transTemplate.add(HeroAttributeEnum.LandDamageBonusFactor.getPropertyId()); // 地系伤害加成系数 - transTemplate.add(HeroAttributeEnum.LandDamageReduceFactor.getPropertyId()); // 地系伤害减免系数 -// transTemplate.add(HeroAttributeEnum.LightDamageBonusFactor.getPropertyId()); // 雷系伤害加成系数 - transTemplate.add(HeroAttributeEnum.LightDamageReduceFactor.getPropertyId());// 雷系伤害减免系数 -// transTemplate.add(HeroAttributeEnum.DarkDamageBonusFactor.getPropertyId()); // 暗系伤害加成系数 - transTemplate.add(HeroAttributeEnum.DarkDamageReduceFactor.getPropertyId()); // 暗系伤害减免系数 - - transTemplateByHeroPropertyName.put(1,new ArrayList<>(transTemplate)); - transTemplateByHeroPropertyName.put(2,new ArrayList<>(transTemplate)); - transTemplateByHeroPropertyName.put(3,new ArrayList<>(transTemplate)); - transTemplateByHeroPropertyName.put(4,new ArrayList<>(transTemplate)); - transTemplateByHeroPropertyName.put(5,new ArrayList<>(transTemplate)); - transTemplateByHeroPropertyName.put(6,new ArrayList<>(transTemplate)); - - transTemplateByHeroPropertyName.get(1).add(HeroAttributeEnum.FireDamageBonusFactor.getPropertyId()); - transTemplateByHeroPropertyName.get(2).add(HeroAttributeEnum.WindDamageBonusFactor.getPropertyId()); - transTemplateByHeroPropertyName.get(3).add(HeroAttributeEnum.WaterDamageBonusFactor.getPropertyId()); - transTemplateByHeroPropertyName.get(4).add(HeroAttributeEnum.LandDamageBonusFactor.getPropertyId()); - transTemplateByHeroPropertyName.get(5).add(HeroAttributeEnum.LightDamageBonusFactor.getPropertyId()); - transTemplateByHeroPropertyName.get(6).add(HeroAttributeEnum.DarkDamageBonusFactor.getPropertyId()); - - equipSkillPositionTemaplge.add(1); - equipSkillPositionTemaplge.add(2); - equipSkillPositionTemaplge.add(3); - equipSkillPositionTemaplge.add(4); - equipSkillPositionTemaplge.add(5); - equipSkillPositionTemaplge.add(6); - - pokemonTemplate.add(HeroAttributeEnum.CurHP.getPropertyId()); // 生命 - pokemonTemplate.add(HeroAttributeEnum.Hp.getPropertyId()); // 最大生命 - pokemonTemplate.add(HeroAttributeEnum.Attack.getPropertyId()); // 攻击力 - pokemonTemplate.add(HeroAttributeEnum.PhysicalDefence.getPropertyId());// 护甲 - pokemonTemplate.add(HeroAttributeEnum.MagicDefence.getPropertyId()); // 魔抗 - pokemonTemplate.add(HeroAttributeEnum.Speed.getPropertyId()); // 速度 - pokemonTemplate.add(HeroAttributeEnum.DamageBocusFactor.getPropertyId()); // 伤害加成系数 - pokemonTemplate.add(HeroAttributeEnum.DamageReduceFactor.getPropertyId()); // 伤害减免系数 - pokemonTemplate.add(HeroAttributeEnum.Hit.getPropertyId()); // 命中率 - pokemonTemplate.add(HeroAttributeEnum.Dodge.getPropertyId()); // 闪避率 - pokemonTemplate.add(HeroAttributeEnum.CritFactor.getPropertyId()); // 暴击率 - pokemonTemplate.add(HeroAttributeEnum.CritDamageFactor.getPropertyId()); // 暴击伤害系数 - pokemonTemplate.add(HeroAttributeEnum.AntiCritDamageFactor.getPropertyId()); // 抗暴率 - pokemonTemplate.add(HeroAttributeEnum.TreatFacter.getPropertyId()); // 治疗加成系数 - pokemonTemplate.add(HeroAttributeEnum.CureFacter.getPropertyId()); // 受治疗 - } - private static final String VERTICAL = "|"; - private static final String DIVISION = "#"; - - public static final int HERO_MAX_STAR = 10; // 英雄最大星级,大于10星为觉醒 - - - /** - * 获取装备、法宝信息、魂印 - * @param iSession - * @param index - * @param type - * @throws Exception - */ - public void getAllEquipInfo(ISession iSession,int index,int type) throws Exception { - int uid = iSession.getUid(); - User user = UserManager.getUser(uid); - List equipList = new ArrayList<>(); -// if(type==1){ -// Map equipMap = user.getEquipManager().getEquipMap(); -// for(PropertyItem equipInfo: equipMap.values()){ -// if(equipInfo instanceof Equip) -// equipList.add(CBean2Proto.getEquipProto(equipInfo)); -// } -// } - //fix user item - - ItemManager itemManager = user.getItemManager(); - EquipManager equipManager = user.getEquipManager(); - Set set = new HashSet<>(itemManager.getItemMap().keySet()); - for (Integer integer : set) { - try { - SItem sItem = SItem.getsItemMap().get(integer); - if (sItem != null) { - int itemType = sItem.getItemType(); - if (itemType == GlobalItemType.JEWEL) { - LOGGER.error("Excepeion 背包入库错误" + integer); - for (int i = 0; i < itemManager.getItemMap().get(integer).getItemNum(); i++) { - Jewel equip = new Jewel(user.getId(), integer); - equipManager.addEquip(user, equip); - } - itemManager.removeItem(integer); - - } - } else { - LOGGER.error("Exception SItem配置不存在 id:" + integer); - } - } catch (Exception e) { - LOGGER.error("Exception :" + e.toString()); - } - } - ; - //宝器 - if(type==4){ - Map equipMap = user.getEquipManager().getEquipMap(); - for(PropertyItem equipInfo: equipMap.values()){ - if(equipInfo instanceof Jewel) { - equipList.add(CBean2Proto.getEquipProto(equipInfo)); - } - } - }else { - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - - - boolean isSendFinish = false; - int endIndex = index + Global.SEND_EQUIP_COUNT; - if (index < equipList.size()) { - if (endIndex >= equipList.size()) { - endIndex = equipList.size(); - } - if (equipList.size() == endIndex){ - isSendFinish = true; - } - equipList = equipList.subList(index, endIndex); - }else{ - isSendFinish = true; - } - HeroInfoProto.GetAllEquipResponse build = HeroInfoProto.GetAllEquipResponse.newBuilder() - .addAllEquip(equipList) - .setIsSendFinish(isSendFinish) - .build(); - MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.GET_ALL_EQUIP_RESPONSE_VALUE,build,true); - } - - public Object getRobotHeroSkills(List skillIds, StringBuilder skillSb) { - for (Integer skillId : skillIds) { - skillSb.append(skillId).append(DIVISION); - } - return skillSb; - } - - - public static class Instance { - public final static HeroLogic instance = new HeroLogic(); - } - - public static HeroLogic getInstance() { - return HeroLogic.Instance.instance; - } - - - private void changeRandomItem(User user,int activityId,int[][] random){ - ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId); - if(activityMission==null||activityMission.getActivityMissionMap().get(0)==null){ - return; - } -// Map> spiritAnimalSummonMapByActivityId = SSpiritAnimalSummo.spiritAnimalSummonMapByActivityId; - ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(0); - if(activityProgressInfo==null||activityProgressInfo.getProgrss()==0){ - return; - } - Map config = STableManager.getConfig(SSpiritAnimalSummon.class); - if(!config.containsKey(activityProgressInfo.getProgrss())){ - return; - } - SSpiritAnimalSummon sSpiritAnimalSummon = config.get(activityProgressInfo.getProgrss()); - if(sSpiritAnimalSummon.getActivityID()!=activityId){ - return; - } - //进行替换 - for(int[] randomItem:random){ - int length = Math.min(sSpiritAnimalSummon.getOriginalItemList().length,sSpiritAnimalSummon.getTargetItemList().length); - for(int i = 0 ; i result = new ArrayList<>(resultRandom.length); - for (int[] random : resultRandom) { - if (random == null) { - continue; - } - SItem item = SItem.getsItemMap().get(random[0]); -// SCHero scHero = SCHero.getsCHero().get(random[0]); - if (item == null) { - result.add(random[0] +"-id错误"+random[1]); - } else if(item.getItemType()==GlobalItemType.CARD) { - result.add(random[0] + "-" + item.getQuantity()); - }else{ - result.add(random[0] + "#" + random[1]); - } - } - if (costItem.length == 1) { - ReportUtil.onReportEvent(user, eventEnum.getType(), activityId==0?"":activityId, String.valueOf(sLotterySetting.getPerCount()), String.valueOf(costItem[0]), 0, result); - } else if (costItem.length >= 2) { - ReportUtil.onReportEvent(user, eventEnum.getType(), activityId==0?"":activityId, String.valueOf(sLotterySetting.getPerCount()), String.valueOf(costItem[0]), costItem[1], result); - } else { - ReportUtil.onReportEvent(user, eventEnum.getType(), activityId==0?"":activityId, String.valueOf(sLotterySetting.getPerCount()), "", "", result); - } - - } catch (Exception e) { - e.printStackTrace(); - } - } - - - - - private int getSpecialPoolByRandcount(SLotterySetting sLotterySetting, int randCount,int poolCount) { - int id = sLotterySetting.getId(); - List list = SLotterySpecialConfig.getLotterySpecialConfigListByType(id); - - if (list == null) { - list = SLotterySpecialConfig.getLotterySpecialConfigListByType(sLotterySetting.getMergePool()); - if(list == null){ - return 0; - } - } - int poolId = 0; - for (SLotterySpecialConfig data : list) { - int n ; - if(data.getDifferentType() == 2 ){ - if(poolCount%data.getCount()!=0){ - continue; - } - n = poolCount / data.getCount(); - }else{ - if (randCount % data.getCount() != 0) { - continue; - } - n = randCount / data.getCount(); - } - if (n < data.getMin_num()) { - continue; - } - if (data.getMax_num() == 0 || n <= data.getMax_num()) { - poolId = data.getpool_id(); - break; - } - } - return poolId; - } - - private static int getPooId(SLotterySetting sLotterySetting) throws Exception { - int[][] diamondBoxContain = sLotterySetting.getDiamondBoxContain(); - int totalWeight = 0; - for(int i=0;i=orderBoxOpenTime){ -// return orderBoxPool[diffSeaseon%orderBoxPool.length]; -// } -// return 0; -// } - - - - public static SLotteryRewardConfig randomHeroByPoolId(int poolId,int randomCount,int userLevel){ - List sLotteryRewardConfigs = new ArrayList<>(); - List sLotteryRewardConfigListByPoolId = SLotteryRewardConfig.getSLotteryRewardConfigListByPoolId(poolId); - int totalCountByPoolId =0; - for(SLotteryRewardConfig sLotteryRewardConfig : sLotteryRewardConfigListByPoolId ){ - int[] openRules = sLotteryRewardConfig.getOpenRules(); - boolean canAdd = true; - if (openRules != null && openRules.length > 0) { - int openType = openRules[0]; - int openValue = openRules[1]; - switch (openType) { - case 1: - canAdd = randomCount > openValue; - break; - case 2: - canAdd = userLevel > openValue; - break; - default: { - break; - } - } - } - if(canAdd){ - sLotteryRewardConfigs.add(sLotteryRewardConfig); - totalCountByPoolId+=sLotteryRewardConfig.getWeight(); - } - } - - int randCount = MathUtils.randomInt(totalCountByPoolId) + 1; - int weight =0; - for(SLotteryRewardConfig sLotteryRewardConfig :sLotteryRewardConfigs){ - weight += sLotteryRewardConfig.getWeight(); - if(weight>=randCount){ - return sLotteryRewardConfig; - } - } - return null; - } - - public void getAllTeamPosInfo(ISession session) throws Exception { - User user = UserManager.getUser(session.getUid()); - List teamPosInfoList = new ArrayList<>(); - TeamPosManager teamPosManager = user.getTeamPosManager(); - Map> teamPosForHero = teamPosManager.getTeamPosForHero(); - Map teamNames = teamPosManager.getTeamNames(); - for(Map.Entry> item :teamPosForHero.entrySet()){ - int teamId = item.getKey(); - List teamPosHeroInfoList = item.getValue(); -// if(teamId==501){ -// if(teamPosHeroInfoList==null|teamPosHeroInfoList.size()<1){ -// teamPosHeroInfoList = teamPosForHero.get(1); -// } -// } - String teamName = teamNames.get(teamId); - if(StringUtil.isEmpty(teamName)){ - teamName=""; - } - List teamHeroInfoList = new ArrayList<>(); - for(TeamPosHeroInfo teamPosHeroInfo :teamPosHeroInfoList ){ - teamHeroInfoList.add( - CommonProto.TeamHeroInfo.newBuilder().setPosition(teamPosHeroInfo.getPosition()).setHeroId(teamPosHeroInfo.getHeroId()).build() - ); - } - teamPosInfoList.add( - CommonProto.TeamPosInfo.newBuilder() - .addAllTeamHeroInfos(teamHeroInfoList) - .setTeamName(teamName) - .setTeamId(teamId) - .build() - ); - } - HeroInfoProto.GetAllTeamPosResponse build = HeroInfoProto.GetAllTeamPosResponse.newBuilder().addAllTeamPosInfo(teamPosInfoList).build(); - MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.GET_TEAMPOS_INFO_RESPONSE_VALUE,build,true); - } - - public void saveTeamPos(ISession iSession, int teamId, List heroIds) throws Exception { - User user = UserManager.getUser(iSession.getUid()); - HeroManager heroManager = user.getHeroManager(); - Set set = new HashSet<>(); - if(teamId==GlobalsDef.EXPEDITION_TEAM){ - - heroIds.forEach(heroId->{ - if(heroManager.getHeroMap().containsKey(heroId.getHeroId())){ - set.add(heroManager.getHero(heroId.getHeroId()).getTemplateId()); - } - if(user.getExpeditionManager().getHeroMap().containsKey(heroId.getHeroId())){ - set.add(user.getExpeditionManager().getHero(heroId.getHeroId()).getTemplateId()); - } - - }); - }else if(teamId==GlobalsDef.TRIAL_TEAM){ - if(heroIds.size()!=1){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - heroIds.forEach(heroId->set.add(user.getMapManager().getTrialInfo().getHeroInfo().get(heroId.getHeroId()).getTmpId())); - } else { - heroIds.forEach(heroId->set.add(heroManager.getHero(heroId.getHeroId()).getTemplateId())); - } - - if(set.size()!=heroIds.size()){ - throw new ErrorCodeException(ErrorCode.NO_USE_SAME_HERO); - } - String err = checkTeamPos(user, teamId,heroIds); - if(!"".equals(err)){ - throw new ErrorCodeException(ErrorCode.newDefineCode(err)); - } - user.getTeamPosManager().changeTeamInfo(teamId,heroIds); - //401图内可以更改编队 - if(teamId == GlobalsDef.ENDLESS_TEAM){ - List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); - if(teamPosHeroInfos!=null){ - List heroes = new ArrayList<>(teamPosHeroInfos.size()); - Map> heroAllAttributeMap = new HashMap<>(teamPosHeroInfos.size()); - List indiHeros = new ArrayList<>(); - for (TeamPosHeroInfo heroInfo : teamPosHeroInfos) { - Hero hero = heroManager.getHero(heroInfo.getHeroId()); - if (hero == null) { - break; - } - if(heroAllAttributeMap.get(heroInfo.getHeroId())!=null){ - continue; - } - Map heroAllAttribute = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero,false,teamId); - Map endlessHeroInfo = user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo(); - if(endlessHeroInfo!=null&& endlessHeroInfo.containsKey(heroInfo.getHeroId())){ - int curHp = (int)(endlessHeroInfo.get(heroInfo.getHeroId()) /10000.00 * heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId())); - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(), curHp); - } - heroAllAttributeMap.put(hero.getId(), heroAllAttribute); - heroes.add(heroInfo.getHeroId()); - MapInfoProto.HeroInfo indiInfo = MapInfoProto.HeroInfo.newBuilder().setHeroId(heroInfo.getHeroId()) - .setHeroHp(heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId())) - .setHeroMaxHp(heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId())) - .build(); - indiHeros.add(indiInfo); - } - - user.getMapManager().setHeroAllAttributeMap(heroAllAttributeMap); - if(user.getMapManager().getCurMapId()!=0){ - MapInfoProto.EndlessSetTeamIndication response = MapInfoProto.EndlessSetTeamIndication.newBuilder().addAllInfo(indiHeros).build(); - MessageUtil.sendIndicationMessage(iSession,1, MessageTypeProto.MessageType.ENDLESS_MAP_SET_TEAM_INDICATION_VALUE,response,true); - } - }else{ - user.getTeamPosManager().changeTeamInfo(teamId,heroIds); - } - - - }else if(teamId == GlobalsDef.TEAM_ARENA_DEFENSE){ - int teamForce = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false); - //更新竞技场防御编队战力 - String key = RedisKey.getKey(RedisKey.AREDEF_TEAM_FORCE_RANK, "", false); - RedisUtil.getInstence().zsetAddOne(key, String.valueOf(user.getId()), teamForce); - - } - if(teamId==GlobalsDef.FORMATION_NORMAL){ - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(iSession.getUid())); - } - user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_IN_TEAM,heroIds.size()); - MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.TEAM_POS_SAVE_RESPONSE_VALUE,null,true); - } - - - public String checkTeamPos(User user, int teamId,List heroIds){ - if(heroIds ==null || heroIds.isEmpty()){ - return ""; - } - - Set cacheHeroIds = new HashSet<>(); - for(CommonProto.TeamHeroInfo teamHeroInfo: heroIds){ - String heroId = teamHeroInfo.getHeroId(); - if(teamId==GlobalsDef.EXPEDITION_TEAM){ - if(user.getHeroManager().getHero(heroId) == null&&!user.getExpeditionManager().getHeroMap().containsKey(heroId)) { - // 卡牌不存在 - return "card not exists"; - } - }else if(teamId==GlobalsDef.TRIAL_TEAM){ - if(!user.getMapManager().getTrialInfo().getHeroInfo().containsKey(heroId)){ - return "card not exists"; - } - } else { - if(user.getHeroManager().getHero(heroId) == null) { - // 卡牌不存在 - return "card not exists"; - } - } - - // 卡牌重复 卡牌已上阵 - if(cacheHeroIds.contains(heroId)){ - return "card repeated"; - } - - cacheHeroIds.add(heroId); - } -// Map pokemonMap = user.getPokemonManager().getPokemonMap(); -// for(CommonProto.TeamPokemonInfo pokemonInfo : pokemonoIds){ -// int pokemonId = pokemonInfo.getPokemonId(); -// Pokemon pokemon = pokemonMap.get(pokemonId); -// -// if( pokemon == null){ -// return "pokemono not exists"; -// } -// if(pokemon.getAllStage()==0){ -// return "no active"; -// } -// } -// boolean allowed = user.getPlayerInfoManager().checkAndUpdate(VipPrivilegeType.POKEMON_NUM, size); - return ""; - } - - - public void upHeroLevel(ISession session,String heroId,int targetLevel) throws Exception { - User user = UserManager.getUser(session.getUid()); - Hero hero = user.getHeroManager().getHero(heroId); - if( null == hero){ - throw new ErrorCodeException(ErrorCode.newDefineCode("hero null")); - } - SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); - int[] growthSwitch = scHero.getGrowthSwitch(); - if(growthSwitch!=null&&growthSwitch.length>0){ - Set operateSet= Arrays.stream(growthSwitch).boxed().collect(Collectors.toSet()); - if(operateSet.contains(1)){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - } - int oldLevel = hero.getLevel(user.getHeroManager()); - //判断需要进行升级还是进行突破 - Map scHeroRankUpConfigByType = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.BREAK_TYPE,scHero.getStar()); - SCHeroRankUpConfig scHeroRankUpConfig = null; - if(scHeroRankUpConfigByType!=null){ - scHeroRankUpConfig = scHeroRankUpConfigByType.get(oldLevel); - if(scHeroRankUpConfig!=null ){ - if(hero.getStar() < scHeroRankUpConfig.getLimitStar()){ - throw new ErrorCodeException(ErrorCode.HERO_LEVE_MAX); - } - } - } - - boolean isBreak =false; - int[][] consume; - int breakId = hero.getBreakId(); - Map consumeMap = new HashMap<>(); - if(scHeroRankUpConfig!=null && breakId!=scHeroRankUpConfig.getId()){ - isBreak =true; - consume = scHeroRankUpConfig.getConsumeMaterial(); - combinedAttribute(consume,consumeMap); - breakId = scHeroRankUpConfig.getId(); - }else{ - if(hero.getLevel(user.getHeroManager())>targetLevel){ - throw new ErrorCodeException(ErrorCode.newDefineCode("level wrong")); - } - for(;oldLevel scHeroRankUpConfig.getOpenLevel()){ - throw new ErrorCodeException(ErrorCode.HERO_LEVE_MAX); - } - } - - - //校验消耗 - boolean result = ItemUtil.itemCost(user, consumeMap,BIReason.UP_HERO_LEVEL_CONSUME,hero.getTemplateId()); - if(!result){ - int heroLevel = hero.getOriginalLevel(); - for(;oldLevel consumeMaterialsList) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - HeroManager heroManager = user.getHeroManager(); - Hero targetHero = heroManager.getHero(heroId); - if( null == targetHero){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - - int oldStar = targetHero.getStar(); - SCHero scHero = SCHero.getsCHero().get(targetHero.getTemplateId()); - if (targetHero.getStar() >= scHero.getMaxRank()) { - throw new ErrorCodeException(ErrorCode.HAS_AWAKE); - } - int[] growthSwitch = scHero.getGrowthSwitch(); - if(growthSwitch!=null&&growthSwitch.length>0){ - Set operateSet= Arrays.stream(growthSwitch).boxed().collect(Collectors.toSet()); - if(operateSet.contains(2)){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - } - Map scHeroRankUpConfigByType = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.UP_STAR_TYPE,scHero.getStar()); - SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByType.get(oldStar); - if( targetHero.getLevel(user.getHeroManager()) < scHeroRankUpConfig.getLimitLevel()){ - throw new ErrorCodeException(ErrorCode.HERO_LEVE_DOWN); - } - Map consumeMaterialInfoByPosition = scHero.getConsumeMaterialInfoOfPositionByStar(oldStar + 1); - if(consumeMaterialInfoByPosition ==null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - boolean canUse = true; - Set removeHeroIds = new HashSet<>(); - int needTotalHeroNums = 0; - if(consumeMaterialInfoByPosition.size()!=consumeMaterialsList.size()){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); - } - //判断编队 - for(HeroInfoProto.ConsumeMaterial consumeMaterial1 : consumeMaterialsList) { - List heroIdsList = consumeMaterial1.getHeroIdsList(); - ErrorCode err = ItemLogic.getInstance().checkHeroResolve(heroIdsList, user); - if(null!=err){ - throw new ErrorCodeException(err); - } - } - - StringBuilder reportConsumeHero = new StringBuilder(); - for(HeroInfoProto.ConsumeMaterial consumeMaterial1 : consumeMaterialsList){ - int position = consumeMaterial1.getPosition(); - SCHero.ConsumeMaterialInfo consumeMaterialInfo = consumeMaterialInfoByPosition.get(position); - int nums = consumeMaterialInfo.getNums(); - needTotalHeroNums+=nums; - List heroIdsList = consumeMaterial1.getHeroIdsList(); - SHeroRankupGroup sHeroRankupGroup = STableManager.getConfig(SHeroRankupGroup.class).get(consumeMaterialInfo.getGroupID()); - int isSame = sHeroRankupGroup.getIssame(); - int starLimit = sHeroRankupGroup.getStarLimit(); - int isSameClan = sHeroRankupGroup.getIsSameClan(); - int isId = sHeroRankupGroup.getIsId(); - for(String consumeHero : heroIdsList){ - Hero hero = heroManager.getHero(consumeHero); - if( null == hero ){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); - } - //上报消耗的英雄数据 - if(reportConsumeHero.length()>0){ - reportConsumeHero.append("|"); - } - reportConsumeHero.append(hero.getTemplateId()).append("-").append(hero.getStar()).append("-").append(hero.getLevel(user.getHeroManager())); - - - if( 1 == isSame) { - if(hero.getTemplateId() != targetHero.getTemplateId()){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); - } - } - - if( starLimit != 0 ) { - if(hero.getStar() != starLimit){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); - } - } - - if( 1 == isSameClan) { - SCHero scHeroTmp = SCHero.getsCHero().get(hero.getTemplateId()); - SCHero targetSHero = SCHero.getsCHero().get(targetHero.getTemplateId()); - if( scHeroTmp.getPropertyName() != targetSHero.getPropertyName() ){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); - } - } - - if( isId != 0) { - if(hero.getTemplateId() != isId){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); - } - } - removeHeroIds.add(consumeHero); - } - - } - - if(needTotalHeroNums!=removeHeroIds.size()){ - canUse=false; - LOGGER.error("hero num not enough"); - } - - if(!canUse){ - throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); - } - - int[][] consumeMaterial = scHeroRankUpConfig.getConsumeMaterial(); - boolean enoughCost = ItemUtil.itemCost(user, consumeMaterial,BIReason.UP_HEROSTAR_CONSUME,targetHero.getTemplateId()); - if(!enoughCost){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - - //删除hero -// CommonProto.Drop.Builder baseBuilder = ItemLogic.getInstance().decomposeHero(session,new LinkedList<>(removeHeroIds),Collections.singleton(26),MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE); - //改成归元获得,同时返还法宝获得 - CommonProto.Drop.Builder baseBuilder = heroBackDrop(user,new ArrayList<>(removeHeroIds),10000,BIReason.UPHERO_DECOMPOS_HERO_REWARD,true); - - for(String rmHeroId:removeHeroIds){ - heroManager.removeHero(uid,rmHeroId); - } - -// recyleHeroBySystem(user,removeHeroIds); - rankUpHeroExecute(targetHero); - Poster.getPoster().dispatchEvent(new HeroUpStarEvent(user.getId(),targetHero.getTemplateId(),targetHero.getStar())); - if(targetHero.getStar()>=5&&targetHero.getStar()!=15){ - if(SItem.getsItemMap().get(scHero.getId()).getQuantity()>=5) { - Poster.getPoster().dispatchEvent(new HeroFiveStarGetEvent(user.getId(), targetHero.getStar())); - } - } - -// if(targetHero.getStar()==5){ -// Poster.getPoster().dispatchEvent(new HeroFiveStarGetEvent(user.getId())); -// } - targetHero.setStarBreakId(scHeroRankUpConfig.getId()); - user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_UP,2,targetHero.getTemplateId(),targetHero.getStar()); - user.getUserMissionManager().onGameEvent(user,GameEvent.GET_HERO,targetHero.getTemplateId(),targetHero.getStar()); - if(isInTeam(user,heroId,1)){ - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid())); - } - MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,baseBuilder.build(),true); - // 觉醒飘字 - if (targetHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_awaken_hero_content_parm)) { - String message = SErrorCodeEerverConfig.getI18NMessage("animal_awaken_broadcast_content", new Object[]{user.getPlayerInfoManager().getNickName(), scHero.getReadingName()}); - ChatLogic.getInstance().sendSysChatMessage(message, Global.DILIGENT, String.valueOf(targetHero.getTemplateId()), 0, 0, 0, 0, 0); - } else if (targetHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_rankup_hero_content_parm)) { - String message = SErrorCodeEerverConfig.getI18NMessage("lamp_rankup_hero_content", new Object[]{user.getPlayerInfoManager().getNickName(), scHero.getReadingName(), targetHero.getStar()}); - ChatLogic.getInstance().sendSysChatMessage(message, Global.DILIGENT, String.valueOf(targetHero.getTemplateId()), 0, 0, 0, 0, 0); - } - String consume = StringUtil.parseArrayToString(consumeMaterial); -// HERO_STRENGTHEN(13,"hero_strengthen", new CommonEventHandler(),new String[]{"hero_id","old_quality","new_quality","strengthen_type","cost_item_list","cost_hero_list"}), - ReportUtil.onReportEvent(user, ReportEventEnum.HERO_STRENGTHEN.getType(),String.valueOf(targetHero.getTemplateId()),String.valueOf(oldStar),String.valueOf(targetHero.getStar()),consume,reportConsumeHero.toString()); - } - private void rankUpHeroExecute(Hero hero)throws Exception { - //是否解锁法宝 - SGameSetting gameSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting(); - int[][] equipTalismanaUnlock = gameSetting.getEquipTalismanaUnlock(); - for(int [] lockLimit:equipTalismanaUnlock){ - //英雄星级解锁 - if(lockLimit[0]==2) { - if (hero.getStar() < lockLimit[1] && hero.getStar() + 1 >= lockLimit[1]) { - hero.updateEspecial(1); - } - } - } - - hero.upStar( 1 ); - } - - - //初始属性*(1+化境增长)*等级系数 + 初始属性*突破系数 - private Map calHeroAllAttribute(User user,Hero hero,boolean isForce){ - Map result = new HashMap<>(); - int templateId = hero.getTemplateId(); - SCHero scHero = SCHero.getsCHero().get(templateId); - SHeroLevlConfig sHeroLevlConfig = SHeroLevlConfig.getsCHero().get(hero.getLevel(user.getHeroManager())); - int[][] characterLevelPara = sHeroLevlConfig.getCharacterLevelPara(); - Map paraForHero = getParaForHero(user,hero); - Map baseValueMap = new HashMap<>(); - baseValueMap.put(GlobalsDef.HP_TYPE,getBaseValueByType(scHero,GlobalsDef.HP_TYPE)); - baseValueMap.put(GlobalsDef.ATTACK_TYPE,getBaseValueByType(scHero,GlobalsDef.ATTACK_TYPE)); - baseValueMap.put(GlobalsDef.PHYSICAL_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.PHYSICAL_DEFENCE_TYPE)); - baseValueMap.put(GlobalsDef.MAGIC_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.MAGIC_DEFENCE_TYPE)); - for(Map.Entry item : baseValueMap.entrySet()){ - Integer attributeType = item.getKey(); - Float heroBaseValue = item.getValue(); - int[] levelAttr = Arrays.stream(characterLevelPara).filter(param -> param[0] == attributeType).findFirst().get(); - float value = heroBaseValue + levelAttr[1]; - int[][] rankUpParam = (int[][]) paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE); - if(rankUpParam!=null){ - int[] rankAttr = Arrays.stream(rankUpParam).filter(param -> param[0] == attributeType).findFirst().get(); - value = value *(rankAttr[2] == 0 ? 1 : (rankAttr[2] / 10000.f))+rankAttr[1]; - } - int[][] breakParam = (int[][]) paraForHero.get(GlobalsDef.BREAK_PARA_TYPE); - if(breakParam!=null){ - int[] breakAttr = Arrays.stream(breakParam).filter(param -> param[0] == attributeType).findFirst().get(); - value += breakAttr[1]; - } - - result.put(attributeType,(int)value); - } - if(!isForce){ - Map secondaryFactorMap = scHero.getSecondaryFactorMap(); - if(secondaryFactorMap!=null && !secondaryFactorMap.isEmpty()){ - result.putAll(secondaryFactorMap); - } - } - return result; - } - - private Map calRobotHeroAllAttribute(int templateId,int heroLevl,int heroBreakId,boolean isForce){ - Map result = new HashMap<>(); - SCHero scHero = SCHero.getsCHero().get(templateId); - SHeroLevlConfig sHeroLevlConfig = SHeroLevlConfig.getsCHero().get(heroLevl); - int[][] characterLevelPara = sHeroLevlConfig.getCharacterLevelPara(); - Map paraForHero = getParaForRobotHero(scHero,heroLevl,templateId); - Map baseValueMap = new HashMap<>(); - baseValueMap.put(GlobalsDef.HP_TYPE,getBaseValueByType(scHero,GlobalsDef.HP_TYPE)); - baseValueMap.put(GlobalsDef.ATTACK_TYPE,getBaseValueByType(scHero,GlobalsDef.ATTACK_TYPE)); - baseValueMap.put(GlobalsDef.PHYSICAL_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.PHYSICAL_DEFENCE_TYPE)); - baseValueMap.put(GlobalsDef.MAGIC_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.MAGIC_DEFENCE_TYPE)); - for(Map.Entry item : baseValueMap.entrySet()){ - Integer attributeType = item.getKey(); - Float heroBaseValue = item.getValue(); - int[] levelAttr = Arrays.stream(characterLevelPara).filter(param -> param[0] == attributeType).findFirst().get(); - float value = heroBaseValue + levelAttr[1]; - int[][] rankUpParam = (int[][]) paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE); - if(rankUpParam!=null){ - int[] rankAttr = Arrays.stream(rankUpParam).filter(param -> param[0] == attributeType).findFirst().get(); - value *= rankAttr[1] == 0 ? 1 : rankAttr[1] / 10000.f+rankAttr[2]; - } - int[][] breakParam = (int[][]) paraForHero.get(GlobalsDef.BREAK_PARA_TYPE); - if(breakParam!=null){ - int[] breakAttr = Arrays.stream(breakParam).filter(param -> param[0] == attributeType).findFirst().get(); - value += breakAttr[1]; - } - - result.put(attributeType,(int)value); - } - if(!isForce){ - Map secondaryFactorMap = scHero.getSecondaryFactorMap(); - if(secondaryFactorMap!=null && !secondaryFactorMap.isEmpty()){ - result.putAll(secondaryFactorMap); - } - } - return result; - } - - //根据英雄等级计算出brealId,从而也可以获取星级 - public int calRobotStarByLevel(int heroTid,int heroLevel,Map starHeroMap){ - SCHero scHero = SCHero.getsCHero().get(heroTid); - int star = scHero.getStar(); - Map scHeroRankUpConfigByType = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.UP_STAR_TYPE,scHero.getStar()); - if(scHeroRankUpConfigByType == null){ - scHeroRankUpConfigByType = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByShow(GlobalsDef.BREAK_TYPE,scHero.getStar()); - } - for(SCHeroRankUpConfig scHeroRankUpConfig : scHeroRankUpConfigByType.values()){ - if (heroLevel>=scHeroRankUpConfig.getLimitLevel() && heroLevel <= scHeroRankUpConfig.getOpenLevel()){ - starHeroMap.put(heroTid,scHeroRankUpConfig.getOpenStar()); - return scHeroRankUpConfig.getId(); - } - } - starHeroMap.put(heroTid,star); - return 0; - } - - private Map getParaRate(SCHero scHero,int heroStar,int heroLevel,int heroBreakId){ - Map result = new HashMap<>(2); - Object rankupPara=null; - //突破系数 - Object breakPara=null; - Map scHeroRankUpConfigByTypeOfStar = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE,scHero.getStar()); - if(scHeroRankUpConfigByTypeOfStar!= null){ - SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByTypeOfStar.get(heroStar-1); - if( scHeroRankUpConfig!=null && heroLevel >= scHeroRankUpConfig.getLimitLevel()){ - if(scHeroRankUpConfig.getType() == GlobalsDef.BREAK_TYPE){ - breakPara = scHeroRankUpConfig.getRankupPara(); - }else{ - rankupPara = scHeroRankUpConfig.getRankupPara(); - } - - } - } - - Map scHeroRankUpConfigByTypOfBreak = STableManager.getFigureConfig(HeroStaticConfig.class).getScHeroRankUpConfigByType(GlobalsDef.BREAK_TYPE,scHero.getStar()); - for( SCHeroRankUpConfig scHeroRankUpConfigTmp :scHeroRankUpConfigByTypOfBreak.values()){ -// && breakPara< scHeroRankUpConfigTmp.getRankupPara() - if( heroLevel >= scHeroRankUpConfigTmp.getLimitLevel() && heroBreakId>= scHeroRankUpConfigTmp.getId() ){ - breakPara = scHeroRankUpConfigTmp.getRankupPara(); - } - if(heroLevel < scHeroRankUpConfigTmp.getOpenLevel()){ - break; - } - } - result.put(GlobalsDef.RANKUP_PARA_TYPE,rankupPara); - result.put(GlobalsDef.BREAK_PARA_TYPE,breakPara); - return result; - } - - private Map getParaForHero(User user,Hero hero){ - SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); - return getParaRate(scHero, hero.getStar(), hero.getLevel(user.getHeroManager()), hero.getBreakIdByHongMeng(user.getHeroManager())); - } - - //todo - private Map getParaForRobotHero(SCHero scHero,int level,int breakId){ - return getParaRate(scHero, scHero.getStar(),level, breakId); - } - - private float getBaseValueByType(SCHero scHero,int type){ - float result = 0.0f; - switch (type){ - case GlobalsDef.HP_TYPE: - result = scHero.getHp(); - break; - case GlobalsDef.ATTACK_TYPE: - result = scHero.getAttack(); - break; - case GlobalsDef.PHYSICAL_DEFENCE_TYPE: - result = scHero.getPhysicalDefence(); - break; - case GlobalsDef.MAGIC_DEFENCE_TYPE: - result = scHero.getMagicDefence(); - break; - case GlobalsDef.SPEED_TYPE: - result = scHero.getSpeed(); - break; - default: - break; - - } - return result; - } - - public List getHeroSkillList(User user,Hero hero){ - List skillList = new ArrayList<>(); - SCHero tempHero = SCHero.getsCHero().get(hero.getTemplateId()); - List skillListByStar = tempHero.getSkillListByStar(hero.getStar()); - if(skillListByStar!=null){ - skillList.addAll(skillListByStar); - } - // 大于10星,觉醒技 - if (hero.getStar() > HERO_MAX_STAR) { - skillList.addAll(tempHero.getAwakSkills(1, hero.getBreakId())); - skillList.addAll(tempHero.getAwakSkills(2, hero.getStarBreakId())); - } else { - skillList.addAll(tempHero.getPassiveSkills(1, hero.getBreakId())); - skillList.addAll(tempHero.getPassiveSkills(2, hero.getStarBreakId())); - } - //装备没有技能不用计算 -// Map equipByPositionMap = hero.getEquipByPositionMap(); -// if(!equipByPositionMap.isEmpty()){ -// Map equipMap = hero.getCreateType()==1?user.getExpeditionManager().getEquipMap():user.getEquipManager().getEquipMap(); -// for(Integer position : equipSkillPositionTemaplge){ -// Integer equipId = equipByPositionMap.get(position); -// if(equipId==null){ -// continue; -// } -// int skillId = equipMap.get(equipId).getSkill(); -// if(skillId!=0){ -// skillList.add(skillId); -// } -// } -// } - //魂印 - Map soulEquipByPositionMap = hero.getSoulEquipByPositionMap(); - Map config = STableManager.getConfig(SEquipConfig.class); - soulEquipByPositionMap.values().forEach(e->{ - Arrays.stream(config.get(e).getPassiveSkill()).forEach(skillList::add); - }); - //法宝技能 - int[] equipTalismana = tempHero.getEquipTalismana(); - if(equipTalismana.length<1 ||hero.getStar() sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId); - sEquipTalismana.forEach((k,v)->{ - if(k<=especialEquipLevel&&v.getOpenSkillRules()!=null){ - Arrays.stream(v.getOpenSkillRules()).forEach(i->skillList.add(i)); - } - }); - return skillList; - } - - public void coverSkill(List heroSkillList){ - Set coverSkillIds = new HashSet<>(); - heroSkillList.forEach(skill->{ - SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); - if(config!=null &&config.getCoverID()!=0){ - coverSkillIds.add(config.getCoverID()); - } - }); - heroSkillList.removeAll(coverSkillIds); - } - - public StringBuilder getHeroSkills(User user,Hero hero, StringBuilder sb){ - List heroSkillList = getHeroSkillList(user, hero); - coverSkill(heroSkillList); - for(int i=0;i heroAttributeMap; - if(!isMySelf || curMapId == 0 || (teamId!=GlobalsDef.TRIAL_TEAM&&teamId!=GlobalsDef.ENDLESS_TEAM)){ - heroAttributeMap=calHeroNotBufferAttribute(user, hero,false,teamId); - }else { - heroAttributeMap=calHeroFinalAttributeWhenInMap(user, hero,false,teamId); - } - return getHeroPropertyBuilder(sb,hero.getTemplateId(),hero.getLevel(user.getHeroManager()),heroAttributeMap); - } - - public StringBuilder getHeroPropertyBuilder(StringBuilder sb,int tempId,int heroLevel,Map heroAttributeMap){ - sb.append(heroLevel).append(DIVISION); - SCHero scHero = SCHero.getsCHero().get(tempId); - List templatePropetyIds = transTemplateByHeroPropertyName.get(scHero.getPropertyName()); - for(Integer templatePropetyId:templatePropetyIds){ - Integer propertyValue = heroAttributeMap.get(templatePropetyId); - if(propertyValue == null){ - propertyValue =0; - } - SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(templatePropetyId); - if(sPropertyConfig.getIfFormula() == 1){ - sb.append(propertyValue/(heroLevel+10)/100).append(DIVISION); - }else{ - if(sPropertyConfig.getStyle() == GlobalsDef.PERCENT_TYPE){ - sb.append(propertyValue/10000f).append(DIVISION); - - }else{ - sb.append(propertyValue).append(DIVISION); - } - } - - } - return sb; - } - - public StringBuilder getHeroPropertyBuilder(StringBuilder sb, FamilyHeroInfo hero, Map heroAttributeMap){ - return getHeroPropertyBuilder(sb, hero.getTempleteId(), hero.getLevel(), heroAttributeMap); - } - - - public StringBuilder getRobotHeroProperty(SArenaRobotConfig sArenaRobotConfig,SCHero scHero, StringBuilder sb,Map robotHeroAttribute){ - - int robotLevel = sArenaRobotConfig.getRoleLv(); - sb.append(robotLevel).append(DIVISION); - List templatePropetyIds = transTemplateByHeroPropertyName.get(scHero.getPropertyName()); - for(Integer templatePropetyId:templatePropetyIds){ - Integer propertyValue = robotHeroAttribute.get(templatePropetyId); - if(propertyValue == null){ - propertyValue =0; - } - SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(templatePropetyId); - if(sPropertyConfig.getIfFormula() == 1){ - sb.append(propertyValue*0.1/(sArenaRobotConfig.getRoleLv()+10)/100).append(DIVISION); - }else{ - if(sPropertyConfig.getStyle() == GlobalsDef.PERCENT_TYPE){ - sb.append(propertyValue/10000f).append(DIVISION); - }else{ - sb.append(propertyValue).append(DIVISION); - } - } - - } - return sb; - } - - public List getPokemonSkills(User user){ - //todo 灵兽 - Map pokemonTeamMap = user.getPokemonManager().getPokemonTeamMap(); - PokemonManager pokemonManager = user.getPokemonManager(); -// for(int i = 0;i pokemonInfos = new ArrayList<>(); - for(Map.Entry entry:pokemonTeamMap.entrySet()){ - Pokemon pokemon = pokemonManager.getPokemonMap().get(entry.getValue()); - - if(pokemon==null){ - continue; - } - SSpiritAnimalSkill sSpiritAnimalSkill = SSpiritAnimalSkill.skillByAnimalAndStar.get(pokemon.getTmpId()).get(pokemon.getStar()); - Map map = calOnePokemonAttribute(pokemonManager, entry.getValue()); - StringBuilder propertyBuilder = getOnePokemonProperty(map,pokemon.getLevel()); - CommonProto.FightUnitInfo info = CommonProto.FightUnitInfo.newBuilder() - .setPosition(entry.getKey()) - .setStar(pokemon.getStar()) - .setProperty(propertyBuilder.toString()) - .setUnitId(String.valueOf(pokemon.getTmpId())).setUnitSkillIds(String.valueOf(sSpiritAnimalSkill.getId())).build(); - pokemonInfos.add(info); - } - return pokemonInfos; - } - - public String getPokenmonPassiveSkills(User user,int teamId){ - //todo 灵兽 目前用不到 -// Map pokemonMap = user.getPokemonManager().getPokemonMap(); -// Collections.sort(teamPosForPokenInfos); -// for(TeamPosForPokenInfo teamPosForPokenInfo:teamPosForPokenInfos){ -// int pokemonId = teamPosForPokenInfo.getPokenId(); -// Pokemon pokemon = pokemonMap.get(pokemonId); -// SDifferDemonsStageConfig sDifferDemonsStageConfig = SDifferDemonsStageConfig.getsDifferDemonsStageConfigMap(pokemonId*100 + pokemon.getAllStage()); -// if(StringUtil.isEmpty(sDifferDemonsStageConfig.getPassiveSkillString())){ -// continue; -// } -// pokenSkillResult.append(sDifferDemonsStageConfig.getPassiveSkillString()).append("|"); -// } -// String s = pokenSkillResult.toString(); -// if(StringUtil.isEmpty(s)){ -// return ""; -// } -// return s.substring( 0,(s.length()-1)); - return ""; - } - - public String getRobotPokenmonSkills(SArenaRobotConfig sArenaRobotConfig){ - StringBuilder pokenSkillResult = new StringBuilder(); - int[] differDemonsId = sArenaRobotConfig.getDifferDemonsId(); - int differDemonsLv = sArenaRobotConfig.getDifferDemonsLv(); - int position =1; - int size = differDemonsId.length; - int i=0; - for(Integer pokemonId:differDemonsId){ - SDifferDemonsStageConfig sDifferDemonsStageConfig = SDifferDemonsStageConfig.getsDifferDemonsStageConfigMap(pokemonId*100 + differDemonsLv); - pokenSkillResult.append(position).append("#").append(sDifferDemonsStageConfig.getSkillId()); - if(i++!=size-1){ - pokenSkillResult.append("|"); - } - } - return pokenSkillResult.toString(); - } - - public String getRobotPokenmonPassiveSkills(SArenaRobotConfig sArenaRobotConfig){ - StringBuilder pokenSkillPassiveResult = new StringBuilder(); - int[] differDemonsId = sArenaRobotConfig.getDifferDemonsId(); - int differDemonsLv = sArenaRobotConfig.getDifferDemonsLv(); - for(Integer pokemonId:differDemonsId){ - SDifferDemonsStageConfig sDifferDemonsStageConfig = SDifferDemonsStageConfig.getsDifferDemonsStageConfigMap(pokemonId*100 + differDemonsLv); - if(!StringUtil.isEmpty(sDifferDemonsStageConfig.getPassiveSkillString())){ - pokenSkillPassiveResult.append(sDifferDemonsStageConfig.getPassiveSkillString()).append("|"); - } - - } - - return pokenSkillPassiveResult.toString(); - } - - public Map calHeroNotBufferAttribute(User user, Hero hero,boolean isForce,int teamId){ - Map heroAllAttribute = calHeroAllAttribute(user,hero,isForce); - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),heroAllAttribute.get(GlobalsDef.HP_TYPE)); - - Map equipMap = hero.getCreateType()==1?user.getExpeditionManager().getEquipMap():user.getEquipManager().getEquipMap(); - - PokemonManager pokemonManager = user.getPokemonManager(); - SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); - if(teamId!=0){ - int heroNum = user.getTeamPosManager().getTeamPosForHero().get(teamId).size(); - if(teamId==GlobalsDef.TRIAL_TEAM){ - heroNum = 5;//森罗环境固定为5 - } - int[][] pokemonAttr = calPokemonAttribute(pokemonManager); - for(int i = 0 ; i pokemonBookEnabled = pokemonManager.getPokemonBookEnabled(); - if(!pokemonBookEnabled.isEmpty()){ - Map config = STableManager.getConfig(SSpiritAnimalBook.class); - for(int bootId:pokemonBookEnabled){ - int[][] activePara = config.get(bootId).getActivePara(); - combinedAttribute(activePara,heroAllAttribute); - } - } - //英雄皮肤加成 记得判断皮肤过期 - int skin = hero.getSkin(); - if(skin!=0){ - Map skinInfo = user.getHeroManager().getSkinInfo(); - SHeroSkin sHeroSkin = SHeroSkin.skinMapByType.get(skin); - if(sHeroSkin!=null&&sHeroSkin.getMonomerProperty()!=null&&sHeroSkin.getMonomerProperty().length>0){ - if(skinInfo.containsKey(skin)&&(skinInfo.get(skin)==-1||skinInfo.get(skin)>TimeUtils.nowInt())){ - combinedAttribute(sHeroSkin.getMonomerProperty(),heroAllAttribute); - } - } - } - //装备总战力评分 - int equipForce=0; - boolean needRemove = false; - Iterator> iterator = hero.getEquipByPositionMap().entrySet().iterator(); - Map suiteNumByIdMap = new HashMap<>(); - while (iterator.hasNext()){ - Map.Entry next = iterator.next(); - SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(next.getValue()); - int[][] property = sEquipConfig.getProperty(); - Map propertyValueByIdMap = new HashMap<>(); - for(int[] prop:property){ - propertyValueByIdMap.put(prop[0],prop[1]); - } - combinedAttribute(propertyValueByIdMap,heroAllAttribute); - equipForce+=sEquipConfig.getScore(); - suiteNumByIdMap.put(sEquipConfig.getSuiteID(),suiteNumByIdMap.getOrDefault(sEquipConfig.getSuiteID(),0)+1); - } - if(!suiteNumByIdMap.isEmpty()){ - suiteNumByIdMap.forEach((suiteId,suiteNums)->{ - SEquipSuiteConfig sEquipSuiteConfig =SEquipSuiteConfig.config.get(suiteId); - if( null!=sEquipSuiteConfig){ - Map suitePropertyMap = sEquipSuiteConfig.getSuiteMap().get(suiteNums); - if(suitePropertyMap!=null){ - combinedAttribute(suitePropertyMap,heroAllAttribute); - } - } - }); - } - if(needRemove){ - AyyncWorker ayyncWorker = new AyyncWorker(user,true,user1 -> { - Map heroMap = user1.getHeroManager().getHeroMap(); - for(Hero heroTmp : heroMap.values()){ - Iterator> iterator1 = heroTmp.getEquipByPositionMap().entrySet().iterator(); - boolean isUpate = false; - while (iterator1.hasNext()){ - Map.Entry next = iterator1.next(); - Integer equipId = next.getValue(); - PropertyItem equip = equipMap.get(equipId); - if(equip == null){ - iterator1.remove(); - isUpate = true; - } - } - if(isUpate){ - heroTmp.setEquipByPositionMap(heroTmp.getEquipByPositionMap()); - } - } - }); - ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); - } - - //工坊科技树加成 - Map techProfressionMap = user.getWorkShopController().getTechnologyMap().get(scHero.getProfession()); - if(techProfressionMap!=null){ - for(Map.Entry item : techProfressionMap.entrySet()){ - SWorkShopTechnology sWorkShopTechnology = STableManager.getFigureConfig(CommonStaticConfig.class).getsWorkTechMapByTechIdAndLevel(item.getKey(), item.getValue()); - if(sWorkShopTechnology == null){ - continue; - } - int[][] attrAdd = sWorkShopTechnology.getValues(); - if(attrAdd!=null&& attrAdd.length>0){ - combinedAttribute(attrAdd,heroAllAttribute); - } - } - - } - //法宝加成 - - int heroStar = hero.getStar(); - if(scHero.getEquipTalismana()!=null&&scHero.getEquipTalismana().length>0&&heroStar>=scHero.getEquipTalismana()[0]){//判断是否解锁法宝 - int equipTempId = scHero.getEquipTalismana()[1]; - int tempStar = hero.getEspecialEquipLevel(); - Map> equipTalismanaMap = SEquipTalismana.equipTalismanaStarMap; - SEquipTalismana equipTali = equipTalismanaMap.get(equipTempId).get(tempStar); - - combinedAttribute(equipTali.getProperty(),heroAllAttribute); - } - - //宝器加成 - Set jewelInfo = hero.getJewelInfo(); - boolean flashing = jewelInfo.size()==2; - int minLevel = -1; - int minBuildLevel = -1; - - for (String jewel: jewelInfo) { - - PropertyItem propertyItem = equipMap.get(jewel); - if(propertyItem==null) { - continue; - } - Jewel j = (Jewel)propertyItem; - SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(j.getEquipId()); - Map> rankPoolMap = SJewelRankupConfig.rankupMap.get(config.getRankupPool()); - Map> levelPoolMap = SJewelRankupConfig.rankupMap.get(config.getLevelupPool()); - - - if(flashing){ - if(minLevel==-1){ - minLevel = j.getLevel(); - }else{ - minLevel = Math.min(j.getLevel(),minLevel); - } - if(minBuildLevel==-1){ - minBuildLevel = j.getBuildLevel(); - }else{ - minBuildLevel = Math.min(j.getBuildLevel(),minBuildLevel); - } - } - int[][] property; - if(levelPoolMap!=null){ - property = levelPoolMap.get(1).get(j.getLevel()).getProperty(); - combinedAttribute(property,heroAllAttribute); - } - if(rankPoolMap!=null){ - property = rankPoolMap.get(2).get(j.getBuildLevel()).getProperty(); - combinedAttribute(property,heroAllAttribute); - } - } - //宝器共鸣 - if(flashing){ - Map config = STableManager.getConfig(SJewelResonanceConfig.class); - int levelProperty = 0; - int buildLevelProperty = 0; - for (SJewelResonanceConfig value:config.values()){ - if(value.getType()==1){ - levelProperty = value.getLevel()>minLevel?levelProperty:(value.getId()>levelProperty? value.getId():levelProperty); - } - if(value.getType()==2){ - buildLevelProperty = value.getLevel()>minBuildLevel?buildLevelProperty:(value.getId()>buildLevelProperty? value.getId():buildLevelProperty); - } - } - if(levelProperty!=0){ -// System.out.println("宝器强化共鸣"+"......"+propertyToString(config.get(levelProperty).getProperty())); - - combinedAttribute(config.get(levelProperty).getProperty(),heroAllAttribute); - } - if(buildLevelProperty!=0){ -// System.out.println("宝器精炼共鸣"+"......"+propertyToString(config.get(buildLevelProperty).getProperty())); - - combinedAttribute(config.get(buildLevelProperty).getProperty(),heroAllAttribute); - } - } - //魂印 - Map soulEquipByPositionMap = hero.getSoulEquipByPositionMap(); - soulEquipByPositionMap.forEach((k,v)->{ - SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(v); - int[][] property = sEquipConfig.getProperty(); - if(property!=null&&property.length>0&&property[0].length>0){ - combinedAttribute(property,heroAllAttribute); - } - }); - - - //皮肤、称号加成 - int decoration = user.getPlayerInfoManager().getDecoration(); - int designation = user.getPlayerInfoManager().getDesignation(); - if(decoration!=0&&SPlayerAppearance.sPlayerAppearanceMap.get(decoration)!=null){ - combinedAttribute(SPlayerAppearance.sPlayerAppearanceMap.get(decoration).getProperty(),heroAllAttribute); - }if(designation!=0&&SPlayerAppearance.sPlayerAppearanceMap.get(designation)!=null){ - combinedAttribute(SPlayerAppearance.sPlayerAppearanceMap.get(designation).getProperty(),heroAllAttribute); - } - - //坐骑加成 - if(user.getPlayerInfoManager().getRide()!=0){ - int rideLevel = user.getPlayerInfoManager().getRideLevel(); - int[][] property = SPlayerMountLevelUp.sPlayerMountLevelUpMap.get(rideLevel).getProperty(); - combinedAttribute(property,heroAllAttribute); - } - //公会技能加成 - Map guildSkill = user.getGuildMyInfo().getGuildSkill(); - if(guildSkill.containsKey(scHero.getProfession())){ - int size = SGuildTechnology.technologyMap.get(scHero.getProfession()).size(); - int level = guildSkill.get(scHero.getProfession()); - List skills = new ArrayList<>(); - for(int i = 1;i<=size;i++){ - int baseLevel = level/size; - if(level%size>=i){ - baseLevel+=1; - } - Map levelMap = SGuildTechnology.technologyMap.get(scHero.getProfession()).get(i); - SGuildTechnology sGuildTechnology = levelMap.get(baseLevel); - skills.add(sGuildTechnology.getValues()); - } - int[][] arraySkills = skills.toArray(new int[skills.size()][]); - combinedAttribute(arraySkills,heroAllAttribute); - } - - - //阵营光环加成 - - if(teamId!=0){ - try { - int[][] elementEffect = CombatLogic.getInstance().elementEffect(user,teamId); - if (elementEffect!=null&&elementEffect.length>0){ - combinedAttribute(elementEffect,heroAllAttribute); - } - }catch (Exception e){ - e.printStackTrace(); - } - - } - - //被动技能加成 - Set heroSkillList = CombatLogic.getInstance().passiveskillEffect(user, hero,teamId); - - if(teamId==GlobalsDef.EXPEDITION_TEAM){ - ExpeditionManager expeditionManager = user.getExpeditionManager(); - Set expeditionHolyConfigs = ExpeditionLogic.getFirstRankHoly(expeditionManager); - for (SExpeditionHolyConfig config:expeditionHolyConfigs) { - heroSkillList.add(config.getPassiveSkillId()); - } - } - - Map heroSkillAdMap = new HashMap<>(); - heroSkillList.forEach(skill->{ - SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); - if(null!=config.getValue()&&config.getValue().length>2&&config.getValue()[2] !=4){ - PassiveskillCalEnum passiveskillCalEnum = PassiveskillCalEnum.calEnumMap.get(config.getType()); - if(null!= passiveskillCalEnum){ - passiveskillCalEnum.getPassiveSkillProcessor().process(config,hero,heroSkillAdMap); - } - } - - }); - - - - if(!heroSkillAdMap.isEmpty()){ - combinedAttribute(heroSkillAdMap,heroAllAttribute); - heroSkillAdMap.clear(); - } - - //特权加成 - int vipLevel = user.getPlayerInfoManager().getVipLevel(); - SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel); - if(null!=sVipLevelConfig){ - int[][] elementEffect =sVipLevelConfig.getProperty(); - if (elementEffect!=null&&elementEffect.length>0) { - combinedAttribute(elementEffect,heroAllAttribute); - } - } - - //移除非pvp队伍加成 - - if(teamId!=GlobalsDef.TEAM_ARENA_ATTACH&&teamId!=GlobalsDef.TEAM_ARENA_DEFENSE){ - heroAllAttribute.remove(HeroAttributeEnum.PVPDamageBocusFactor.getPropertyId()); - heroAllAttribute.remove(HeroAttributeEnum.PVPDamageReduceFactor.getPropertyId()); - } - - calInteractAdd(heroAllAttribute); - - heroSkillList.forEach(skill->{ - SPassiveSkillLogicConfig configTmp = SPassiveSkillLogicConfig.getConfig(skill); - if(null!=configTmp.getValue()&&configTmp.getValue().length>2&&configTmp.getValue()[2] ==4){ - PassiveskillCalEnum passiveskillCalEnum = PassiveskillCalEnum.calEnumMap.get(configTmp.getType()); - if(null!= passiveskillCalEnum){ - passiveskillCalEnum.getPassiveSkillProcessor().process(configTmp,hero,heroSkillAdMap); - } - } - }); - if(!heroSkillAdMap.isEmpty()){ - combinedAttribute(heroSkillAdMap,heroAllAttribute); - calInteractAdd(heroAllAttribute); - heroSkillAdMap.clear(); - } - - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),heroAllAttribute.get(GlobalsDef.HP_TYPE)); - //装备战力保存 - heroAllAttribute.put(HeroAttributeEnum.EquipForce.getPropertyId(),equipForce); - - return heroAllAttribute; - } - - private String propertyToString(int[][] property){ - StringBuilder builder = new StringBuilder(); - for(int[] pro:property){ - builder.append(pro[0]).append("#").append(pro[1]).append("\n"); - } - return builder.toString(); - } - - - public Map calRobotHeroAttribute(SCHero scHero,int heroLevel,int heroBrekId,int[] pokemonIds,int pokemonLevel,boolean isForce){ - Map heroAllAttribute = calRobotHeroAllAttribute(scHero.getId(),heroLevel,heroBrekId,isForce); - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),heroAllAttribute.get(GlobalsDef.HP_TYPE)); - if(pokemonIds!=null){ - int profession = scHero.getProfession(); - for(Integer pokemonId : pokemonIds){ - int[] comonpentList = SDifferDemonsConfig.getsDifferDemonsConfigByPokenID(pokemonId).getComonpentList(); - for(Integer comonpentId : comonpentList){ - Map sDifferDemonsComonpentsConfigMap = SDifferDemonsComonpentsConfig.getsDifferDemonsComonpentsConfigMap(comonpentId); - SDifferDemonsComonpentsConfig sDifferDemonsComonpentsConfig = sDifferDemonsComonpentsConfigMap.get(pokemonLevel); - Map> extraAddMap = sDifferDemonsComonpentsConfig.getExtraAddMap(); - if(extraAddMap!=null&&(extraAddMap.containsKey(profession)||extraAddMap.containsKey(0))){ - int innerId = extraAddMap.containsKey(0) ? 0 : profession; - Map professionAddMap = extraAddMap.get(innerId); - combinedAttribute(professionAddMap,heroAllAttribute); - } - combinedAttribute(sDifferDemonsComonpentsConfig.getBaseAttribute(),heroAllAttribute); - } - } - } - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),heroAllAttribute.get(GlobalsDef.HP_TYPE)); - calInteractAdd(heroAllAttribute); - return heroAllAttribute; - } - - - /** - * 属性数值计算 - * 先计算一级属性 - *绝对值直接加 百分比统一之后加 - */ - public void calInteractAdd(Map heroAllAttribute){ - Map propertyPercentMap = new HashMap<>(); - Iterator> iterator = heroAllAttribute.entrySet().iterator(); - Map newAddAttribute = new HashMap<>(); - while (iterator.hasNext()){ - Map.Entry item = iterator.next(); - Integer propertyId = item.getKey(); - if(propertyId == HeroAttributeEnum.EquipForce.getPropertyId()){ - continue; - } - SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(propertyId); - int targetPropertyId = sPropertyConfig.getTargetPropertyId(); - if(targetPropertyId == 0){ - continue; - } - SPropertyConfig stargetPro = SPropertyConfig.getsPropertyConfigByPID(targetPropertyId); - if(stargetPro==null){ - continue; - } - int style = sPropertyConfig.getStyle(); - Integer effectValue = item.getValue(); - - //如果目标属性也是万分比 直接加 - if(style == GlobalsDef.ABSOLUTE_TYPE||stargetPro.getStyle()==GlobalsDef.PERCENT_TYPE){ - if(heroAllAttribute.containsKey(targetPropertyId)){ - Integer targetValue = heroAllAttribute.getOrDefault(targetPropertyId,0); - effectValue += targetValue; - heroAllAttribute.put(targetPropertyId,effectValue); - }else { - newAddAttribute.merge(targetPropertyId,effectValue,(a, b) -> a+b); - } - }else{ - propertyPercentMap.put(targetPropertyId,effectValue); - } - iterator.remove(); - } - - heroAllAttribute.putAll(newAddAttribute); - - for(Map.Entry item : propertyPercentMap.entrySet()){ - Integer propertyId = item.getKey(); - Integer propertyValue = heroAllAttribute.getOrDefault(propertyId,0); - heroAllAttribute.put(propertyId,BigDecimal.valueOf(propertyValue).multiply(BigDecimal.valueOf(item.getValue()).divide(BigDecimal.valueOf(10000f))).intValue()+propertyValue); - } - - - Integer maxHp = heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId()); - Integer curHp = heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId()); - if(maxHp!=null && curHp!=null && curHp > maxHp){ - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),maxHp); - } - } - - - - //获取英雄所有属性 - public Map calHeroFinalAttributeWhenInMap(User user, Hero hero,boolean isForce,int teamId){ - Map heroAllAttribute = user.getMapManager().getHeroAllAttributeByHeroId(hero.getId()); - if(heroAllAttribute == null){ - heroAllAttribute=calHeroNotBufferAttribute(user, hero,isForce,teamId); - return heroAllAttribute; - } - //食物buffer加成 - Map foodAddMap = CombatLogic.getInstance().attributeByEatFood(user,GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_PERSON); - if(foodAddMap.isEmpty()){ - return heroAllAttribute; - } - Map heroAllAttributeCopy = new HashMap<>(heroAllAttribute); - combinedAttribute(foodAddMap,heroAllAttributeCopy); - calInteractAdd(heroAllAttributeCopy); - return heroAllAttributeCopy; - } - - - public int calHeoForce(User user, Hero hero,int teamId){ - Map heroAllAttribute; - heroAllAttribute = calHeroNotBufferAttribute(user, hero,true,teamId); - //战力保存 - int force = calForce(heroAllAttribute); - Map soulEquipByPositionMap = hero.getSoulEquipByPositionMap(); - for (int sign:soulEquipByPositionMap.values()){ - SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(sign); - if(sEquipConfig==null) - continue; - force+=sEquipConfig.getScore(); - } - return force + heroAllAttribute.get(HeroAttributeEnum.EquipForce.getPropertyId()); - } - - - public int calForce( Map heroAllAttribute ){ - double result = 0; - for(Map.Entry item : heroAllAttribute.entrySet()){ - Integer propertyId = item.getKey(); - float propertyValue = item.getValue(); - if(propertyId == HeroAttributeEnum.EquipForce.getPropertyId()){ -// LOGGER.info("the equipScore={}",propertyValue); - continue; - } - SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(propertyId); - if(sPropertyConfig.getStyle() == GlobalsDef.PERCENT_TYPE){ - propertyValue = propertyValue / 100F; - } - float score = sPropertyConfig.getScore(); - - result += propertyValue*score; -// LOGGER.info("the propertyId={} the value is ={},propertyValue={},score={},result ={},the value={}",propertyId,propertyValue*score,propertyValue,score,result,propertyValue*score); - } -// System.out.println(result); - return (int)result; - } - - public void combinedAttribute(Map otherAttriMaop,Map heroAttributeMap){ - for(Map.Entry item : otherAttriMaop.entrySet()){ - Integer propertyId = item.getKey(); - Integer propertyValue = item.getValue(); - if(heroAttributeMap.containsKey(propertyId)){ - propertyValue += heroAttributeMap.get(propertyId); - } - heroAttributeMap.put(propertyId,propertyValue); - // LOGGER.info("the propertyId={} the propertyValue is ={},",propertyId,propertyValue); - } - } - public void combinedAttribute(int[][] otherAttriMap,Map heroAttributeMap){ - for(int[] item : otherAttriMap){ - int propertyId = item[0]; - int propertyValue = item[1]; - heroAttributeMap.put(propertyId,heroAttributeMap.getOrDefault(propertyId,0)+propertyValue); - } - } - - //新版穿装备 - private boolean checkEquipForWear(Hero hero,User user,List equipIds, Map equipInfos ) throws Exception { - - - if(equipIds == null || equipIds.isEmpty()){ - return false; - } - if(hero==null){ - return false; - } - for(String equipId : equipIds){ - int equip = Integer.parseInt(equipId); - SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(equip); - if (sEquipConfig == null) { - return false; - } - int position = sEquipConfig.getPosition(); - boolean itemCost = ItemUtil.itemCost(user, new int[][]{{equip, 1}}, BIReason.EQUIP_WEAR_CONSUME, equip); - if(!itemCost){ - return false; - } - - int professionLimit = sEquipConfig.getProfessionLimit(); - SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); - if(professionLimit!=0 && scHero.getProfession()!= professionLimit){ - return false; - } - equipInfos.put(position,equip); - } - return true; - - } - - - - // equip TODO 装备会导致英雄属性发生变化 - public void wearEquipOpt(ISession session,String heroId,List equipIds,int type) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - Hero hero = user.getHeroManager().getHeroMap().get(heroId); - EquipManager equipManager = user.getEquipManager(); - if(type==1){ - Map equipInfoTmp = new HashMap<>(4); - if(!checkEquipForWear(hero,user,equipIds,equipInfoTmp)){ - throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR); - } - List equipUnload = new ArrayList<>(4); - for(Map.Entry entry :hero.getEquipByPositionMap().entrySet()){ - if(!equipInfoTmp.containsKey(entry.getKey()) ) { - continue; - } - equipUnload.add(entry.getValue()); - } - int[][] unloadArray = new int[equipUnload.size()][]; - for(int i = 0 ; i heroNotBufferAttribute = calHeroNotBufferAttribute(user, hero); -// int force = calForce(heroNotBufferAttribute) + heroNotBufferAttribute.get(HeroAttributeEnum.EquipForce.getPropertyId()); -// LOGGER.info("the heroTid={},the force={}",hero.getTemplateId(),force); - - if(isInTeam(user,heroId,1)){ - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(uid)); - } - //发送成功消息 - MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE,null,true); - - - } - - private void wearJewel(Hero hero,EquipManager equipManager,String equipId)throws Exception{ - Jewel equip =(Jewel)equipManager.getEquipMap().get(equipId); - - if( null == equip || null == hero ){ - throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR); - } - if(null!=equip.getHeroId()&&!equip.getHeroId().equals("")){ - return; - } - - String remove = ""; - for(String jewelId:hero.getJewelInfo()){ - PropertyItem propertyItem = equipManager.getEquipMap().get(jewelId); - if(propertyItem==null){ - continue; - } - if(propertyItem instanceof Jewel){ - if(equip.getJewelType()==((Jewel) propertyItem).getJewelType()){ - remove = propertyItem.getId(); - } - } - } - hero.addJewel(equipId); - equip.setHeroId(hero.getId()); - - //如果是替换 - if(!StringUtil.isEmpty(remove)){ - hero.removeJewel(remove); - equipManager.getEquipMap().get(remove).setHeroId(""); - } - - } - - - - - public void unloadEquipOpt(ISession session,String heroId,List equipIds,int type) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - Hero hero = user.getHeroManager().getHero(heroId); - if( hero == null || equipIds.isEmpty()){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if(type==1){ - List positions = new ArrayList<>(); - for(String equipId : equipIds){ -// - int equipIdTid =Integer.parseInt(equipId); - SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(equipIdTid); - int position = sEquipConfig.getPosition(); - Integer currEquip = hero.getEquipByPositionMap().get(position); - if(currEquip == null || currEquip != equipIdTid){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - positions.add(position); - } - if(positions.size()==0){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - int[][] dropEquip = new int[positions.size()][]; - for(int i = 0 ; i equipMap = user.getEquipManager().getEquipMap(); - for(String equipId:equipIds){ - if(!hero.getJewelInfo().contains(equipId)){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if(equipMap.get(equipId)!=null){ - equipMap.get(equipId).setHeroId(""); - } - hero.removeJewel(equipId); - } - } - - if(isInTeam(user,heroId,1)){ - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(uid)); - } - //发送成功消息 - MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.EQUIP_UNLOAD_OPT_RESPONSE_VALUE,null,true); - } - - /** - * 英雄,灵兽合成 - * @param iSession - * @param item - */ - public void heroCompose(ISession iSession, CommonProto.Item item) throws Exception { - int msgId = MessageTypeProto.MessageType.HERO_COMPOSE_RESPONSE_VALUE; - int uid = iSession.getUid(); - User user = UserManager.getUser(uid); - int hasHeroNum = user.getHeroManager().getHeroMap().size(); - int itemId = item.getItemId(); - int itemNum = item.getItemNum(); - SItem sItem = SItem.getsItemMap().get(itemId); - if (sItem == null || itemNum <= 0 || itemNum >= Integer.MAX_VALUE) { - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - int composeNum = itemNum/sItem.getUsePerCount(); - SGameSetting gameSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting(); - if (composeNum <= 0 || composeNum > gameSetting.getHeroCompoundLimit()){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if (hasHeroNum + composeNum > gameSetting.getHeroNumlimit()){ - throw new ErrorCodeException(ErrorCode.HERO_HERO_MAX); - } - boolean result = ItemUtil.checkCost(user, sItem, itemNum,BIReason.COMPOS_HERO_CONSUME,itemId); - if (!result){ - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); - } - Map randomMap = new ConcurrentHashMap<>(); - randomMap.put(itemId,composeNum); - CommonProto.Drop.Builder drop = ItemUtil.useRandomItem(user,randomMap, BIReason.COMPOS_HERO_REWARD); - HeroInfoProto.HeroComposeResponse heroComposeResponse = HeroInfoProto.HeroComposeResponse - .newBuilder() - .setDrop(drop) - .build(); - if(!drop.getHeroList().isEmpty()){ - user.getUserMissionManager().onGameEvent(user,GameEvent.COMPOS_HERO,drop.getHero(0).getHeroId(),composeNum); - } - MessageUtil.sendMessage(iSession,1,msgId,heroComposeResponse,true); } - - public String getQuality(int natural) { - String quality = "N"; - switch (natural){ - case 2: - quality = "SR"; - break; - case 3: - quality = "SSR"; - break; - case 4: - quality = "SSR+"; - break; - case 5: - quality = "UR"; - break; - case 6: - quality = "UR+"; - break; - default: { - quality = "UR+"; - break; - } - } - return quality; - } - //TODO isMyself ??? - public int calTeamTotalForce(User targetUser,int teamId,boolean isMyself){ - int totalForce =0; - targetUser.getTeamPosManager().setCurTeamPosId(teamId); - List teamPosHeroInfoList = targetUser.getTeamPosManager().getTeamPosForHero().get(teamId); - if(teamPosHeroInfoList == null || teamPosHeroInfoList.isEmpty()){ - return totalForce; - } - - int maxForceHero =0; - String heroid=""; - for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList) { - Hero hero = targetUser.getHeroManager().getHero(teamPosHeroInfo.getHeroId()); - if (hero == null) { - continue; - } - int force = calHeoForce(targetUser, hero, teamId); - if(maxForceHero heroList = sArenaRobotConfig.getHeroList(); - int[] differDemonsId = sArenaRobotConfig.getDifferDemonsId(); - int differDemonsLv = sArenaRobotConfig.getDifferDemonsLv(); - int heroLevel = sArenaRobotConfig.getRoleLv(); - for(Integer heroTid :heroList){ - SCHero scHero = SCHero.getsCHero().get(heroTid); - Map robotHeroAttribute = calRobotHeroAttribute(scHero, heroLevel, 0, differDemonsId, differDemonsLv,true); - totalForce+=calForce(robotHeroAttribute); - } - return totalForce; - } - - public void calPercent(int[][] otherAttriMap,Map heroAttributeMap){ - for(int[] item : otherAttriMap){ - int propertyId = item[0]; - int propertyValue = item[1]; - if(!heroAttributeMap.containsKey(propertyId)){ - continue; - } - int nums = propertyValue * heroAttributeMap.get(propertyId) / 100; - if(nums<=0){ - return; - } - heroAttributeMap.put(propertyId,nums); - } - } - - - //妖灵师是否在阵容中 - public boolean isInTeam(User user,String heroId,int teamId){ - Map> teamPosForHero = user.getTeamPosManager().getTeamPosForHero(); - Set collect = teamPosForHero.entrySet().stream().filter(integerListEntry -> - { - for (TeamPosHeroInfo teamPos : integerListEntry.getValue()) { - if (teamPos.getHeroId().equals(heroId)) { - return true; - } - } - return false; - }).map(Map.Entry::getKey).collect(Collectors.toSet()); - - return collect.contains(teamId); - } - - - //妖灵师是否在阵容中 - public boolean isBattleArray (User user,String heroId,int[] teamId){ - Map> teamPosForHero = user.getTeamPosManager().getTeamPosForHero(); - //判断是否不可下阵中有该英雄 - - - List list = new ArrayList<>(); - Arrays.stream(teamId).forEach(i->list.add(i)); - - AtomicBoolean result = isInTeams(user, heroId, teamId); - - //直接删除英雄 - if(result.get()){ - teamPosForHero.entrySet().stream().filter(entry-> - !list.contains(entry.getKey())).forEach(entry->{ - List value = entry.getValue(); - Iterator it = value.iterator(); - boolean needUpdate = false; - while(it.hasNext()){ - TeamPosHeroInfo hero = it.next(); - if(hero.getHeroId().equals(heroId)){ - if(entry.getKey()==GlobalsDef.ENDLESS_TEAM&&user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo().get(heroId)!=null){ - user.getMapManager().removeEndlessHero(heroId); - } - it.remove(); - needUpdate = true; - }; - if(needUpdate){ - user.getTeamPosManager().updateTeamPosByTeamId(entry.getKey(),value); - } - } - }); - } - return result.get(); - } - - public AtomicBoolean isInTeams(User user,String heroId,int[] teamId){ - Map> teamPosForHero = user.getTeamPosManager().getTeamPosForHero(); - //判断是否不可下阵中有该英雄 - AtomicBoolean result = new AtomicBoolean(true); - - List list = new ArrayList<>(); - Arrays.stream(teamId).forEach(i->list.add(i)); - - list.stream().filter(tId->teamPosForHero.containsKey(tId)).forEach(tId->teamPosForHero.get(tId).forEach(hero->{ - if(hero.getHeroId().equals(heroId)){ - result.set(false); - } - })); - return result; - } - - private int[][] calPokemonAttribute(PokemonManager pokemonManager){ - Map pokemonAttributeMap = new HashMap<>(); - Map pokemonTeamMap = pokemonManager.getPokemonTeamMap(); - for(Map.Entry entry:pokemonTeamMap.entrySet()){ - Pokemon pokemon = pokemonManager.getPokemonMap().get(entry.getValue()); - Map oneAttrMap = new HashMap<>(); - SSpiritAnimal animal = STableManager.getConfig(SSpiritAnimal.class).get(pokemon.getTmpId()); - oneAttrMap.put(GlobalsDef.HP_TYPE,(int)animal.getHp()); - oneAttrMap.put(GlobalsDef.ATTACK_TYPE,(int)animal.getAttack()); - - oneAttrMap.put(GlobalsDef.PHYSICAL_DEFENCE_TYPE,(int)animal.getPhysicalDefence()); - - oneAttrMap.put(GlobalsDef.MAGIC_DEFENCE_TYPE,(int)animal.getMagicDefence()); - //等级增量 - SSpiritAnimalLevel levelConfig = SSpiritAnimalLevel.configByQualityAndLevel.get(animal.getQuality()).get(pokemon.getLevel()); - int[][] characterLevelPara = levelConfig.getCharacterLevelPara(); - for(int[] para:characterLevelPara){ - oneAttrMap.put(para[0],oneAttrMap.getOrDefault(para[0],0)+para[1]); - } - //星级增量 - SSpiritAnimalStar starConfig = SSpiritAnimalStar.configByQualityAndStar.get(animal.getQuality()).get(pokemon.getStar()); - int starPara = starConfig.getStarPara(); - for(int key:oneAttrMap.keySet()){ - pokemonAttributeMap.put(key,pokemonAttributeMap.getOrDefault(key,0)+(int)(oneAttrMap.getOrDefault(key,0)*(1+starPara/10000d))); - } - } - int[][] resultArray = ItemUtil.mapToArray(pokemonAttributeMap); - return resultArray; - } - - /** - * 计算一个灵兽的属性 - * @param pokemonManager - * @return - */ - private Map calOnePokemonAttribute(PokemonManager pokemonManager,String pokemonId){ - Pokemon pokemon = pokemonManager.getPokemonMap().get(pokemonId); - return calOnePokemonAttribute(pokemon.getTmpId(),pokemon.getStar(),pokemon.getLevel()); - } - public Map calOnePokemonAttribute(int tmpId,int star,int level){ - Map pokemonAttributeMap = new HashMap<>(); - Map oneAttrMap = new HashMap<>(); - SSpiritAnimal animal = STableManager.getConfig(SSpiritAnimal.class).get(tmpId); - oneAttrMap.put(GlobalsDef.HP_TYPE,(int)animal.getHp()); - oneAttrMap.put(GlobalsDef.ATTACK_TYPE,(int)animal.getAttack()); - - oneAttrMap.put(GlobalsDef.PHYSICAL_DEFENCE_TYPE,(int)animal.getPhysicalDefence()); - - oneAttrMap.put(GlobalsDef.MAGIC_DEFENCE_TYPE,(int)animal.getMagicDefence()); - //等级增量 - SSpiritAnimalLevel levelConfig = SSpiritAnimalLevel.configByQualityAndLevel.get(animal.getQuality()).get(level); - int[][] characterLevelPara = levelConfig.getCharacterLevelPara(); - for(int[] para:characterLevelPara){ - oneAttrMap.put(para[0],oneAttrMap.getOrDefault(para[0],0)+para[1]); - } - //星级增量 - SSpiritAnimalStar starConfig = SSpiritAnimalStar.configByQualityAndStar.get(animal.getQuality()).get(star); - int starPara = starConfig.getStarPara(); - for(int key:oneAttrMap.keySet()){ - pokemonAttributeMap.put(key,pokemonAttributeMap.getOrDefault(key,0)+(int)(oneAttrMap.getOrDefault(key,0)*(1+starPara/10000d))); - } - return pokemonAttributeMap; - } - - /** - * 获取一个灵兽的属性字符串 - * @param propertyMap - * @param level - * @return - */ - public StringBuilder getOnePokemonProperty(Map propertyMap,int level){ - StringBuilder builder = new StringBuilder(); - builder.append(level); - for(int propId:pokemonTemplate){ - builder.append("#"); -// Hit(53), -// CureFacter(57), -// TreatFacter(58), 这三个默认要给前端传1 - if(propId==HeroAttributeEnum.Hit.getPropertyId()||propId==HeroAttributeEnum.CureFacter.getPropertyId()||propId==HeroAttributeEnum.TreatFacter.getPropertyId()){ - builder.append(propertyMap.getOrDefault(propId,1)); - }else{ - builder.append(propertyMap.getOrDefault(propId,0)); - } - } - return builder; - } - - //todo 灵兽 - public int calAllPokenmonForce(User user){ -// Map pokemonAttributeMap = new HashMap<>(); -// Map pokemonMap = user.getPokemonManager().getPokemonMap(); -// for(Pokemon pokemon : pokemonMap.values()){ -// combinePokemonAttribute(pokemonAttributeMap, pokemon,false); -// } -// -// return calForce(pokemonAttributeMap)*5; - return 0; - } - - - - private void combinePokemonAttribute(Map pokemonAttributeMap, Pokemon pokemon,boolean needExtra) { - //todo 灵兽 -// Map comonpentsLevelMap = pokemon.getComonpentsLevelMap(); -// for (Map.Entry comonpentsLevelItem : comonpentsLevelMap.entrySet()) { -// Integer comonpentId = comonpentsLevelItem.getKey(); -// Integer comonpentLevel = comonpentsLevelItem.getValue(); -// Map sDifferDemonsComonpentsConfigMap = SDifferDemonsComonpentsConfig.getsDifferDemonsComonpentsConfigMap(comonpentId); -// SDifferDemonsComonpentsConfig sDifferDemonsComonpentsConfig = sDifferDemonsComonpentsConfigMap.get(comonpentLevel); -// Map> extraAddMap = sDifferDemonsComonpentsConfig.getExtraAddMap(); -// combinedAttribute(sDifferDemonsComonpentsConfig.getBaseAttribute(), pokemonAttributeMap); -// -// if (needExtra && extraAddMap != null) { -// for (Map item : extraAddMap.values()) { -// combinedAttribute(item, pokemonAttributeMap); -// } -// } -// } - } - - public int calEquipForce(Equip equip){ - Map equipAttributeMap = new HashMap<>(); - SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(equip.getEquipId()); - Map propertyValueByIdMap = equip.getPropertyValueByIdMap(); - Map secondValueByIdMap = equip.getSecondValueByIdMap(); - combinedAttribute(propertyValueByIdMap,equipAttributeMap); - combinedAttribute(secondValueByIdMap,equipAttributeMap); - return calForce(equipAttributeMap)+sEquipConfig.getScore(); - } - //获取天赋异妖信息 - public void getAllRingFire(ISession session) throws Exception { - //todo 灵兽 -// int uid = session.getUid(); -// User user = UserManager.getUser(uid); -// PokemonManager pokemonManager = user.getPokemonManager(); -// Map ringFireMap = pokemonManager.getRingFireMap(); -// HeroInfoProto.GetAllRingFireResponse.Builder builder = HeroInfoProto.GetAllRingFireResponse.newBuilder(); -// for(Pokemon pokemon : ringFireMap.values()){ -// CommonProto.RingFireInfo ringFire = CBean2Proto.getRingFire(pokemon); -// builder.addRingFireInfo(ringFire); -// } - MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.GET_RINGFIRE_INFO_RESPONSE_VALUE,null,true); - } - - - - - public void getTeamForceForUpload( StringBuilder append, List teamPosHeroInfoList,User user,int teamID){ - if(teamPosHeroInfoList != null &&!teamPosHeroInfoList.isEmpty()){ - HeroManager heroManager = user.getHeroManager(); - Map heroMap = heroManager.getHeroMap(); - Map heroPosMap = new HashMap<>(5); - for(TeamPosHeroInfo teamPosHeroInfo: teamPosHeroInfoList){ - String heroId = teamPosHeroInfo.getHeroId(); - Hero hero = heroMap.get(heroId); - heroPosMap.put(teamPosHeroInfo.getPosition(),calHeoForce(user,hero,teamID)); - } - for(int i=1;i<6;i++){ - Integer force = heroPosMap.get(i); - if(force == null){ - force=0; - } - append.append(",").append(force); - } - }else{ - for(int i=1;i<6;i++){ - append.append(",").append(0); - } - } - } - - - private void checkAllowedWear(User user,Hero targetHero,List soulEquipIdsList, HeroInfoProto.OptHeroSoul unload) throws Exception { - int targetHeroTid = targetHero.getTemplateId(); - List equids = new ArrayList<>(); - Map soulEquipByPositionMap = targetHero.getSoulEquipByPositionMap(); - Collection values = soulEquipByPositionMap.values(); - for(HeroInfoProto.SoulEquipPos item:soulEquipIdsList){ - if(values.contains(item.getEquipId()) && soulEquipByPositionMap.get(item.getPosition()) != item.getEquipId()){ - throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); - } - } - soulEquipIdsList.forEach(e->equids.add(e.getEquipId())); - List unloadSoulIds = new ArrayList<>(); - Map heroMap = user.getHeroManager().getHeroMap(); - if(unload!=null && !StringUtil.isEmpty(unload.getHeroId())){ - String heroId = unload.getHeroId(); - List soulEquipIdsListUnload = unload.getSoulEquipIdsList(); - Map unloadSoulEquipByPositionMap = heroMap.get(heroId).getSoulEquipByPositionMap(); - for(HeroInfoProto.SoulEquipPos soulEquipPos:soulEquipIdsListUnload){ - unloadSoulIds.add(soulEquipPos.getEquipId()); - if(unloadSoulEquipByPositionMap.get(soulEquipPos.getPosition())!=soulEquipPos.getEquipId()){ - throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); - } - } - equids.removeAll(unloadSoulIds); - } - //是否魂印能被本英雄佩戴 - //是否只能一名武将佩戴 - - Set cacheIds = new HashSet<>(); - int userLevel = user.getPlayerInfoManager().getLevel(); - for(HeroInfoProto.SoulEquipPos item:soulEquipIdsList){ - int equipId = item.getEquipId(); - int[] sign_locations = SSpecialConfig.getOnceArrayValue(SSpecialConfig.Sign_Location); - int position = item.getPosition()-1; - if(position<0||position>sign_locations.length|| position>sign_locations.length-1 || userLevel < sign_locations[position]){ - throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); - } - SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(equipId); - if(sEquipConfig.getRangeHeroTids()!=null && !sEquipConfig.getRangeHeroTids().contains(targetHeroTid)){ - throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); - } - if(sEquipConfig.getLimit()==1){ - if(cacheIds.isEmpty()){ - heroMap.values().forEach(hero->{ - cacheIds.addAll(hero.getSoulEquipByPositionMap().values()); - }); - cacheIds.removeAll(unloadSoulIds); - } - if(cacheIds.contains(equipId)){ - cacheIds.add(equipId); - throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); - } - } - } - - - if(!equids.isEmpty()){ - Map itemCost = new HashMap<>(); - equids.forEach(e->{ - itemCost.put(e,1); - }); - boolean b = ItemUtil.itemCost(user, itemCost, BIReason.SOUL_EQUIP_WEAR_CONSUME, targetHeroTid); - if(!b){ - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); - } - } - if(unload!=null&&!StringUtil.isEmpty(unload.getHeroId())){ - Hero hero = user.getHeroManager().getHero(unload.getHeroId()); - List soulEquipIdsListUnload = unload.getSoulEquipIdsList(); - soulEquipIdsListUnload.forEach(e->{ - hero.removeSoulEquip(e.getPosition()); - }); - } - - - - } - - public static void mergeSoul(ISession session, int targetId, List soulIdList) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(targetId); - int[][] resource = sEquipConfig.getResource(); - - Map itemTemplateCost = new HashMap<>(); - Map itemReallyCost = new HashMap<>(); - soulIdList.forEach(e->{ - - itemTemplateCost.put( STableManager.getConfig(SEquipConfig.class).get(e).getQuality(),itemTemplateCost.getOrDefault( STableManager.getConfig(SEquipConfig.class).get(e).getQuality(),0)+1); - itemReallyCost.put(e,itemReallyCost.getOrDefault(e,0)+1); - }); - Arrays.stream(resource).forEach(item->{ - itemReallyCost.put(item[0],itemReallyCost.getOrDefault(item[0],0)+item[1]); - }); - int[][] formula = sEquipConfig.getFormula(); - for(int[] item : formula){ - if(itemTemplateCost.getOrDefault(item[0],0)!=item[1]){ - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); - } - } - boolean b = ItemUtil.itemCost(user, itemReallyCost, BIReason.SOUL_EQUIP_MERGE_CONSUME, targetId); - if(!b){ - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); - } - int[][] drop = new int[1][]; - drop[0] = new int[2]; - drop[0][0] = targetId; - drop[0][1] = 1; - CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, drop, 1); - - HeroInfoProto.MergeSoulResponse build = HeroInfoProto.MergeSoulResponse.newBuilder().setDrop(dropBuilder).build(); - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.SOUL_MERGE_RESPONSE_VALUE,build,true); - ReportUtil.onReportEvent(user,ReportEventEnum.FATALITY_SYNTHESIS.getType(),targetId,"",soulIdList); - } - - - public static void checkAllowedOpt(int type,User user, int heroStar) throws ErrorCodeException { - SGameSetting gameSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting(); - int[][] checkParms = null; - if(type == 1){ - checkParms = gameSetting.getEquipTalismanaUnlock(); - }else if(type == 2){ - checkParms = gameSetting.getEquipSignUnlock(); - }else { - throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); - } - - for(int[] item : checkParms){ - if(item[0] == 1 && user.getPlayerInfoManager().getLevel() pokemonMap = pokemonManager.getPokemonMap(); - - Set removeKey = new HashSet<>(); - for(String key:pokemonMap.keySet()){ - if(key.length()<=2){ - removeKey.add(key); - } - } - for(String key:removeKey){ - pokemonManager.removePokemon(key); - } -// -// //TODO 测试 -// if(pokemonMap.isEmpty()){ -// for(SDifferDemonsConfig sDifferDemonsConfig : SDifferDemonsConfig.sDifferDemonsConfigMap.values() ){ -// pokemonManager.addPokemon(new Pokemon(sDifferDemonsConfig.getId())); -// } -// } - List pokemonInfoList = new ArrayList<>(); -// - for(Pokemon pokemon : pokemonMap.values()){ - pokemonInfoList.add(CBean2Proto.getPokemon(pokemon)); - } - List teamPokemonInfos = new ArrayList<>(); - for (Map.Entry entry : pokemonManager.getPokemonTeamMap().entrySet()) { - CommonProto.TeamPokemonInfo teamPokemonInfo = CommonProto.TeamPokemonInfo.newBuilder() - .setPokemonId(entry.getValue()) - .setPosition(entry.getKey()) - .build(); - teamPokemonInfos.add(teamPokemonInfo); - } - HeroInfoProto.GetAllPokemonResponse build = HeroInfoProto.GetAllPokemonResponse.newBuilder().addAllPokemonInfo(pokemonInfoList) - .addAllTeamPokemonInfos(teamPokemonInfos) - .addAllPokemonGot(pokemonManager.getPokemonGot()) - .addAllPokemonBookEnabled(pokemonManager.getPokemonBookEnabled()) - .build(); - MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.GET_ALL_POKEMON_RESPONSE_VALUE,build,true); - } - - /** - * 保存异妖阵容 - * @param session - * @param teamPokemonInfos - */ - public void savePokemonTeam(ISession session, List teamPokemonInfos) throws Exception { - if (teamPokemonInfos == null) { - LOGGER.info("savePokemonTeam uid=>{} , teamPokemonInfos isEmpty", session.getUid()); - throw new ErrorCodeException(ErrorCode.newDefineCode("Pokemon null")); - } - User user = UserManager.getUser(session.getUid()); - int level = user.getPlayerInfoManager().getLevel(); - int openCount = 0; - for (int sprintLevel : SSpiritAnimalSetting.sSpiritAnimalSetting.getBlockUnlockLevel()) { - if (level >= sprintLevel) { - openCount++; - } - } - if (teamPokemonInfos.size() > openCount) { - LOGGER.info("savePokemonTeam uid=>{} , count is wrong ", session.getUid()); - throw new ErrorCodeException(ErrorCode.newDefineCode("count is wrong : " + openCount)); - } - Map pokemonMap = user.getPokemonManager().getPokemonMap(); - Map pokemonTeamMap = new HashMap<>(); - Set addpokemons = new HashSet<>(); - for (CommonProto.TeamPokemonInfo teamPokemonInfo : teamPokemonInfos) { - if (!pokemonMap.containsKey(teamPokemonInfo.getPokemonId())) { - LOGGER.info("savePokemonTeam uid=>{} , pokemon non-existent id=>{}", user.getId(), teamPokemonInfo.getPokemonId()); - throw new ErrorCodeException(ErrorCode.newDefineCode("Pokemon null")); - } - addpokemons.add(teamPokemonInfo.getPokemonId()); - pokemonTeamMap.put(teamPokemonInfo.getPosition(), teamPokemonInfo.getPokemonId()); - } - if (addpokemons.size() != pokemonTeamMap.size()) { - LOGGER.info("savePokemonTeam uid=>{} , pokemon non-existent id=>{} =>{}", user.getId(), addpokemons.size(), addpokemons.size()); - throw new ErrorCodeException(ErrorCode.newDefineCode("Pokemon null")); - } - user.getPokemonManager().updatePokemonTeamMap(pokemonTeamMap); - - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid())); - - MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.POKEMON_REPLACE_RESPONSE.getNumber(), null); - } - - /** - * 灵兽放生 - * @param session - * @param pokemonIds - * @param pieceId - * @param pieceAmount - * @param messageType - * @throws Exception - */ - public void pokemonFree(ISession session, List pokemonIds,int pieceId,int pieceAmount, MessageTypeProto.MessageType messageType) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - PokemonManager pokemonManager = user.getPokemonManager(); - if(!pokemonIds.isEmpty()){ - if(pieceId!=0||pieceAmount!=0){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - }else{ - if(pieceId==0||pieceAmount==0){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - } - Map returnMap = new HashMap<>(); - - if(!pokemonIds.isEmpty()){ - - for(String pokemonId:pokemonIds){ - Pokemon pokemon = pokemonManager.getPokemonMap().get(pokemonId); - - if(pokemon == null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if(pokemonManager.getPokemonTeamMap().containsValue(pokemonId)){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - - getPokemonReturnReward(pokemon,returnMap); - SSpiritAnimal animalConfig = STableManager.getConfig(SSpiritAnimal.class).get(pokemon.getTmpId()); - - SSpiritAnimalStar starConfig = SSpiritAnimalStar.configByQualityAndStar.get(animalConfig.getQuality()).get(pokemon.getStar()); - - int sumItemNum = starConfig.getSumItemNum()+1; - - int[] coinReturn = animalConfig.getCoinReturn(); - - returnMap.put(coinReturn[0],returnMap.getOrDefault(coinReturn[0],0)+coinReturn[1]*sumItemNum); - - } - for(String pokemonId:pokemonIds){ - pokemonManager.removePokemon(pokemonId); - } - - }else{ - SSpiritAnimal animal = SSpiritAnimal.pieceConfig.get(pieceId); - Map costMap = new HashMap<>(); - if(animal==null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - costMap.put(pieceId,pieceAmount); - boolean checkCost = ItemUtil.checkCost(user, costMap); - int[] piecesCoinReturn = animal.getPiecesCoinReturn(); - if(!checkCost){ - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); - } - returnMap.put(piecesCoinReturn[0],returnMap.getOrDefault(piecesCoinReturn[0],0)+piecesCoinReturn[1]*pieceAmount); - ItemUtil.itemCost(user,costMap,BIReason.SPECIAL_FREE_PIECE_CONSUME,1); - } - CommonProto.Drop.Builder drop = ItemUtil.drop(user, ItemUtil.mapToArray(returnMap), BIReason.SPECIAL_FREE_PIECE_REWARD); - - HeroInfoProto.PokemonFreeResponse response = HeroInfoProto.PokemonFreeResponse.newBuilder().setDrop(drop).build(); - - MessageUtil.sendMessage(session,1, messageType.getNumber(),response,true); - } - - /** - * 等级和星级返还 不包括本体返还 - * @param pokemon - * @param returnMap - * @throws ErrorCodeException - */ - private void getPokemonReturnReward(Pokemon pokemon,Map returnMap) throws ErrorCodeException { - SSpiritAnimal animalConfig = STableManager.getConfig(SSpiritAnimal.class).get(pokemon.getTmpId()); - - SSpiritAnimalLevel levelConfig = SSpiritAnimalLevel.configByQualityAndLevel.get(animalConfig.getQuality()).get(pokemon.getLevel()); - if(levelConfig==null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - SSpiritAnimalStar starConfig = SSpiritAnimalStar.configByQualityAndStar.get(animalConfig.getQuality()).get(pokemon.getStar()); - - if(starConfig==null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - - int[][] sumConsumeLevel = levelConfig.getSumConsume(); - if(pokemon.getLevel()!=1&&sumConsumeLevel!=null&&sumConsumeLevel.length>0&&sumConsumeLevel[0].length>0){ - for(int[] consume:sumConsumeLevel){ - returnMap.put(consume[0],returnMap.getOrDefault(consume[0],0)+consume[1]); - } - } - - int[][] sumConsumeStar = starConfig.getSumConsume(); - if(pokemon.getStar()!=0&&sumConsumeStar!=null&&sumConsumeStar.length>0&&sumConsumeStar[0].length>0){ - for(int[] consume:sumConsumeStar){ - returnMap.put(consume[0],returnMap.getOrDefault(consume[0],0)+consume[1]); - } - } - } - - /** - * 灵兽升级 - * @param session - * @param pokemonId - * @param level - * @param messageType - * @throws Exception - */ - public void pokemonUpLevel(ISession session, String pokemonId, int level, MessageTypeProto.MessageType messageType) throws Exception { - //todo 灵兽 - int uid = session.getUid(); - User user = UserManager.getUser(uid); - PokemonManager pokemonManager = user.getPokemonManager(); - if(!pokemonManager.getPokemonMap().containsKey(pokemonId)){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - Pokemon pokemon = pokemonManager.getPokemonMap().get(pokemonId); - int oldLevel = pokemon.getLevel(); - if(level<=pokemon.getLevel()){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - - SSpiritAnimal animal = STableManager.getConfig(SSpiritAnimal.class).get(pokemon.getTmpId()); - if(animal==null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if(pokemon.getLevel()>=animal.getMaxLevel()||level>animal.getMaxLevel()){ - throw new ErrorCodeException(ErrorCode.HERO_LEVE_MAX); - } - Map levelMap = SSpiritAnimalLevel.configByQualityAndLevel.get(animal.getQuality()); - Map costMap = new HashMap<>(); - int finalLevel = pokemon.getLevel(); - for(int i = pokemon.getLevel();i0){ - for(int[] consumeOne:consume){ - costMap.put(consumeOne[0],costMap.getOrDefault(consumeOne[0],0)+consumeOne[1]); - } - } - boolean b = ItemUtil.checkCost(user, costMap); - if(!b){ - //把多的这一次减下去 - if(consume!=null&&consume.length>0) { - for(int[] consumeOne:consume){ - costMap.put(consumeOne[0],costMap.getOrDefault(consumeOne[0],0)-consumeOne[1]); - } - } - finalLevel = i; - break; - } - finalLevel = i+1; - } - - - boolean itemCost = ItemUtil.itemCost(user, costMap, BIReason.SPECIAL_LEVEL_UP_CONSUME, 1); - if(!itemCost){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - pokemonManager.updatePokemonLevel(pokemonId,finalLevel); - - if(pokemonManager.getPokemonTeamMap().containsValue(pokemonId)){ - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid())); - } - - HeroInfoProto.PokenmonUpLevelResponse response = HeroInfoProto.PokenmonUpLevelResponse.newBuilder().setLevel(finalLevel).build(); - //发送成功消息 - MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true); - StringBuilder builder = new StringBuilder(); - for(Map.Entry entry:costMap.entrySet()){ - if(builder.length()>0){ - builder.append("|"); - } - builder.append(entry.getKey()).append("#").append(entry.getValue()); - - } - ReportUtil.onReportEvent(user,ReportEventEnum.BEAST_LEVEL.getType(),pokemon.getTmpId(),oldLevel,finalLevel,builder.toString()); - -// user.getUserMissionManager().onGameEvent(user,GameEvent.POKEMON_UPLEVEL,pokemonId); - - } - - /** - * 灵兽升星 - * @param session - * @param pokemonId - * @param consumePokemonIdsList - * @throws Exception - */ - public void pokemonAdvanced(ISession session,String pokemonId,List consumePokemonIdsList) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - PokemonManager pokemonManager = user.getPokemonManager(); - Pokemon pokemon = pokemonManager.getPokemonMap().get(pokemonId); - if(pokemon == null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - int oldStar = pokemon.getStar(); - SSpiritAnimal animal = STableManager.getConfig(SSpiritAnimal.class).get(pokemon.getTmpId()); - if(animal==null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if(pokemon.getStar()>=animal.getMaxStar()){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - Map configMap = SSpiritAnimalStar.configByQualityAndStar.get(animal.getQuality()); - - if(!configMap.containsKey(pokemon.getStar())){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - SSpiritAnimalStar config = configMap.get(pokemon.getStar()); - if(config.getConsumeItemNum()!=consumePokemonIdsList.size()){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - StringBuilder consumeBuilder = new StringBuilder(); - - for(String consume:consumePokemonIdsList){ - Pokemon consumePokemon = pokemonManager.getPokemonMap().get(consume); - if(consumePokemon==null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if(consumePokemon.getTmpId()!=pokemon.getTmpId()){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if(consumePokemon.getLevel()!=1||consumePokemon.getStar()!=0){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if(pokemonManager.getPokemonTeamMap().containsValue(consume)){ - throw new ErrorCodeException(ErrorCode.ITEM_DECOMPOSE_HERO_TEAM); - } - if(consumeBuilder.length()>0){ - consumeBuilder.append("|"); - } - consumeBuilder.append(pokemon.getTmpId()).append("-").append(pokemon.getLevel()); - - } - int[][] consumeRes = config.getConsumeRes(); - boolean itemCost = ItemUtil.itemCost(user, consumeRes, BIReason.SPECIAL_STAR_UP_CONSUME, 1); - if(!itemCost){ - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); - } - for(String consume:consumePokemonIdsList) { - pokemonManager.removePokemon(consume); - } - pokemonManager.updatePokemonStar(pokemonId,pokemon.getStar()+1); - if(pokemonManager.getPokemonTeamMap().containsValue(pokemonId)){ - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid())); - } - if(animal.getQuality() >= SSpecialConfig.getIntegerValue(SSpecialConfig.ANIMAL_BROADCAST_QUALITY)) { //策划资质改成星级 - String message = SErrorCodeEerverConfig.getI18NMessage("animal_starup_broadcast_content", new Object[]{user.getPlayerInfoManager().getNickName(),animal.getName(),pokemon.getStar()}); - if (!message.isEmpty()){ - ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,"0",0,0,0,0,0); - } - } - MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.POKEMON_ADVANCED_RESPONSE_VALUE,null,true); - for(int[] consume:consumeRes){ - if(consumeBuilder.length()>0){ - consumeBuilder.append("|"); - } - consumeBuilder.append(consume[0]).append("#").append(consume[1]); - } - ReportUtil.onReportEvent(user,ReportEventEnum.BEAST_STAR.getType(),pokemon.getTmpId(),oldStar,pokemon.getStar(),consumeBuilder.toString()); - - - } - - /** - * 灵兽涅槃 - * @param session - * @param pokemonId - * @param messageType - * @throws Exception - */ - public void pokemonBack(ISession session, String pokemonId, MessageTypeProto.MessageType messageType) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - PokemonManager pokemonManager = user.getPokemonManager(); - Pokemon pokemon = pokemonManager.getPokemonMap().get(pokemonId); - if (pokemon == null) { - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - if (pokemon.getLevel() == 1 && pokemon.getStar() == 0) { - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - - int tmpId = pokemon.getTmpId(); - SSpiritAnimal animalConfig = STableManager.getConfig(SSpiritAnimal.class).get(tmpId); - Map costMap = new HashMap<>(); - costMap.put(animalConfig.getReturnCost()[0], animalConfig.getReturnCost()[1]); - if (!ItemUtil.checkCost(user, costMap)) { - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); - } - Map returnMap = new HashMap<>(); - - getPokemonReturnReward(pokemon, returnMap); - - //本体返还 - SSpiritAnimalStar starConfig = SSpiritAnimalStar.configByQualityAndStar.get(animalConfig.getQuality()).get(pokemon.getStar()); - int sumItemNum = starConfig.getSumItemNum(); - if (sumItemNum != 0) { - returnMap.put(tmpId, returnMap.getOrDefault(tmpId, 0) + sumItemNum); - } - ItemUtil.itemCost(user, costMap, BIReason.SPECIAL_BACK_CONSUME, 1); - pokemonManager.updatePokemonLevel(pokemonId,1); - pokemonManager.updatePokemonStar(pokemonId,0); - - CommonProto.Drop.Builder drop = ItemUtil.drop(user, ItemUtil.mapToArray(returnMap), BIReason.SPECIAL_MONSTER_REWARD); - - HeroInfoProto.PokemonBackResponse response = HeroInfoProto.PokemonBackResponse.newBuilder().setDrop(drop).build(); - - MessageUtil.sendMessage(session, 1, messageType.getNumber(), response, true); - } - - - /** - * 激活灵兽图鉴 - * @param session - * @param bookId - * @param messageType - */ - public void pokemonBookEnable(ISession session, int bookId, MessageTypeProto.MessageType messageType) throws Exception { - int uid = session.getUid(); - User user = UserManager.getUser(uid); - PokemonManager pokemonManager = user.getPokemonManager(); - if(pokemonManager.getPokemonBookEnabled().contains(bookId)){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - SSpiritAnimalBook bookConfig = STableManager.getConfig(SSpiritAnimalBook.class).get(bookId); - if(bookConfig==null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - - int[] teamers = bookConfig.getTeamers(); - - for(int pokemon:teamers){ - if(!pokemonManager.getPokemonGot().contains(pokemon)){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - } - - pokemonManager.addPokemonBookEnabled(bookId); - - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid())); - - MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); - } - - /** - * 获取所有皮肤信息 - * @param session - * @param messageType - */ - public void getAllSkin(ISession session, MessageTypeProto.MessageType messageType) throws Exception { - User user = UserManager.getUser(session.getUid()); - Map skinInfo = user.getHeroManager().getSkinInfo(); - HeroInfoProto.GetAllSkinResponse.Builder response = HeroInfoProto.GetAllSkinResponse.newBuilder(); - Set removeId = new HashSet<>(skinInfo.size()+1); - - if(!skinInfo.isEmpty()){ - for(Map.Entry entry:skinInfo.entrySet()){ - if(entry.getValue()!=-1&&entry.getValue()response.addSkinInfo(CommonProto.SkinInfo.newBuilder().setSkinId(k).setOverTime(v).build())); - } - MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); - } - - /** - * 更换皮肤 - * @param session - * @param messageType - */ - public void changeSkin(ISession session,String heroId,int skinId, MessageTypeProto.MessageType messageType) throws Exception { - User user = UserManager.getUser(session.getUid()); - Map skinInfo = user.getHeroManager().getSkinInfo(); - Hero hero = user.getHeroManager().getHero(heroId); - if(skinId!=0){ - if(!skinInfo.containsKey(skinId)||(skinInfo.get(skinId)!=-1&&skinInfo.get(skinId)