diff --git a/jieling-dbgen/Ldb.xml b/jieling-dbgen/Ldb.xml index 1ab667780..3f86350a2 100644 --- a/jieling-dbgen/Ldb.xml +++ b/jieling-dbgen/Ldb.xml @@ -1,14 +1,12 @@ - - - + @@ -25,8 +23,8 @@ - - 七日狂欢结束时间 + + 七日狂欢开始时间 幸运探宝奖池 高级幸运探宝奖池 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/WorldBossTreasureStaticConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/WorldBossTreasureStaticConfig.java index 01701a656..f2f123f6e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/WorldBossTreasureStaticConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/clazzStaticCfg/WorldBossTreasureStaticConfig.java @@ -23,7 +23,7 @@ public class WorldBossTreasureStaticConfig extends AbstractClassStaticConfig { Map> idsByPeriodsTmp = new HashMap<>(); config.forEach((id,item)->{ int[] activityIds = item.getActivityId(); - idsByPeriodsTmp.putIfAbsent(activityIds[0], new HashSet<>()); + idsByPeriodsTmp.putIfAbsent(activityIds[0], new LinkedHashSet<>()); Set ids = idsByPeriodsTmp.get(activityIds[0]); for(int i=1;i target = PropertyItem.class; if(equipId.getItemType() == GlobalItemType.JEWEL){ target = Jewel.class; + }else { + target = Equip.class; } String realJson = source.toJson(jsonWriterSettings); PropertyItem propertyItem = JSON.parseObject(realJson,target); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java index b4b24a30c..4236fcacc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoUtil.java @@ -1,9 +1,17 @@ package com.ljsd.jieling.db.mongo; -import com.google.gson.Gson; +import com.alibaba.fastjson.JSON; +import com.fasterxml.jackson.core.type.TypeReference; +import com.google.gson.*; +import com.google.gson.reflect.TypeToken; import com.ljsd.common.mogodb.LjsdMongoTemplate; +import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.util.ConfigurableApplicationContextManager; +import com.ljsd.jieling.util.InnerMessageUtil; +import com.ljsd.jieling.util.SysUtil; +import io.netty.util.internal.MathUtil; +import org.springframework.data.annotation.Transient; import util.MathUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,9 +19,14 @@ import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.PrintWriter; +import java.lang.reflect.Type; import java.net.UnknownHostException; -import java.util.List; -import java.util.Random; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class MongoUtil { @@ -40,8 +53,8 @@ public class MongoUtil { private MongoTemplate coreMongoTemplate; - public void init(){ - myMongoTemplate = ConfigurableApplicationContextManager.getBean(LjsdMongoTemplate.class); + public void init() { + myMongoTemplate = ConfigurableApplicationContextManager.getBean(LjsdMongoTemplate.class); coreMongoTemplate = (MongoTemplate) ConfigurableApplicationContextManager.getBean("coreMongoTemplate"); } @@ -53,11 +66,12 @@ public class MongoUtil { this.myMongoTemplate.lastUpdate(); } - public static LjsdMongoTemplate getLjsdMongoTemplate() throws UnknownHostException { - return MongoUtil.getInstence().getMyMongoTemplate(); + public static LjsdMongoTemplate getLjsdMongoTemplate() throws UnknownHostException { + return MongoUtil.getInstence().getMyMongoTemplate(); } - public List getRandomUsers(int size, int uid, int level) throws Exception { - if(size <= 0){ + + public List getRandomUsers(int size, int uid, int level) throws Exception { + if (size <= 0) { return null; } int randomLevel = MathUtils.random(5, 20); @@ -70,15 +84,16 @@ public class MongoUtil { criatira.andOperator(Criteria.where("id").nin(uid), Criteria.where("playerManager.level").gte(minLevel), Criteria.where("playerManager.level").lte(maxLevel), Criteria.where("playerManager.loginTime").gte(befor3Day));//不包含自己 - Query query = new Query(criatira).limit(size*2+1); + Query query = new Query(criatira).limit(size * 2 + 1); query.fields().include("playerManager"); - return this.myMongoTemplate.findAllByCondition(query, User.class) ; + return this.myMongoTemplate.findAllByCondition(query, User.class); } public static MongoTemplate getCoreMongoTemplate() throws UnknownHostException { return MongoUtil.getInstence().coreMongoTemplate; } + public static void main(String[] args) { try { LjsdMongoTemplate ljsdMongoTemplate = getLjsdMongoTemplate(); @@ -105,6 +120,113 @@ public class MongoUtil { } + public static void checkDb() { + Set set = OnlineUserManager.sessionMap.keySet(); + Integer[] integers = set.toArray(new Integer[0]); + Set ids = new HashSet<>(); + if (set.size() == 0) { + return; + } + Random random = new Random(); + for (int i = 0; i < 3; i++) { + int i1 = random.nextInt(set.size()); + if (i1 >= integers.length) { + continue; + } + ids.add(integers[i1]); + } + InnerMessageUtil.broadcastWithRandom(user -> { + int id = user.getId(); + User byId = MongoUtil.getInstence().getMyMongoTemplate().findById(User.getCollectionName(), user.getId(), User.class); + Gson gson = new GsonBuilder() + .addSerializationExclusionStrategy(new ExclusionStrategy() { + @Override + public boolean shouldSkipClass(Class arg0) { + return false; + } + + @Override + public boolean shouldSkipField(FieldAttributes arg0) { + Transient annotation = arg0.getAnnotation(Transient.class); + if (annotation != null) { + return true; + } + return false; + } + }).registerTypeAdapter(HashMap.class, new JsonSerializer() { + @Override + public JsonElement serialize(AbstractMap abstractMap, Type type, JsonSerializationContext jsonSerializationContext) { + TreeMap treeMap = new TreeMap<>(abstractMap); + JsonParser jp = new JsonParser(); + JsonElement je = jp.parse(String.valueOf(JSON.toJSON(treeMap))); + return je; + } + } + ).create(); + + + String s = gson.toJson(byId); + String s1 = gson.toJson(user);//内存 + + char v1[] = s.toCharArray(); + char v2[] = s1.toCharArray(); + int n = v2.length; + int m2 = v2.length; + int j = 0; + while (n-- != 0) { + if (v1[j] != v2[j]) { + System.out.println("args = [" + v1[j] + "][" + v2[j] + "]\r\n"); + break; + } + j++; + } + + int start = Math.max(0, j - 50); + int end = Math.min(j + 1, m2); + if (j != m2) { + File file1 = new File(SysUtil.getPath("conf/checkout_db" + id + ".txt")); + try (PrintWriter printWriter = new PrintWriter(new FileOutputStream(file1));) { + printWriter.print(s); + printWriter.flush(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + File file2 = new File(SysUtil.getPath("conf/checkout_mem" + id + ".txt")); + try (PrintWriter printWriter = new PrintWriter(new FileOutputStream(file2));) { + printWriter.print(s1); + printWriter.flush(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + File file3 = new File("conf/checkout_diff_start" + id + ".txt"); + String substring = s1.substring(start, end); + String dbstring = s.substring(start, end); + try (PrintWriter printWriter = new PrintWriter(new FileOutputStream(file3));) { + printWriter.print("mem\r\n" + substring); + printWriter.print("\r\n"); + printWriter.print("db\r\n" + dbstring); + printWriter.flush(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + LOGGER.error("定期检查数据库对象数据一致性 err" + byId.getId() + " \r\nmem_string \r\n" + substring + " \r\ndb_string \r\n" + dbstring); + } else { + LOGGER.info("定期检查数据库对象数据一致性 匹配" + byId.getId()); + } + JsonParser parser = new JsonParser(); + JsonObject obj = (JsonObject) parser.parse(s1); + JsonParser parser1 = new JsonParser(); + JsonObject obj1 = (JsonObject) parser1.parse(s); //也可以 不好排查 + if(obj.equals(obj1)){ + LOGGER.info(" 匹配"); + }else { + LOGGER.info(" not 匹配"); + } + + }, new LinkedList<>(ids), 2); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java index 6b7864348..d3e45b85b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/EndExpeditionBattleRequest.java @@ -264,7 +264,7 @@ public class EndExpeditionBattleRequest extends BaseHandler nextNodeId = ExpeditionLogic.getNextNodeId(user.getExpeditionManager().getSortid(),user.getExpeditionManager().getExpeditionNodeInfos().size()); - if(!nextNodeId.contains(nodeId)){ - throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点状态不正确")); - } +// //check node +// List nextNodeId = ExpeditionLogic.getNextNodeId(user.getExpeditionManager().getSortid(),user.getExpeditionManager().getExpeditionNodeInfos().size()); +// if(!nextNodeId.contains(nodeId)){ +// throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点状态不正确")); +// } SExpeditionNodeConfig sExpeditionNodeConfig = STableManager.getConfig(SExpeditionNodeConfig.class).get(nodeInfo.getType()); if (sExpeditionNodeConfig == null) { @@ -69,7 +69,7 @@ public class HeroNodeGetInfoRequestHandler extends BaseHandler heroMapTemp = user.getExpeditionManager().getHeroMapTemp(); + Map heroMapTemp = user.getExpeditionManager().getHeroMapTemp(nodeId); if(heroMapTemp.size()==0){ SExpeditionRecruitConfig sExpeditionRecruitConfig = STableManager.getConfig(SExpeditionRecruitConfig.class).get(sExpeditionNodeConfig.getPoolId()); if(sExpeditionRecruitConfig!=null) { @@ -86,12 +86,12 @@ public class HeroNodeGetInfoRequestHandler extends BaseHandler { CommonProto.ViewHeroInfo.Builder inner = CommonProto.ViewHeroInfo.newBuilder(); Map heroNotBufferAttribute = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, true, 0); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java index e020955af..17e5f4f89 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java @@ -65,12 +65,12 @@ public class HeroNodeRequestHandler extends BaseHandler equipMapTemp = expeditionManager.getEquipMapTemp(); @@ -98,8 +98,8 @@ public class HeroNodeRequestHandler extends BaseHandler(); _o_.activityMissionMap.forEach((_k_, _v_) -> this.activityMissionMap.put(_k_, new ActivityMission(_v_))); + this.senvenStartTime = _o_.senvenStartTime; this.luckWheel = new LuckWheelMission(_o_.luckWheel); this.luckWheelAdvance = new LuckWheelMission(_o_.luckWheelAdvance); } @@ -35,6 +36,9 @@ public final class ActivityManager extends MongoBase { return this.activityMissionMapLog; } + public long getSenvenStartTime() { // 七日狂欢开始时间 + return this.senvenStartTime; + } public com.ljsd.jieling.jbean.LuckWheelMission getLuckWheel() { // 幸运探宝奖池 return this.luckWheel; @@ -44,17 +48,11 @@ public final class ActivityManager extends MongoBase { return this.luckWheelAdvance; } - - public void setSenvenStartTime(long senvenStartTime) { - updateString("senvenStartTime",senvenStartTime); - this.senvenStartTime = senvenStartTime; + public void setSenvenStartTime(long senvenstarttime) { // 七日狂欢开始时间 + updateString("senvenStartTime",senvenstarttime); + this.senvenStartTime = senvenstarttime; } - public long getSenvenStartTime() { - return senvenStartTime; - } - - public void setLuckWheel(LuckWheelMission luckwheel) { // 幸运探宝奖池 updateString("luckWheel",luckwheel); luckwheel.init(getRootId(),getMongoKey()+ ".luckWheel"); @@ -73,6 +71,7 @@ public final class ActivityManager extends MongoBase { StringBuilder _sb_ = new StringBuilder(super.toString()); _sb_.append("=("); _sb_.append(this.activityMissionMap).append(","); + _sb_.append(this.senvenStartTime).append(","); _sb_.append(this.luckWheel).append(","); _sb_.append(this.luckWheelAdvance).append(","); _sb_.append(")"); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_checkdb.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_checkdb.java new file mode 100644 index 000000000..be920542c --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_checkdb.java @@ -0,0 +1,36 @@ +package com.ljsd.jieling.kefu; + +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.thread.task.MinuteTask; +import com.ljsd.jieling.util.InnerMessageUtil; +import com.ljsd.jieling.util.SysUtil; +import org.springframework.data.annotation.Transient; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.PrintWriter; +import java.util.Collections; +import java.util.Random; +import java.util.Set; + +//checkdb +public class Cmd_checkdb extends GmAbstract { + @Override + public boolean exec(String[] args) throws Exception { + +// for (int i = 0; i <150 ; i++) { +// String key = RedisKey.getKey(RedisKey.FORCE_RANK, "", false); +// RedisUtil.getInstence().zsetAddOne(key, String.valueOf(10000+i), 10000+i); +// } + + MongoUtil.checkDb(); + return true; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_fix.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_fix.java new file mode 100644 index 000000000..c2472cef6 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_fix.java @@ -0,0 +1,24 @@ +package com.ljsd.jieling.kefu; + +import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.logic.dao.ExpeditionManager; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; + +/** + * Description: 热修复玩家信息 分发到玩家线程 + * + * //role_fix 10043343 + * CreateDate: 2019/9/26 11:48 + */ +public class Cmd_role_fix extends GmRoleAbstract { + @Override + public boolean exec(String[] args) throws Exception { + + User user = UserManager.getUser(10043385); + user.getExpeditionManager().setPassTimes(-1); + //mongo + MongoUtil.getInstence().lastUpdate(); + return true; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_gm.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_gm.java index 061be96db..8a91d1efa 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_gm.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_gm.java @@ -1,51 +1,478 @@ package com.ljsd.jieling.kefu; import com.google.gson.Gson; +import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig; +import com.ljsd.jieling.config.clazzStaticCfg.SArenaRobotStaticConfig; +import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.core.VipPrivilegeType; -import com.ljsd.jieling.logic.dao.ExpeditionManager; -import com.ljsd.jieling.logic.dao.SnapFightInfo; -import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.logic.blood.BloodLogic; +import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.expedition.ExpeditionLogic; +import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.protocols.Expedition; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.MonsterUtil; +import config.*; +import manager.STableManager; +import org.springframework.data.redis.core.ZSetOperations; +import util.MathUtils; + +import java.util.*; +import java.util.stream.Collectors; /** * Description: 热修复玩家信息 分发到玩家线程 - * Author: zsx .//role_gm 10041063 - * - * //role_gm 10040936 + * //role_gm 10043387 * CreateDate: 2019/9/26 11:48 */ public class Cmd_role_gm extends GmRoleAbstract { + boolean isfirst =false; @Override public boolean exec(String[] args) throws Exception { // ExpeditionLogic.getInstance().flushUserdataEveryDay(getUser()); - boolean check = PlayerLogic.getInstance().check(getUser(), VipPrivilegeType.EXPEDITION_RELIVE, 1); +// boolean check = PlayerLogic.getInstance().check(getUser(), VipPrivilegeType.EXPEDITION_RELIVE, 1); +// +// System.out.println("c"+check); + + int NODESTATE_CLOSE = 0;//0未开启 + int NODESTATE_NOT_PASS = 1;//1未通过 + int NODESTATE_NOT_GET = 2;//2未领取圣物 + int NODESTATE_PASS = 3;//已完成 + int NODESTATE_OVER_PASS = 4;//已完成 + int NODESTATE_HERO = 5;//招募节点 + + int NODETYPE_ADVANCE = 1;//精英节点 + int NODETYPE_BOSS = 2;//首领节点 + int NODETYPE_RELIVE = 3;//复活节点 + int NODETYPE_RECOVER = 4;//回复节点 + int NODETYPE_NORMAL = 5;//普通节点 + int NODETYPE_HERO_GET = 7;//招募节点 + int NODETYPE_SHOP = 8;//商店节点 + int NODETYPE_TRY = 9;//试炼节点 + int NODETYPE_GREED= 10;//贪婪节点 + int NODETYPE_REWARD= 11;//奖励节点 + + + User user = getUser(); + ExpeditionManager expeditionManager = user.getExpeditionManager(); + expeditionManager.setPassTimes(-1); + + + + expeditionManager.setExpeditionLeve(2); + ExpeditionManager manager = user.getExpeditionManager(); + manager.setLay(1); + manager.setSortid(0); + manager.setExpeditionLeve(2); + manager.clearRewardBox(); + manager.clearPropertyItems(); + manager.getHeroHPWithChange().clear(); + manager.clearExpeditionNodeInfos(); + manager.setLay(1); + manager.setSortid(0); + manager.clearRewardBox(); + manager.clearPropertyItems(); + manager.getHeroHPWithChange().clear(); + manager.clearHeroToTemp(); + manager.clearEquipToTemp(); + manager.clearExpeditionNodeInfos(); + + //创建节点束河 + Set nodeSets = createNodeSet(2); + + nodeSets.forEach(nodeInfo -> { + int sortId = nodeInfo.getSortId(); + if(nodeInfo.getState()==NODESTATE_PASS){ + expeditionManager.setSortid(Math.max(expeditionManager.getSortid(),sortId)); + } + SExpeditionSetting sExpeditionSetting = STableManager.getConfig(SExpeditionSetting.class).get(1); + try { + + if(nodeInfo.getType() == NODETYPE_ADVANCE || nodeInfo.getType() == NODETYPE_BOSS || nodeInfo.getType() == NODETYPE_NORMAL){ + //生成节点boss信息 + float size = STableManager.getFigureConfig(CommonStaticConfig.class).leve2num.get(2); + //战力基准值=maxforce*0.8+1/15(max-min)*lay) + + int minFoce = sExpeditionSetting.getMatchForce()[2][0]; + int manFoce = sExpeditionSetting.getMatchForce()[2][1]; + int standerFoce = (int) (user.getPlayerInfoManager().getMaxForce() * ((minFoce / 10000f) + ((float) nodeInfo.getLay()) / size * ((float) (manFoce - minFoce)/10000f))); + float randomForce = (standerFoce * ((sExpeditionSetting.getMatchForceRange()[0] + (int) (Math.random() * (sExpeditionSetting.getMatchForceRange()[1] - sExpeditionSetting.getMatchForceRange()[0]))) / 10000f)); + + if(nodeInfo.getType()==NODETYPE_ADVANCE){ + randomForce*=(sExpeditionSetting.getPowerfulForce()[1][1]/10000f+1); + }else if(nodeInfo.getType()==NODETYPE_BOSS){ + randomForce*=(sExpeditionSetting.getPowerfulForce()[2][1]/10000f+1); + } + Set> typedTuples = RedisUtil.getInstence().rangeByScoreWithScores(RedisKey.AREDEF_TEAM_FORCE_RANK, "", 0, randomForce); + + if (typedTuples.size() == 0) { + //战力没有获取到 从机器人中选 +// Set set = ArenaLogic.randomRobot(SArenaSetting.getSArenaSetting().getScore(), 1); +//// if (set.size() == 0) { +//// throw new ErrorCodeException(ErrorCode.CFG_NULL); +//// } +// int robotId = set.iterator().next(); + //提前战力排序 支持战力查找机器人 + int robotId= SArenaRobotStaticConfig.getFloorForce2robotId((int)randomForce); + SArenaRobotConfig sArenaRobotConfig = SArenaRobotConfig.getsArenaRobotConfigById(robotId); + snapOneFightInfo(nodeInfo, sArenaRobotConfig); + } else { + String serarchIdFromRank = typedTuples.iterator().next().getValue(); + snapOneFightInfo(user, nodeInfo, Integer.valueOf(serarchIdFromRank)); + } + } + + if(nodeInfo.getType()==ExpeditionLogic.NODETYPE_GREED||nodeInfo.getType() ==ExpeditionLogic.NODETYPE_TRY){ + snapOneFightInfo(nodeInfo); + } + + } catch (Exception e) { + e.printStackTrace(); + } + user.getExpeditionManager().putExpeditionNodeInfos(sortId, nodeInfo); + + }); + - System.out.println("c"+check); -// User user = getUser(); -// ExpeditionManager manager = user.getExpeditionManager(); -// Expedition.GetExpeditionResponse.Builder builder = Expedition.GetExpeditionResponse.newBuilder(); -// builder.addAllLay(manager.getRewardBox()); -// // builder.addAllHeroInfo(ExpeditionLogic.getInstance().getAllHeroInfo(user)); -// // builder.addAllEquipIds(ExpeditionLogic.getInstance().getEquipnfo(user)); -// ExpeditionLogic.getInstance().getNodeInfo(user).forEach(expeditionNodeInfo -> { -// if(expeditionNodeInfo.getType()!=1&&expeditionNodeInfo.getType()!=5&&expeditionNodeInfo.getType()!=2){ -// return; -// } -//// builder.addNodeInfo(expeditionNodeInfo); -// -// SnapFightInfo snapFightInfo = user.getExpeditionManager().getExpeditionNodeInfos().get(expeditionNodeInfo.getSortId()).getSnapFightInfo(); -// System.out.println(expeditionNodeInfo.getSortId()+"::"+snapFightInfo.getHeroAttribute().keySet().toString()+"::"+snapFightInfo.getForce()+"\r\n"); -// }); -// -// // System.out.println(new Gson().toJson(snapFightInfo)); -//// builder.addAllNodeInfo(ExpeditionLogic.getInstance().getNodeInfo(user)); -// System.out.println(builder.build().toString()); return true; } + + public static boolean isBattleNode(int type) { + int NODETYPE_ADVANCE = 1;//精英节点 + int NODETYPE_BOSS = 2;//首领节点 + int NODETYPE_RELIVE = 3;//复活节点 + int NODETYPE_RECOVER = 4;//回复节点 + int NODETYPE_NORMAL = 5;//普通节点 + int NODETYPE_HERO_GET = 7;//招募节点 + int NODETYPE_SHOP = 8;//商店节点 + int NODETYPE_TRY = 9;//试炼节点 + int NODETYPE_GREED= 10;//贪婪节点 + int NODETYPE_REWARD= 11;//奖励节点 + return type == NODETYPE_ADVANCE || type == NODETYPE_BOSS || type == NODETYPE_NORMAL; + } + + + /** + * 节点英雄快照 + */ + private void snapOneFightInfo(ExpeditionNodeInfo nodeInfo, SArenaRobotConfig sArenaRobotConfig) { + if (!isBattleNode(nodeInfo.getType())) { + return; + } + SnapFightInfo fightInfo = new SnapFightInfo(); + int force = sArenaRobotConfig.getTotalForce(); + Map heroAllAttribute = new HashMap<>(); + Map heroStarsMap = sArenaRobotConfig.getStarOfHeroMap(); + Map bossHP = new HashMap<>(); + + for (Map.Entry item : heroStarsMap.entrySet()) { + StringBuilder skillSb = new StringBuilder(); + Integer heroTid = item.getKey(); + Integer heroStar = item.getValue(); + SCHero scHero = SCHero.getsCHero().get(heroTid); + + List skillIds = scHero.getSkillListByStar(heroStar); + String heroSkill = HeroLogic.getInstance().getRobotHeroSkills(skillIds, skillSb).toString(); + fightInfo.updateHeroSkill(heroTid.toString(), heroSkill.substring(0, heroSkill.length() - 1)); + + bossHP.put(heroTid.toString(), 1d); + + int[] differDemonsId = sArenaRobotConfig.getDifferDemonsId(); + int differDemonsLv = sArenaRobotConfig.getDifferDemonsLv(); + int robotLevel = sArenaRobotConfig.getRoleLv(); + Map robotHeroAttribute = HeroLogic.getInstance().calRobotHeroAttribute(scHero, robotLevel, sArenaRobotConfig.getBreakId(), differDemonsId, differDemonsLv, false); + heroAllAttribute.put(heroTid.toString(), new FamilyHeroInfo(heroTid, robotLevel, heroStar, robotHeroAttribute)); +// String property = HeroLogic.getInstance().getRobotHeroProperty(sArenaRobotConfig,scHero,propertySb,robotHeroAttribute).toString(); + } + + fightInfo.setHeroAttribute(heroAllAttribute); + fightInfo.setForce(force); + fightInfo.setUid(sArenaRobotConfig.getId()); + nodeInfo.setBossHP(bossHP); + fightInfo.setPokenmonSkills(""); + fightInfo.setPassiveSkills(""); + nodeInfo.setSnapFightInfo(fightInfo); + + } + + private void snapOneFightInfo(User self, ExpeditionNodeInfo nodeInfo, int defid) throws Exception { + int snapTeamId = GlobalsDef.TEAM_ARENA_DEFENSE; + + if (!isBattleNode(nodeInfo.getType())) { + return; + } + User user = UserManager.getUser(defid); + SnapFightInfo fightInfo = new SnapFightInfo(); + //血量处理,buff处理 + int force = HeroLogic.getInstance().calTeamTotalForce(user, snapTeamId, false); + Map heroAllAttribute = BloodLogic.getInstance().battleRecord(user, snapTeamId, null); + fightInfo.setHeroAttribute(heroAllAttribute); + fightInfo.setForce(force); + fightInfo.setUid(self.getId()); + List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(snapTeamId); + if (teamPosHeroInfoList == null || teamPosHeroInfoList.size() < 1) { + teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(1); + } + Map heroMap = user.getHeroManager().getHeroMap(); + Map bossHP = new HashMap<>(); + for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList) { + String heroId = teamPosHeroInfo.getHeroId(); + bossHP.put(heroId, 1d); + Hero hero = heroMap.get(heroId); + StringBuilder skillSb = new StringBuilder(); + String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero, skillSb).toString(); + fightInfo.updateHeroSkill(heroId, heroSkill.substring(0, heroSkill.length() - 1)); + } + nodeInfo.setBossHP(bossHP); + + if (self.getPokemonManager().getPokemonMap().size()!=0) { + //玩家未激活异妖(神器)时,敌人阵容中不会出现异妖;激活异妖后,由敌人数据来源方决定战斗时是否有敌方异妖。 + String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user, snapTeamId); + String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, snapTeamId); + List teamPosForPokenInfos = user.getTeamPosManager().getTeamPosForPoken().get(snapTeamId); + if (null!=teamPosForPokenInfos) { + List pokens = new ArrayList<>(); + for (TeamPosForPokenInfo teamPosForPokenInfo : teamPosForPokenInfos) { + pokens.add(teamPosForPokenInfo.getPokenId()); + } + fightInfo.setPokenmonIds(pokens); + } + fightInfo.setPokenmonSkills(pokenmonSkills); + fightInfo.setPassiveSkills(pokenmonPassiveSkills); + } + + + nodeInfo.setSnapFightInfo(fightInfo); + } + + + /** + * 节点英雄快照 + */ + private void snapOneFightInfo(ExpeditionNodeInfo nodeInfo) throws ErrorCodeException{ + + SExpeditionNodeConfig sExpeditionNodeConfig = STableManager.getConfig(SExpeditionNodeConfig.class).get(nodeInfo.getType()); + int poolId = sExpeditionNodeConfig.getPoolId(); + int tempId =ExpeditionLogic.getRandomTid(poolId,1).first(); + SExpeditionRecruitConfig sExpeditionRecruitConfig = STableManager.getConfig(SExpeditionRecruitConfig.class).get(tempId); + if(sExpeditionRecruitConfig==null) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + //grop config + int i = sExpeditionRecruitConfig.getHeroId(); + SnapFightInfo fightInfo = new SnapFightInfo(); + + fightInfo.setUid(i); + int force = MonsterUtil.getMonsterForce(new int[]{i}); + Map bossHP = new HashMap<>(); + + Map heroAllAttribute = new HashMap<>(); + SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(i); + int[][] groupIds = sMonsterGroup.getContents(); + + int[] monsterIds = groupIds[0]; + + for (int monsterId : monsterIds) { + if(monsterId!=0){ + bossHP.put(Integer.toString(monsterId), 1d); + heroAllAttribute.put(Integer.toString(monsterId), new FamilyHeroInfo()); + } + } + + fightInfo.setHeroAttribute(heroAllAttribute); + fightInfo.setForce(force); + nodeInfo.setBossHP(bossHP); + fightInfo.setPokenmonSkills(""); + fightInfo.setPassiveSkills(""); + nodeInfo.setSnapFightInfo(fightInfo); + + } + + + + + + /** + * 获取节点结构 确定type id state + */ + private Set createNodeSet(int leve) throws Exception { + int NODESTATE_CLOSE = 0;//0未开启 + int NODESTATE_NOT_PASS = 1;//1未通过 + int NODESTATE_NOT_GET = 2;//2未领取圣物 + int NODESTATE_PASS = 3;//已完成 + int NODESTATE_OVER_PASS = 4;//已完成 + int NODESTATE_HERO = 5;//招募节点 + int NODETYPE_ADVANCE = 1;//精英节点 + int NODETYPE_BOSS = 2;//首领节点 + int NODETYPE_RELIVE = 3;//复活节点 + int NODETYPE_RECOVER = 4;//回复节点 + int NODETYPE_NORMAL = 5;//普通节点 + int NODETYPE_HERO_GET = 7;//招募节点 + int NODETYPE_SHOP = 8;//商店节点 + int NODETYPE_TRY = 9;//试炼节点 + int NODETYPE_GREED= 10;//贪婪节点 + int NODETYPE_REWARD= 11;//奖励节点 + Map config = STableManager.getConfig(SExpeditionFloorConfig.class); + int totalIndex = 1; + Set nodeSets = new HashSet<>(); + Set ids = STableManager.getFigureConfig(CommonStaticConfig.class).leve2ids.get(leve); + if(ids==null){ + return nodeSets; + } + int orDefault = STableManager.getFigureConfig(CommonStaticConfig.class).leve2num.getOrDefault(leve-1, 0)-1;//节点 + + Map> map = new HashMap<>(); + for (Map.Entry> integerMapMap :STableManager.getFigureConfig(CommonStaticConfig.class).getType2lay2weight(leve).entrySet()){ + int type = integerMapMap.getKey(); + int lay = ranndomFromWeight(integerMapMap.getValue()); + Set value = map.getOrDefault(lay,new HashSet<>()); + value.add(type); + map.put(lay,value); + } + for (SExpeditionFloorConfig sExpeditionFloorConfig : config.values()) { + if(!ids.contains(sExpeditionFloorConfig.getId())){ + continue; + } + int lay = sExpeditionFloorConfig.getId(); + + + isfirst =false; + if(lay-orDefault-1==ids.size()){ + isfirst=true; + + } + //必出节点 生成本层id + List indexList = MathUtils.combineList(totalIndex, totalIndex + sExpeditionFloorConfig.getNode() - 1); + if (indexList.size() <= 0) { + continue; + } + //生成随机节点 + if(map.containsKey(lay)){ + for (Integer itemType:map.get(lay)) { + ExpeditionNodeInfo nodeInfo = getNode(sExpeditionFloorConfig, itemType); + + nodeInfo.setLay(lay-orDefault); + + nodeInfo.setState(NODESTATE_OVER_PASS); + if(!isfirst){ + nodeInfo.setState(NODESTATE_PASS); + isfirst=true; + } + if(lay-orDefault-1==ids.size()){ + nodeInfo.setState(NODESTATE_NOT_PASS); + } + nodeInfo.setSortId(indexList.remove(0)); + nodeSets.add(nodeInfo); + totalIndex++; + if (indexList.size() == 0) { + break; + } + } + } + + if (indexList.size() == 0) { + continue; + } + + //生成必出节点(id state) + for (int i = 0; i < sExpeditionFloorConfig.getNodeType().length; i++) { + int[] typeArr = sExpeditionFloorConfig.getNodeType()[i]; + if (typeArr.length != 2) { + continue; + } + Set tempnode = getNode(sExpeditionFloorConfig, typeArr[0], typeArr[1]); + tempnode.forEach(nodeInfo -> { + nodeInfo.setLay(lay-orDefault); + nodeInfo.setState(NODESTATE_OVER_PASS); + if(!isfirst){ + isfirst=true; + nodeInfo.setState(NODESTATE_PASS); + } + if(lay-orDefault-1==ids.size()){ + nodeInfo.setState(NODESTATE_NOT_PASS); + } + nodeInfo.setSortId(indexList.remove(0)); + }); + nodeSets.addAll(tempnode); + totalIndex += tempnode.size(); + if (indexList.size() == 0) { + break; + } + } + + if (indexList.size() == 0) { + continue; + } + //生成剩余节点 + for (Integer anIndexList : indexList) { + //TODO 概率走配置 + int type = NODETYPE_NORMAL; + if (Math.random() <= 0.3d) { + type = NODETYPE_ADVANCE; + } + ExpeditionNodeInfo nodeInfo = getNode(sExpeditionFloorConfig, type); + nodeInfo.setLay(lay-orDefault); + nodeInfo.setState(NODESTATE_OVER_PASS); + if(!isfirst){ + isfirst=true; + nodeInfo.setState(NODESTATE_PASS); + } + nodeInfo.setSortId(anIndexList); + + if(lay-orDefault-1==ids.size()){ + nodeInfo.setState(NODESTATE_NOT_PASS); + } + nodeSets.add(nodeInfo); + totalIndex++; + } + + } + return nodeSets; + } + + private static int ranndomFromWeight(Map weight) { + int amount; + int result = 0; + IntSummaryStatistics collect = weight.values().stream().collect(Collectors.summarizingInt(value -> value)); + amount = (int) collect.getSum(); + int rate = MathUtils.randomInt(amount); + amount = 0; + for (Map.Entry integerIntegerMap : weight.entrySet()) { + amount += integerIntegerMap.getValue(); + if (rate < amount) { + result = integerIntegerMap.getKey(); + break; + } + } + return result; + } + + + private ExpeditionNodeInfo getNode(SExpeditionFloorConfig cfg, int type) throws Exception { + return getNode(cfg, type, 1).iterator().next(); + } + + private Set getNode(SExpeditionFloorConfig cfg, int type, int num) throws Exception { + int NODESTATE_CLOSE = 0;//0未开启 + + Set nodeSets = new HashSet<>(); + for (int i = 0; i < num; i++) { + ExpeditionNodeInfo nodeInfo = new ExpeditionNodeInfo(); + nodeInfo.setType(type); + nodeInfo.setState(NODESTATE_CLOSE); + nodeSets.add(nodeInfo); + } + return nodeSets; + + } + + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/cmd_reload.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/cmd_reload.java new file mode 100644 index 000000000..71ae329f1 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/cmd_reload.java @@ -0,0 +1,28 @@ +package com.ljsd.jieling.kefu; + +import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; + +/** + * Description: des + * Author: zsx + * CreateDate: 2020/5/28 15:43 + * //reload 10043343 + */ +public class cmd_reload extends GmRoleAbstract { + @Override + public boolean exec(String[] args) throws Exception { + + + User user = getUser(); + if (null == user) { + return true; + } + int id = user.getId(); + UserManager.removeUser(user.getId()); + user = MongoUtil.getInstence().getMyMongoTemplate().findById(User.getCollectionName(), id, User.class); + UserManager.addUser(user); + return true; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java index 695eedf7d..25f2b0f63 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java @@ -13,7 +13,7 @@ public class OnlineUserManager { sessionMap.put(uid, session); } - public static Map sessionMap = new DefinaMap<>(); + public static Map sessionMap = new ConcurrentHashMap<>(); public static void userOffline(int uid) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index c95a6e781..576487609 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -215,12 +215,13 @@ public class ActivityLogic implements IEventHandler{ if (map.containsKey(activityId)) { return false; } - ActivityMission activityMission = new ActivityMission(); - initMissionInfo(activityMission,activityId); - // activityMission.init(getRootId(), getMongoKey() + ".activityMissionMap." + activityId); + ActivityMission activityMission = new ActivityMission(); //自动初始化 map.put(activityId, activityMission); + initMissionInfo(activityMission,activityId); + // activityMission.init(getRootId(), getMongoKey() + ".activityMissionMap." + activityId); + return true; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/BuyGoldActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/BuyGoldActivity.java index edac03ba0..f72e76d12 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/BuyGoldActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/BuyGoldActivity.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic.activity; +import com.ljsd.GameApplication; import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.event.HourTaskEvent; @@ -31,13 +32,14 @@ class BuyGoldActivity extends AbstractActivity { public BuyGoldActivity(int id) { super(id); Poster.getPoster().listenEvent(this, UserOnlineEvent.class); + Poster.getPoster().listenEvent(this, HourTaskEvent.class); } @Override public void initActivity(User user) throws Exception { super.initActivity(user); SGlobalActivity sGlobalActivity = STableManager.getConfig(SGlobalActivity.class).get(id); - int time = (int) (sGlobalActivity.getEndTimeLong() / 1000); + int time = (int) (GameApplication.serverConfig.getCacheOpenTime()/1000+sGlobalActivity.getEndTimeLong()); HashSet ids = new HashSet<>(); List listValue = SSpecialConfig.getListValue(SSpecialConfig.Gold_touch); listValue.forEach(type -> SPrivilegeTypeConfig.privilegeByType.get(type).forEach(sPrivilegeTypeConfig -> { @@ -52,53 +54,53 @@ class BuyGoldActivity extends AbstractActivity { @Override public void onEvent(IEvent event) throws Exception { super.onEvent(event); - - List list = SSpecialConfig.getListValue(SSpecialConfig.Gold_touch_refresh); - if (event instanceof HourTaskEvent) { - if (list.contains(((HourTaskEvent) event).getHour())) { - InnerMessageUtil.broadcastWithRandom(user -> { - if (user == null) { - return; - } - setUpTime(user); - }, new ArrayList<>(OnlineUserManager.sessionMap.keySet()), 120); - - } - } - if (event instanceof UserOnlineEvent) { - User user = UserManager.getUser(((UserOnlineEvent) event).getUid()); - ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); - if (null == activityMission) { - return; - } - boolean needRefresh = false; - for (Integer aList : list) { - if (TimeUtils.isOverAppointRefreshTime(System.currentTimeMillis(), activityMission.getV() * 1000L, aList)) { - needRefresh = true; - break; - } - } - if (needRefresh) { - setUpTime(user); - } - } + //点金刷新走商店 +// List list = SSpecialConfig.getListValue(SSpecialConfig.Gold_touch_refresh); +// if (event instanceof HourTaskEvent) { +// if (list.contains(((HourTaskEvent) event).getHour())) { +// InnerMessageUtil.broadcastWithRandom(user -> { +// if (user == null) { +// return; +// } +// setUpTime(user); +// }, new ArrayList<>(OnlineUserManager.sessionMap.keySet()), 1); +// +// } +// } +// if (event instanceof UserOnlineEvent) { +// User user = UserManager.getUser(((UserOnlineEvent) event).getUid()); +// ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); +// if (null == activityMission) { +// return; +// } +// boolean needRefresh = false; +// for (Integer aList : list) { +// if (TimeUtils.isOverAppointRefreshTime(System.currentTimeMillis(), activityMission.getV() * 1000L, aList)) { +// needRefresh = true; +// break; +// } +// } +// if (needRefresh) { +// setUpTime(user); +// } +// } } private void setUpTime(User user) { - ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); - if (null == activityMission) { - return; - } - //sendclient - activityMission.setV((int) (System.currentTimeMillis()/1000)); - HashSet ids = new HashSet<>(); - List listValue = SSpecialConfig.getListValue(SSpecialConfig.Gold_touch); - listValue.forEach(type -> SPrivilegeTypeConfig.privilegeByType.get(type).forEach(sPrivilegeTypeConfig -> { - ids.add(sPrivilegeTypeConfig.getId()); - user.getPlayerInfoManager().refreshVipByType(sPrivilegeTypeConfig.getId()); - })); - notifyClient(user, ids); +// ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); +// if (null == activityMission) { +// return; +// } +// //sendclient +// activityMission.setV((int) (System.currentTimeMillis()/1000)); +// HashSet ids = new HashSet<>(); +// List listValue = SSpecialConfig.getListValue(SSpecialConfig.Gold_touch); +// listValue.forEach(type -> SPrivilegeTypeConfig.privilegeByType.get(type).forEach(sPrivilegeTypeConfig -> { +// ids.add(sPrivilegeTypeConfig.getId()); +// user.getPlayerInfoManager().refreshVipByType(type); +// })); +// notifyClient(user, ids); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java index 81ddd55c4..314bbfe47 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java @@ -477,22 +477,26 @@ public class ChampionshipLogic { builder.setJoinState(1); String key = RedisUtil.getInstence().getKey(RedisKey.CHAMPION_MY_BATTLLE_IDS, Integer.toString(uid)); Object latestKey = RedisUtil.getInstence().lGetIndex(key, -1); - ArenaRecord arenaRecord = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", latestKey.toString(), ArenaRecord.class); - int enemyId = arenaRecord.getDefUid(); - int attackId = arenaRecord.getAttackId(); - int fightResult = arenaRecord.getFightResult(); - CommonProto.ChampionBattleInfo.Builder builder1 = CommonProto.ChampionBattleInfo.newBuilder(); - if(roundTimes == arenaRecord.getRoundTims() && (progress%10%4 != 3 || fightResult==-2)){ - fightResult =-1; + if(latestKey!=null){ + ArenaRecord arenaRecord = RedisUtil.getInstence().getMapValue(RedisKey.CHAMPION_ARENA_RECORD, "", latestKey.toString(), ArenaRecord.class); + int enemyId = arenaRecord.getDefUid(); + int attackId = arenaRecord.getAttackId(); + int fightResult = arenaRecord.getFightResult(); + CommonProto.ChampionBattleInfo.Builder builder1 = CommonProto.ChampionBattleInfo.newBuilder(); + if(roundTimes == arenaRecord.getRoundTims() && (progress%10%4 != 3 || fightResult==-2)){ + fightResult =-1; + } + if(fightResult!=-1){ + builder1.setFightData( CommonProto.FightData.parseFrom(arenaRecord.getFightData())); + } + builder.setChampionBattleInfo(builder1 + .setMyInfo(getChampionBattleInfo(attackId)) + .setEnemyInfo(getChampionBattleInfo(enemyId)) + .setResult(fightResult) + .build()); } - if(fightResult!=-1){ - builder1.setFightData( CommonProto.FightData.parseFrom(arenaRecord.getFightData())); - } - builder.setChampionBattleInfo(builder1 - .setMyInfo(getChampionBattleInfo(attackId)) - .setEnemyInfo(getChampionBattleInfo(enemyId)) - .setResult(fightResult) - .build()); + + } MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.CHAMPION_GET_RESPONSE_VALUE,builder.build(),true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExpeditionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExpeditionManager.java index 8c9cf5a22..d69a5bc85 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExpeditionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ExpeditionManager.java @@ -36,6 +36,7 @@ public class ExpeditionManager extends MongoBase { private Map heroMap = new HashMap<>(); private Map equipMap = new HashMap<>(); private Map heroMapTemp = new HashMap<>(); + private Map> heroNodeMapTemp = new HashMap<>(); private Map equipMapTemp = new HashMap<>(); public void putExpeditionNodeInfos(Integer key, ExpeditionNodeInfo nodeInfo) { @@ -174,16 +175,18 @@ public class ExpeditionManager extends MongoBase { heroMap.put(hero.getId(), hero); } - public void addHeroToTemp(Hero hero) throws Exception { + public void addHeroToTemp(Hero hero,int nodeID) throws Exception { //绑定关系 - hero.init(this.getRootId(),getMongoKey() + ".heroMapTemp." + hero.getId()); - updateString("heroMapTemp." + hero.getId(), hero); - heroMapTemp.put(hero.getId(), hero); + hero.init(this.getRootId(),getMongoKey() + ".heroNodeMapTemp."+nodeID+"."+ hero.getId()); + Map orDefault = heroNodeMapTemp.getOrDefault(nodeID, new HashMap<>()); + updateString("heroNodeMapTemp." + nodeID, orDefault); + orDefault.put(hero.getId(), hero); + heroNodeMapTemp.put(nodeID,orDefault); } public void clearHeroToTemp() throws Exception { - heroMapTemp.clear(); - updateString("heroMapTemp" , heroMapTemp); + heroNodeMapTemp.clear(); + updateString("heroNodeMapTemp" , heroNodeMapTemp); } @@ -229,8 +232,8 @@ public class ExpeditionManager extends MongoBase { updateString("freshTime" , freshTime); } - public Map getHeroMapTemp() { - return heroMapTemp; + public Map getHeroMapTemp(int sortid) { + return heroNodeMapTemp.getOrDefault(sortid,new HashMap<>()); } public Map getEquipMapTemp() { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java index d35ca0251..0b88497f7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java @@ -60,6 +60,7 @@ public class Hero extends MongoBase { this.templateId = heroTid; this.level = initStar; this.star =hero.getStar() ; + this.equipByPositionMap = new HashMap<>(); this.soulEquipByPositionMap = hero.soulEquipByPositionMap; this.breakId = hero.breakId; this.starBreakId = hero.starBreakId; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index 3e5ab76af..d843a0213 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -527,7 +527,7 @@ public class PlayerManager extends MongoBase { } public void setChannel(String channel) { - updateString("channel", this.channel); + updateString("channel", channel); this.channel = channel; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index 34fb431b9..fee7b1768 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -27,6 +27,23 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +/** + * TODO 任务zsx + * Q + * 1 数据层里面做了逻辑 + * 2 将完整的任务数据 拆分成了任务状态分类 任务进度(状态分别存储 状态转移的过程就需要手动调整) + * 3 扩展复杂 新增类型 要增加数据更新type 需要新增更新器 需要新郑任务进度获取 + * 4 映射多余 event映射多个taskType 再映射到多个或一个类型刷新器 刷新指定字段 + * 建立了类型到字段的映射关系 随后类型字段的获取却使用if else + * + * F + * 1 task数据层抽象 + * 2 面向对象设计 + * 3 (优化)业务层抽象 扩展类型只应该新增任务类型类的击中和完成接口的实现 + * 4 (优化)枚举扩展id 预缓存id + * + * + * */ public class UserMissionManager extends MongoBase { private VipMissionIdsType vipMissionIdsType=new VipMissionIdsType(); private DailyMissionIdsType dailyMissionIdsType=new DailyMissionIdsType(); @@ -49,6 +66,7 @@ public class UserMissionManager extends MongoBase { private CumulationData sevenHappyCumulationData = new CumulationData(); private CumulationData achievementMap = new CumulationData(); + //触发任务上身 public void openMission(User user,GameEvent event,Map> missionTypeEnumListMap, Object... parm) throws Exception { ISession session= OnlineUserManager.getSessionByUid(user.getId()); switch (event){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WorldTreasureReward.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WorldTreasureReward.java index 323094287..d3885eb87 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WorldTreasureReward.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WorldTreasureReward.java @@ -10,7 +10,7 @@ import java.util.Map; public class WorldTreasureReward extends MongoBase { private int createTime; //取当天零点 根据其可以推算出期数。 - private int round; + private int round=1; private int score; private Map rewardStatusMap = new HashMap<>(); //领取状态 1:表示领取基础奖励 2:表示领取额外奖励。 @@ -24,7 +24,7 @@ public class WorldTreasureReward extends MongoBase { } score = 0; rewardStatusMap = new HashMap<>(); - + this.round = round; } @Override @@ -37,6 +37,10 @@ public class WorldTreasureReward extends MongoBase { } public int getRound() { + if(round == 0){ + this.round = 1; + updateString("round", round); + } return round; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java index 365bef283..a169afc72 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java @@ -82,7 +82,8 @@ public class ExpeditionLogic { ExpeditionManager manager = user.getExpeditionManager(); TimeControllerOfFunction openTimeOfFuntionCacheByType = GlobalDataManaager.getInstance().getOpenTimeOfFuntionCacheByType(FunctionIdEnum.Expedition); - if(manager.getCurrentTime()==openTimeOfFuntionCacheByType.getTimes()){ + + if(openTimeOfFuntionCacheByType==null||manager.getCurrentTime()==openTimeOfFuntionCacheByType.getTimes()){ return; } takeAllReward(user); @@ -291,11 +292,11 @@ public class ExpeditionLogic { if(isBattleNode(nodeInfo.getType())){ //生成节点boss信息 - float size = STableManager.getFigureConfig(CommonStaticConfig.class).leve2num.get(1); + float size = STableManager.getFigureConfig(CommonStaticConfig.class).leve2num.get(leve); //战力基准值=maxforce*0.8+1/15(max-min)*lay) - int minFoce = sExpeditionSetting.getMatchForce()[leve][0]; - int manFoce = sExpeditionSetting.getMatchForce()[leve][1]; + int minFoce = sExpeditionSetting.getMatchForce()[leve-1][0]; + int manFoce = sExpeditionSetting.getMatchForce()[leve-1][1]; int standerFoce = (int) (user.getPlayerInfoManager().getMaxForce() * ((minFoce / 10000f) + ((float) nodeInfo.getLay()) / size * ((float) (manFoce - minFoce)/10000f))); float randomForce = (standerFoce * ((sExpeditionSetting.getMatchForceRange()[0] + (int) (Math.random() * (sExpeditionSetting.getMatchForceRange()[1] - sExpeditionSetting.getMatchForceRange()[0]))) / 10000f)); @@ -812,7 +813,14 @@ public class ExpeditionLogic { } - public static Hero createHero(int tempid,int uid,Hero hero,boolean isTemp)throws Exception{ + /** + * + * @param nodeId -1 不进节点背包 + * @return + * @throws Exception + */ + public static Hero createHero(int tempid,int uid,Hero hero,int nodeId)throws Exception{ + boolean isTemp = nodeId != -1; int star = hero.getLevel(); User user = UserManager.getUser(uid); SExpeditionSetting sExpeditionSetting = STableManager.getConfig(SExpeditionSetting.class).get(1); @@ -863,7 +871,7 @@ public class ExpeditionLogic { newHero.addJewel(newequip.getId()); } if(isTemp){ - user.getExpeditionManager().addHeroToTemp(newHero); + user.getExpeditionManager().addHeroToTemp(newHero,nodeId); }else { user.getExpeditionManager().addHero(newHero); } @@ -989,14 +997,14 @@ public class ExpeditionLogic { Expedition.ExpeditionTreasureInfoResponse.Builder response = Expedition.ExpeditionTreasureInfoResponse.newBuilder(); Map rewardStatusMap = worldTreasureReward.getRewardStatusMap(); - if(!rewardStatusMap.isEmpty()){ - List states = new ArrayList<>(100); - for(Map.Entry entry:rewardStatusMap.entrySet()){ - Expedition.TreasureRewardState.Builder builder = Expedition.TreasureRewardState.newBuilder().setId(entry.getKey()).setState(entry.getValue()); - states.add(builder.build()); - } - response.addAllTreasureRewardState(states); - } + WorldBossTreasureStaticConfig worldBossTreasureStaticConfig = STableManager.getFigureConfig(WorldBossTreasureStaticConfig.class); + Set sWorldBossTreasureConfigs = worldBossTreasureStaticConfig.getIdsByPeriods().get(worldTreasureReward.getRound()); + List states = new ArrayList<>(100); + sWorldBossTreasureConfigs.forEach(item->{ + Expedition.TreasureRewardState.Builder builder = Expedition.TreasureRewardState.newBuilder().setId(item.getId()).setState(rewardStatusMap.getOrDefault(item.getId(),0)); + states.add(builder.build()); + }); + response.addAllTreasureRewardState(states); response.setScore(worldTreasureReward.getScore()); MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java index ab482d9bf..00abd8b9c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java @@ -384,6 +384,10 @@ public class DeathPathLogic { User user = UserManager.getUser(session.getUid()); DeathChallengeCount countInfo = RedisUtil.getInstence().get(RedisKey.DEATH_PAHT_TOTAL_CHALLENGE_COUNT, String.valueOf(user.getPlayerInfoManager().getGuildId()), DeathChallengeCount.class); Family.GetAllDeathPathRewardInfoResponse.Builder response = Family.GetAllDeathPathRewardInfoResponse.newBuilder(); + if(countInfo==null){ + MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); + return; + } Map userReward = countInfo.getUserReward(); if(userReward!=null){ for(Map.Entry entry:userReward.entrySet()){ 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 088ef05db..b2fe08f01 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 @@ -267,18 +267,20 @@ public class HeroLogic{ } int j=0; + //标记是否触发保底 + boolean specialTrigger=false; for(int i=0;i map = new HashMap<>(); + static { + for (MissionType type:MissionType.values()) { + map.put(type.getMissionTypeValue(),type); + } } + + public static MissionType findByMissionId(int missionTypeId){ + return map.get(missionTypeId); + } + + //fix 扩展麻烦 +// public static MissionType findByMissionId(int missionTypeId){ +// switch (missionTypeId){ +// case 1: +// return RECRUITMENT_RANDOM_HEROES; +// case 2: +// return COLLECT_QUALITY_HERO; +// case 3: +// return HERO_LEVLE_COUNT; +// case 4: +// return POKEMON_ADVANCED; +// case 5: +// return POKEMON_FORCE; +// case 6: +// return POKEMON_ALL_FORCE; +// case 7: +// return ARENA_CHALLENEGE_NUMS; +// case 8: +// return ARENA_SCORE; +// case 9: +// return USER_LEVEL; +// case 10: +// return USER_FORCE; +// case 11: +// return USER_CONSUMER_GEM; +// case 12: +// return USER_WORKSHOP_LEVEL; +// case 13: +// return USER_GET_EQUIP_QUALITY; +// case 14: +// return LEVEL_STORY_PASS; +// case 15: +// return GENERAL_STORY_PASS; +// case 16: +// return HERO_STORY_PASS; +// case 17: +// return KILL_INVASIONBOSS; +// case 18: +// return SECRETBOX_TIMES; +// case 19: +// return EQUIP_FORCE_NUMS; +// case 20: +// return BUY_GOLD_TIMES; +// case 21: +// return BUY_STAMINA_TIMES; +// case 22: +// return WORKSHOP_CREATE_EQUIP_NUMS; +// case 23: +// return GENERAL_STORY_TIMES; +// case 24: +// return HERO_STORY_TIMES; +// case 25: +// return LEVEL_STORY_TIMES; +// case 26: +// return HERO_LEVLE_TIMES; +// case 27: +// return TAKE_ADVENTUREREWARD_TIMES; +// case 28: +// return ARENA_FIGHTSUCCES_TIMES; +// case 29: +// return FINSIH_DAYILY_TIMES; +// case 30: +// return RING_FIREA_DVANCED; +// case 31: +// return COPY_STORY_LEVLE; +// case 32: +// return COPY_STORY_TIMES; +// case 33: +// return ELEMENT_RANDOM_TIMES; +// case 34: +// return HERO_STORY_PLAY_TIMES; +// case 35: +// return INVASIONBOSS_PLAY_TIMES; +// case 36: +// return FAST_ADVENTUREREWARD_TIMES; +// case 37: +// return ARENA_RANK; +// case 38: +// return SENVER_HAPPY; +// case 39: +// return HERO_BREAK_TIMES; +// case 40: +// return TAKE_CHAPTER_REWARD_TIMES; +// case 41: +// return HERO_UP_STAR_TIMES; +// case 42: +// return VIP_LEVEL; +// case 43: +// return TAKE_ONLINE_REWARD_TIMES; +// case 44: +// return TAKE_SENVEN_LOGIN_REWARD_TIMES; +// case 45: +// return TAKE_DAILY_BOX_TIMES; +// case 46: +// return HERO_WEAR_EQUIP_TIMES; +// case 47: +// return SYNTHESIS_HERO_STAR_TIMES; +// case 48: +// return USER_CONSUMER_STAMINA; +// case 49: +// return COLLECT_DIFFERENT_HEROS; +// case 50: +// return ONE_HERO_UP_STAR_TIMES; +// case 51: +// return HERO_IN_TEAM_NUMS; +// case 52: +// return BUY_GROCERY_TIMES; +// case 53: +// return FRIEND_NUMS; +// case 54: +// return GIVE_FRIEND_STAMIN_TIMES; +// case 55: +// return HERO_UP_SOME_STAR_TIMES; +// case 56: +// return JOIN_MONSTER_ATTACK_TIMES;//参与兽潮来袭的次数 +// case 57: +// return MONSTER_ATTACK_LEVEL;//兽潮来袭到达x层 +// case 58: +// return TO_BE_STRONGER; +// case 59: +// return BLOODY_KILL_NUMS; +// case 60: +// return ENDLESS_CONSUME_ACTION; +// case 61: +// return FAMILY_FIGHT_ATTACK; +// case 62: +// return ESPECIAL_EQUIP; +// case 65: +// return FIND_STAR; +// case 66: +// return TAKE_FRIEND_GIFT; +// case 69: +// return JOIN_FAMILY; +// case 71: +// return FRIEND_APPLY; +// case 72: +// return COMHERO_STORY_PASS; +// case 73: +// return LOGIN_TIMES; +// case 74: +// return REARGE_TOTAL; +// case 76: +// return FINISH_MISSING_ROOM; +// case 77: +// return REFRESH_MISSING_ROOM; +// case 78: +// return SPECIAL_EQUIP_LEVEL_UP; +// case 83: +// return LUCKY_WHEELS_TIMES; +// case 84: +// return FINISH_EXPEDITION_HERO_TIMES; +// case 86: +// return SEVEN_GIFT_BUY; +// case 87: +// return FINISIN_DAILY_CHALLENGE_TIMES; +// default: +// return null; +// } +// +// } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java index 9b4e84932..bb0336d9d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java @@ -49,7 +49,7 @@ public class BuyGoodsLogic { public static void flushEveryDay(User user) throws Exception { //更新5星成长礼 - user.getPlayerInfoManager().getRechargeInfo().getBuyGoodsTimes().put(21,0); + user.getPlayerInfoManager().getRechargeInfo().updateBuyGoodsTimes(21,0); List goodsBagInfo = new ArrayList<>(SRechargeCommodityConfig.rechargeCommodityConfigMap.size()); BuyGoodsLogic.getGoodsBagInfo(user.getId(), goodsBagInfo,false); ISession session = OnlineUserManager.getSessionByUid(user.getId()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index fc983ce5b..f7258daa6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -130,26 +130,37 @@ public class StoreLogic implements IEventHandler { } } - if(sStoreTypeConfig.getRefreshType()[0]==2&& calendar.get(Calendar.MINUTE) ==0 && sStoreTypeConfig.getRefreshType()[1]==calendar.get(Calendar.HOUR_OF_DAY)){ - for(ISession session : OnlineUserManager.sessionMap.values()){ - if(session.getFiveReady() == 1){ - User user = UserManager.getUser(session.getUid()); - if(user.getStoreManager().getStoreInfoMap().containsKey(sStoreTypeConfig.getId())){ - updateUsersStoreAyync(UserManager.getUser(session.getUid()),user1 -> { - StoreInfo storeInfo = user.getStoreManager().getStoreInfoMap().get(sStoreTypeConfig.getId()); + if(sStoreTypeConfig.getRefreshType()[0]==2&& calendar.get(Calendar.MINUTE) ==0){ - Map storeItem = getStoreItem(sStoreTypeConfig.getId(), sStoreTypeConfig, user); - if(storeItem == null){ - LOGGER.error("the uid={},the storeID={} is null",user.getId(),sStoreTypeConfig.getId()); - return; - } - storeInfo.setItemNumMap(storeItem); - storeInfo.setLastRefreshTime(now); - MongoUtil.getInstence().lastUpdate(); - sendStoreUpdateIndication(user.getId(),storeInfo); - }); - } + for(int i = 1;i { + StoreInfo storeInfo = user.getStoreManager().getStoreInfoMap().get(sStoreTypeConfig.getId()); + + Map storeItem = getStoreItem(sStoreTypeConfig.getId(), sStoreTypeConfig, user); + if(storeItem == null){ + LOGGER.error("the uid={},the storeID={} is null",user.getId(),sStoreTypeConfig.getId()); + return; + } + storeInfo.setItemNumMap(storeItem); + storeInfo.setLastRefreshTime(lastRefreshTime); + MongoUtil.getInstence().lastUpdate(); + sendStoreUpdateIndication(user.getId(),storeInfo); + }); } } } @@ -219,11 +230,13 @@ public class StoreLogic implements IEventHandler { } } if(sStoreTypeConfig.getRefreshType()[0] == 2){ - if (TimeUtils.isOverAppointRefreshTime(nowTime,storeInfo.getLastRefreshTime(),sStoreTypeConfig.getRefreshType()[1])){ - Map storeItem = getStoreItem(sStoreTypeConfig.getId(), sStoreTypeConfig, user); - storeInfo.setLastRefreshTime(nowTime); - storeInfo.setItemNumMap(storeItem); - sendStoreUpdateIndication(user.getId(),storeInfo); + for(int i = 0 ; i storeItem = getStoreItem(sStoreTypeConfig.getId(), sStoreTypeConfig, user); + storeInfo.setLastRefreshTime(nowTime); + storeInfo.setItemNumMap(storeItem); + sendStoreUpdateIndication(user.getId(),storeInfo); + } } } @@ -632,12 +645,14 @@ public class StoreLogic implements IEventHandler { long nowTime = System.currentTimeMillis(); switch (type){ case 2: - boolean overTime = TimeUtils.isOverTime(time, storeInfo.getLastRefreshTime()); - if (overTime){ - itemNumMap = getStoreItem(sStoreTypeConfig.getId(),sStoreTypeConfig,user); - storeInfo.setLastRefreshTime(nowTime); + for(int i=1;i