From ea4d1e03d6867ba156aef30bba05ace90755b404 Mon Sep 17 00:00:00 2001 From: mengchengzhen <13682025901@163.com> Date: Tue, 11 May 2021 16:25:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=B1=E6=B2=B3=E7=A4=BE=E7=A8=B7=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/globals/BIReason.java | 2 +- .../HardStageInfoRequestHandler.java | 28 ++++++ .../StartHardStageRequestHandler.java | 30 +++--- .../jieling/logic/dao/HardStageManager.java | 2 + .../logic/hardStage/HardStageChapter.java | 9 +- .../logic/hardStage/HardStageLogic.java | 94 +++++++++++++++++-- .../logic/hardStage/HardStageNode.java | 7 +- .../src/main/java/config/SHardStage.java | 29 +++++- .../src/main/java/config/SHardStageBuff.java | 2 +- 9 files changed, 171 insertions(+), 32 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/HardStageInfoRequestHandler.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index 14f149db9..891954886 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -329,5 +329,5 @@ public interface BIReason { int EQUIP_UPLEVEL_COST = 1092;//装备升星消耗 int EQUIP_UPLEVEL_REWARD = 1093;//装备升星获得 int TA_SUI_LING_XIAO = 1094;//踏碎凌霄 - int HARD_STAGE = 1095; + int HARD_STAGE_GET = 1095; } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/HardStageInfoRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/HardStageInfoRequestHandler.java new file mode 100644 index 000000000..42b0f0c71 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/HardStageInfoRequestHandler.java @@ -0,0 +1,28 @@ +package com.ljsd.jieling.handler.hardStage; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.hardStage.HardStageLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.MessageUtil; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; + +public class HardStageInfoRequestHandler extends BaseHandler { + + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.HARD_STAGE_INFO_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, PlayerInfoProto.HardStageRequest proto) throws Exception { + User user = UserManager.getUser(iSession.getUid()); + CommonProto.HardStageInfo.Builder info = HardStageLogic.getInfo(user); + PlayerInfoProto.HardStageResponse.Builder response = PlayerInfoProto.HardStageResponse.newBuilder(); + response.setInfo(info); + MessageUtil.sendMessage(iSession, 1,MessageTypeProto.MessageType.HARD_STAGE_INFO_RESPONSE.getNumber(), response.build(), true); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java index f2735360d..d44388393 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java @@ -12,20 +12,20 @@ import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; import com.ljsd.jieling.logic.dao.TeamPosHeroInfo; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.fight.FightRecordLogic; import com.ljsd.jieling.logic.fight.FightUtil; import com.ljsd.jieling.logic.fight.result.FightResult; import com.ljsd.jieling.logic.hardStage.HardStageChapter; import com.ljsd.jieling.logic.hardStage.HardStageLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.util.FightDataUtil; +import com.ljsd.jieling.util.MessageUtil; import com.ljsd.jieling.util.MonsterUtil; import config.SHardStage; import org.luaj.vm2.LuaValue; -import rpc.protocols.CommonProto; -import rpc.protocols.Expedition; -import rpc.protocols.MessageTypeProto; -import rpc.protocols.PlayerInfoProto; +import rpc.protocols.*; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -41,6 +41,7 @@ public class StartHardStageRequestHandler extends BaseHandler dropList = new ArrayList<>(); SHardStage nodeConfig = SHardStage.getConfigMap().get(nodeId); Map chapterMap = user.getHardStageManager().getChapterMap(); if(!chapterMap.containsKey(nodeConfig.getChapter()) || chapterMap.get(nodeConfig.getChapter()).getNode(nodeId) == null){ @@ -50,6 +51,10 @@ public class StartHardStageRequestHandler extends BaseHandler> monsterfightTeamInfos = MonsterUtil.getHardStageMonsterByGroup(nodeConfig); @@ -66,9 +71,9 @@ public class StartHardStageRequestHandler extends BaseHandler reward = SHardStageReward.getChapterConfigMap().get(chapterId); for(SHardStageReward config : reward){ chapter.getRewardMap().put(config.getStarReward(),Boolean.FALSE); + chapter.updateRewardMap(); } return chapter; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageChapter.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageChapter.java index f46565322..90b40fdcc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageChapter.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageChapter.java @@ -39,16 +39,17 @@ public class HardStageChapter extends MongoBase { return stars; } - public void setStars(int stars) { - this.stars = stars; + public void addStars(int stars) { + this.stars += stars; + updateString("stars" , this.stars); } public Map getRewardMap() { return rewardMap; } - public void setRewardMap(Map rewardMap) { - this.rewardMap = rewardMap; + public void updateRewardMap() { + updateString("rewardMap" , this.rewardMap); } public HardStageNode getNode(int id){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageLogic.java index 10f1b7034..bcae05a43 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageLogic.java @@ -30,7 +30,26 @@ public class HardStageLogic { * 获取山河社稷图信息 */ public static CommonProto.HardStageInfo.Builder getInfo(User user){ + Map map = user.getHardStageManager().getChapterMap(); CommonProto.HardStageInfo.Builder builder = CommonProto.HardStageInfo.newBuilder(); + for(Map.Entry entry : map.entrySet()){ + CommonProto.HardStageChapter.Builder chapterBuilder = CommonProto.HardStageChapter.newBuilder(); + for(HardStageNode node : entry.getValue().getNodeList()){ + CommonProto.HardStageNode.Builder nodeBuilder = CommonProto.HardStageNode.newBuilder(); + nodeBuilder.setNodeId(node.getId()); + nodeBuilder.setType(node.getType()); + nodeBuilder.setState(node.getState()); + chapterBuilder.addNode(nodeBuilder); + } + chapterBuilder.setChapterId(entry.getKey()); + chapterBuilder.setStars(entry.getValue().getStars()); + for(Map.Entry entry1 : entry.getValue().getRewardMap().entrySet()){ + CommonProto.HardStageChapterReward.Builder rewardBuilder = CommonProto.HardStageChapterReward.newBuilder(); + rewardBuilder.setId(entry1.getKey()); + rewardBuilder.setState(entry1.getValue()?1:0); + } + builder.addChapter(chapterBuilder); + } return builder; } @@ -58,8 +77,32 @@ public class HardStageLogic { /** * 判断奖励 */ - public static String passReward(){ - return ""; + public static int passReward(User user,HardStageNode node,int num,List dropList) throws Exception{ + int addStar = 0; + SHardStage config = SHardStage.getConfigMap().get(node.getId()); + if(num>>2 == 1){//第一星 + int rewardId = config.getReward1()[0]; + if(addDropAndStar(node,dropList,rewardId,user)){ + node.setState(node.getState()+4); + addStar++; + } + } + if((num&2) == 2){//第二星 + int rewardId = config.getReward1()[1]; + if(addDropAndStar(node,dropList,rewardId,user)){ + node.setState(node.getState()+2); + addStar++; + } + } + if(num<<2 == 1){//第三星 + int rewardId = config.getReward1()[2]; + if(addDropAndStar(node,dropList,rewardId,user)){ + node.setState(node.getState()+1); + addStar++; + } + } + + return addStar; } /** @@ -114,29 +157,62 @@ public class HardStageLogic { /** * 通过节点 */ - public static void passNode(ISession iSession, SHardStage nodeConfig, int resultNum) throws Exception{ + public static void passNode(ISession iSession, SHardStage nodeConfig, int resultNum,List dropList) throws Exception{ User user = UserManager.getUser(iSession.getUid()); Map chapterMap = user.getHardStageManager().getChapterMap(); HardStageNode node = chapterMap.get(nodeConfig.getChapter()).getNode(nodeConfig.getId()); - if(node.getType() == 1){ - + if(node.getType() == 1){//大节点 + int star = passReward(user,node,resultNum,dropList); + chapterMap.get(nodeConfig.getChapter()).addStars(star); + if(!node.isHasPass()){ + node.setHasPass(true); + dropList.addAll(getFirstRewards(user,nodeConfig)); + } }else{ if(node.isHasPass()){ return; } - CommonProto.Drop.Builder drop = getFirstPassReward(user,nodeConfig); + node.setHasPass(true); + dropList.addAll(getFirstRewards(user,nodeConfig)); } + + List openList = SHardStage.getPreList(nodeConfig.getId()); + for(SHardStage stage : openList){ + user.getHardStageManager().openNewNode(stage); + } + } /** * 首通奖励 */ - public static CommonProto.Drop.Builder getFirstPassReward(User user,SHardStage nodeConfig) throws Exception{ - SRewardGroup rewardGroup = SRewardGroup.getsRewardItemMap().get(nodeConfig.getPassReward()); + public static List getFirstRewards(User user,SHardStage nodeConfig) throws Exception{ + List dropList = new ArrayList<>(); + for(int rewardId : nodeConfig.getPassReward()){ + dropList.add(getReward(user,rewardId)); + } + return dropList; + } + + /** + * 获取奖励 + */ + public static CommonProto.Drop.Builder getReward(User user,int rewardId) throws Exception{ + SRewardGroup rewardGroup = SRewardGroup.getsRewardItemMap().get(rewardId); ItemMap itemObj = new ItemMap(); int[] dropList = rewardGroup.getRewardItem(); - CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropList,1,0, BIReason.HARD_STAGE); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropList,1,0, BIReason.HARD_STAGE_GET); return drop; } + private static boolean addDropAndStar(HardStageNode node,List dropList,int rewardId,User user) throws Exception{ + if(!node.getRewardMap().get(rewardId)){ + dropList.add(getReward(user,rewardId)); + node.getRewardMap().put(rewardId,true); + node.updateRewardMap(); + return true; + } + return false; + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageNode.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageNode.java index b61955f6b..f234f8e1b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageNode.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageNode.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.hardStage; import com.ljsd.common.mogodb.MongoBase; +import java.util.HashMap; import java.util.Map; public class HardStageNode extends MongoBase { @@ -9,7 +10,7 @@ public class HardStageNode extends MongoBase { private int id; private int type; private int state; - private Map rewardMap;//三星奖励情况 + private Map rewardMap = new HashMap<>();//三星奖励情况 private boolean hasPass;//是否通过 public int getId() { @@ -40,8 +41,8 @@ public class HardStageNode extends MongoBase { return rewardMap; } - public void setRewardMap(Map rewardMap) { - this.rewardMap = rewardMap; + public void updateRewardMap() { + updateString("rewardMap" , this.rewardMap); } public boolean isHasPass() { diff --git a/tablemanager/src/main/java/config/SHardStage.java b/tablemanager/src/main/java/config/SHardStage.java index 94ebf9b19..16b7eb63a 100644 --- a/tablemanager/src/main/java/config/SHardStage.java +++ b/tablemanager/src/main/java/config/SHardStage.java @@ -3,6 +3,9 @@ package config; import manager.STableManager; import manager.Table; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Map; @Table(name ="HardStage") @@ -14,7 +17,7 @@ public class SHardStage implements BaseConfig { private int section; - private int picture ; + private String picture ; private int repeat ; @@ -39,13 +42,27 @@ public class SHardStage implements BaseConfig { private int[] reward1; private static Map configMap ; + private static Map> preConfigMap; @Override public void init() throws Exception { Map tempConfig = STableManager.getConfig(SHardStage.class); + Map> tempPreConfigMap = new HashMap<>(); + for(SHardStage stage : tempConfig.values()){ + if(stage.getNextLevel() > 0){ + if(tempPreConfigMap.containsKey(stage.getNextLevel())){ + tempPreConfigMap.get(stage.getNextLevel()).add(stage); + }else{ + List list = new ArrayList<>(); + list.add(stage); + tempPreConfigMap.put(stage.getNextLevel(),list); + } + } + } if(null == configMap){ configMap = tempConfig; + preConfigMap = tempPreConfigMap; } } @@ -62,7 +79,7 @@ public class SHardStage implements BaseConfig { return section; } - public int getPicture () { + public String getPicture () { return picture ; } @@ -113,4 +130,12 @@ public class SHardStage implements BaseConfig { public static Map getConfigMap() { return configMap; } + + public static Map> getPreConfigMap() { + return preConfigMap; + } + + public static List getPreList(int id){ + return preConfigMap.get(id); + } } \ No newline at end of file diff --git a/tablemanager/src/main/java/config/SHardStageBuff.java b/tablemanager/src/main/java/config/SHardStageBuff.java index 80536d5b5..e005dfa3d 100644 --- a/tablemanager/src/main/java/config/SHardStageBuff.java +++ b/tablemanager/src/main/java/config/SHardStageBuff.java @@ -5,7 +5,7 @@ import manager.Table; import java.util.Map; -@Table(name ="SHardStageBuff") +@Table(name ="HardStageBuff") public class SHardStageBuff implements BaseConfig { private int id;