diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index 7908c1c5a..4cb3d5fa9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -343,8 +343,13 @@ public interface BIReason { int QIMENDUNJIA_DRAW = 1103;//奇门遁甲 int QIMENDUNJIA_DRAW_CONSUME = 1104;//奇门遁甲消耗 + int SIXIANG_UP_COST=1105;//四象心法强化消耗 + + int SIXIANG_UP_STAR_COST=1106;//四象心法进阶消耗 int FOUR_CHALLENGE_FIRST = 1201;//四灵试炼首通 int FOUR_CHALLENGE_SWEEP = 1202;//四灵试炼扫荡 + + } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index e5f9173d2..ec591291c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -175,10 +175,14 @@ public class GetPlayerInfoHandler extends BaseHandler{ user.getPlayerInfoManager().getMonthCard().put(Global.LMONTHCARDID, (int) (System.currentTimeMillis() / 1000)); Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.RECHARGE_BUY.getType(),Global.LMONTHCARDID)); } +<<<<<<< Updated upstream // 四灵试炼初始化 FourChallengeLogic.getInstance().firstGetTimes(user); +======= + List sixiangxinfaInfos = getSixiangxinfaInfos(heroManager); +>>>>>>> Stashed changes int randomCount =SLotterySpecialConfig.getLotteryListByDifferentType(7).iterator().next().getCount()- user.getHeroManager().getRandomPoolByType().getOrDefault(11,new HashMap<>()).getOrDefault(7,0); StoreLogic.reloadStoreInfo(user,7);//重载功能商店 @@ -224,6 +228,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ .setDailyredpack(playerInfoManager.getDailyWelfareRedPacket()) .setRandomCount(randomCount) .addAllDrawTimes(CBean2Proto.getRandomTypeNums(user)) + .addAllSixiangInfos(sixiangxinfaInfos) .addAllHelpFightList(CBean2Proto.getHelpFightList(user)) .build(); ReportUtil.onReportEvent(user, ReportEventEnum.APP_LOGIN.getType()); @@ -246,6 +251,31 @@ public class GetPlayerInfoHandler extends BaseHandler{ } } + private List getSixiangxinfaInfos(HeroManager heroManager) { + Map sixiangDataMap = heroManager.getSixiangDataMap(); + List sixiangxinfaInfos = new ArrayList<>(sixiangDataMap.size()); + for (Map.Entry integerMapEntry : sixiangDataMap.entrySet()) { + Integer key = integerMapEntry.getKey(); + SixiangProfessionInfo value = integerMapEntry.getValue(); + List sixiangxinfaPropertyInfos = new ArrayList<>(value.propertyMap.size()); + for (Map.Entry integerIntegerEntry : value.propertyMap.entrySet()) { + CommonProto.SixiangxinfaPropertyInfo sixiangxinfaPropertyInfo = CommonProto.SixiangxinfaPropertyInfo + .newBuilder() + .setPropertyId(integerIntegerEntry.getKey()) + .setPropertyNum(integerIntegerEntry.getValue()) + .build(); + sixiangxinfaPropertyInfos.add(sixiangxinfaPropertyInfo); + } + CommonProto.SixiangxinfaInfo sixiangxinfaInfo = CommonProto.SixiangxinfaInfo.newBuilder() + .setProfessionId(key) + .setLevel(value.level) + .addAllPropertyInfoList(sixiangxinfaPropertyInfos) + .build(); + sixiangxinfaInfos.add(sixiangxinfaInfo); + } + return sixiangxinfaInfos; + } + /** * 初始化英雄星级map(针对老号) * @param user diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/SixiangUpRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/SixiangUpRequestHandler.java new file mode 100644 index 000000000..c21859a33 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/SixiangUpRequestHandler.java @@ -0,0 +1,96 @@ +package com.ljsd.jieling.handler.hero; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.SixiangProfessionInfo; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SFourQuadrantConfig; +import config.SXiuXian; +import manager.STableManager; +import org.springframework.stereotype.Component; +import rpc.protocols.CommonProto; +import rpc.protocols.HeroInfoProto; +import rpc.protocols.MessageTypeProto; + +import java.util.*; + +@Component +public class SixiangUpRequestHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.SIXIANG_UP_REQUEST; + } + + //四象心法强化消息 + @Override + public void processWithProto(ISession session, HeroInfoProto.SixiangUpRequest proto) throws Exception { + int professionId=proto.getProfessionId();//职业id + int uid = session.getUid(); + User user = UserManager.getUser(uid); + SixiangProfessionInfo professionInfo = user.getHeroManager().getSixiangDataMap().get(professionId); + int professionLv=professionInfo==null?0:professionInfo.level; + SFourQuadrantConfig fourConfig=SFourQuadrantConfig.configByStrtMap.get(professionLv); + + int[][]costArr=fourConfig.getLvupCost(); + boolean costResult = ItemUtil.itemCost(user,costArr, BIReason.SIXIANG_UP_COST,professionId); + if (costResult) { + if (professionInfo==null) { + professionInfo=new SixiangProfessionInfo(); + professionInfo.level=0; + professionInfo.propertyMap = new HashMap<>(); + for (int i=0;i_randomList=new ArrayList<>(); + for (int i=0;ilimit[1]){ + professionInfo.propertyMap.put(limit[0],limit[1]); + } + } + user.getHeroManager().putSixiangDataMap(professionId,professionInfo); + List _list=new ArrayList<>(); + for (Map.Entry dic : professionInfo.propertyMap.entrySet()) { + CommonProto.SixiangxinfaPropertyInfo propertyInfo= CommonProto.SixiangxinfaPropertyInfo.newBuilder() + .setPropertyId(dic.getKey()) + .setPropertyNum(dic.getValue()) + .build(); + _list.add(propertyInfo); + } + LOGGER.info("属性值:{}",professionInfo.propertyMap.get(1)); + HeroInfoProto.SixiangUpResponse response=HeroInfoProto.SixiangUpResponse.newBuilder() + .addAllInfoList(_list) + .build(); + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.SIXIANG_UP_RESPONSE_VALUE,response,true); + }else{ + LOGGER.error("四象心法强化材料不足"); + throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF); + } + + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/SixiangUpStarRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/SixiangUpStarRequestHandler.java new file mode 100644 index 000000000..775eea607 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/SixiangUpStarRequestHandler.java @@ -0,0 +1,106 @@ +package com.ljsd.jieling.handler.hero; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.SixiangProfessionInfo; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.fight.eventhandler.IFightEventProcesor; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SFourQuadrantConfig; +import config.SXiuXian; +import manager.STableManager; +import org.springframework.stereotype.Component; +import rpc.protocols.CommonProto; +import rpc.protocols.HeroInfoProto; +import rpc.protocols.MessageTypeProto; + +import java.util.*; + +@Component +public class SixiangUpStarRequestHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.SIXIANG_UP_STAR_REQUEST; + } + + //四象心法进阶消息 + @Override + public void processWithProto(ISession session, HeroInfoProto.SixiangUpRequest proto) throws Exception { + int professionId=proto.getProfessionId();//职业id + int uid = session.getUid(); + User user = UserManager.getUser(uid); + SixiangProfessionInfo professionInfo = user.getHeroManager().getSixiangDataMap().get(professionId); + SFourQuadrantConfig fourConfig=SFourQuadrantConfig.configByStrtMap.get(professionInfo.level); +// if (CheckUpStar(user,professionInfo)) { +// +// }else{ +// LOGGER.error("四象心法进阶条件不满足"); +// throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF); +// } + int[][]costArr=fourConfig.getRankupCost(); + boolean costResult = ItemUtil.itemCost(user,costArr, BIReason.SIXIANG_UP_STAR_COST,professionId); + if (costResult) { + professionInfo.level++; + user.getHeroManager().putSixiangDataMap(professionId,professionInfo); + ///进阶成功刷进阶额外加成属性 + user.getHeroManager().putSixiangPropUpMap(professionId,CalUpStarPropAdd( professionInfo.level)); + List _list=new ArrayList<>(); + for (Map.Entry dic : professionInfo.propertyMap.entrySet()) { + CommonProto.SixiangxinfaPropertyInfo propertyInfo= CommonProto.SixiangxinfaPropertyInfo.newBuilder() + .setPropertyId(dic.getKey()) + .setPropertyNum(dic.getValue()) + .build(); + _list.add(propertyInfo); + } + HeroInfoProto.SixiangUpStarResponse response=HeroInfoProto.SixiangUpStarResponse.newBuilder() + .setStarLv(professionInfo.level) + .addAllInfoList(_list) + .build(); + MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.SIXIANG_UP_STAR_RESPONSE_VALUE,response,true); + }else { + LOGGER.error("四象心法进阶材料不足"); + throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF); + } + } + + //检测当前职业是否可以进阶 + public boolean CheckUpStar(User user,SixiangProfessionInfo _professionInfo){ + if (_professionInfo==null)return false; + SFourQuadrantConfig nextFourConfig=SFourQuadrantConfig.configByStrtMap.get(_professionInfo.level+1); + if (nextFourConfig==null)return false; + int xiuxianLv=user.getHeroManager().getPracticeLevel();//当前修仙等级 + SXiuXian xiuXian = STableManager.getConfig(SXiuXian.class).get(nextFourConfig.getXiuxianLimit()); + if (xiuxianLv CalUpStarPropAdd(int _level){ + MappropMap=new HashMap<>(); + for (int i=0;i<_level;i++){ + SFourQuadrantConfig fourConfig=SFourQuadrantConfig.configByStrtMap.get(i); + int[][]propAddArr=fourConfig.getPropStar(); + for (int[] ints : propAddArr) { + if (propMap.containsKey(ints[0])){ + int addPropVle=propMap.get(ints[0])+ints[1]; + propMap.put(ints[0],addPropVle); + }else { + propMap.put(ints[0],ints[1]); + } + } + } + return propMap; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java index 09890c313..dd36aacdf 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java @@ -91,6 +91,26 @@ public class HeroManager extends MongoBase { */ private Map> wishCountByStar = new HashMap<>(); + /** + * 四象心法数据 + * key: 职业类型 value:职业相关数据 + */ + private Map sixiangDataMap = new HashMap<>(); + + public Map getSixiangDataMap() { + return sixiangDataMap; + } + + /** + * 四象心法进阶额外属性加成 + * key: 职业类型 value:< key: 属性类型 value: 属性加成值 > + */ + private Map> sixiangPropUpMap = new HashMap<>(); + + public Map> getSixiangPropUpMap() { + return sixiangPropUpMap; + } + /** * 心愿可以选择的英雄列表 */ @@ -128,6 +148,17 @@ public class HeroManager extends MongoBase { updateString("wishCountByStar."+type, starMap); } + public void putSixiangDataMap(int type,SixiangProfessionInfo professionData) { + sixiangDataMap.put(type,professionData); + updateString("sixiangDataMap."+type, professionData); + } + + public void putSixiangPropUpMap(int professionId,Map _propMap) { + sixiangPropUpMap.put(professionId,_propMap); + updateString("sixiangPropUpMap."+professionId, _propMap); + } + + public void updateRandCount(int type, int count){ updateString("totalCount." + type, count); totalCount.put(type,count); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SixiangProfessionInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SixiangProfessionInfo.java new file mode 100644 index 000000000..7727464aa --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SixiangProfessionInfo.java @@ -0,0 +1,9 @@ +package com.ljsd.jieling.logic.dao; + +import java.util.Map; + +public class SixiangProfessionInfo { + public int level;//四象心法职业进阶等级 + public MappropertyMap;//四象心法属性数据 + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 920d6f8bb..72b869805 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -32,6 +32,7 @@ import com.ljsd.jieling.logic.dao.gm.ArenaOfUser; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.expedition.ExpeditionLogic; import com.ljsd.jieling.logic.fight.CombatLogic; +import com.ljsd.jieling.logic.fight.eventhandler.IFightEventProcesor; import com.ljsd.jieling.logic.fight.passiveSkillCal.PassiveskillCalEnum; import com.ljsd.jieling.logic.help.HelpHero; import com.ljsd.jieling.logic.help.HelpHeroLogic; @@ -57,6 +58,7 @@ import util.MathUtils; import util.StringUtil; import util.TimeUtils; +import java.lang.reflect.Array; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -2294,6 +2296,21 @@ public class HeroLogic{ } combinedAttribute(SPlayerHeadIcon.getHeadIconMap().get(entry.getKey()).getUnlockProperty(),heroAllAttribute); } + //四象心法加成 + for(Map.Entry entry : user.getHeroManager().getSixiangDataMap().entrySet()){ + if (scHero.getProfession()!=entry.getKey()) { + continue; + } + MappropertyMap=entry.getValue().propertyMap; + int[][] propArr = ItemUtil.mapToArray(propertyMap); + combinedAttribute(propArr,heroAllAttribute); + if (user.getHeroManager().getSixiangPropUpMap().containsKey(entry.getKey())) { + MapupStarPropertyMap=user.getHeroManager().getSixiangPropUpMap().get(entry.getKey()); + int[][]upStarProp=ItemUtil.mapToArray(upStarPropertyMap); + combinedAttribute(upStarProp,heroAllAttribute); + } + } + //装备总战力评分 int equipForce=0; @@ -2741,7 +2758,9 @@ public class HeroLogic{ } force+=sEquipConfig.getScore(); } - return force + heroAllAttribute.get(HeroAttributeEnum.EquipForce.getPropertyId()); + long l = force + heroAllAttribute.get(HeroAttributeEnum.EquipForce.getPropertyId()); + LOGGER.info("战力::::::{}",l); + return l; } @@ -5160,4 +5179,5 @@ public class HeroLogic{ MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.PurpleMansionSealIndication_VALUE,build2,true); } + } diff --git a/serverlogic/src/main/resources/application.properties b/serverlogic/src/main/resources/application.properties index 9bc059a4e..545794780 100644 --- a/serverlogic/src/main/resources/application.properties +++ b/serverlogic/src/main/resources/application.properties @@ -1,5 +1,5 @@ #server info -server.id = 10161 +server.id = 10050 server.openTime = 20190101000101 server.num = 1 server.debug = true @@ -9,24 +9,24 @@ server.sendlog37 = true server.channel = test server.threads = 8 # redis config -# RedisݿĬΪ0 +# Redis���ݿ�������Ĭ��Ϊ0�� spring.redis.database=0 #spring.redis.database=2 -# Redisַ +# Redis��������ַ spring.redis.host=60.1.1.21 -# RedisӶ˿ +# Redis���������Ӷ˿� spring.redis.port=6379 -# Redis루ĬΪգ +# Redis�������������루Ĭ��Ϊ�գ� spring.redis.password= -# ӳʹøֵʾûƣ +# ���ӳ������������ʹ�ø�ֵ��ʾû�����ƣ� spring.redis.pool.max-active=8 -# ӳȴʱ䣨ʹøֵʾûƣ +# ���ӳ���������ȴ�ʱ�䣨ʹ�ø�ֵ��ʾû�����ƣ� spring.redis.pool.max-wait=-1 -# ӳе +# ���ӳ��е����������� spring.redis.pool.max-idle=8 -# ӳеС +# ���ӳ��е���С�������� spring.redis.pool.min-idle=0 -# ӳʱʱ䣨룩 +# ���ӳ�ʱʱ�䣨���룩 spring.redis.timeout=0 spring.redis.expireTime = -1 @@ -35,7 +35,7 @@ spring.redis.expireTime = -1 #spring.data.mongodb.uri = mongodb://mongouser:ysj#2017#ljsd@111.231.54.96:27017/ysj_wx_1 #spring.data.mongodb2.uri = mongodb://mongouser:ysj#2017#ljsd@111.231.54.96:27017/develop_ysj_wx_1 #mongodb2 develop -spring.data.mongodb.uri = mongodb://60.1.1.14:27017/jieling_10161 +spring.data.mongodb.uri = mongodb://60.1.1.14:27017/jieling_10050 spring.data.mongodbcore.uri = mongodb://60.1.1.14:27017/jl_core #spring.data.mongodb.uri = mongodb://60.1.1.14:27017/jieling_10212 mongodb.options.maxWaitTime = 120000 @@ -64,7 +64,7 @@ netty.allTimeout=35 #core -services.core.ip=60.1.1.163 +services.core.ip=60.1.1.50 services.core.port=7900 services.core.area=1000 services.core.id=1 diff --git a/tablemanager/src/main/java/config/SFourQuadrantConfig.java b/tablemanager/src/main/java/config/SFourQuadrantConfig.java new file mode 100644 index 000000000..0a98e64be --- /dev/null +++ b/tablemanager/src/main/java/config/SFourQuadrantConfig.java @@ -0,0 +1,100 @@ +package config; + +import manager.STableManager; +import manager.Table; +import rpc.protocols.CommonProto; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Table(name ="FourQuadrantConfig") +public class SFourQuadrantConfig implements BaseConfig { + + private int id; + + private int star; + + private int[][] propLimit; + private int[][] propLvup; + + private int[][] lvupCost; + + private int[][] rankupCost; + + private int[][] propStar; + + private int[][] propResonance; + + private int[] skill; + + private int randomTimes; + + private int rankupPercent; + + private int xiuxianLimit; + + public static Map sFourQuadrantConfigMap; + + public static Map configByStrtMap; + + + @Override + public void init() throws Exception { + configByStrtMap=new HashMap<>(); + sFourQuadrantConfigMap = STableManager.getConfig(SFourQuadrantConfig.class); + for (SFourQuadrantConfig value : sFourQuadrantConfigMap.values()) { + configByStrtMap.put(value.star,value); + } + } + + public int getId() { + return id; + } + + public int getStar() { + return star; + } + + public int[][] getPropLimit() { + return propLimit; + } + + public int[][] getPropLvup() { + return propLvup; + } + + public int[][] getLvupCost() { + return lvupCost; + } + + public int[][] getRankupCost() { + return rankupCost; + } + + public int[][] getPropStar() { + return propStar; + } + + public int[][] getPropResonance() { + return propResonance; + } + + public int[] getSkill() { + return skill; + } + + public int getRandomTimes() { + return randomTimes; + } + + public int getRankupPercent() { + return rankupPercent; + } + + public int getXiuxianLimit() { + return xiuxianLimit; + } +} + diff --git a/test/src/main/java/ExcelUtils.java b/test/src/main/java/ExcelUtils.java index ff901438b..01ad0da1a 100644 --- a/test/src/main/java/ExcelUtils.java +++ b/test/src/main/java/ExcelUtils.java @@ -8,7 +8,7 @@ import java.util.*; public class ExcelUtils { private static boolean isWrite = true; - private static String excelPath ="E:\\work\\data_execl\\master_en\\base_data\\"; //excel 文件 + private static String excelPath ="D:\\jieling_data\\master_zh_c\\base_data\\"; //excel 文件 // private static String excelPath ="D:/excel/0.94/data_execl/Map_data/"; //excel 文件 private static String path = "conf/server/"; private static Set oldFileNames = new HashSet<>();