英雄分解修改 提交

lvxinran 2020-07-29 20:11:06 +08:00
parent 4c3f272357
commit c525e3e429
4 changed files with 89 additions and 37 deletions

View File

@ -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<Integer, Map<Integer, Map<Integer, SCHeroRankUpConfig>>> scHeroRankUpConfigByShow;
private Map<Integer, Map<Integer, Map<Integer, SCHeroRankUpConfig>>> scHeroRankUpConfigByType;
private Map<Integer,Map<Integer, SHeroSacrifice>> sHeroSacrificeMap;
private Set<Integer> randomHeroIds;
private Map<Integer,Integer> randomPoolByType;
@ -69,6 +71,12 @@ public class HeroStaticConfig extends AbstractClassStaticConfig {
}
scHeroRankUpConfigByShow = result;
scHeroRankUpConfigByType = calc;
Map<Integer,Map<Integer, SHeroSacrifice>> sHeroSacrificeMapTemp = new HashMap<>();
Map<Integer, SHeroSacrifice> 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<Integer> getRandomHeroIds() {
return randomHeroIds;
}

View File

@ -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<Integer, Integer> baseItemMap = new HashMap<>();
Map<Integer, Integer> baseCardMap = new HashMap<>();
Map<Integer, Integer> baseEquipMap = new HashMap<>();
Map<Integer,Integer> 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);
}
/**

View File

@ -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<Integer,Integer> map){
int[][] itemArray = new int[map.size()][];
int i = 0 ;
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
itemArray[i] = new int[]{entry.getKey(),entry.getValue()};
i++;
}
return itemArray;
}
public static Map<Integer,Integer> arrayToMap(int[][] array){
Map<Integer,Integer> 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);

View File

@ -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;
}
}