diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/HeroStaticConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/HeroStaticConfig.java index 92b1a09b6..f2efa9f4b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/HeroStaticConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/HeroStaticConfig.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.config.clazzStaticCfg; import com.ljsd.jieling.core.GlobalsDef; import config.SCHeroRankUpConfig; +import config.SHeroSacrifice; import config.SLotterySetting; import manager.AbstractClassStaticConfig; import manager.STableManager; @@ -19,6 +20,7 @@ public class HeroStaticConfig extends AbstractClassStaticConfig { private Map>> scHeroRankUpConfigByShow; private Map>> scHeroRankUpConfigByType; + private Map> sHeroSacrificeMap; private Set randomHeroIds; private Map randomPoolByType; @@ -69,6 +71,12 @@ public class HeroStaticConfig extends AbstractClassStaticConfig { } scHeroRankUpConfigByShow = result; scHeroRankUpConfigByType = calc; + Map> sHeroSacrificeMapTemp = new HashMap<>(); + Map sHeroSacrificeConfig = STableManager.getConfig(SHeroSacrifice.class); + for(SHeroSacrifice sacrificeconfig:sHeroSacrificeConfig.values()){ + sHeroSacrificeMapTemp.computeIfAbsent(sacrificeconfig.getType(),n->new HashMap<>()).put(sacrificeconfig.getKey(),sacrificeconfig); + } + sHeroSacrificeMap = sHeroSacrificeMapTemp; } catch (Exception e) { LOGGER.error("SCHeroRankUpConfig init fail"); @@ -98,6 +106,10 @@ public class HeroStaticConfig extends AbstractClassStaticConfig { return scHeroRankUpConfigByType.get(type).get(heroInitStar); } + public SHeroSacrifice getsHeroSacrificeMap(int type,int param) { + return sHeroSacrificeMap.get(type).get(param); + } + public Set getRandomHeroIds() { return randomHeroIds; } 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 c01a1f086..7af213d71 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 @@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.item; import com.ljsd.jieling.chat.logic.ChatLogic; import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig; +import com.ljsd.jieling.config.clazzStaticCfg.HeroStaticConfig; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.globals.BIReason; @@ -367,7 +368,6 @@ public class ItemLogic { CommonProto.Drop.Builder baseBuilder = CommonProto.Drop.newBuilder(); User user = UserManager.getUser(uid); HeroManager heroManager = user.getHeroManager(); - StringBuilder reward = new StringBuilder(); ErrorCode erroMags = checkHeroResolve(heroIdsList,user); if (null!=erroMags){ throw new ErrorCodeException(erroMags); @@ -377,46 +377,25 @@ public class ItemLogic { //1裸角色卡(没有突破过的角色卡)熔炼后返还的材料=当前等级返还升级材料+item表返还材料 //2有过突破的卡 =当前等级返还升级材料+突破表返还材料 Map baseItemMap = new HashMap<>(); - Map baseCardMap = new HashMap<>(); - Map baseEquipMap = new HashMap<>(); - Map baseRandomMap = new HashMap<>(); int rankUpReturnPercent= SSpecialConfig.getIntegerValue(SSpecialConfig.HERO_SACRIFICE_PERCENT); for (String heroId : heroIdsList) { Hero hero = heroManager.getHeroMap().get(heroId); heroManager.removeHero(uid,heroId); int[][] sumConsume = SHeroLevlConfig.getsHeroLevlConfigMap().get(hero.getLevel()).getSumConsume(); - - ItemUtil.combineReward(itemReturnPercent(sumConsume,rankUpReturnPercent),baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); - int breakId = hero.getBreakId(); - int starBreakId = hero.getStarBreakId(); - if(breakId!=0 || starBreakId!=0){ - SCHeroRankUpConfig scHeroRankUpConfig = STableManager.getConfig(SCHeroRankUpConfig.class).get(breakId); - if(scHeroRankUpConfig!=null){ - int[][] levelUpReturn = scHeroRankUpConfig.getSumConsume(); - ItemUtil.combineReward(itemReturnPercent(levelUpReturn,rankUpReturnPercent),baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); - } - scHeroRankUpConfig = STableManager.getConfig(SCHeroRankUpConfig.class).get(starBreakId); - if(scHeroRankUpConfig!=null){ - int[][] levelUpReturn = scHeroRankUpConfig.getSumConsume(); - ItemUtil.combineReward(itemReturnPercent(levelUpReturn,rankUpReturnPercent),baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); - } - - continue; + SHeroSacrifice starSHeroSacrifice = STableManager.getFigureConfig(HeroStaticConfig.class).getsHeroSacrificeMap(1, hero.getStar()); + SHeroSacrifice breakSHeroSacrifice = STableManager.getFigureConfig(HeroStaticConfig.class).getsHeroSacrificeMap(2, hero.getBreakId()); + for(int[] item:sumConsume){ + baseItemMap.put(item[0],baseItemMap.getOrDefault(item[0],0)+item[1]); } - SItem sItem = SItem.getsItemMap().get(hero.getTemplateId()); - - if(null==filterItem){ - if (reward.length() == 0) { - reward = new StringBuilder(sItem.getResolveReward()); - } else { - reward.append("#").append(sItem.getResolveReward()); - } + for(int[] item:starSHeroSacrifice.getValue()){ + baseItemMap.put(item[0],baseItemMap.getOrDefault(item[0],0)+item[1]); + } + for(int[] item:breakSHeroSacrifice.getValue()){ + baseItemMap.put(item[0],baseItemMap.getOrDefault(item[0],0)+item[1]); } - } - ItemUtil.combineReward(user,false, StringUtil.parseFiledInt(reward.toString()),1,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,-1); - + int[][] itemArray = ItemUtil.mapToArray(baseItemMap); int reson = BIReason.DECOMPOS_HERO_REWARD; if(null!=filterItem){ reson= BIReason.UPHERO_DECOMPOS_HERO_REWARD; @@ -428,10 +407,7 @@ public class ItemLogic { }else { user.getUserMissionManager().onGameEvent(user,GameEvent.DESPOSE_HERO,heroIdsList.size()); } - - - ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap, reson); - return baseBuilder; + return ItemUtil.drop(user,itemReturnPercent(itemArray,rankUpReturnPercent),reson); } /** 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 3065f7f87..085d72f22 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -672,7 +672,7 @@ public class ItemUtil { } playerInfoManager.setExp(curExp); if (playerInfoManager.getLevel() > oldLevel) { - ReportUtil.onReportEvent(user, ReportEventEnum.LEVEL_UP.getType(),1,playerInfoManager.getLevel()); + ReportUtil.onReportEvent(user, ReportEventEnum.LEVEL_UP.getType(),oldLevel,playerInfoManager.getLevel()-oldLevel,playerInfoManager.getLevel()); user.getUserMissionManager().onGameEvent(user, GameEvent.USER_LEVELUP,oldLevel+1,playerInfoManager.getLevel()); } @@ -1463,6 +1463,27 @@ public class ItemUtil { } return sourceNum; } + public static int[][] mapToArray(Map map){ + + int[][] itemArray = new int[map.size()][]; + int i = 0 ; + for(Map.Entry entry:map.entrySet()){ + itemArray[i] = new int[]{entry.getKey(),entry.getValue()}; + i++; + } + return itemArray; + + } + public static Map arrayToMap(int[][] array){ + + Map map = new HashMap<>(array.length); + for(int[] itemArray:array ){ + map.put(itemArray[0],map.getOrDefault(itemArray[0],0)+itemArray[1]); + } + return map; + + } + private static int parseTheValueByPrivilegeMap(User user,int sourceNum,int privigeId){ int privigeValue = PlayerLogic.getInstance().getMaxCountByPrivilegeType(user,privigeId); diff --git a/tablemanager/src/main/java/config/SHeroSacrifice.java b/tablemanager/src/main/java/config/SHeroSacrifice.java new file mode 100644 index 000000000..dab45d4a8 --- /dev/null +++ b/tablemanager/src/main/java/config/SHeroSacrifice.java @@ -0,0 +1,43 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.Map; + +@Table(name ="HeroSacrifice") +public class SHeroSacrifice implements BaseConfig { + + private int id; + + private int type; + + private int key; + + private int[][] value; + + + @Override + public void init() throws Exception { + + } + + + public int getId() { + return id; + } + + public int getType() { + return type; + } + + public int getKey() { + return key; + } + + public int[][] getValue() { + return value; + } + + +} \ No newline at end of file