diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/CommonStaticConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/CommonStaticConfig.java index 37c09c2b1..e84d04ccc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/CommonStaticConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/CommonStaticConfig.java @@ -35,7 +35,7 @@ public class CommonStaticConfig extends AbstractClassStaticConfig { public Map> matrixforGroupInfo; - public Map> type2lay2weight; + public Map>> type2lay2weight; public Map leve2num;//阶段第一层 public Map> leve2ids;//ids public Map> type2holy2weight; @@ -204,9 +204,11 @@ public class CommonStaticConfig extends AbstractClassStaticConfig { int layid = sExpeditionFloorConfig.getId(); int[][] randomNode = sExpeditionFloorConfig.getRandomNode(); for (int[] aRandomNode : randomNode) { - Map orDefault = type2lay2weight.getOrDefault(aRandomNode[0], new HashMap<>()); + Map> orDefault1 = type2lay2weight.getOrDefault(sExpeditionFloorConfig.getFloor(), new HashMap<>()); + Map orDefault = orDefault1.getOrDefault(aRandomNode[0], new HashMap<>()); orDefault.put(layid, aRandomNode[1]); - type2lay2weight.put(aRandomNode[0], orDefault); + orDefault1.put(aRandomNode[0], orDefault); + type2lay2weight.put(sExpeditionFloorConfig.getFloor(),orDefault1); } leve2num.put(sExpeditionFloorConfig.getFloor(),integer); @@ -340,8 +342,8 @@ public class CommonStaticConfig extends AbstractClassStaticConfig { return sWorkTechMapByTechIdAndLevelTmp.get(techId).get(level); } - public Map> getType2lay2weight() { - return type2lay2weight; + public Map> getType2lay2weight(int floor) { + return type2lay2weight.getOrDefault(floor,new HashMap<>()); } public Map getType2holy2weight(int type) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndConfirmExpeditionBattleRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndConfirmExpeditionBattleRequestHandler.java index 49047272b..7088a5bc3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndConfirmExpeditionBattleRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndConfirmExpeditionBattleRequestHandler.java @@ -40,7 +40,7 @@ public class EndConfirmExpeditionBattleRequestHandler extends BaseHandler teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) { Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId()); - if (hero == null) { + Hero herotemp = user.getExpeditionManager().getHero(teamPosHeroInfo.getHeroId()); + if (hero == null&&herotemp==null) { continue; } user.getExpeditionManager().getHeroHPWithChange().put(hero.getId(), 0d); ids.add(hero.getId()); } + + //出队伍 user.getTeamPosManager().updateTeamPosByTeamId(1001,new LinkedList<>()); 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 df056eb16..bc7d6a407 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 @@ -101,14 +101,16 @@ public class EndExpeditionBattleRequest extends BaseHandler gropFightTeamInfoWithDouble = ExpeditionLogic.getGropFightTeamInfoWithDouble(tid, nodeInfo.getBossHP()); + getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, gropFightTeamInfoWithDouble); }else { - deffightTeamInfo = FightUtil.makeFightBySnapDataWithDouble(new DefFightSnapData(deffightInfo.getHeroAttribute(),deffightInfo.getHeroSkills(),deffightInfo.getPokenmonSkills(),deffightInfo.getPassiveSkills()),nodeInfo.getBossHP()); + CommonProto.FightTeamInfo deffightTeamInfo = FightUtil.makeFightBySnapDataWithDouble(new DefFightSnapData(deffightInfo.getHeroAttribute(),deffightInfo.getHeroSkills(),deffightInfo.getPokenmonSkills(),deffightInfo.getPassiveSkills()),nodeInfo.getBossHP()); + getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo); } - LuaValue getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo); + LuaValue getOptionData = FightDataUtil.getOptionData(""); int[] checkResult = CheckFight.getInstance().checkFight(seed, maxTime, getFightData, getOptionData, GameFightType.Expediton.getFightType()); @@ -140,7 +142,8 @@ public class EndExpeditionBattleRequest extends BaseHandler teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) { Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId()); - if (hero == null) { + Hero herotemp = user.getExpeditionManager().getHero(teamPosHeroInfo.getHeroId()); + if (hero == null&&herotemp==null) { continue; } user.getExpeditionManager().getHeroHPWithChange().put(hero.getId(), 0d); @@ -149,10 +152,18 @@ public class EndExpeditionBattleRequest extends BaseHandler()); - //节点血量更新 - nodeInfo.getSnapFightInfo().getHeroAttribute().forEach((s, familyHeroInfo) -> - nodeInfo.getBossHP().put(s, (double) remainHp.remove(0) / (double) familyHeroInfo.getAttribute().get(HeroAttributeEnum.CurHP.getPropertyId())) - ); + if(ExpeditionLogic.isHardNode(nodeInfo.getType())){ + //节点血量更新 + nodeInfo.getSnapFightInfo().getHeroAttribute().forEach((s, familyHeroInfo) -> + nodeInfo.getBossHP().put(s, (double) remainHp.remove(0) / (double) familyHeroInfo.getAttribute().get(HeroAttributeEnum.CurHP.getPropertyId())) + ); + }else { + //节点血量更新 + nodeInfo.getSnapFightInfo().getHeroAttribute().forEach((s, familyHeroInfo) -> + nodeInfo.getBossHP().put(s, (double) remainHp.remove(0) / (double) familyHeroInfo.getAttribute().get(HeroAttributeEnum.CurHP.getPropertyId())) + ); + } + //更新节点 Expedition.ExpeditionNodeInfoIndication.Builder builder = Expedition.ExpeditionNodeInfoIndication.newBuilder(); @@ -172,8 +183,6 @@ public class EndExpeditionBattleRequest extends BaseHandler nodeInfo.getBossHP().put(s, 0d) @@ -184,9 +193,13 @@ public class EndExpeditionBattleRequest extends BaseHandler iterator = teamPosHeroInfos.iterator(); while (iterator.hasNext()){ TeamPosHeroInfo teamPosHeroInfo = iterator.next(); - Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId()); - if (hero == null) { - continue; + + Hero hero = user.getExpeditionManager().getHero(teamPosHeroInfo.getHeroId()); + if (hero==null) { + hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId()); + } + if (hero==null) { + continue; } Map heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false, teamId); double remain = remainHp.remove(0); @@ -216,7 +229,13 @@ public class EndExpeditionBattleRequest extends BaseHandler=fourthOpenRule[0][1]||user.getPlayerInfoManager().getMaxForce()>=fourthOpenRule[1][1])){ -// throw new ErrorCodeException("阶段不正确 current"+manager.getExpeditionLeve()); -// } - - Expedition.GetExpeditionResponse.Builder builder = Expedition.GetExpeditionResponse.newBuilder(); - if(manager.getExpeditionNodeInfos().size()==0){ manager.setExpeditionLeve(leve); manager.setLay(1); @@ -70,6 +63,26 @@ public class GetExpeditionRequestHandler extends BaseHandler heroList = new ArrayList<>(); + Map heroMap = user.getExpeditionManager().getHeroMap(); + for(Hero hero : heroMap.values()){ + heroList.add(CBean2Proto.getHero(hero)); + } + builder.addAllHeroList(heroList); + Map equipMap = user.getExpeditionManager().getEquipMap(); + List equipList = new ArrayList<>(); + for(PropertyItem equipInfo: equipMap.values()){ + if(equipInfo instanceof Equip) + equipList.add(CBean2Proto.getEquipProto(equipInfo)); + } + builder.addAllEquip(equipList); + List soulEquipList = new ArrayList<>(); + for(PropertyItem equipInfo: equipMap.values()){ + if(equipInfo instanceof Jewel) + soulEquipList.add(CBean2Proto.getEquipProto(equipInfo)); + } + builder.addAllEquip(soulEquipList); } MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.EXPEDITION_GET_EXPEDITION_RESONSE_VALUE, builder.build(), true); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeGetInfoRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeGetInfoRequestHandler.java index 3c67f82cd..6f4e0a4ff 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeGetInfoRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeGetInfoRequestHandler.java @@ -18,10 +18,7 @@ import config.*; import manager.STableManager; import util.StringUtil; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -48,13 +45,10 @@ public class HeroNodeGetInfoRequestHandler extends BaseHandler nextNodeId = ExpeditionLogic.getNextNodeId(user.getExpeditionManager().getSortid(),user.getExpeditionManager().getExpeditionNodeInfos().size()); if(!nextNodeId.contains(nodeId)){ @@ -75,43 +69,30 @@ public class HeroNodeGetInfoRequestHandler extends BaseHandler tempIdcfgs = ExpeditionLogic.getRandomTid(poolId,recruitTime); -// Set cls = new HashSet<>(); -// Set collect = tempIdcfgs.stream().filter(integer -> { -// SExpeditionRecruitConfig sExpeditionRecruitConfig = STableManager.getConfig(SExpeditionRecruitConfig.class).get(tempId); -// if(sExpeditionRecruitConfig==null){ -// return false; -// } -// int heroId = sExpeditionRecruitConfig.getHeroId(); -// SCHero scHero = SCHero.getsCHero().get(heroId); -// scHero.getPropertyName(); -// } -// -// }).collect(Collectors.toSet()); + Map heroMapTemp = user.getExpeditionManager().getHeroMapTemp(); + if(heroMapTemp.size()==0){ + SExpeditionRecruitConfig sExpeditionRecruitConfig = STableManager.getConfig(SExpeditionRecruitConfig.class).get(sExpeditionNodeConfig.getPoolId()); + if(sExpeditionRecruitConfig!=null) { + int i = sExpeditionRecruitConfig.getHeroId(); + //获取最大战力hero + String maxforceHero = user.getPlayerInfoManager().getMaxforceHero(); + if (StringUtil.isEmpty(maxforceHero)) { + HeroLogic.getInstance().calTeamTotalForce(user, 1, false); + maxforceHero = user.getPlayerInfoManager().getMaxforceHero(); + } + Hero hero = user.getHeroManager().getHeroMap().get(maxforceHero); + if (hero == null) { + throw new ErrorCodeException("试炼节点英雄掉落失败"); + } - SExpeditionRecruitConfig sExpeditionRecruitConfig = STableManager.getConfig(SExpeditionRecruitConfig.class).get(0); - if(sExpeditionRecruitConfig!=null) { - int i = sExpeditionRecruitConfig.getgetHero(); - //获取最大战力hero - String maxforceHero = user.getPlayerInfoManager().getMaxforceHero(); - if (StringUtil.isEmpty(maxforceHero)) { - HeroLogic.getInstance().calTeamTotalForce(user, 1, false); - maxforceHero = user.getPlayerInfoManager().getMaxforceHero(); + for (int j = 0; j < recruitTime; j++) { + ExpeditionLogic.createHero(i, uid, hero, true); + } } - Hero hero = user.getHeroManager().getHeroMap().get(maxforceHero); - if (hero == null) { - throw new ErrorCodeException("试炼节点英雄掉落失败"); - } - ExpeditionLogic.createHero(i, uid, hero); } - for (int i = 0; i <4 ; i++) { - Hero hero = user.getHeroManager().getHeroMap().get(0); - if(hero == null){ - throw new ErrorCodeException(ErrorCode.newDefineCode("hero no")); - } + heroMapTemp.forEach((s, hero) -> { CommonProto.ViewHeroInfo.Builder inner = CommonProto.ViewHeroInfo.newBuilder(); Map heroNotBufferAttribute = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, true, 0); for(Map.Entry item : heroNotBufferAttribute.entrySet()){ @@ -123,10 +104,10 @@ public class HeroNodeGetInfoRequestHandler extends BaseHandler { - @Override - public MessageTypeProto.MessageType getMessageCode() { - return null; - } - - @Override - public GeneratedMessage processWithProto(int uid, Expedition.HeroNodeRequest proto) throws Exception { - return Expedition.HeroNodeResponse.newBuilder().build(); - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java new file mode 100644 index 000000000..e020955af --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java @@ -0,0 +1,121 @@ +package com.ljsd.jieling.handler.Expedition; + +import com.google.protobuf.GeneratedMessage; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.OnlineUserManager; +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.network.session.ISession; +import com.ljsd.jieling.protocols.CommonProto; +import com.ljsd.jieling.protocols.Expedition; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.CBean2Proto; +import com.ljsd.jieling.util.MessageUtil; +import config.SExpeditionNodeConfig; +import manager.STableManager; +import util.StringUtil; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Description: 英雄招募 + * Author: zsx + * CreateDate: 2020/5/18 20:48 + */ +public class HeroNodeRequestHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return null; + } + + @Override + public GeneratedMessage processWithProto(int uid, Expedition.HeroNodeRequest proto) throws Exception { + + + User user = UserManager.getUser(uid); + int nodeId = proto.getNodeId(); + String heroId = proto.getHeroId(); + if(StringUtil.isEmpty(heroId)){ + throw new ErrorCodeException("参数错误"); + } + + //cfg check + if (!user.getExpeditionManager().getExpeditionNodeInfos().containsKey(nodeId)) { + throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点不存在")); + } + ExpeditionNodeInfo nodeInfo = user.getExpeditionManager().getExpeditionNodeInfos().get(nodeId); + + if (nodeInfo.getType() != ExpeditionLogic.NODETYPE_HERO_GET) { + throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点类型不符"+nodeInfo.getType())); + } + +// if (nodeInfo.getState() != ExpeditionLogic.NODESTATE_HERO) { +// throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点状态不正确"+nodeInfo.getState())); +// } + + //check node + List nextNodeId = ExpeditionLogic.getNextNodeId(user.getExpeditionManager().getSortid(),user.getExpeditionManager().getExpeditionNodeInfos().size()); + if(!nextNodeId.contains(nodeId)){ + throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点状态不正确")); + } + + ExpeditionManager expeditionManager = user.getExpeditionManager(); + if(!expeditionManager.getHeroMapTemp().containsKey(heroId)){ + throw new ErrorCodeException("参数错误"); + } + + //move temp to + Hero hero = expeditionManager.getHeroMapTemp().get(heroId); + expeditionManager.addHero(hero); + + Map equipMapTemp = expeditionManager.getEquipMapTemp(); + for (Map.Entry next : hero.getEquipByPositionMap().entrySet()) { + String equipId = next.getValue(); + PropertyItem equip = equipMapTemp.get(equipId); + if (equip == null) { + continue; + } + user.getExpeditionManager().addEquip(user, equip); + } + + + Set jewelInfo = hero.getJewelInfo(); + for (String jewel : jewelInfo) { + PropertyItem propertyItem = user.getEquipManager().getEquipMap().get(jewel); + if (propertyItem == null) + continue; + Jewel j = (Jewel) propertyItem; + user.getExpeditionManager().addEquip(user, j); + } + + CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder(); + + drop.addHero(CBean2Proto.getHero(hero)); + + //clear temp + user.getExpeditionManager().clearEquipToTemp(); + user.getExpeditionManager().clearHeroToTemp(); + + + SExpeditionNodeConfig sExpeditionNodeConfig = STableManager.getConfig(SExpeditionNodeConfig.class).get(nodeInfo.getType()); + if (sExpeditionNodeConfig == null) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + + //updata node + Set nodeInfos = ExpeditionLogic.openLay(user,nodeInfo.getLay(),nodeId); + + //更新节点 + Expedition.ExpeditionNodeInfoIndication.Builder builder = Expedition.ExpeditionNodeInfoIndication.newBuilder(); + builder.addAllNodeInfo(nodeInfos); + ISession sessionByUid = OnlineUserManager.getSessionByUid(uid); + MessageUtil.sendIndicationMessage(sessionByUid, 1, MessageTypeProto.MessageType.EXPEDITION_NOINFO_INDICATION_VALUE, builder.build(), true); + + return Expedition.HeroNodeResponse.newBuilder().setDrop(drop).build(); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java index 895c5e4d9..a5d7341ae 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java @@ -107,7 +107,7 @@ public class StartExpeditionBattleRequest extends BaseHandler propertyValueByIdMap; //主属性 key 对应PropertyConfig id + + private Map secondValueByIdMap; //副属性 + + private int createTime; + + private int skill; + + private int isLocked; + + public ExpeditionItem(String id, int equipId, int level, String heroId, Map propertyValueByIdMap, Map secondValueByIdMap, int createTime, int skill, int isLocked) { + this.id = id; + this.equipId = equipId; + this.level = level; + this.heroId = heroId; + this.propertyValueByIdMap = propertyValueByIdMap; + this.secondValueByIdMap = secondValueByIdMap; + this.createTime = createTime; + this.skill = skill; + this.isLocked = isLocked; + } public ExpeditionItem(int uid, int expeditionTid) { super(); - super.setId(KeyGenUtils.produceIdByModule(UUIDEnum.EXPEDITION, uid)); - super.setEquipId(expeditionTid); + this.id =(KeyGenUtils.produceIdByModule(UUIDEnum.EXPEDITION, uid)); + this.equipId=(expeditionTid); } public ExpeditionItem() { super(); } + + + public String getId() { + return id; + } + + public void setId(String id) { + updateString("id",equipId); + this.id = id; + } + + public int getEquipId() { + return equipId; + } + + public void setEquipId(int equipId){ + updateString("equipId",equipId); + this.equipId = equipId; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level){ + updateString("level",level); + this.level = level; + } + + + + public String getHeroId() { + return heroId; + } + + public void setHeroId(String heroId){ + updateString("heroId",heroId); + this.heroId = heroId; + } + + public Map getPropertyValueByIdMap() { + return propertyValueByIdMap; + } + + public Map getSecondValueByIdMap() { + return secondValueByIdMap; + } + + + public void setPropertyValueByIdMap(Map propertyValueByIdMap) { + updateString("propertyValueByIdMap",propertyValueByIdMap); + this.propertyValueByIdMap = propertyValueByIdMap; + } + + public void setSecondValueByIdMap(Map secondValueByIdMap) { + updateString("secondValueByIdMap",secondValueByIdMap); + this.secondValueByIdMap = secondValueByIdMap; + } + + public int getCreateTime() { + return createTime; + } + + public void setCreateTime(int createTime) { + updateString("createTime", createTime); + this.createTime = createTime; + } + + public int getSkill() { + return skill; + } + + public void setSkill(int skill) { + updateString("skill", skill); + + this.skill = skill; + } + + public int getIsLocked() { + return isLocked; + } + + public void updateIsLocked(int isLocked) { + updateString("isLocked", isLocked); + this.isLocked = isLocked; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExpeditionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExpeditionManager.java index 395858bb8..dade79455 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExpeditionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExpeditionManager.java @@ -173,6 +173,19 @@ public class ExpeditionManager extends MongoBase { heroMap.put(hero.getId(), hero); } + public void addHeroToTemp(Hero hero) throws Exception { + //绑定关系 + hero.init(this.getRootId(),getMongoKey() + ".heroMapTemp." + hero.getId()); + updateString("heroMapTemp." + hero.getId(), hero); + heroMapTemp.put(hero.getId(), hero); + } + + public void clearHeroToTemp() throws Exception { + heroMapTemp.clear(); + updateString("heroMapTemp" , heroMapTemp); + } + + public Hero getHero(String heroId) { return heroMap.get(heroId); } @@ -187,11 +200,27 @@ public class ExpeditionManager extends MongoBase { equip.init(this.getRootId(),getMongoKey() + ".equipMap." + equip.getId()); updateString("equipMap." + equip.getId(), equip); equipMap.put(equip.getId(),equip); -// addEquipHandBook(equip.getEquipId()); -// user.getUserMissionManager().onGameEvent(user, GameEvent.GET_EQUIP,equip.getEquipId()); - Poster.getPoster().dispatchEvent(new EquipEvent(user.getId(),equip.getEquipId())); } + public void clearEquipToTemp() throws Exception { + updateString("equipMapTemp" , equipMapTemp); + equipMapTemp.clear(); + } + + public void addEquipToTemp(User user, PropertyItem equip) throws Exception { + equip.init(this.getRootId(),getMongoKey() + ".equipMapTemp." + equip.getId()); + updateString("equipMapTemp." + equip.getId(), equip); + equipMapTemp.put(equip.getId(),equip); + } + + + public Map getHeroMapTemp() { + return heroMapTemp; + } + + public Map getEquipMapTemp() { + return equipMapTemp; + } public Map getEquipMap() { return equipMap; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java index 991b8cc49..d35ca0251 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java @@ -58,8 +58,8 @@ public class Hero extends MongoBase { this.setRootCollection(User._COLLECTION_NAME); this.id = KeyGenUtils.produceIdByModule(UUIDEnum.HERO, uid); this.templateId = heroTid; - this.level = hero.level; - this.star = initStar; + this.level = initStar; + this.star =hero.getStar() ; this.soulEquipByPositionMap = hero.soulEquipByPositionMap; this.breakId = hero.breakId; this.starBreakId = hero.starBreakId; @@ -142,7 +142,7 @@ public class Hero extends MongoBase { } public Map getEquipByPositionMap() { - return equipByPositionMap; + return equipByPositionMap==null?new HashMap<>():equipByPositionMap; } public void setEquipByPositionMap(Map equipByPositionMap) throws Exception { @@ -170,7 +170,7 @@ public class Hero extends MongoBase { public Map getSoulEquipByPositionMap() { - return soulEquipByPositionMap; + return soulEquipByPositionMap==null?new HashMap<>():soulEquipByPositionMap; } public void updateSoulEquipPositionMap(int position,int equipId) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SnapFightInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SnapFightInfo.java index edf075295..6a5f46c52 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SnapFightInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SnapFightInfo.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; public class SnapFightInfo { - private Map heroAttribute; + private Map heroAttribute = new HashMap<>(); private int uid; private int force; private Map heroSkills = new HashMap<>(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java index f5db6b987..8ec8ac763 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java @@ -1,9 +1,6 @@ package com.ljsd.jieling.logic.expedition; -import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig; -import com.ljsd.jieling.config.clazzStaticCfg.PlayStaticConfig; -import com.ljsd.jieling.config.clazzStaticCfg.SArenaRobotStaticConfig; -import com.ljsd.jieling.config.clazzStaticCfg.WorldBossTreasureStaticConfig; +import com.ljsd.jieling.config.clazzStaticCfg.*; import com.ljsd.jieling.core.FunctionIdEnum; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.core.HandlerLogicThread; @@ -12,6 +9,7 @@ import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; import com.ljsd.jieling.logic.GlobalDataManaager; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.blood.BloodLogic; @@ -38,6 +36,7 @@ import util.StringUtil; import util.TimeUtils; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; /** @@ -53,7 +52,7 @@ public class ExpeditionLogic { public static final int NODESTATE_NOT_GET = 2;//2未领取圣物 public static final int NODESTATE_PASS = 3;//已完成 public static final int NODESTATE_OVER_PASS = 4;//已完成 - + public static final int NODESTATE_HERO = 5;//招募节点 public static final int NODETYPE_ADVANCE = 1;//精英节点 public static final int NODETYPE_BOSS = 2;//首领节点 @@ -97,19 +96,33 @@ public class ExpeditionLogic { manager.clearPropertyItems(); manager.getHeroHPWithChange().clear(); manager.setCurrentTime(openTimeOfFuntionCacheByType.getTimes()); + manager.clearHeroToTemp(); + manager.clearEquipToTemp(); + + //TODO // checkAndResetTreasure(user); SGlobalSystemConfig sGlobalSystemConfig = STableManager.getConfig(SGlobalSystemConfig.class).get(FunctionIdEnum.Expedition.getFunctionType()); - Expedition.ExpeditionResetIndication.Builder builder = Expedition.ExpeditionResetIndication.newBuilder(); + + SExpeditionSetting sExpeditionSetting = STableManager.getConfig(SExpeditionSetting.class).get(1); + if(sExpeditionSetting == null){ + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + Expedition.GetExpeditionResponse.Builder builder = Expedition.GetExpeditionResponse.newBuilder(); + if(manager.getExpeditionNodeInfos().size()==0){ + manager.setExpeditionLeve(1); + manager.setLay(1); + manager.setSortid(0); + } + if (HandlerLogicThread.checkOpen(user,sGlobalSystemConfig)) { - builder.addAllRewardids(manager.getRewardBox()); + builder.addAllLay(manager.getRewardBox()); builder.addAllHeroInfo(ExpeditionLogic.getInstance().getAllHeroInfo(user)); builder.addAllNodeInfo(ExpeditionLogic.getInstance().getNodeInfo(user)); builder.addAllEquipIds(ExpeditionLogic.getInstance().getEquipnfo(user)); - Map heroMap = user.getHeroManager().getHeroMap(); - //猎妖添加的英雄 - Set collect= heroMap.values().stream().filter(hero -> hero.getCreateType() == 1).map(Hero::getId).collect(Collectors.toSet()); - builder.addAllRemovesHeroIds(collect); + builder.addAllHeroList(new ArrayList<>()); + builder.addAllEquip(new ArrayList<>()); + builder.addAllEquip(new ArrayList<>()); } MessageUtil.sendIndicationMessage(OnlineUserManager.getSessionByUid(user.getId()), 1, MessageTypeProto.MessageType.ExpeditionResetIndication.getNumber(), builder.build(), true); // reSetNode(user); @@ -138,7 +151,6 @@ public class ExpeditionLogic { String mailReward = ItemUtil.getMailReward(itemArrs); int nowTime = (int) (TimeUtils.now() / 1000); - //TODO title content 走配置 String title = SErrorCodeEerverConfig.getI18NMessage("expedition_title"); String content = SErrorCodeEerverConfig.getI18NMessage("expedition_txt",new Object[]{user.getExpeditionManager().getLay()-1}); MailLogic.getInstance().sendMail(user.getId(), title, content, mailReward, nowTime, Global.MAIL_EFFECTIVE_TIME); @@ -194,18 +206,21 @@ public class ExpeditionLogic { public Set getAllHeroInfo(User user, Set set) { Map heroMap = user.getHeroManager().getHeroMap(); + Map heroMapTemp = user.getExpeditionManager().getHeroMap(); //生成新英雄的血量信息 Map heroHP = user.getExpeditionManager().getHeroHPWithChange(); for (Map.Entry entry : heroMap.entrySet()) { - if (!heroHP.keySet().contains(entry.getKey())) { + if (!heroHP.keySet().contains(entry.getKey())&&!heroMapTemp.keySet().contains(entry.getKey())) { heroHP.put(entry.getKey(), 1d); } } //移除已经删除的hero Set removeId = heroHP.keySet().stream().filter(k -> { - if(!heroMap.keySet().contains(k)) - return true; - return heroMap.get(k).getLevel()<20; + if(heroMap.keySet().contains(k)) + return heroMap.get(k).getLevel()<20; + if(heroMapTemp.keySet().contains(k)) + return heroMapTemp.get(k).getLevel()<20; + return !heroMap.keySet().contains(k) && !heroMapTemp.keySet().contains(k); }).collect(Collectors.toSet()); removeId.forEach(heroHP::remove); Set heroInfoSet = new HashSet<>(); @@ -336,7 +351,7 @@ public class ExpeditionLogic { int orDefault = STableManager.getFigureConfig(CommonStaticConfig.class).leve2num.getOrDefault(leve-1, 0)-1;//节点 Map> map = new HashMap<>(); - for (Map.Entry> integerMapMap :STableManager.getFigureConfig(CommonStaticConfig.class).getType2lay2weight().entrySet()){ + for (Map.Entry> integerMapMap :STableManager.getFigureConfig(CommonStaticConfig.class).getType2lay2weight(leve).entrySet()){ int type = integerMapMap.getKey(); int lay = ranndomFromWeight(integerMapMap.getValue()); Set value = map.getOrDefault(lay,new HashSet<>()); @@ -578,11 +593,26 @@ public class ExpeditionLogic { } //grop config int i = sExpeditionRecruitConfig.getHeroId(); - SnapFightInfo fightInfo = new SnapFightInfo(); + fightInfo.setUid(i); int force = MonsterUtil.getMonsterForce(new int[]{i}); Map bossHP = new HashMap<>(); + + Map heroAllAttribute = new HashMap<>(); + SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(i); + int[][] groupIds = sMonsterGroup.getContents(); + + int[] monsterIds = groupIds[0]; + + for (int monsterId : monsterIds) { + if(monsterId!=0){ + bossHP.put(Integer.toString(monsterId), 1d); + heroAllAttribute.put(Integer.toString(monsterId), new FamilyHeroInfo()); + } + } + + fightInfo.setHeroAttribute(heroAllAttribute); fightInfo.setForce(force); nodeInfo.setBossHP(bossHP); fightInfo.setPokenmonSkills(""); @@ -779,8 +809,8 @@ public class ExpeditionLogic { } - public static Hero createHero(int tempid,int uid,Hero hero)throws Exception{ - int star = hero.getStar(); + public static Hero createHero(int tempid,int uid,Hero hero,boolean isTemp)throws Exception{ + int star = hero.getLevel(); User user = UserManager.getUser(uid); SExpeditionSetting sExpeditionSetting = STableManager.getConfig(SExpeditionSetting.class).get(1); if (sExpeditionSetting == null) { @@ -790,7 +820,9 @@ public class ExpeditionLogic { int min = sExpeditionSetting.getMatchForceRange()[0]; int max= sExpeditionSetting.getMatchForceRange()[1]; int finalstar = (int) (star * ((min / 10000f) + ((float) (Math.random() *(max - min))/10000f))); - + if(finalstar<=20){ + finalstar=50; + } //random tempid Hero newHero = new Hero(uid,tempid,finalstar,hero); @@ -802,7 +834,12 @@ public class ExpeditionLogic { continue; } Equip newequip = new Equip(uid, equip.getEquipId()); - user.getExpeditionManager().addEquip(user, newequip); + if(isTemp){ + user.getExpeditionManager().addEquipToTemp(user, newequip); + }else { + user.getExpeditionManager().addEquip(user, newequip); + } + newHero.updateEquipPositionMap(next.getKey(), newequip.getId()); } @@ -814,10 +851,19 @@ public class ExpeditionLogic { continue; Jewel j = (Jewel) propertyItem; Jewel newequip = new Jewel(user.getId(), j.getEquipId()); - user.getExpeditionManager().addEquip(user, newequip); + + if(isTemp){ + user.getExpeditionManager().addEquipToTemp(user, newequip); + }else { + user.getExpeditionManager().addEquip(user, newequip); + } newHero.addJewel(newequip.getId()); } - user.getExpeditionManager().addHero(newHero); + if(isTemp){ + user.getExpeditionManager().addHeroToTemp(newHero); + }else { + user.getExpeditionManager().addHero(newHero); + } return newHero; } @@ -868,12 +914,12 @@ public class ExpeditionLogic { } - public static CommonProto.FightTeamInfo getGropFightTeamInfoWithDouble(int gropid, Map attackBloodMap) { + public static List getGropFightTeamInfoWithDouble(int gropid, Map attackBloodMap) { Map> hps = new HashMap<>(); hps.put(0,new LinkedList<>(attackBloodMap.values())); Map> monsterByGroupWithDouble = MonsterUtil.getMonsterByGroupWithDouble(gropid, hps); - String monsterTeamSkill = MonsterUtil.getMonsterTeamSkillByGroup(gropid); - return CommonProto.FightTeamInfo.newBuilder().addAllFightUnitList(monsterByGroupWithDouble.get(0)).setTeamSkillList(monsterTeamSkill).build(); + List fightTeamInfos = BehaviorUtil.getFightTeamInfos(gropid, monsterByGroupWithDouble, Global.MONSTER_1); + return fightTeamInfos; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index f6d13ea83..7142b55b4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -755,7 +755,12 @@ public class CombatLogic { List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); List passiveTeamskillEffect = new ArrayList<>(); for(TeamPosHeroInfo teamPosHeroInfo :teamPosHeroInfos){ - Hero hero = heroMap.get(teamPosHeroInfo.getHeroId()); + Hero hero; + if(teamId==GlobalsDef.EXPEDITION_TEAM&&user.getExpeditionManager().getHeroMap().containsKey(teamPosHeroInfo.getHeroId())){ + hero = user.getExpeditionManager().getHeroMap().get(teamPosHeroInfo.getHeroId()); + }else { + hero = heroMap.get(teamPosHeroInfo.getHeroId()); + } List heroSkillListTmp = HeroLogic.getInstance().getHeroSkillList(user, hero); heroSkillListTmp.forEach(skill->{ SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); @@ -801,6 +806,10 @@ public class CombatLogic { //找出上场的Id List heroFind = new ArrayList<>(teamPosHeroInfos.size()); for(TeamPosHeroInfo key :teamPosHeroInfos){ + if(teamId==GlobalsDef.EXPEDITION_TEAM&&user.getExpeditionManager().getHeroMap().containsKey(key.getHeroId())){ + heroFind.add(user.getExpeditionManager().getHeroMap().get(key.getHeroId()).getTemplateId()); + continue; + } heroFind.add(heroMap.get(key.getHeroId()).getTemplateId()); } 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 e7a086f77..916048bc7 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 @@ -468,7 +468,21 @@ public class HeroLogic{ User user = UserManager.getUser(iSession.getUid()); HeroManager heroManager = user.getHeroManager(); Set set = new HashSet<>(); - heroIds.forEach(heroId->set.add(heroManager.getHero(heroId.getHeroId()).getTemplateId())); + 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 { + heroIds.forEach(heroId->set.add(heroManager.getHero(heroId.getHeroId()).getTemplateId())); + } + if(set.size()!=heroIds.size()){ throw new ErrorCodeException(ErrorCode.NO_USE_SAME_HERO); } @@ -537,10 +551,18 @@ public class HeroLogic{ Set cacheHeroIds = new HashSet<>(); for(CommonProto.TeamHeroInfo teamHeroInfo: heroIds){ String heroId = teamHeroInfo.getHeroId(); - if(user.getHeroManager().getHero(heroId) == null) { - // 卡牌不存在 - return "card not exists"; + if(teamId==GlobalsDef.EXPEDITION_TEAM){ + if(user.getHeroManager().getHero(heroId) == null&&!user.getExpeditionManager().getHeroMap().containsKey(heroId)) { + // 卡牌不存在 + return "card not exists"; + } + }else { + if(user.getHeroManager().getHero(heroId) == null) { + // 卡牌不存在 + return "card not exists"; + } } + // 卡牌重复 卡牌已上阵 if(cacheHeroIds.contains(heroId)){ return "card repeated"; @@ -974,7 +996,10 @@ public class HeroLogic{ public List getHeroSkillList(User user,Hero hero){ List skillList = new ArrayList<>(); SCHero tempHero = SCHero.getsCHero().get(hero.getTemplateId()); - skillList.addAll(tempHero.getSkillListByStar(hero.getStar())); + List skillListByStar = tempHero.getSkillListByStar(hero.getStar()); + if(skillListByStar!=null){ + skillList.addAll(skillListByStar); + } skillList.addAll( tempHero.getPassiveSkills(1,hero.getBreakId())); skillList.addAll( tempHero.getPassiveSkills(2,hero.getStarBreakId())); diff --git a/tablemanager/src/main/java/config/SGlobalSystemConfig.java b/tablemanager/src/main/java/config/SGlobalSystemConfig.java index a22a3f783..3e60ad970 100644 --- a/tablemanager/src/main/java/config/SGlobalSystemConfig.java +++ b/tablemanager/src/main/java/config/SGlobalSystemConfig.java @@ -42,6 +42,8 @@ public class SGlobalSystemConfig implements BaseConfig { private int isIDdSame; + private int guideId; + public static Map> idsByType; @Override public void init() throws Exception {