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 ffbf140d1..d76404227 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -380,5 +380,6 @@ public interface BIReason { int GM_COST = 1228;//gm删除道具 int EXPLORE_MAP_COST = 1229;//探索地图消耗 - int EXPLORE_MAP_GET = 1230;//探索地图消耗 + int EXPLORE_MAP_GET = 1230;//探索地图奖励 + int EXPLORE_MAP_COST_RETURN = 1231;//探索地图消耗返还 } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapInfoHandler.java index eff1a0cd7..8a6e97c7f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapInfoHandler.java @@ -36,8 +36,8 @@ public class ExplorerMapInfoHandler extends BaseHandler keyVal:explorer.get(i).getDropMap().entrySet() ){ + dropKeyValList.add( CommonProto.CommKeyVal.newBuilder().setKey(keyVal.getKey()).setVal(keyVal.getValue()).build()); } record = CommonProto.ExplorerMapInfo.newBuilder().setTeamId(i).setMapId(explorer.get(i).getMapId()).setHp(explorer.get(i).getPlayerHp()). setExploreTime(explorer.get(i).getSendEndTime()).addAllDropReward(dropKeyValList).build(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapRewardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapRewardHandler.java index 76cb8641d..9973d0c0f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapRewardHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapRewardHandler.java @@ -19,6 +19,7 @@ import util.StringUtil; import util.TimeUtils; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -47,20 +48,20 @@ public class ExplorerMapRewardHandler extends BaseHandler TimeUtils.nowInt()){ int min = (exInfo.getSendEndTime() - TimeUtils.nowInt())/60; SExplore exploreConfig = STableManager.getConfig(SExplore.class).get(exInfo.getMapId()); - int [] drop = new int[2]; - drop[0]=exploreConfig.getCost()[0]; - drop[1]=exploreConfig.getCost()[1]*min; - /*MailLogic.getInstance().sendMail(uid, "探索返还晶石", "您提前结束了队伍X在【地图名称】中的探索,以下为尚未消耗的晶石,请查收。", - StringUtil.parseArrayToString(drop), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);*/ - List comDrop =new ArrayList(); - comDrop.add(drop); - comDrop.addAll(explorer.get(teamId).getDropItem()); - //CommonProto.Drop.Builder returnReward = ItemUtil.drop(user, drop, BIReason.EXPEDITION_BOX_REWARD); - //MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.ExplorerMapInfoResponse.getNumber(), builder.build(), true); + int itemId = exploreConfig.getCost()[0]; + int itemNum = exploreConfig.getCost()[1]*min; + Map comDropMap = new HashMap<>(); + Map dropmap=explorer.get(teamId).getDropMap(); + comDropMap.putAll(dropmap); + if(comDropMap.containsKey(itemId)){ + comDropMap.put(itemId,comDropMap.get(itemId)+itemNum); + }else{ + comDropMap.put(itemId,itemNum); + } + CommonProto.Drop.Builder dropPro = ItemUtil.drop(user, comDropMap.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()}).toArray(int[][]::new), BIReason.EXPLORE_MAP_COST_RETURN); + explorer.get(teamId).getDropMap().clear(); + explorer.get(teamId).setDropMap(explorer.get(teamId).getDropMap()); CommonProto.ExplorerMapInfo explorerMapInfo = CommonProto.ExplorerMapInfo.newBuilder().setTeamId(teamId).build(); - CommonProto.Drop.Builder dropPro = ItemUtil.drop(user, explorer.get(teamId).getDropItem().stream().toArray(int[][]::new), BIReason.EXPEDITION_BOX_REWARD); - explorer.get(teamId).getDropItem().clear(); - explorer.get(teamId).setDropItem(explorer.get(teamId).getDropItem()); MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.ExplorerMapRewardResponse.getNumber(), builder.setDrop(dropPro). setExploreInfo(explorerMapInfo).build(), true); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExplorerInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExplorerInfo.java index 51f000619..6ae062ce7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExplorerInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExplorerInfo.java @@ -3,7 +3,9 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class ExplorerInfo extends MongoBase { @@ -15,13 +17,13 @@ public class ExplorerInfo extends MongoBase { private int enemyHp;//敌人血量 private int enemyReliveTime;//敌人复活时间 private int batteTime;//战斗时间 - private List dropItem = new ArrayList<>(); + private Map dropMap = new HashMap<>();//掉落 public ExplorerInfo() { } - public ExplorerInfo(int mapId, int sendEndTime, int sendTime, int playerHp, int playerReliveTime, int enemyHp, int enemyReliveTime, int batteTime, List dropItem) { + public ExplorerInfo(int mapId, int sendEndTime, int sendTime, int playerHp, int playerReliveTime, int enemyHp, int enemyReliveTime, int batteTime, Map dropMap) { this.mapId = mapId; this.sendEndTime = sendEndTime; this.sendTime = sendTime; @@ -30,7 +32,7 @@ public class ExplorerInfo extends MongoBase { this.enemyHp = enemyHp; this.enemyReliveTime = enemyReliveTime; this.batteTime = batteTime; - this.dropItem = dropItem; + this.dropMap = dropMap; } public int getMapId() { @@ -101,16 +103,6 @@ public class ExplorerInfo extends MongoBase { this.sendTime = sendTime; } - public List getDropItem() { - return dropItem; - } - - public void setDropItem(List dropItem) { - updateString("dropItem", dropItem); - this.dropItem = dropItem; - } - - public int getBatteTime() { return batteTime; } @@ -119,4 +111,13 @@ public class ExplorerInfo extends MongoBase { updateString("batteTime", batteTime); this.batteTime = batteTime; } + + public Map getDropMap() { + return dropMap; + } + + public void setDropMap(Map dropMap) { + updateString("dropMap", dropMap); + this.dropMap = dropMap; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/explorerMap/ExplorerMapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/explorerMap/ExplorerMapLogic.java index 77ebd7692..f92c23dac 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/explorerMap/ExplorerMapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/explorerMap/ExplorerMapLogic.java @@ -30,10 +30,7 @@ import rpc.protocols.MessageTypeProto; import util.StringUtil; import util.TimeUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; public class ExplorerMapLogic { @@ -105,23 +102,37 @@ public class ExplorerMapLogic { LOGGER.error("玩家死亡=》重生时间{}", explorerInfo.getPlayerReliveTime()); } //怪物死亡 设置重生时间 - if (explorerInfo.getEnemyHp() == 0) { + if (explorerInfo.getEnemyHp()== 0) { //玩家赢了 - List dropitem = explorerInfo.getDropItem(); - if (dropitem == null) { - dropitem = new ArrayList<>(); + Map dropMap = explorerInfo.getDropMap(); + if(dropMap == null){ + dropMap = new HashMap<>(); } Map itemMap = ItemUtil.getItemMapByGroupId(user, exploreConfig.getReward(), 1, 0, BIReason.EXPLORE_MAP_GET); - List addDropitem = itemMap.entrySet().stream().map(n -> new int[]{n.getKey(), n.getValue()}).collect(Collectors.toList()); - dropitem.addAll(addDropitem); - explorerInfo.setDropItem(dropitem); - - if (time == 0) { + for(Map.Entry keyVal:itemMap.entrySet()){ + if(dropMap.containsKey(keyVal.getKey())){ + dropMap.put(keyVal.getKey(),dropMap.get(keyVal.getKey())+keyVal.getValue()); + }else{ + dropMap.put(keyVal.getKey(),keyVal.getValue()); + } + } + explorerInfo.setDropMap(dropMap); + ISession sess = OnlineUserManager.sessionMap.get(user.getId()); + if (sess != null){ + List dropKeyValList = new ArrayList<>(); + for(Map.Entry keyVal:explorerInfo.getDropMap().entrySet() ){ + dropKeyValList.add( CommonProto.CommKeyVal.newBuilder().setKey(keyVal.getKey()).setVal(keyVal.getValue()).build()); + } + CommonProto.ExplorerMapInfo mapInfo = CommonProto.ExplorerMapInfo.newBuilder().setTeamId(teamId).setMapId(explorerInfo.getMapId()).setHp(explorerInfo.getPlayerHp()). + setExploreTime(explorerInfo.getSendEndTime()).addAllDropReward(dropKeyValList).build(); + MessageUtil.sendIndicationMessage(sess, 1, MessageTypeProto.MessageType.ExplorerMapIndicationResponse_VALUE, mapInfo, true); + } + if (time == 0) { explorerInfo.setEnemyReliveTime(TimeUtils.nowInt() + 300); } else { explorerInfo.setEnemyReliveTime(time + 300); } - LOGGER.error("玩家死亡=》重生时间{} 掉落=>{}", explorerInfo.getEnemyReliveTime(),exploreConfig.getReward()); + LOGGER.error("怪物死亡=》重生时间{} 掉落=>{}", explorerInfo.getEnemyReliveTime(),exploreConfig.getReward()); } } if (time == 0) { @@ -261,7 +272,7 @@ public class ExplorerMapLogic { String teamName = TeamEnum.getEnumByteamId(id).getRemarks(); String mapName = exploreConfig.getName(); int hour =explorer.get(id).getSendTime()/3600; - if (explorer.get(id).getDropItem().size() == 0 || explorer.get(id).getDropItem() == null) { + if (explorer.get(id).getDropMap().size() == 0 || explorer.get(id).getDropMap() == null) { LOGGER.error("到期啥都没得到发邮件"); String title = SErrorCodeEerverConfig.getI18NMessage("explorefail_mail_title"); String content = SErrorCodeEerverConfig.getFormatMessage("explorefail_mail_txt", new Object[]{teamName,mapName,hour}); @@ -272,7 +283,7 @@ public class ExplorerMapLogic { String title = SErrorCodeEerverConfig.getI18NMessage("exploresuccess_mail_title"); String content = SErrorCodeEerverConfig.getFormatMessage("exploresuccess_mail_txt", new Object[]{teamName,mapName,hour}); //CommonProto.Drop.Builder drop = ItemUtil.drop(user, explorer.get(id).getDropItem().stream().toArray(int[][]::new), BIReason.EXPEDITION_BOX_REWARD); - int[][] dropArray = explorer.get(id).getDropItem().stream().toArray(int[][]::new); + int[][] dropArray = explorer.get(id).getDropMap().entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()}).toArray(int[][]::new); MailLogic.getInstance().sendMail(uid, title, content, StringUtil.parseArrayToString(dropArray), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); }