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 2f1404354..979521f11 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 @@ -41,7 +41,6 @@ import util.StringUtil; import util.TimeUtils; import java.util.*; -import java.util.concurrent.TimeUnit; public class CombatLogic { private static final Logger LOGGER = LoggerFactory.getLogger(CombatLogic.class); @@ -221,77 +220,17 @@ public class CombatLogic { } public Map getNewAdventureReward(User user,boolean sendMail) throws Exception { - MainLevelManager mainLevelManager = user.getMainLevelManager(); - Map fightStateInfo = user.getMainLevelManager().getFightStateInfo(); - SGameSetting gameSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting(); - int adventureRefresh = gameSetting.getAdventureRefresh(); - int adventureOffline = gameSetting.getAdventureOffline()*60*60/adventureRefresh; - Map baseItemMap = new HashMap<>(); - Map baseCardMap = new HashMap<>(); - Map baseEquipMap = new HashMap<>(); - Map baseRandomMap = new HashMap<>(); - - Map randomItemMap = new HashMap<>(); - Map randomCardMap = new HashMap<>(); - Map randomEquipMap = new HashMap<>(); - Map randomRandomMap = new HashMap<>(); - CommonProto.Drop.Builder baseBuilder = CommonProto.Drop.newBuilder(); - CommonProto.Drop.Builder randomBuilder = CommonProto.Drop.newBuilder(); - int takeTimes= 0; - for(Map.Entry fightStateInfoItem : fightStateInfo.entrySet()){ - Integer fightId = fightStateInfoItem.getKey(); - Integer times = fightStateInfoItem.getValue(); - SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); - int[] randomRewardMin = sMainLevelConfig.getRandomRewardMin(); - ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); - int timesTemp =times; - while (timesTemp-->0){ - ItemUtil.combineReward(user,sMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); - } - takeTimes+=times; - } - int fightId = mainLevelManager.getFightId(); - SMainLevelConfig targetMainLevelConfig = SMainLevelConfig.config.get(fightId); - int lastTime = mainLevelManager.getLastTime(); - int now = (int) (System.currentTimeMillis() / 1000); - int times = (now - lastTime)/STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().getAdventureRefresh(); - int maxTimes = adventureOffline - takeTimes; - int lastTimeTakes=0; - boolean reset = maxTimes0){ - times = times > maxTimes?maxTimes:times; - int[] randomRewardMin = targetMainLevelConfig.getRandomRewardMin(); - ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); - int timesTemp =times; - while (timesTemp-->0){ - ItemUtil.combineReward(user,targetMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); - } - lastTimeTakes=times; - } - if(sendMail){ - if(!baseItemMap.isEmpty()){ - int vipLevel = user.getPlayerInfoManager().getVipLevel(); - String title = SErrorCodeEerverConfig.getI18NMessage("adventuren_reward_of_viplevel_title"); - String content = SErrorCodeEerverConfig.getI18NMessage("adventuren_reward_of_viplevel_content",new Object[]{vipLevel}); - String reward = ItemUtil.getReward(baseItemMap, baseCardMap, baseEquipMap, baseRandomMap); - String randomReward = ItemUtil.getReward(randomItemMap, randomCardMap, randomEquipMap, randomRandomMap); - if(randomReward.length()!=0){ - reward = reward + "|" + randomReward; - } - MailLogic.getInstance().sendMail(user.getId(),title,content,reward,now,Global.MAIL_EFFECTIVE_TIME); - } - mainLevelManager.afterTakeStateReward(true,0); - return null; - } - mainLevelManager.afterTakeStateReward(reset,lastTimeTakes); - ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,BIReason.ADVENTURE_BASE_REWARD); - ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap,BIReason.ADVENTURE_RANDOM_REWARDD); + GetNewAdventureData getNewAdventureData = new GetNewAdventureData(user, sendMail,false).invoke(); + if (getNewAdventureData.is()) return null; + CommonProto.Drop.Builder baseBuilder = getNewAdventureData.getBaseBuilder(); + CommonProto.Drop.Builder randomBuilder = getNewAdventureData.getRandomBuilder(); Map result = new HashMap<>(2); result.put(1,baseBuilder.build()); result.put(2,randomBuilder.build()); user.getUserMissionManager().onGameEvent(user,GameEvent.ADVENTURE_TAKEREWARD,1); return result; } + private Map getNewAdventureFastReward(User user,int timeDuration) throws Exception { MainLevelManager mainLevelManager = user.getMainLevelManager(); SGameSetting gameSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting(); @@ -907,4 +846,111 @@ public class CombatLogic { return result; } + public static class GetNewAdventureData { + private boolean myResult; + private User user; + private boolean sendMail; + private boolean viewBaseReward; + private CommonProto.Drop.Builder baseBuilder; + private CommonProto.Drop.Builder randomBuilder; + private String rewardStr; + + public GetNewAdventureData(User user, boolean sendMail,boolean viewBaseReward) { + this.user = user; + this.sendMail = sendMail; + this.viewBaseReward = viewBaseReward; + } + + public boolean is() { + return myResult; + } + + public CommonProto.Drop.Builder getBaseBuilder() { + return baseBuilder; + } + + public CommonProto.Drop.Builder getRandomBuilder() { + return randomBuilder; + } + + public String getRewardStr() { + return rewardStr; + } + + public GetNewAdventureData invoke() throws Exception { + MainLevelManager mainLevelManager = user.getMainLevelManager(); + Map fightStateInfo = user.getMainLevelManager().getFightStateInfo(); + SGameSetting gameSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting(); + int adventureRefresh = gameSetting.getAdventureRefresh(); + int adventureOffline = gameSetting.getAdventureOffline()*60*60/adventureRefresh; + Map baseItemMap = new HashMap<>(); + Map baseCardMap = new HashMap<>(); + Map baseEquipMap = new HashMap<>(); + Map baseRandomMap = new HashMap<>(); + + Map randomItemMap = new HashMap<>(); + Map randomCardMap = new HashMap<>(); + Map randomEquipMap = new HashMap<>(); + Map randomRandomMap = new HashMap<>(); + baseBuilder = CommonProto.Drop.newBuilder(); + randomBuilder = CommonProto.Drop.newBuilder(); + int takeTimes= 0; + for(Map.Entry fightStateInfoItem : fightStateInfo.entrySet()){ + Integer fightId = fightStateInfoItem.getKey(); + Integer times = fightStateInfoItem.getValue(); + SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); + int[] randomRewardMin = sMainLevelConfig.getRandomRewardMin(); + ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + int timesTemp =times; + while (!viewBaseReward&×Temp-->0){ + ItemUtil.combineReward(user,sMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + } + takeTimes+=times; + } + int fightId = mainLevelManager.getFightId(); + SMainLevelConfig targetMainLevelConfig = SMainLevelConfig.config.get(fightId); + int lastTime = mainLevelManager.getLastTime(); + int now = (int) (System.currentTimeMillis() / 1000); + int times = (now - lastTime)/STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().getAdventureRefresh(); + int maxTimes = adventureOffline - takeTimes; + int lastTimeTakes=0; + boolean reset = maxTimes0){ + times = times > maxTimes?maxTimes:times; + int[] randomRewardMin = targetMainLevelConfig.getRandomRewardMin(); + ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + int timesTemp =times; + while (!viewBaseReward&×Temp-->0){ + ItemUtil.combineReward(user,targetMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + } + lastTimeTakes=times; + } + if(viewBaseReward){ + myResult = true; + rewardStr = ItemUtil.getReward(baseItemMap, baseCardMap, baseEquipMap, baseRandomMap); + return this; + } + if(sendMail){ + if(!baseItemMap.isEmpty()){ + int vipLevel = user.getPlayerInfoManager().getVipLevel(); + String title = SErrorCodeEerverConfig.getI18NMessage("adventuren_reward_of_viplevel_title"); + String content = SErrorCodeEerverConfig.getI18NMessage("adventuren_reward_of_viplevel_content",new Object[]{vipLevel}); + String reward = ItemUtil.getReward(baseItemMap, baseCardMap, baseEquipMap, baseRandomMap); + String randomReward = ItemUtil.getReward(randomItemMap, randomCardMap, randomEquipMap, randomRandomMap); + if(randomReward.length()!=0){ + reward = reward + "|" + randomReward; + } + MailLogic.getInstance().sendMail(user.getId(),title,content,reward,now, Global.MAIL_EFFECTIVE_TIME); + } + mainLevelManager.afterTakeStateReward(true,0); + myResult = true; + return this; + } + mainLevelManager.afterTakeStateReward(reset,lastTimeTakes); + ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap, BIReason.ADVENTURE_BASE_REWARD); + ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap,BIReason.ADVENTURE_RANDOM_REWARDD); + myResult = false; + return this; + } + } } 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 377e63ac8..cba6253e0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -12,6 +12,7 @@ import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.GuildInfo; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.protocols.*; import config.SMainLevelConfig; @@ -458,7 +459,7 @@ public class CBean2Proto { .build(); } - public static PlayerInfoProto.GetMainLevelInfoResponse getMainLevelInfoResponse( User user ){ + public static PlayerInfoProto.GetMainLevelInfoResponse getMainLevelInfoResponse( User user ) throws Exception { long nowMs = TimeUtils.now(); int now = (int)(nowMs/1000); MainLevelManager mainLevelManager = user.getMainLevelManager(); @@ -513,6 +514,10 @@ public class CBean2Proto { if(update){ mainLevelManager.directUpdateDb(); } + CombatLogic.GetNewAdventureData getNewAdventureData = new CombatLogic.GetNewAdventureData(user, false,true).invoke(); + if (!StringUtil.isEmpty(getNewAdventureData.getRewardStr())){ + builder.setReward(getNewAdventureData.getRewardStr()); + } return builder.build(); }