From 544ba369386c757d007c8e681b4e0749b4867dd6 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Thu, 16 May 2019 17:50:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=82=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisKey.java | 2 + .../AdventureBossChallengeHandler.java | 2 +- .../adventure/AdventureBossShareHandler.java | 23 ++ .../adventure/AdventureFlushBossHandler.java | 21 ++ .../GetAdventureBossHurtHandler.java | 7 +- .../GetAdventureBossRankHandler.java | 9 +- .../adventure/TakeAdventureRewardHandler.java | 23 ++ .../ljsd/jieling/logic/dao/AdventureBoss.java | 19 +- .../jieling/logic/dao/AdventureManager.java | 26 +- .../jieling/logic/dao/AdventureStateInfo.java | 5 + .../com/ljsd/jieling/logic/dao/Equip.java | 23 +- .../ljsd/jieling/logic/fight/CombatLogic.java | 231 ++++++++++++++---- .../com/ljsd/jieling/util/CBean2Proto.java | 13 + .../java/com/ljsd/jieling/util/ItemUtil.java | 2 - .../com/ljsd/jieling/util/MonsterUtil.java | 25 ++ 15 files changed, 358 insertions(+), 73 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureBossShareHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureFlushBossHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/TakeAdventureRewardHandler.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 750b7370c..cc7a5c33f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -85,6 +85,8 @@ public class RedisKey { public static final String ARENA_RANK = "ARENA_RANK"; + public static final String ADVENTRUEN_BOSS_OWN = "ADVENTRUEN_BOSS_OWN"; + public static final String ADVENTRUEN_BOSS_INFO = "ADVENTRUEN_BOSS_INFO"; public static final String ADVENTRUEN_BOSS_RANK = "ADVENTRUEN_BOSS_RANK"; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureBossChallengeHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureBossChallengeHandler.java index 9c4ea5eec..b07032522 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureBossChallengeHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureBossChallengeHandler.java @@ -22,6 +22,6 @@ public class AdventureBossChallengeHandler extends BaseHandler{ int teamId = adventurenBossChallengeRequest.getTeamId(); int fightTimes = adventurenBossChallengeRequest.getFightTimes(); int skipFight = adventurenBossChallengeRequest.getSkipFight(); - //CombatLogic.getInstance().challengeInvasionBoss(iSession,); + CombatLogic.getInstance().challengeInvasionBoss(iSession,bossId,teamId,fightTimes,skipFight); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureBossShareHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureBossShareHandler.java new file mode 100644 index 000000000..904e49f3a --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureBossShareHandler.java @@ -0,0 +1,23 @@ +package com.ljsd.jieling.handler.adventure; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.fight.CombatLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.FightInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class AdventureBossShareHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.ADVENTURE_BOSS_SHARE_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + FightInfoProto.AdventureBossShareRequest adventureBossShareRequest = FightInfoProto.AdventureBossShareRequest.parseFrom(netData.parseClientProtoNetData()); + CombatLogic.getInstance().shareAdventureBoss(iSession,adventureBossShareRequest.getBossId()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureFlushBossHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureFlushBossHandler.java new file mode 100644 index 000000000..207720c47 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/AdventureFlushBossHandler.java @@ -0,0 +1,21 @@ +package com.ljsd.jieling.handler.adventure; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.fight.CombatLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class AdventureFlushBossHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.ADVENTURE_FLUSH_BOSS_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + CombatLogic.getInstance().flushArenaBoss(iSession); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/GetAdventureBossHurtHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/GetAdventureBossHurtHandler.java index bf2f6c847..457498941 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/GetAdventureBossHurtHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/GetAdventureBossHurtHandler.java @@ -1,20 +1,21 @@ package com.ljsd.jieling.handler.adventure; import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.MessageTypeProto; import org.springframework.stereotype.Component; - +@Component public class GetAdventureBossHurtHandler extends BaseHandler { @Override public MessageTypeProto.MessageType getMessageCode() { - return null; + return MessageTypeProto.MessageType.ADVENTURE_BOSSHURT_REQEUST; } @Override public void process(ISession iSession, PacketNetData netData) throws Exception { - + CombatLogic.getInstance().getInvasionBoss(iSession); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/GetAdventureBossRankHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/GetAdventureBossRankHandler.java index 37a2f749b..b97173614 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/GetAdventureBossRankHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/GetAdventureBossRankHandler.java @@ -1,20 +1,23 @@ package com.ljsd.jieling.handler.adventure; import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.FightInfoProto; import com.ljsd.jieling.protocols.MessageTypeProto; import org.springframework.stereotype.Component; - +@Component public class GetAdventureBossRankHandler extends BaseHandler { @Override public MessageTypeProto.MessageType getMessageCode() { - return null; + return MessageTypeProto.MessageType.ADVENTURE_BOSS_RANK_REQUEST; } @Override public void process(ISession iSession, PacketNetData netData) throws Exception { - + FightInfoProto.AdventurnRankRequest adventurnRankRequest = FightInfoProto.AdventurnRankRequest.parseFrom(netData.parseClientProtoNetData()); + CombatLogic.getInstance().getWorldRankByPage(iSession,adventurnRankRequest.getPage()); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/TakeAdventureRewardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/TakeAdventureRewardHandler.java new file mode 100644 index 000000000..b5281d3bc --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/adventure/TakeAdventureRewardHandler.java @@ -0,0 +1,23 @@ +package com.ljsd.jieling.handler.adventure; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.fight.CombatLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.FightInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class TakeAdventureRewardHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.ADVENTURE_REWARD_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + FightInfoProto.TakeAventureRewardRequest takeAventureRewardRequest = FightInfoProto.TakeAventureRewardRequest.parseFrom(netData.parseClientProtoNetData()); + CombatLogic.getInstance().takeAdventureReward(iSession,takeAventureRewardRequest.getType(),takeAventureRewardRequest.getPosition()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureBoss.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureBoss.java index 8c8fc0446..31fee5b26 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureBoss.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureBoss.java @@ -6,18 +6,23 @@ public class AdventureBoss { private String bossId; private int bossGroupId; private int arenaId; + private int arenaLevel; private int findUserId; //发现者 private int findTime; //发现时间 private int totalHp;// 总血量 private List remainHp; //剩余血量 - public AdventureBoss(String bossId,int bossGroupId, int arenaId,int findUserId, int findTime, int totalHp, List remainHp) { + public AdventureBoss() { + } + + public AdventureBoss(String bossId, int bossGroupId, int arenaId, int arenaLevel, int findUserId, int findTime, int totalHp, List remainHp) { this.bossId = bossId; this.findUserId = findUserId; this.findTime = findTime; this.totalHp = totalHp; this.remainHp = remainHp; this.bossGroupId = bossGroupId; + this.arenaLevel = arenaLevel; } public String getBossId() { @@ -71,4 +76,16 @@ public class AdventureBoss { public int getArenaId() { return arenaId; } + + public void setArenaId(int arenaId) { + this.arenaId = arenaId; + } + + public int getArenaLevel() { + return arenaLevel; + } + + public void setArenaLevel(int arenaLevel) { + this.arenaLevel = arenaLevel; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureManager.java index 24718420c..68e4e8856 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureManager.java @@ -18,7 +18,8 @@ public class AdventureManager extends MongoBase { private int dayChallengeTimes; - private List tempDropRatio = new ArrayList<>(); + private long flushBossTime; + @@ -34,20 +35,6 @@ public class AdventureManager extends MongoBase { adventureStateInfoMap.put(position,adventureStateInfo); } - public List getTempDropRatio() { - return tempDropRatio; - } - - public void updateTemp(int dropIds[], float ratio){ - tempDropRatio.add(new TempDropInfo(dropIds,ratio)); - updateString("tempDropRatio",tempDropRatio); - } - - public void clearTemp(){ - tempDropRatio.clear(); - updateString("tempDropRatio", new ArrayList<>()); - } - public Map getAdventureStateInfoMap() { return adventureStateInfoMap; } @@ -79,4 +66,13 @@ public class AdventureManager extends MongoBase { updateString("buyTimsPerDay",buyTimsPerDay); this.buyTimsPerDay = buyTimsPerDay; } + + public long getFlushBossTime() { + return flushBossTime; + } + + public void setFlushBossTime(long flushBossTime) { + updateString("flushBossTime",flushBossTime); + this.flushBossTime = flushBossTime; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java index 5fc005933..8b869209d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/AdventureStateInfo.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.util.TimeUtils; import java.util.List; @@ -17,8 +18,12 @@ public class AdventureStateInfo extends MongoBase { } public AdventureStateInfo(int position) { + int now = (int)(TimeUtils.now()/1000); this.position = position; this.level=1; + this.startTime = now; + this.findBossTime = now; + } public int getStartTime() { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java index 6439d58d0..db4e31d1e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java @@ -22,7 +22,7 @@ public class Equip extends MongoBase implements Cloneable{ private int level; - private int rebuildLevel; + private int rebuildLevel; @@ -239,7 +239,10 @@ public class Equip extends MongoBase implements Cloneable{ int value = MathUtils.random(sEquipPropertyPool.getMin() * (100 + secondPropertyPromote) / 100, sEquipPropertyPool.getMax()* (100 + secondPropertyPromote) / 100); secondValueByIdMap.put(secondPropertyId,value); } - rebuildLevel = workShopLevle; + + setRebuildLevel(workShopLevle); + setSecondValueByIdMap(secondValueByIdMap); + setPropertyValueByIdMap(propertyValueByIdMap); } @@ -286,6 +289,22 @@ public class Equip extends MongoBase implements Cloneable{ return secondValueByIdMap; } + + public void setRebuildLevel(int rebuildLevel) { + updateString("rebuildLevel",rebuildLevel); + this.rebuildLevel = rebuildLevel; + } + + public void setPropertyValueByIdMap(Map propertyValueByIdMap) { + updateString("propertyValueByIdMap",propertyValueByIdMap); + this.propertyValueByIdMap = propertyValueByIdMap; + } + + public void setSecondValueByIdMap(Map secondValueByIdMap) { + updateString("secondValueByIdMap",secondValueByIdMap); + this.secondValueByIdMap = secondValueByIdMap; + } + @Override public Object clone() throws CloneNotSupportedException { return (Equip) super.clone(); 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 532935504..fe5320f90 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 @@ -127,33 +127,116 @@ public class CombatLogic { AdventureManager adventureManager = user.getAdventureManager(); FightInfoProto.GetAdventureStateInfoResponse.Builder builder = FightInfoProto.GetAdventureStateInfoResponse.newBuilder(); Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); + int flushBossNextTime = -1; if(!adventureStateInfoMap.isEmpty()){ - int now = (int)(TimeUtils.now()/1000); + long nowMs = TimeUtils.now(); + int now = (int)(nowMs/1000); for(AdventureStateInfo adventureStateInfo : adventureStateInfoMap.values()){ CommonProto.AdventureStateInfo.Builder builder1 = CommonProto.AdventureStateInfo.newBuilder() .setPositionId(adventureStateInfo.getPosition()) - .setBossId(adventureStateInfo.getBossId()) .setLevel(adventureStateInfo.getLevel()) .setStateTime(now-adventureStateInfo.getStartTime()); SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(adventureStateInfo.getPosition()); - int findBossNextTime = sAdventureConfig.getInvasionBossRefresh(); - if(!StringUtil.isEmpty(adventureStateInfo.getBossId())){ - int findBossTime = adventureStateInfo.getFindBossTime(); - int remainTime =sAdventureConfig.getInvasionBossHolding()-(now - findBossTime); + int nextFlushTime = sAdventureConfig.getInvasionBossRefresh(); + int findBossTime = adventureStateInfo.getFindBossTime(); + int remainTime =sAdventureConfig.getInvasionBossHolding()-(now - findBossTime); + boolean needRandom = false; + boolean need = false; + if(StringUtil.isEmpty(adventureStateInfo.getBossId())){ + if(now-adventureStateInfo.getStartTime()>nextFlushTime){ + needRandom = true; + } + }else{ if(remainTime>0){ - builder1.setBossRemainTime(remainTime).setBossId(adventureStateInfo.getBossId()); - }else { - //删除boss ,刷新boss + need= true; + } + if(remainTime+nextFlushTime<0){ + needRandom = true; } } - builder1.setBossFindNextTime(findBossNextTime); + if(needRandom){ + int bossGroupId = randomInvasionBoss(uid, adventureStateInfo.getPosition()); + if(bossGroupId>0){ + nextFlushTime+=remainTime; + need=true; + } + } + if(need){ + builder1.setAdventureBossSimpleInfo( CommonProto.AdventureBossSimpleInfo.newBuilder().setArenaId(adventureStateInfo.getPosition()) + .setBossGroupId(adventureStateInfo.getBossGroupId()) + .setRemainTime(remainTime) + .build()); + } + + if(flushBossNextTime == -1 || flushBossNextTime>nextFlushTime){ + flushBossNextTime = nextFlushTime; + } builder.addAdventureStateInfoList(builder1); } + if(flushBossNextTime!=-1){ + adventureManager.setFlushBossTime(nowMs + flushBossNextTime *1000); + } } - builder.setBuyTimsPerDay(adventureManager.getBuyTimsPerDay()).setDayChallengeTimes(adventureManager.getDayChallengeTimes()); + builder.setNextBossFlushTime(flushBossNextTime).setBuyTimsPerDay(adventureManager.getBuyTimsPerDay()).setDayChallengeTimes(adventureManager.getDayChallengeTimes()); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_INFO_RESPONSE_VALUE,builder.build(),true); } + public void flushArenaBoss(ISession session) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + long nowMs = TimeUtils.now(); + AdventureManager adventureManager = user.getAdventureManager(); + if(adventureManager.getFlushBossTime()>nowMs){ + MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_FLUSH_BOSS_RESPONSE_VALUE,"cold time"); + return; + } + int now = (int)(nowMs/1000); + int flushBossNextTime = -1; + FightInfoProto.AdventureBossFlushResponse.Builder builder = FightInfoProto.AdventureBossFlushResponse.newBuilder(); + Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); + if(!adventureStateInfoMap.isEmpty()){ + for(AdventureStateInfo adventureStateInfo : adventureStateInfoMap.values()){ + SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(adventureStateInfo.getPosition()); + int nextFlushTime = sAdventureConfig.getInvasionBossRefresh(); + int findBossTime = adventureStateInfo.getFindBossTime(); + int remainTime =sAdventureConfig.getInvasionBossHolding()-(now - findBossTime); + boolean needRandom = false; + boolean need = false; + if(StringUtil.isEmpty(adventureStateInfo.getBossId())){ + if(now-adventureStateInfo.getStartTime()>nextFlushTime){ + needRandom = true; + } + }else{ + if(remainTime>0){ + need= true; + } + if(remainTime+nextFlushTime<0){ + needRandom = true; + } + } + if(needRandom){ + int bossGroupId = randomInvasionBoss(uid, adventureStateInfo.getPosition()); + if(bossGroupId>0){ + nextFlushTime+=remainTime; + need=true; + } + } + if(need){ + builder.setAdventureBossSimpleInfo( CommonProto.AdventureBossSimpleInfo.newBuilder().setArenaId(adventureStateInfo.getPosition()) + .setBossGroupId(adventureStateInfo.getBossGroupId()) + .setRemainTime(remainTime) + .build()); + } + + if(flushBossNextTime == -1 || flushBossNextTime>nextFlushTime){ + flushBossNextTime = nextFlushTime; + } + } + } + builder.setNextFlushTime(flushBossNextTime); + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_FLUSH_BOSS_RESPONSE_VALUE,builder.build(),true); + } + //挑战首次 public void adventureChallenge(ISession iSession,int arenaId,int teamId,int skipFight) throws Exception { int uid = iSession.getUid(); @@ -173,7 +256,6 @@ public class CombatLogic { MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.ADVENTURE_CHALLENGE_RESPONSE_VALUE,"level not"); return; } - int groupId = sAdventureConfig.getSystemBoss(); CommonProto.FightTeamInfo fightTeamInfo = BehaviorUtil.getFightTeamInfo(user,teamId,true); Map> monsterByGroup = MonsterUtil.getMonsterByGroup(groupId); @@ -212,7 +294,6 @@ public class CombatLogic { User user = UserManager.getUser(uid); AdventureManager adventureManager = user.getAdventureManager(); Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); - AdventureStateInfo adventureStateInfo = adventureStateInfoMap.get(arenaId); if(null == adventureStateInfo){ MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.ADVENTURE_UPLEVEL_RESPONSE_VALUE,""); @@ -244,16 +325,15 @@ public class CombatLogic { User user = UserManager.getUser(uid); CommonProto.Drop.Builder advetureReward=null; if(type == 2){ - advetureReward = getAdvetureReward(user, position); + advetureReward = getAdventureReward(user, position); }else{ - + advetureReward = getAdventureFastReward(user,SGameSetting.getGameSetting().getAdventureFastBattle()); } FightInfoProto.TakeAventureRewardResponse build = FightInfoProto.TakeAventureRewardResponse.newBuilder().setDrop(advetureReward).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_REWARD_RESPONSE_VALUE,build,true); - } - private CommonProto.Drop.Builder getAdvetureReward(User user, int position) throws Exception { + private CommonProto.Drop.Builder getAdventureReward(User user, int position) throws Exception { AdventureManager adventureManager = user.getAdventureManager(); CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); @@ -279,10 +359,35 @@ public class CombatLogic { } } return dropBuilder; - } + private CommonProto.Drop.Builder getAdventureFastReward(User user,int timeDuration) throws Exception { + AdventureManager adventureManager = user.getAdventureManager(); + CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); + Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); + int now = (int)(System.currentTimeMillis()/1000); + SGameSetting gameSetting = SGameSetting.getGameSetting(); + int adventureRefresh = gameSetting.getAdventureRefresh(); + int times = (now - timeDuration) / adventureRefresh; + for(AdventureStateInfo adventureStateInfoTmp:adventureStateInfoMap.values()) { + int positionTmp = adventureStateInfoTmp.getPosition(); + if (times > 0) { + SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(positionTmp); + int baseRewardGroup[] = sAdventureConfig.getBaseRewardGroup(); + int[][] randomRewardGroup = sAdventureConfig.getRandomRewardGroup(); + ItemUtil.activityDrop(user, dropBuilder, new int[]{baseRewardGroup[adventureStateInfoTmp.getLevel()-1]}, times); + ItemUtil.activityDrop(user, dropBuilder, randomRewardGroup[adventureStateInfoTmp.getLevel()-1], times); + } + } + return dropBuilder; + } + + + public void getInvasionBoss(ISession session){ + int uid = session.getUid(); + Map mapValues = RedisUtil.getInstence().getMapValues(RedisKey.ADVENTRUEN_BOSS_OWN, Integer.toString(uid), String.class, Integer.class); + } @@ -310,23 +415,31 @@ public class CombatLogic { totalWeight+=item[1]; } int now = (int)(System.currentTimeMillis()/1000); - String bossId = KeyGenUtils.produceIdByModule(UUIDEnum.ADVENTUREBOSS, user.getId()); - Map> monsterHpByGroup = MonsterUtil.getMonsterHpByGroup(bossGroupID); - List hps = monsterHpByGroup.get(0); - int totalHp = 0; - for(Integer hp: hps){ - totalHp+=hp; + String bossId=""; + if(bossGroupID != 0){ + bossId = KeyGenUtils.produceIdByModule(UUIDEnum.ADVENTUREBOSS, user.getId()); + Map> monsterHpByGroup = MonsterUtil.getMonsterHpByGroup(bossGroupID); + List hps = monsterHpByGroup.get(0); + int totalHp = 0; + for(Integer hp: hps){ + totalHp+=hp; + } + AdventureBoss adventureBoss = new AdventureBoss(bossId,bossGroupID,arenaID,levle,uid,now,totalHp,hps); + RedisUtil.getInstence().putMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO,"",bossId,adventureBoss); } - AdventureBoss adventureBoss = new AdventureBoss(bossId,bossGroupID,arenaID,uid,now,totalHp,hps); - RedisUtil.getInstence().putMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO,"",bossId,adventureBoss); adventureStateInfo.setBossId(bossId); adventureStateInfo.setBossGroupId(bossGroupID); adventureStateInfo.setFindBossTime(now); return bossGroupID; } - public void shareAdventureBoss(ISession session,String bossId){ - + public void shareAdventureBoss(ISession session,String bossId) throws Exception { + AdventureBoss adventureBoss = RedisUtil.getInstence().getMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO, "", bossId, AdventureBoss.class); + if(adventureBoss == null || adventureBoss.getFindUserId() !=session.getUid()){ + MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_BOSS_SHARE_RESPONSE_VALUE,"data wrong"); + return; + } + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_BOSS_SHARE_RESPONSE_VALUE,null,true); } public void challengeInvasionBoss(ISession session,String bossId,int teamId,int fightTimes,int skipFight) throws Exception { @@ -346,15 +459,17 @@ public class CombatLogic { } AdventureBoss adventureBoss = RedisUtil.getInstence().getMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO, "", bossId, AdventureBoss.class); int bossGroupId = adventureBoss.getBossGroupId(); + Map> hps = new HashMap<>(1); + hps.put(0,adventureBoss.getRemainHp()); CommonProto.FightTeamInfo fightTeamInfo = BehaviorUtil.getFightTeamInfo(user, teamId,true); - Map> monsterByGroup = MonsterUtil.getMonsterByGroup(bossGroupId); + Map> monsterByGroup = MonsterUtil.getMonsterByGroup(bossGroupId,hps); List monsterGroupList = BehaviorUtil.getFightTeamInfos(bossGroupId,monsterByGroup, Global.MONSTER_1); //设置战斗随机种子 int seed = (int)(System.currentTimeMillis()/1000); LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, monsterGroupList); LuaValue getOptionData = FightDataUtil.getOptionData(""); FightInfoProto.AdventurenBossChallengeResponse.Builder builder = FightInfoProto.AdventurenBossChallengeResponse.newBuilder(); - if(skipFight == 0){ + if(fightTimes == 1 && skipFight == 0){ CommonProto.FightData build = CommonProto.FightData.newBuilder() .setFightMaxTime(SArenaSetting.getSArenaSetting().getMostTime()) .setFightSeed(seed) @@ -370,7 +485,7 @@ public class CombatLogic { int fightResult = checkResult[0]; //发送击杀boss奖励和发现者奖励 if(fightResult == 1){ - sendRewardOfBossKilled(); + sendRewardOfBossKilled(adventureBoss.getFindUserId(),uid,bossGroupId,adventureBoss.getArenaId(),adventureBoss.getArenaLevel()); RedisUtil.getInstence().removeMapEntrys(RedisKey.ADVENTRUEN_BOSS_INFO,"",bossId); }else{ RedisUtil.getInstence().putMapEntry(RedisKey.ADVENTRUEN_BOSS_INFO,"",Integer.toString(uid),adventureBoss); @@ -380,7 +495,28 @@ public class CombatLogic { MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_BOSS_CHALLENGE_RESPONSE_VALUE,build,true); } - private void sendRewardOfBossKilled() { + private void sendRewardOfBossKilled(int findUserId,int killUid,int killBossGroupId, int arenaId,int arenaLevel) throws Exception { + SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(killBossGroupId); + int[] findRewardgroup = sMonsterGroup.getRewardgroup(); + SAdventureConfig sAdventureConfig = SAdventureConfig.getConfig().get(arenaId); + int[][] rewaeds = sAdventureConfig.getInvasionBossReward()[arenaLevel - 1]; + int[] killReward=null; + for(int[] rewardBossItem : rewaeds){ + if(rewardBossItem[0] == killBossGroupId){ + killReward = new int[]{rewardBossItem[1]}; + break; + } + } + int nowTime = (int)(TimeUtils.now()/1000); + String findRewardMail = ItemUtil.getMailReward(findRewardgroup, 1.0f); + String title = SErrorCodeEerverConfig.getI18NMessage("adventuren_boss_find_reward_title"); + String content = SErrorCodeEerverConfig.getI18NMessage("adventuren_boss_find_reward__txt"); + MailLogic.getInstance().sendMail(findUserId,title,content,findRewardMail,nowTime, Global.MAIL_EFFECTIVE_TIME); + + String killRewardMail = ItemUtil.getMailReward(killReward, 1.0f); + title = SErrorCodeEerverConfig.getI18NMessage("adventuren_boss_kill_reward_title"); + content = SErrorCodeEerverConfig.getI18NMessage("adventuren_boss_kill_reward__txt"); + MailLogic.getInstance().sendMail(killUid,title,content,killRewardMail,nowTime, Global.MAIL_EFFECTIVE_TIME); } @@ -404,37 +540,40 @@ public class CombatLogic { } - public List parseToList(int checkResult[]){ - List result =new ArrayList<>(5); - for(int i=1;i adventureRankItemInfos = new ArrayList<>(20); Set> adventureBossRankInfo= RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.ADVENTRUEN_BOSS_RANK,"", start, end); for(ZSetOperations.TypedTuple item : adventureBossRankInfo){ String value = item.getValue(); int score =item.getScore().intValue(); int uid = Integer.parseInt(value); User user = UserManager.getUser(uid); - + adventureRankItemInfos.add(CBean2Proto.getAdventureRankItemInfo(uid,user,score,++start)); } - + int uid = session.getUid(); + int score = RedisUtil.getInstence().getZSetScore(RedisKey.ADVENTRUEN_BOSS_RANK,"", Integer.toString(uid)).intValue(); + int myRank =-1; + if(score == -1){ + score = 0; + }else{ + myRank= RedisUtil.getInstence().getZSetreverseRank(RedisKey.ADVENTRUEN_BOSS_RANK,"",Integer.toString(uid)).intValue(); + } + User user = UserManager.getUser(uid); + CommonProto.AdventureRankItemInfo myinfo = CBean2Proto.getAdventureRankItemInfo(session.getUid(), user, score, myRank); + FightInfoProto.AdventurnRankResponse build = FightInfoProto.AdventurnRankResponse.newBuilder().addAllAdventureRankItemInfo(adventureRankItemInfos).setMyInfo(myinfo).build(); + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_BOSS_RANK_RESPONSE_VALUE,build,true); } /** * 发送结算奖励 - * @param type * @throws Exception */ - public void sendReward(int type) throws Exception { + public void sendReward() throws Exception { String title=SErrorCodeEerverConfig.getI18NMessage("adventure_boss_reward_title"); String content=SErrorCodeEerverConfig.getI18NMessage("adventure_boss_reward_txt"); Set> adventureBossRankInfo= RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.ADVENTRUEN_BOSS_RANK,"", 0,-1); @@ -444,7 +583,7 @@ public class CombatLogic { String value = item.getValue(); int uid = Integer.parseInt(value); User user = UserManager.getUser(uid); - String rewardByRank = getRewardByRank(rank++, type); + String rewardByRank = getRewardByRank(rank++); if("".equals(rewardByRank)){ break; } @@ -452,7 +591,7 @@ public class CombatLogic { } } - public String getRewardByRank(int rank,int type){ + public String getRewardByRank(int rank){ Map config = SAdventureReward.getAdventureRewardMap(); for(SAdventureReward sAdventureReward : config.values()){ int minRank = sAdventureReward.getMinRank(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index cc8f6b15a..fb56389fb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -4,6 +4,7 @@ import com.ljsd.jieling.config.SMonsterConfig; import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.handler.map.TemporaryItems; import com.ljsd.jieling.logic.dao.*; +import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.protocols.CommonProto; import java.util.ArrayList; @@ -199,4 +200,16 @@ public class CBean2Proto { .setLeftStep(leftStep) .build(); } + + public static CommonProto.AdventureRankItemInfo getAdventureRankItemInfo(int uid, User user, int hurtNum, int rank){ + PlayerManager playerInfoManager = user.getPlayerInfoManager(); + return CommonProto.AdventureRankItemInfo.newBuilder() + .setUid(uid) + .setLevel(playerInfoManager.getLevel()) + .setName(playerInfoManager.getNickName()) + .setHurt(hurtNum) + .setHead(0) + .setRank(rank) + .build(); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index 54e08ecb5..0bcc66227 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -115,11 +115,9 @@ public class ItemUtil { } /** - * 掉落走邮件 * @param user * @param dropGroupIds * @param dropRatio - * @param isMapping * @return * @throws Exception */ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java index e76076465..c1edf5575 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java @@ -30,6 +30,31 @@ public class MonsterUtil { return map; } + public static Map> getMonsterByGroup(int groupId, Map> hps){ + SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(groupId); + int[][] groupIds = sMonsterGroup.getContents(); + Map> map = new ConcurrentHashMap<>(); + Map monsterMap = SMonsterConfig.getMonsterMap(); + for (int i = 0; i < groupIds.length; i++) { + int[] monsterIds = groupIds[i]; + List monsterList = new ArrayList<>(); + List hpInfo = hps.get(i); + if(hpInfo!=null && !hpInfo.isEmpty()){ + int index=0; + for (int monsterId : monsterIds) { + SMonsterConfig sMonsterConfig = SMonsterConfig.getsMonsterConfigMap().get(monsterId); + monsterList.add(CBean2Proto.getMonster(sMonsterConfig,hpInfo.get(index))); + } + }else{ + for (int monsterId : monsterIds) { + monsterList.add(monsterMap.get(monsterId)); + } + } + map.put(i,monsterList); + } + return map; + } + public static Map> getMonsterHpByGroup(int groupId){ SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(groupId);