From e5110e48e5ea21647b2eab1695283606f81ae300 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Sat, 3 Aug 2019 15:46:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A0=E5=B0=BD=E5=89=AF=E6=9C=AC=EF=BC=8C?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=9B=9E=E5=A4=8D=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/config/SChallengeSetting.java | 11 ++++ .../jieling/config/SEndlessMapConfig.java | 50 +++++++++++++++ .../com/ljsd/jieling/config/SGameSetting.java | 31 +++++++++- .../com/ljsd/jieling/globals/BIReason.java | 3 +- .../java/com/ljsd/jieling/globals/Global.java | 1 + .../handler/GameGM/GMRequestHandler.java | 1 + .../ljsd/jieling/handler/map/MapLogic.java | 62 +++++++++++++++++-- .../ljsd/jieling/handler/map/MapManager.java | 20 +++--- .../EndlessRefreshExecutionHandler.java | 21 +++++++ .../map/mapHandler/MapOutRequestHandler.java | 3 +- .../ljsd/jieling/logic/item/ItemLogic.java | 2 +- .../java/com/ljsd/jieling/util/ItemUtil.java | 29 ++++----- 12 files changed, 202 insertions(+), 32 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/EndlessRefreshExecutionHandler.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SChallengeSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SChallengeSetting.java index d823f1fd9..2f663c163 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SChallengeSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SChallengeSetting.java @@ -28,6 +28,8 @@ public class SChallengeSetting implements BaseConfig{ private int[] cost; + private int actionPowerId; + public int getDailyLimitPrivilege() { return dailyLimitPrivilege; } @@ -36,6 +38,7 @@ public class SChallengeSetting implements BaseConfig{ return buyTimesPrivilege; } + public int[] getCost() { return cost; } @@ -47,4 +50,12 @@ public class SChallengeSetting implements BaseConfig{ public int getItem() { return item; } + + public static SChallengeSetting getChallengeSetting() { + return challengeSetting; + } + + public int getActionPowerId() { + return actionPowerId; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java new file mode 100644 index 000000000..e9e29e8d5 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java @@ -0,0 +1,50 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.Map; + +@Table(name ="EndlessMapConfig") +public class SEndlessMapConfig implements BaseConfig { + + private int id; + + private int mapId; + + private int teleportCost; + + private int walkCost; + + private int deathCost; + + public static Map sEndlessMapConfigMap; + + @Override + public void init() throws Exception { + sEndlessMapConfigMap = STableManager.getConfig(SEndlessMapConfig.class); + } + + + public int getId() { + return id; + } + + public int getMapId() { + return mapId; + } + + public int getTeleportCost() { + return teleportCost; + } + + public int getWalkCost() { + return walkCost; + } + + public int getDeathCost() { + return deathCost; + } + + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java index 1ee6af590..a1213cb24 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java @@ -2,7 +2,9 @@ package com.ljsd.jieling.config; import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.Table; +import com.ljsd.jieling.util.ItemUtil; +import java.util.HashMap; import java.util.Map; @Table(name ="GameSetting") @@ -92,13 +94,27 @@ public class SGameSetting implements BaseConfig { private int[][] sevenDaysLastReward; + private int[][] itemAdd; + + private Map itemRecoveryMap; + + + private static SGameSetting gameSetting; @Override public void init() throws Exception { Map config = STableManager.getConfig(SGameSetting.class); - gameSetting = config.get(1); + SGameSetting gameSettingTmp = config.get(1); + int[][] itemAdd = gameSettingTmp.getItemAdd(); + Map itemReTmp = new HashMap<>(itemAdd.length); + for(int[] items : itemAdd){ + itemReTmp.put(items[0],items); + } + gameSettingTmp.setItemRecoveryMap(itemReTmp); + gameSetting = gameSettingTmp; + ItemUtil.initNoDelete(); } public static SGameSetting getGameSetting() { @@ -258,4 +274,17 @@ public class SGameSetting implements BaseConfig { public int[][] getSevenDaysLastReward() { return sevenDaysLastReward; } + + public int[][] getItemAdd() { + return itemAdd; + } + + + public Map getItemRecoveryMap() { + return itemRecoveryMap; + } + + public void setItemRecoveryMap(Map itemRecoveryMap) { + this.itemRecoveryMap = itemRecoveryMap; + } } \ No newline at end of file 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 6b4d896a0..70b048e33 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -114,6 +114,7 @@ public interface BIReason { int LUCKYCAT_CONSUME = 1030; - int CREATE_GUILD_CONSUME = 1030; // 创建宗门消耗 + int CREATE_GUILD_CONSUME = 1031; // 创建宗门消耗 + int ENDLESS_CONSUME_EXECUTION = 1032; //无尽副本消耗行动力 } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java index c478d5bb8..9f5bac54a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.globals; public interface Global { int STAMINA = 2; // 体力id + int EXECUTION = 3;//行动力id int HEROSTORY_TICKET = 28; //精英入场券 int GENERALSTORY_TICKET = 27; //普通入场券 int INVASIONBOSS_TICKET = 44; //外敌挑战券 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java index 1e59e4712..55ba072ac 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GameGM/GMRequestHandler.java @@ -62,6 +62,7 @@ public class GMRequestHandler extends BaseHandler{ prarm1 = Integer.parseInt(commandArray[1]); if (prarm1 ==1){ prarm3 = commandArray[2].replace(",","#"); + prarm2 = Integer.parseInt(commandArray[2]); }else{ if (gmCommandType == GlobalGm.RESET_USER_NAME){ prarm3 = commandArray[2]; 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 7de51755e..bcbaaaa52 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 @@ -238,7 +238,11 @@ public class MapLogic { SChallengeMapConfig sChallengeMapConfig = SChallengeMapConfig.integerSChallengeMapConfigMap.get(mapManager.getCurMapId()); mapEnterResponse.setDieCount(mapManager.getDieCount()); mapEnterResponse.addAllMapList(cells); - mapEnterResponse.setCurXY(CellUtil.xy2Pos(sChallengeMapConfig.getPosition()[0],sChallengeMapConfig.getPosition()[1])); + if(type==4&&mapManager.getEndlessMapInfo().getCurCell()!=0){ + mapEnterResponse.setCurXY(mapManager.getEndlessMapInfo().getCurCell()); + }else{ + mapEnterResponse.setCurXY(CellUtil.xy2Pos(sChallengeMapConfig.getPosition()[0],sChallengeMapConfig.getPosition()[1])); + } mapEnterResponse.addAllWakeCells(mapManager.getWalkCells() == null ? new ArrayList<>() : mapManager.getWalkCells()); if (mapManager.getTemporaryItems() != null) { mapEnterResponse.setTemporaryItems(CBean2Proto.getDrop(mapManager.getTemporaryItems())); @@ -520,7 +524,17 @@ public class MapLogic { MapInfoProto.MapUpdateResponse.Builder mapUpdateResponse = MapInfoProto.MapUpdateResponse.newBuilder(); mapUpdateResponse.setLeftTime(getLeftTime(user, true)); mapUpdateResponse.setEventId(cell.getEventId()); - + if(SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getType()==4){ + int[][] cost = new int[1][]; + int costId = SChallengeSetting.getChallengeSetting().getActionPowerId(); + int costNum = cells.size();; + cost[0]= new int[]{costId,costNum}; + boolean costResult = ItemUtil.itemCost(user,cost,BIReason.ENDLESS_CONSUME_EXECUTION,1); + if(!costResult){ + MessageUtil.sendErrorResponse(session,0,messageType.getNumber(),"行动力不足!"); + return; + } + } // LOGGER.info("updateMap() uid=>{} mapId =>{} eventId=>{}", uid, mapManager.getCurMapId(), cell.getEventId()); mapManager.updateFoodBufferByStep(cells.size()); @@ -880,7 +894,7 @@ public class MapLogic { * @param messageType * @throws Exception */ - public void outMap(ISession session, int mapId,int outType, MessageTypeProto.MessageType messageType) throws Exception { + public void outMap(ISession session, int mapId,int outType, int curXY,MessageTypeProto.MessageType messageType) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); MapManager mapManager = user.getMapManager(); @@ -934,8 +948,21 @@ public class MapLogic { } } } + //无尽副本 if(challengeConfig.getType()==4) { - mapManager.updateEndlessLocation(mapManager.getCurXY()); + mapManager.updateEndlessLocation(curXY); + if(outType==0){ + int[][] cost = new int[1][]; + int costId = SChallengeSetting.getChallengeSetting().getActionPowerId(); + int costNum = SEndlessMapConfig.sEndlessMapConfigMap.get(mapId).getTeleportCost(); + cost[0]= new int[]{costId,costNum}; + boolean costResult = ItemUtil.itemCost(user,cost,BIReason.ENDLESS_CONSUME_EXECUTION,1); + if(!costResult){ + MessageUtil.sendErrorResponse(session,0,messageType.getNumber(),"行动力不足!"); + return; + } + LOGGER.info("传送消耗{}行动力"+costNum); + } } MessageUtil.sendMessage(session, 1, messageType.getNumber(), builder.build(), true); return; @@ -1290,6 +1317,18 @@ public class MapLogic { } mapManager.setLastFightResult(resultCode); if (resultCode == 0) { + if(SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getType()==4){ + //消耗行动力 + int [][] cost = new int[1][]; + int costId = SChallengeSetting.getChallengeSetting().getActionPowerId(); + int costNum = SEndlessMapConfig.sEndlessMapConfigMap.get(mapManager.getCurMapId()).getDeathCost(); + int [] cost1 = new int[]{costId,costNum}; + cost[0] = cost1; + if(ItemUtil.itemCost(user,cost,BIReason.ENDLESS_CONSUME_EXECUTION,1)) { + costNum = user.getItemManager().getItem(costId).getItemNum(); + ItemUtil.itemCost(user,cost,BIReason.ENDLESS_CONSUME_EXECUTION,1); + } + } // 失败需要等待n秒后复活所有英雄 int dieCount = user.getMapManager().getDieCount(); dieCount++; @@ -1322,6 +1361,7 @@ public class MapLogic { if(SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getType()==2){ fightEndResponse.setLastTowerTime((int)(mapManager.getCurrTowerTime()/1000)); } + if(sOptionConfig!=null){ int[][] jumpTypeValues = sOptionConfig.getJumpTypeValues(); if(jumpTypeValues.length>0 && jumpTypeValues[0][0] == 3){ @@ -2795,6 +2835,7 @@ public class MapLogic { iterator.remove(); } } + user.getTeamPosManager().updateTeamPosByTeamId(401,team); } MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); @@ -2817,6 +2858,7 @@ public class MapLogic { mapManager.updateHeroOneAttribute(entry.getKey(),HeroAttributeEnum.CurHP.getPropertyId(),entry.getValue().get(HeroAttributeEnum.Hp.getPropertyId())); } + MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); } @@ -2860,4 +2902,16 @@ public class MapLogic { } } + /** + * 刷新获取行动力 + * @param session + * @param messageType + * @throws Exception + */ + public void refreshEndlessExecution(ISession session, MessageTypeProto.MessageType messageType) throws Exception { + User user = UserManager.getUser(session.getUid()); + MapInfoProto.ExecutionRefreshResponse response = MapInfoProto.ExecutionRefreshResponse.newBuilder().setExeValue(user.getItemManager().getItem(1).getItemNum()).build(); + MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true); + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java index 0c066a469..3db7175ba 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.handler.map; import com.ljsd.common.mogodb.MongoBase; +import com.ljsd.jieling.config.SChallengeSetting; import com.ljsd.jieling.config.SGameSetting; import com.ljsd.jieling.config.SVipLevelConfig; import com.ljsd.jieling.core.GlobalsDef; @@ -242,30 +243,29 @@ public class MapManager extends MongoBase { int itemNum = item.getItemNum(); int updateTime = (int) (System.currentTimeMillis() / 1000); int lastUpdateEnergyTime = item.getEndingTime(); - int recoveryTime = SGameSetting.getGameSetting().getRecoveryTime(); - int heroTimes = SGameSetting.getGameSetting().getHeroTimes(); - if(itemId == Global.INVASIONBOSS_TICKET){ - recoveryTime = SGameSetting.getGameSetting().getInvasionBossTimesAdd(); - SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(user.getPlayerInfoManager().getVipLevel()); - Map privilegeMap = sVipLevelConfig.getPrivilegeMap(); - heroTimes = privilegeMap.get(VipPrivilegeType.CHALLENGE_INVASIONBOSS_LIMIT); + int[] recoveryItemInfo = SGameSetting.getGameSetting().getItemRecoveryMap().get(itemId); + if(recoveryItemInfo == null){ + return; } + SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(user.getPlayerInfoManager().getVipLevel()); + Map privilegeMap = sVipLevelConfig.getPrivilegeMap(); + Integer heroTimes = privilegeMap.get(recoveryItemInfo[3]); - int recoveryTimes = (updateTime - lastUpdateEnergyTime)/recoveryTime; + int recoveryTimes = (updateTime - lastUpdateEnergyTime)/recoveryItemInfo[2]; if(itemNum>=heroTimes){ item.setEndingTime(updateTime); return; } if( recoveryTimes>0){ if(itemNum currencyMap = new HashSet<>(2); static { + notDelete.add(Global.STAMINA); - notDelete.add(Global.HEROSTORY_TICKET); - notDelete.add(Global.GENERALSTORY_TICKET); - notDelete.add(Global.INVASIONBOSS_TICKET); + equipQulityNameMap.put(5,"传说"); equipQulityNameMap.put(6,"史诗"); currencyMap.add(Global.GEM); @@ -43,6 +42,10 @@ public class ItemUtil { currencyMap.add(Global.SOULCRYSTAL); } + public static void initNoDelete(){ + notDelete.addAll(SGameSetting.getGameSetting().getItemRecoveryMap().keySet()); + } + //指定道具掉落(如:邮件,初始化物品) public static CommonProto.Drop.Builder drop(User user, int[][] itemArr,int reason) throws Exception { CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); @@ -713,7 +716,7 @@ public class ItemUtil { if (entry.getKey() ==Global.STAMINA){ MapManager.getEnergy(user); } - if (entry.getKey() == Global.HEROSTORY_TICKET || entry.getKey() == Global.INVASIONBOSS_TICKET ){ + if (SGameSetting.getGameSetting().getItemRecoveryMap().containsKey(entry.getKey())){ MapManager.getTimesRecoveryTicket(user,entry.getKey()); needUpdateHero = false; } @@ -721,15 +724,13 @@ public class ItemUtil { } } if (needUpdateHero){ - Item item = itemMap.get(Global.HEROSTORY_TICKET); - if(item == null){ - MapManager.getTimesRecoveryTicket(user,Global.HEROSTORY_TICKET); - itemList.add(CBean2Proto.getItem(item,-1)); - } - item = itemMap.get(Global.INVASIONBOSS_TICKET); - if(item == null){ - MapManager.getTimesRecoveryTicket(user,Global.INVASIONBOSS_TICKET); - itemList.add(CBean2Proto.getItem(item,-1)); + Set itemForTimeRecoverys = SGameSetting.getGameSetting().getItemRecoveryMap().keySet(); + for(Integer itemId : itemForTimeRecoverys){ + Item item = itemMap.get(itemId); + if(item == null){ + MapManager.getTimesRecoveryTicket(user,itemId); + itemList.add(CBean2Proto.getItem(item,-1)); + } } } return itemList; @@ -919,7 +920,7 @@ public class ItemUtil { if ((entry.getKey() == Global.STAMINA)){ MapManager.getEnergy(user); } - if (entry.getKey() == Global.HEROSTORY_TICKET || entry.getKey() == Global.INVASIONBOSS_TICKET ){ + if (SGameSetting.getGameSetting().getItemRecoveryMap().containsKey(entry.getKey()) ){ MapManager.getTimesRecoveryTicket(user,entry.getKey()); } Item item = user.getItemManager().getItem(entry.getKey());