diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java index 9ac552bf2..7b91f8adf 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java @@ -75,6 +75,9 @@ public class SBloodyBattleSetting implements BaseConfig { private int[][] mineralId; + private int baseScore; + private int extraDiscount; + private Map debuffMap; private Map monsterIndexMap; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyRankConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyRankConfig.java index 29fa1ef1f..98e40e6dc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyRankConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyRankConfig.java @@ -18,7 +18,7 @@ public class SBloodyRankConfig implements BaseConfig { private int[][] reward; - private static Map sBloodyRankConfigMap; + public static Map sBloodyRankConfigMap; @Override diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java index 4924a6cd5..c7579b862 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.config; import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.Table; +import java.util.HashMap; import java.util.Map; @Table(name ="EndlessMapConfig") @@ -22,11 +23,24 @@ public class SEndlessMapConfig implements BaseConfig { private int[][] endlessPoint; + private int[][] initializeCount; + public static Map sEndlessMapConfigMap; + + public static Map> initRandomPointMap; @Override public void init() throws Exception { sEndlessMapConfigMap = STableManager.getConfig(SEndlessMapConfig.class); + initRandomPointMap = new HashMap<>(); + for(Map.Entry entry:sEndlessMapConfigMap.entrySet()){ + Map pointMap = new HashMap<>(); + int[][] initializeCount = entry.getValue().getInitializeCount(); + for(int i = 0;i endlessHeroInfo; + private Map endlessHeroInfo; private Map> mapSign; @@ -26,6 +26,8 @@ public class EndlessMapInfo { private Map mapInfo = new HashMap<>(); + private int skipFight; + private int season; @@ -46,11 +48,11 @@ public class EndlessMapInfo { this.curMapId = curMapId; } - public Map getEndlessHeroInfo() { + public Map getEndlessHeroInfo() { return endlessHeroInfo; } - public void setEndlessHeroInfo(Map endlessHeroInfo) { + public void setEndlessHeroInfo(Map endlessHeroInfo) { this.endlessHeroInfo = endlessHeroInfo; } @@ -126,4 +128,12 @@ public class EndlessMapInfo { public void setSeason(int season) { this.season = season; } + + public int getSkipFight() { + return skipFight; + } + + public void setSkipFight(int skipFight) { + this.skipFight = skipFight; + } } 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 2844ee9c0..3d7080d42 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 @@ -209,7 +209,7 @@ public class MapLogic { List teamPosForHero = user.getTeamPosManager().getTeamPosForHero().get(teamId); for (int i = 0; i cells = new ArrayList<>(mapManager.getMapInfo().size()); for (Map.Entry entry : mapManager.getMapInfo().entrySet()) { @@ -338,17 +339,20 @@ public class MapLogic { } Map heroAllAttribute = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero,false,teamId); if(teamId==401){ - Map endlessHeroInfo = user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo(); + Map endlessHeroInfo = user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo(); if(endlessHeroInfo!=null&&endlessHeroInfo.size()>0){ if(initType!=2){ - if(endlessHeroInfo.get(hero.getId())!=null){ - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(), endlessHeroInfo.get(hero.getId()).getCurHp()); + Integer heroPercent = endlessHeroInfo.get(heroInfo.getHeroId()); + if(heroPercent!=null){ + int curHp = (int)((double)heroPercent/10000 * heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId())); + heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),curHp); } }else{ - mapManager.updateEndlessHeroHp(hero.getId(),endlessHeroInfo.get(hero.getId()).getMaxHp()); + mapManager.updateEndlessHeroHp(hero.getId(),10000); } } } + heroAllAttributeMap.put(hero.getId(), heroAllAttribute); heroes.add(heroInfo.getHeroId()); } @@ -384,6 +388,9 @@ public class MapLogic { mapManager.checkSuddenlyBoss(); int suddenlyBoss = mapManager.getSuddenlyBoss(); boolean canFindsuddenlyBoss = System.currentTimeMillis()> (mapManager.getSuddenlyBossStartTime() + SGameSetting.getGameSetting().getIncidentalBossCd())*1000; + + Map> initRandomPointMap = SEndlessMapConfig.initRandomPointMap; + Map> endlessRandomPoint = new HashMap<>(); for (Map.Entry entry : scMap.entrySet()) { SCMap scMap1 = entry.getValue(); // 必出现的事件点 @@ -398,6 +405,7 @@ public class MapLogic { } continue; } + // 随机出现的事件点 int randomIndex = random.nextInt(scMap1.getGroups().length); int x = scMap1.getGroups()[randomIndex][0]; @@ -421,8 +429,35 @@ public class MapLogic { continue; } Cell cellValue = new Cell(xy, mapPointConfig.getInitialEventId(), mapPointConfig.getId()); + //如果是无尽本 + if(initRandomPointMap.get(mapManager.getCurMapId())!=null){ + if(initRandomPointMap.get(mapManager.getCurMapId()).get(mapPointConfig.getId())!=null){ + if(endlessRandomPoint.get( mapPointConfig.getId())!=null){ + endlessRandomPoint.get(mapPointConfig.getId()).add(xy); + }else{ + List points = new ArrayList<>(); + points.add(xy); + endlessRandomPoint.put(mapPointConfig.getId(),points); + } + } + }else{ + newMap.put(xy, cellValue); + } + } + //无尽本随机点处理 + if(endlessRandomPoint.size()>0){ + for(Map.Entry> entry:endlessRandomPoint.entrySet()){ + int count = initRandomPointMap.get(mapManager.getCurMapId()).get(entry.getKey()); + List points = entry.getValue(); + Collections.shuffle(points); + for(int i = 0 ; i heroAllAttribute = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero,false,teamId); + int per = (int)(checkResult[i+2] / (double) heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId())*10000); + mapManager.updateEndlessHeroHp(team.get(i).getHeroId(),per); mapManager.updateHeroOneAttribute(team.get(i).getHeroId(), HeroAttributeEnum.CurHP.getPropertyId(), checkResult[i+2]); } } + if(SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getType()==4) { + endlessRefreshMonster(session,destoryXY); + } BehaviorUtil.destoryApointXY(user, destoryXY); SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(groupId); @@ -1494,7 +1535,10 @@ public class MapLogic { if(SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getType()==4&&teamId==401){ mapManager.updateEndlessFightCount(mapManager.getEndlessMapInfo().getFightCount()+1); for (int i = 0 ; i heroAllAttribute = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero,false,teamId); + int per =(int) (checkResult[i+2] / (double) heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId())*10000); + mapManager.updateEndlessHeroHp(team.get(i).getHeroId(),per); mapManager.updateHeroOneAttribute(team.get(i).getHeroId(), HeroAttributeEnum.CurHP.getPropertyId(), checkResult[i+2]); } } @@ -1506,13 +1550,7 @@ public class MapLogic { fightEndResponse.build(); if(SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId()).getType()==4){ - Cell cell = mapManager.getMapInfo().get(triggerXY); - MapPointConfig mapPointConfig = MapPointConfig.getScMapEventMap().get(cell.getPointId()); - Map map= SCMap.sCMap.get(mapManager.getCurMapId()); - - if(mapPointConfig.getStyle()==1){ - BehaviorUtil.destoryApointXY(user, triggerXY); - } + endlessRefreshMonster(session,triggerXY); } if (sOptionConfig != null) { int behaviorType = sOptionConfig.getBehaviorType(); @@ -3042,7 +3080,7 @@ public class MapLogic { mapManager.setEndlessMapInfo(new EndlessMapInfo()); endlessMapInfo = mapManager.getEndlessMapInfo(); } - Map endlessHeroInfo = endlessMapInfo.getEndlessHeroInfo(); + Map endlessHeroInfo = endlessMapInfo.getEndlessHeroInfo(); MapInfoProto.GetEndlessHeroResponse.Builder response = MapInfoProto.GetEndlessHeroResponse.newBuilder(); //已开启地图处理 Map sEndlessMapConfigMap = SEndlessMapConfig.sEndlessMapConfigMap; @@ -3061,51 +3099,36 @@ public class MapLogic { if(heroEntry.getValue().getLevel()<20){ continue; } - int calHp = HeroLogic.getInstance().calHeroNotBufferAttribute(user, heroEntry.getValue(), true,401).get(1); - if(!endlessHeroInfo.containsKey(heroEntry.getKey())){ - mapManager.addEndlessHero(heroEntry.getKey(),calHp); + if(endlessHeroInfo.get(heroEntry.getKey())==null){ + mapManager.addEndlessHero(heroEntry.getKey(),10000); } - for (Map.Entry entry :endlessHeroInfo.entrySet()) { - if (!entry.getKey().equals(heroEntry.getKey())) { - continue; - } - if(calHp!=entry.getValue().getMaxHp()){ - int tempHp = (int)(entry.getValue().getCurHp()/entry.getValue().getMaxHp()*1.0F*calHp); - endlessHeroInfo.put(entry.getKey(),new EndlessHero(calHp,tempHp)); - calHp = tempHp; - }else{ - calHp = entry.getValue().getCurHp(); - } - break; - } - LOGGER.info("英雄ID{},血量{}",heroEntry.getKey(),calHp); - CommonProto.endlessHero endlessHero = CommonProto.endlessHero.newBuilder().setHeroId(heroEntry.getKey()).setHp(calHp).build(); + LOGGER.info("英雄ID{},血量{}",heroEntry.getKey(),endlessHeroInfo.get(heroEntry.getKey()).intValue()); + CommonProto.endlessHero endlessHero = CommonProto.endlessHero.newBuilder().setHeroId(heroEntry.getKey()).setHp(endlessHeroInfo.get(heroEntry.getKey()).intValue()).build(); response.addHeroInfo(endlessHero); } endlessMapInfo.setEndlessHeroInfo(endlessHeroInfo); mapManager.setEndlessMapInfo(endlessMapInfo); - List team = user.getTeamPosManager().getTeamPosForHero().get(401); - if(team!=null&&team.size()>0){ - Iterator iterator = team.iterator(); - while(iterator.hasNext()){ - TeamPosHeroInfo teamInfo = iterator.next(); - EndlessHero endlessHero = endlessMapInfo.getEndlessHeroInfo().get(teamInfo.getHeroId()); - if(endlessHero==null){ - continue; - } - if(endlessHero.getCurHp()==0){ - Map> heroAllAttributeMap = mapManager.getHeroAllAttributeMap(); - if(heroAllAttributeMap.containsKey(teamInfo.getHeroId())){ - heroAllAttributeMap.remove(teamInfo.getHeroId()); - } - mapManager.setHeroAllAttributeMap(heroAllAttributeMap); - iterator.remove(); - } - } - - user.getTeamPosManager().updateTeamPosByTeamId(401,team); - } - +// List team = user.getTeamPosManager().getTeamPosForHero().get(401); +// if(team!=null&&team.size()>0){ +// Iterator iterator = team.iterator(); +// while(iterator.hasNext()){ +// TeamPosHeroInfo teamInfo = iterator.next(); +// EndlessHero endlessHero = endlessMapInfo.getEndlessHeroInfo().get(teamInfo.getHeroId()); +// if(endlessHero==null){ +// continue; +// } +// if(endlessHero.getCurHp()==0){ +// Map> heroAllAttributeMap = mapManager.getHeroAllAttributeMap(); +// if(heroAllAttributeMap.containsKey(teamInfo.getHeroId())){ +// heroAllAttributeMap.remove(teamInfo.getHeroId()); +// } +// mapManager.setHeroAllAttributeMap(heroAllAttributeMap); +// iterator.remove(); +// } +// } +// +// user.getTeamPosManager().updateTeamPosByTeamId(401,team); +// } MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); } @@ -3120,8 +3143,8 @@ public class MapLogic { EndlessMapInfo endlessMapInfo = mapManager.getEndlessMapInfo(); // SChallengeMapConfig sChallengeMapConfig = SChallengeMapConfig.integerSChallengeMapConfigMap.get(endlessMapInfo.getCurMapId()); // mapManager.updateEndlessLocation(CellUtil.xy2Pos(sChallengeMapConfig.getPosition()[0],sChallengeMapConfig.getPosition()[1])); - for(Map.Entry entry:endlessMapInfo.getEndlessHeroInfo().entrySet()){ - mapManager.updateEndlessHeroHp(entry.getKey(),entry.getValue().getMaxHp()); + for(Map.Entry entry:endlessMapInfo.getEndlessHeroInfo().entrySet()){ + mapManager.updateEndlessHeroHp(entry.getKey(),10000); } for (Map.Entry> entry:mapManager.getHeroAllAttributeMap().entrySet()){ mapManager.updateHeroOneAttribute(entry.getKey(),HeroAttributeEnum.CurHP.getPropertyId(),entry.getValue().get(HeroAttributeEnum.Hp.getPropertyId())); @@ -3316,4 +3339,62 @@ public class MapLogic { } updateEndlessSeason(0); } + + /** + * 无尽小怪打死随机刷新 + * @param session + * @param triggerXY + * @throws Exception + */ + private void endlessRefreshMonster(ISession session,int triggerXY) throws Exception { + User user = UserManager.getUser(session.getUid()); + MapManager mapManager = user.getMapManager(); + Cell cell = mapManager.getMapInfo().get(triggerXY); + MapPointConfig mapPointConfig = MapPointConfig.getScMapEventMap().get(cell.getPointId()); + if(mapPointConfig.getStyle()==1){ + Map map= SCMap.sCMap.get(mapManager.getCurMapId()); + List points = new ArrayList<>(); + for(Map.Entry entry:map.entrySet()){ + if(entry.getValue().getEvent()!=cell.getPointId()){ + continue; + } + boolean flagToAddMonster = true; + int[][] groups = entry.getValue().getGroups(); + for(int i = 0;i0){ + //无尽副本随机空地刷新小怪 + int cellPos = points.get(MathUtils.randomInt(points.size())); + Cell addCell = new Cell(cellPos,mapPointConfig.getInitialEventId(),mapPointConfig.getId()); + LOGGER.info("刷新位置为{},{}",CellUtil.pos2XY(cellPos)[0],CellUtil.pos2XY(cellPos)[1]); + mapManager.addOrUpdateCell(cellPos,addCell); + MapInfoProto.RefreshMonsterResponse monsterResponse = MapInfoProto.RefreshMonsterResponse.newBuilder().addCell(CBean2Proto.getCell(addCell)).build(); + MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.ENDLESS_MONSTER_REFRESH_INDICATION_VALUE,monsterResponse,true); + } + BehaviorUtil.destoryApointXY(user, triggerXY); + } + } + + /** + * 设置无尽副本是否跳过战斗 + * @param session + * @param type + * @param messageType + */ + public void setEndlessSkipType(ISession session, int type, MessageTypeProto.MessageType messageType) throws Exception { + UserManager.getUser(session.getUid()).getMapManager().updateEndlessSkipFight(type); + MessageUtil.sendMessage(session,1,messageType.getNumber(),null,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 2dc819b85..01eb1e989 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 @@ -695,24 +695,19 @@ public class MapManager extends MongoBase { updateString("endlessMapInfo",endlessMapInfo); this.endlessMapInfo = endlessMapInfo; } - public void addEndlessHero(String heroId,int maxHp){ + public void addEndlessHero(String heroId,int percent){ if(endlessMapInfo==null){ setEndlessMapInfo(new EndlessMapInfo()); } if(endlessMapInfo.getEndlessHeroInfo().containsKey(heroId)){ return; } - EndlessHero endlessHero = new EndlessHero(maxHp, maxHp); - updateString("endlessMapInfo."+heroId,endlessHero); - endlessMapInfo.getEndlessHeroInfo().put(heroId,endlessHero); + updateString("endlessMapInfo."+heroId,percent); + endlessMapInfo.getEndlessHeroInfo().put(heroId,percent); } public void updateEndlessHeroHp(String heroId,int hp){ - updateString("endlessMapInfo.endlessHeroInfo."+heroId+".curHp",hp); - EndlessHero endlessHero = endlessMapInfo.getEndlessHeroInfo().get(heroId); - if(endlessHero!=null){ - endlessHero.setCurHp(hp); - endlessMapInfo.getEndlessHeroInfo().put(heroId,endlessHero); - } + updateString("endlessMapInfo."+heroId,hp); + endlessMapInfo.getEndlessHeroInfo().put(heroId,hp); } public void updateEndlessLocation(int cellId){ endlessMapInfo.setCurCell(cellId); @@ -785,6 +780,10 @@ public class MapManager extends MongoBase { endlessMapInfo.setSeason(season); updateString("endlessMapInfo.season",season); } + public void updateEndlessSkipFight(int type){ + endlessMapInfo.setSkipFight(type); + updateString("endlessMapInfo.skipFight",type); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java index e4010e44a..c0eddf369 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java @@ -433,8 +433,8 @@ public class BehaviorUtil { return monsterTeamList; } - public static void refreshTimeMonster(User user,int[][] behaviorTypeValues){ - user.getMapManager().updateEndlessCellTime(user.getMapManager().getCurXY(), (int)(TimeUtils.now()/1000)+behaviorTypeValues[0][1]); + public static void refreshTimeMonster(User user,int value){ + user.getMapManager().updateEndlessCellTime(user.getMapManager().getCurXY(), (int)(TimeUtils.now()/1000)+value); Map cellRefreshTime = user.getMapManager().getEndlessMapInfo().getCellRefreshTime(); MapInfoProto.EndlessTimeIndication.Builder indication = MapInfoProto.EndlessTimeIndication.newBuilder(); for(Map.Entry entry:cellRefreshTime.entrySet()){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyEightBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyEightBehavior.java index bc9d6070e..149a741ed 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyEightBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyEightBehavior.java @@ -34,7 +34,7 @@ public class FourtyEightBehavior extends BaseBehavior{ @Override public boolean afterFight(User user, int[][] behaviorTypeValues, FightInfoProto.FightEndResponse.Builder fightEndResponse){ - BehaviorUtil.refreshTimeMonster(user,behaviorTypeValues); + BehaviorUtil.refreshTimeMonster(user,behaviorTypeValues[0][1]); return true; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyNineBehavior.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyNineBehavior.java index b10dcc878..c8f089387 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyNineBehavior.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/FourtyNineBehavior.java @@ -21,7 +21,7 @@ public class FourtyNineBehavior extends BaseBehavior { @Override public boolean process(int optionId, User user, int[][] behaviorTypeValues, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception { - BehaviorUtil.refreshTimeMonster(user,behaviorTypeValues); + BehaviorUtil.refreshTimeMonster(user,behaviorTypeValues[0][0]); return true; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/EndlessSetSkipFightHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/EndlessSetSkipFightHandler.java new file mode 100644 index 000000000..7e939cf03 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapHandler/EndlessSetSkipFightHandler.java @@ -0,0 +1,22 @@ +package com.ljsd.jieling.handler.map.mapHandler; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.handler.map.MapLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MapInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class EndlessSetSkipFightHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.ENDLESS_SET_SKIPFIGHT_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, MapInfoProto.EndlessSetSkipRequest proto) throws Exception { + MapLogic.getInstance().setEndlessSkipType(iSession,proto.getType(), MessageTypeProto.MessageType.ENDLESS_SET_SKIPFIGHT_RESPONSE); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java index bf74924da..0faf9678f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -17,6 +17,7 @@ import com.ljsd.jieling.handler.map.MapLogic; import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.arena.ArenaLogic; +import com.ljsd.jieling.logic.blood.BloodLogic; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.GlobalSystemControl; import com.ljsd.jieling.logic.dao.root.User; @@ -170,6 +171,7 @@ public class GlobalDataManaager { MapLogic.getInstance().updateEndlessSeason(timeControllerOfFunction.getTimes()); serverConfigTmp.setWorldLevel(calWorldLevel()); MapLogic.getInstance().setEndlessMapId(getEndleeMapIdByLevel()); + break; default: break; } @@ -188,6 +190,10 @@ public class GlobalDataManaager { break; case Endless: MapLogic.getInstance().resetEndlessInfo(); + BloodLogic.getInstance().bloodSeasonReward(); + break; + case Blood: + default: break; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java index e1505bf73..6e17c3819 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java @@ -1,6 +1,9 @@ package com.ljsd.jieling.logic.blood; +import com.ljsd.GameApplication; +import com.ljsd.jieling.config.SBloodyRankConfig; import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.family.GuildLogic; @@ -8,9 +11,17 @@ import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.logic.hero.HeroAttributeEnum; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.item.ItemLogic; +import com.ljsd.jieling.logic.mail.MailLogic; +import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.RoomProto; +import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.StringUtil; +import com.ljsd.jieling.util.TimeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.redis.core.ZSetOperations; import java.util.*; @@ -99,4 +110,63 @@ public class BloodLogic { return fightDefendTeamInfo; } + /** + * 获取血战排行榜 + * @param session + * @param messageType + */ + public void getBloodRank(ISession session, MessageTypeProto.MessageType messageType){ + Set> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.BLOODY_RANK, "1", 0, 100); + Map playerInfoCacheMap = RedisUtil.getInstence().getMapValues(RedisKey.PLAYER_INFO_CACHE, "", Integer.class, PlayerInfoCache.class); + int rank = 0; + RoomProto.BloodRankResponse.Builder response = RoomProto.BloodRankResponse.newBuilder(); + for(ZSetOperations.TypedTuple blood:zsetreverseRangeWithScores){ + rank++; + PlayerInfoCache cache = playerInfoCacheMap.get(Integer.parseInt(blood.getValue())); + CommonProto.BloodPersonInfo info = CommonProto.BloodPersonInfo.newBuilder() + .setHead(cache.getHead()) + .setId(Integer.parseInt(blood.getValue())) + .setHeadFrame(cache.getHeadFrame()) + .setLevel(cache.getLevel()) + .setServerId(cache.getServerId()) + .setScore(blood.getScore().intValue()) + .setRank(rank) + .setName(cache.getName()) + .build(); + response.addInfos(info); + } + int myRank= RedisUtil.getInstence().getZSetreverseRank(RedisKey.BLOODY_RANK,"1",Integer.toString(session.getUid())).intValue(); + response.setMyRank(myRank); + MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); + } + public void bloodSeasonReward() throws Exception { + Set> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.BLOODY_RANK, "1", 0, RedisUtil.getInstence().getZsetSize(RedisKey.getKey(RedisKey.BLOODY_RANK, "1", true))); + Map players = RedisUtil.getInstence().getMapValues(RedisKey.PLAYER_INFO_CACHE, "", Integer.class, PlayerInfoCache.class); + Map sBloodyRankConfigMap = SBloodyRankConfig.sBloodyRankConfigMap; + int floor = 0 ; + for(ZSetOperations.TypedTuple rank:zsetreverseRangeWithScores){ + //是否为本服玩家 + if(players.get(Integer.parseInt(rank.getValue())).getServerId()!= GameApplication.serverId){ + continue; + } + int[][] reward; + for(Map.Entry entry:sBloodyRankConfigMap.entrySet()){ + SBloodyRankConfig value = entry.getValue(); + if(rank.getScore()>value.getScore()){ + floor = entry.getKey(); + }else{ + break; + } + } + if(floor==0){ + continue; + }else{ + reward = sBloodyRankConfigMap.get(floor).getReward(); + MailLogic.getInstance().sendMail(Integer.parseInt(rank.getValue()),"血战排行奖励","恭喜",StringUtil.parseArrayToString(reward), (int)(TimeUtils.now()/1000),10); + } + } + + + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerInfoCache.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerInfoCache.java new file mode 100644 index 000000000..5a9905e0f --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerInfoCache.java @@ -0,0 +1,50 @@ +package com.ljsd.jieling.logic.dao; + +public class PlayerInfoCache { + private int serverId; + private String name; + private String head; + private int headFrame; + private int level; + + + public String getName() { + return name; + } + + public String getHead() { + return head; + } + + public int getHeadFrame() { + return headFrame; + } + + public void setName(String name) { + this.name = name; + } + + public void setHead(String head) { + this.head = head; + } + + public void setHeadFrame(int headFrame) { + this.headFrame = headFrame; + } + + public void setServerId(int serverId) { + this.serverId = serverId; + } + + public int getServerId() { + return serverId; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index 450862776..0edffe2fb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -84,6 +84,7 @@ public class UserManager { playerManager.setMaxForce(force); PlayerLogic.getInstance().vipflushEveryDay(user,null); ActivityLogic.getInstance().newPlayerOpenActivityMission(user); + PlayerLogic.getInstance().playerInfoUpdate(user); user.getUserMissionManager().onGameEvent(user, GameEvent.USER_LEVELUP,0,1); user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_REFRESH,0); user.getUserMissionManager().onGameEvent(user, GameEvent.BEGINNER); 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 d06fb9de6..2b698c569 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 @@ -9,6 +9,7 @@ import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.handler.map.EndlessHero; import com.ljsd.jieling.logic.activity.event.HeroUpStarEvent; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.dao.*; @@ -414,24 +415,34 @@ public class HeroLogic { return; } user.getTeamPosManager().changeTeamInfo(teamId,heroIds,pokemonoIds); + //401图内可以更改编队 if(teamId == 401){ List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); - List heroes = new ArrayList<>(teamPosHeroInfos.size()); - Map> heroAllAttributeMap = new HashMap<>(teamPosHeroInfos.size()); - for (TeamPosHeroInfo heroInfo : teamPosHeroInfos) { - Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId()); - if (hero == null) { - break; + if(teamPosHeroInfos!=null){ + List heroes = new ArrayList<>(teamPosHeroInfos.size()); + Map> heroAllAttributeMap = new HashMap<>(teamPosHeroInfos.size()); + for (TeamPosHeroInfo heroInfo : teamPosHeroInfos) { + Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId()); + if (hero == null) { + break; + } + if(heroAllAttributeMap.get(heroInfo)!=null){ + continue; + } + Map heroAllAttribute = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero,false,teamId); + Map endlessHeroInfo = user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo(); + if(endlessHeroInfo!=null&& endlessHeroInfo.size()>0){ + 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()); + } + user.getMapManager().setHeroAllAttributeMap(heroAllAttributeMap); + }else{ + user.getTeamPosManager().changeTeamInfo(teamId,heroIds,pokemonoIds); } - Map heroAllAttribute = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero,true,teamId); - if(user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo()!=null&&user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo().size()>0){ - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo().get(hero.getId()).getCurHp()); - } - heroAllAttributeMap.put(hero.getId(), heroAllAttribute); - heroes.add(heroInfo.getHeroId()); } - user.getMapManager().setHeroAllAttributeMap(heroAllAttributeMap); - } user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_IN_TEAM,heroIds.size()); MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.TEAM_POS_SAVE_RESPONSE_VALUE,null,true); } 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 58fc4c05f..29b643ebe 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 @@ -485,6 +485,7 @@ public class ItemLogic { user.getEquipManager().removeEspecialEquip(iterator.next()); } } + user.getEquipManager().upStarEspecialEquip(equipId); MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,null,true); }else{ MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,"材料不足"); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java index 0409a7a29..613a87491 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java @@ -54,8 +54,9 @@ public class WorkShopLogic { return; } int limits = sWorkShopTechnology.getLimits(); - int workShopLevel = workShopController.getWorkShopLevel(); - if(workShopLevel