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 63da11ea0..68213333c 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 @@ -324,17 +324,17 @@ public class CombatLogic { public void takeAdventureReward(ISession session,int type,int position) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); - CommonProto.Drop.Builder advetureReward=null; + Map adventureFastReward =null; if(type == 2){ - advetureReward = getAdventureReward(user, position); + adventureFastReward = getAdventureReward(user, position); }else{ - advetureReward = getAdventureFastReward(user,SGameSetting.getGameSetting().getAdventureFastBattle()); + adventureFastReward = getAdventureFastReward(user, SGameSetting.getGameSetting().getAdventureFastBattle()); } - FightInfoProto.TakeAventureRewardResponse build = FightInfoProto.TakeAventureRewardResponse.newBuilder().setDrop(advetureReward).build(); + FightInfoProto.TakeAventureRewardResponse build = FightInfoProto.TakeAventureRewardResponse.newBuilder().setDrop(adventureFastReward.get(1)).setRandomDrop(adventureFastReward.get(2)).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_REWARD_RESPONSE_VALUE,build,true); } - private CommonProto.Drop.Builder getAdventureReward(User user, int position) throws Exception { + private Map getAdventureReward(User user, int position) throws Exception { AdventureManager adventureManager = user.getAdventureManager(); CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); Map adventureStateInfoMap = adventureManager.getAdventureStateInfoMap(); @@ -342,6 +342,17 @@ public class CombatLogic { SGameSetting gameSetting = SGameSetting.getGameSetting(); int adventureRefresh = gameSetting.getAdventureRefresh(); int adventureOffline = gameSetting.getAdventureOffline(); + 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(); for(AdventureStateInfo adventureStateInfoTmp:adventureStateInfoMap.values()) { int positionTmp = adventureStateInfoTmp.getPosition(); if (position != -1 && positionTmp != position) { @@ -355,32 +366,58 @@ public class CombatLogic { 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); + ItemUtil.combineReward(new int[]{baseRewardGroup[adventureStateInfoTmp.getLevel()-1]}, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + int timesTemp =times; + while (timesTemp-->0){ + ItemUtil.combineReward(randomRewardGroup[adventureStateInfoTmp.getLevel()-1], 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + } } } - return dropBuilder; + ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + Map result = new HashMap<>(2); + result.put(1,baseBuilder.build()); + result.put(2,randomBuilder.build()); + return result; } - private CommonProto.Drop.Builder getAdventureFastReward(User user,int timeDuration) throws Exception { + private Map 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; + 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(); 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); + ItemUtil.combineReward(new int[]{baseRewardGroup[adventureStateInfoTmp.getLevel()-1]}, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + int timesTemp =times; + while (timesTemp-->0){ + ItemUtil.combineReward(randomRewardGroup[adventureStateInfoTmp.getLevel()-1], 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + } } } - return dropBuilder; + ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + Map result = new HashMap<>(2); + result.put(1,baseBuilder.build()); + result.put(2,randomBuilder.build()); + return result; } 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 0bcc66227..e9e81b1c6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -70,6 +70,17 @@ public class ItemUtil { addCard(user, cardMap, dropBuilder); addEquip(user, equipMap, dropBuilder); } + + public static void getactivityDropInfo(int[] dropGroupIds, float dropRatio, Map itemMap, Map cardMap, Map equipMap ,Map randomMap) throws Exception { + for (int dropGroupId : dropGroupIds) { + SRewardGroup sRewardGroup = SRewardGroup.getsRewardItemMap().get(dropGroupId); + if (sRewardGroup == null) { + continue; + } + selectDrop(sRewardGroup, itemMap, cardMap, equipMap, randomMap, dropRatio); + } + } + //掉落组概率 public static CommonProto.Drop.Builder drop(User user, Map dropGroupAndRatioMap) throws Exception { CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder(); @@ -115,7 +126,6 @@ public class ItemUtil { } /** - * @param user * @param dropGroupIds * @param dropRatio * @return @@ -136,6 +146,23 @@ public class ItemUtil { return getReward(itemMap,cardMap,equipMap,randomMap); } + public static void combineReward(int[] dropGroupIds,float dropRatio, Map itemMap, Map cardMap, Map equipMap, Map randomMap){ + for (int dropGroupId :dropGroupIds){ + SRewardGroup sRewardGroup = SRewardGroup.getsRewardItemMap().get(dropGroupId); + if (sRewardGroup == null){ + continue; + } + selectDrop(sRewardGroup,itemMap,cardMap,equipMap,randomMap,dropRatio); + } + } + + public static void drop(User user,CommonProto.Drop.Builder dropBuilder,Map itemMap, Map cardMap, Map equipMap, Map randomMap) throws Exception { + useRandomItem(user, randomMap); + addItem(user, itemMap, dropBuilder); + addCard(user, cardMap, dropBuilder); + addEquip(user, equipMap, dropBuilder); + } + private static String getReward(Map itemMap,Map cardMap,Map equipMap, Map randomMap) { StringBuilder reward= new StringBuilder(); for (Map.Entry entry : itemMap.entrySet()){