From 2e97a23f31586eb0bdeb0778078047bbbd9f6b63 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Mon, 1 Jun 2020 23:59:39 +0800 Subject: [PATCH 01/17] =?UTF-8?q?=E7=82=B9=E9=87=91bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/logic/activity/BuyGoldActivity.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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..a27ced21b 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 -> { @@ -61,7 +63,7 @@ class BuyGoldActivity extends AbstractActivity { return; } setUpTime(user); - }, new ArrayList<>(OnlineUserManager.sessionMap.keySet()), 120); + }, new ArrayList<>(OnlineUserManager.sessionMap.keySet()), 1); } } @@ -96,7 +98,7 @@ class BuyGoldActivity extends AbstractActivity { 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()); + user.getPlayerInfoManager().refreshVipByType(type); })); notifyClient(user, ids); } From 9d16af655cea4f85685af70ed65cd7c0e07b69e0 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Tue, 26 May 2020 09:51:43 +0800 Subject: [PATCH 02/17] fix round --- .../config/clazzStaticCfg/WorldBossTreasureStaticConfig.java | 2 +- .../java/com/ljsd/jieling/logic/dao/WorldTreasureReward.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 rewardStatusMap = new HashMap<>(); //领取状态 1:表示领取基础奖励 2:表示领取额外奖励。 @@ -24,7 +24,7 @@ public class WorldTreasureReward extends MongoBase { } score = 0; rewardStatusMap = new HashMap<>(); - + this.round = round; } @Override From d99ef363351fa67f44adb53fc08987ac06931ce2 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Tue, 26 May 2020 10:06:56 +0800 Subject: [PATCH 03/17] =?UTF-8?q?=C2=A0fix=20=E4=BF=AE=E5=A4=8D=E5=A4=A9?= =?UTF-8?q?=E7=A9=BA=E7=A7=98=E5=AE=9D=E5=91=A8=E6=9C=9F=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/logic/dao/WorldTreasureReward.java | 4 ++++ 1 file changed, 4 insertions(+) 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 805652556..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 @@ -37,6 +37,10 @@ public class WorldTreasureReward extends MongoBase { } public int getRound() { + if(round == 0){ + this.round = 1; + updateString("round", round); + } return round; } From 58d6738ca0cb7d93cb323c3e3b7d49258376cdc9 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Tue, 26 May 2020 12:01:47 +0800 Subject: [PATCH 04/17] =?UTF-8?q?=E7=82=B9=E7=9F=B3=E6=88=90=E9=87=91?= =?UTF-8?q?=E5=95=86=E5=BA=97=E4=BF=AE=E6=94=B9=E3=80=81=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/hero/HeroLogic.java | 4 +-- .../ljsd/jieling/logic/store/StoreLogic.java | 32 ++++++++++++------- 2 files changed, 23 insertions(+), 13 deletions(-) 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 916048bc7..9b6249cd3 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 @@ -1603,9 +1603,9 @@ public class HeroLogic{ float score = sPropertyConfig.getScore(); result += propertyValue*score; - LOGGER.info("the propertyId={} the value is ={},propertyValue={},score={},result ={},the value={}",propertyId,propertyValue*score,propertyValue,score,result,propertyValue*score); +// LOGGER.info("the propertyId={} the value is ={},propertyValue={},score={},result ={},the value={}",propertyId,propertyValue*score,propertyValue,score,result,propertyValue*score); } - System.out.println(result); +// System.out.println(result); return (int)result; } 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 fde5ca1ba..52df7239b 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,7 +130,13 @@ public class StoreLogic implements IEventHandler { } } - if(sStoreTypeConfig.getRefreshType()[0]==2&& calendar.get(Calendar.MINUTE) ==0 && sStoreTypeConfig.getRefreshType()[1]==calendar.get(Calendar.HOUR_OF_DAY)){ + if(sStoreTypeConfig.getRefreshType()[0]==2&& calendar.get(Calendar.MINUTE) ==0){ + + for(int i = 1;i 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); + } } } @@ -626,12 +634,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 Date: Wed, 27 May 2020 09:00:39 +0800 Subject: [PATCH 05/17] =?UTF-8?q?=E5=95=86=E5=BA=97=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/expedition/ExpeditionLogic.java | 3 +- .../ljsd/jieling/logic/store/StoreLogic.java | 42 +++++++++++-------- 2 files changed, 26 insertions(+), 19 deletions(-) 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 5afea0a10..58c00a7e1 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); 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 52df7239b..1f000dc75 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 @@ -134,28 +134,33 @@ public class StoreLogic implements IEventHandler { 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(now); - MongoUtil.getInstence().lastUpdate(); - sendStoreUpdateIndication(user.getId(),storeInfo); - }); + private static void sendRefreshIndication(SStoreTypeConfig sStoreTypeConfig,long lastRefreshTime) throws Exception { + 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()); + + 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); + }); } } } @@ -250,6 +255,7 @@ public class StoreLogic implements IEventHandler { public static void sendStoreUpdateIndication(int uid,StoreInfo storeInfo){ CommonProto.StoreInfo.Builder builder = getBuilder(storeInfo); + System.out.println("商店刷新发送推送"); PlayerInfoProto.storeUpdateIndication build = PlayerInfoProto.storeUpdateIndication.newBuilder().addStoreInfo(builder).build(); ISession session = OnlineUserManager.getSessionByUid(uid); if(session!=null){ From 1e5645e21fb9fad9f3f6ced4e673a3418547c03d Mon Sep 17 00:00:00 2001 From: lvxinran Date: Tue, 26 May 2020 14:45:31 +0800 Subject: [PATCH 06/17] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java | 1 - 1 file changed, 1 deletion(-) 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 1f000dc75..6acc41025 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 @@ -255,7 +255,6 @@ public class StoreLogic implements IEventHandler { public static void sendStoreUpdateIndication(int uid,StoreInfo storeInfo){ CommonProto.StoreInfo.Builder builder = getBuilder(storeInfo); - System.out.println("商店刷新发送推送"); PlayerInfoProto.storeUpdateIndication build = PlayerInfoProto.storeUpdateIndication.newBuilder().addStoreInfo(builder).build(); ISession session = OnlineUserManager.getSessionByUid(uid); if(session!=null){ From e931d53f5c6363d46ca724a5f036d631eef3dd2b Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Wed, 27 May 2020 00:23:34 +0800 Subject: [PATCH 07/17] =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E6=BC=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/db/mongo/MongoPropertyConverter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoPropertyConverter.java b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoPropertyConverter.java index aa6dbd46b..b5ddb1f9c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoPropertyConverter.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/MongoPropertyConverter.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.globals.GlobalItemType; +import com.ljsd.jieling.logic.dao.Equip; import com.ljsd.jieling.logic.dao.Jewel; import com.ljsd.jieling.logic.dao.PropertyItem; import com.mongodb.BasicDBObject; @@ -22,6 +23,8 @@ public class MongoPropertyConverter implements Converter 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); From e428c0059ae9e16a180d7cafd6cacb92be508e7e Mon Sep 17 00:00:00 2001 From: wangyuan Date: Wed, 27 May 2020 10:00:26 +0800 Subject: [PATCH 08/17] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=AA=E7=BB=99?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E5=8F=91=E9=80=81=E5=A4=A9=E7=A9=BA=E7=A7=98?= =?UTF-8?q?=E5=AE=9D=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/expedition/ExpeditionLogic.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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 5afea0a10..9412eef78 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 @@ -989,14 +989,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); } From 3edf0c609f2b9f8ca6475cd245519768268a08df Mon Sep 17 00:00:00 2001 From: wangyuan Date: Wed, 27 May 2020 11:22:01 +0800 Subject: [PATCH 09/17] =?UTF-8?q?=E6=8A=BD=E5=8D=A1=E4=BF=9D=E5=BA=95?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A4=9A=E6=AC=A1=E8=A7=A6=E5=8F=91=E4=BF=9D?= =?UTF-8?q?=E5=BA=95=E5=8F=AA=E8=A7=A6=E5=8F=91=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/logic/hero/HeroLogic.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) 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 9b6249cd3..c6d138081 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 Date: Wed, 27 May 2020 19:24:58 +0800 Subject: [PATCH 10/17] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E5=88=9D=E5=A7=8B=E5=8C=96bug=20=20=E7=82=B9=E9=87=91?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jieling-dbgen/Ldb.xml | 6 +- .../ljsd/jieling/jbean/ActivityManager.java | 17 ++-- .../jieling/logic/activity/ActivityLogic.java | 7 +- .../logic/activity/BuyGoldActivity.java | 86 +++++++++---------- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/jieling-dbgen/Ldb.xml b/jieling-dbgen/Ldb.xml index 1ab667780..f9730f3b5 100644 --- a/jieling-dbgen/Ldb.xml +++ b/jieling-dbgen/Ldb.xml @@ -8,7 +8,7 @@ - + @@ -25,8 +25,8 @@ - - 七日狂欢结束时间 + + 七日狂欢开始时间 幸运探宝奖池 高级幸运探宝奖池 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java b/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java index 1ec6ea0ee..2cb662b93 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java @@ -25,6 +25,7 @@ public final class ActivityManager extends MongoBase { public ActivityManager(ActivityManager _o_ ) { this.activityMissionMap = new HashMap(); _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/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 a27ced21b..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 @@ -54,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()), 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); - } - } + //点金刷新走商店 +// 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(type); - })); - 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); } From e20c1836198aebdc3d4d30562ca041b950cb2010 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Thu, 28 May 2020 18:57:30 +0800 Subject: [PATCH 11/17] =?UTF-8?q?=E5=AE=9A=E6=9C=9F=E6=8A=BD=E6=9F=A5?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/mongo/MongoUtil.java | 97 ++++++++++++++++++- .../com/ljsd/jieling/kefu/Cmd_checkdb.java | 36 +++++++ .../com/ljsd/jieling/kefu/cmd_reload.java | 28 ++++++ .../ljsd/jieling/logic/OnlineUserManager.java | 2 +- .../jieling/logic/store/BuyGoodsLogic.java | 2 +- .../ljsd/jieling/thread/task/MinuteTask.java | 18 ++++ 6 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_checkdb.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/kefu/cmd_reload.java 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..c952096f4 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.ExclusionStrategy; +import com.google.gson.FieldAttributes; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; 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,12 @@ 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.net.UnknownHostException; -import java.util.List; -import java.util.Random; +import java.util.*; public class MongoUtil { @@ -105,6 +116,88 @@ public class MongoUtil { } + public static void checkDb(){ + Set set = OnlineUserManager.sessionMap.keySet(); + Integer[] integers = set.toArray(new Integer[0]); + Set ids = new HashSet<>(); + Random random = new Random(); + for (int i = 0; i <3 ; i++) { + int i1 = random.nextInt(set.size()); + 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 shouldSkipField(FieldAttributes arg0) { + Transient annotation = arg0.getAnnotation(Transient.class); + if (annotation != null) { + return true; + } + return false; + } + @Override + public boolean shouldSkipClass(Class arg0) { + return false; + } + }).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()); + } + + }, new LinkedList<>(ids), 2); + } + } 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_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/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/thread/task/MinuteTask.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java index a57e45185..28f11346c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java @@ -1,5 +1,9 @@ package com.ljsd.jieling.thread.task; +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.ljsd.GameApplication; import com.ljsd.fight.CheckFight; import com.ljsd.jieling.config.reportData.DataMessageUtils; @@ -12,6 +16,7 @@ import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.handler.map.MapLogic; import com.ljsd.jieling.hotfix.HotfixUtil; +import com.ljsd.jieling.kefu.GmRoleAbstract; import com.ljsd.jieling.ktbeans.BeanBuilder.KtBeanBuilderUtils; import com.ljsd.jieling.ktbeans.KTRequestBeans.LoginParamType; import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean; @@ -38,13 +43,21 @@ import com.ljsd.jieling.logic.question.QuestionLogic; import com.ljsd.jieling.logic.store.BuyGoodsLogic; import com.ljsd.jieling.logic.store.StoreLogic; import com.ljsd.jieling.network.server.ProtocolsManager; +import com.ljsd.jieling.network.server.SessionManager; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.Family; +import com.ljsd.jieling.util.InnerMessageUtil; import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.SysUtil; import manager.STableManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +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.*; public class MinuteTask extends Thread { @@ -119,6 +132,11 @@ public class MinuteTask extends Thread { if(minute ==0){ LOGGER.info("everyHourTask start ..."); Poster.getPoster().dispatchEvent(new HourTaskEvent(hour)); + try { + MongoUtil.checkDb(); + }catch (Exception e){ + LOGGER.error("定期检查数据库对象数据一致性err"+e); + } LOGGER.info("everyHourTask end ..."); } } From 79daca78ee44ea6e9cfbe198545f785f00bdd629 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Thu, 28 May 2020 11:28:57 +0800 Subject: [PATCH 12/17] =?UTF-8?q?=E7=8C=8E=E5=A6=96=E5=92=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=A3=80=E6=9F=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jieling-dbgen/Ldb.xml | 2 - .../com/ljsd/jieling/db/mongo/MongoUtil.java | 90 ++-- .../EndExpeditionBattleRequest.java | 2 +- .../HeroNodeGetInfoRequestHandler.java | 16 +- .../Expedition/HeroNodeRequestHandler.java | 8 +- .../Expedition/TakeLayRewardHandler.java | 4 + .../com/ljsd/jieling/kefu/Cmd_role_fix.java | 24 + .../com/ljsd/jieling/kefu/Cmd_role_gm.java | 481 +++++++++++++++++- .../jieling/logic/dao/ExpeditionManager.java | 19 +- .../java/com/ljsd/jieling/logic/dao/Hero.java | 1 + .../ljsd/jieling/logic/dao/PlayerManager.java | 2 +- .../logic/expedition/ExpeditionLogic.java | 17 +- 12 files changed, 575 insertions(+), 91 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_fix.java diff --git a/jieling-dbgen/Ldb.xml b/jieling-dbgen/Ldb.xml index f9730f3b5..3f86350a2 100644 --- a/jieling-dbgen/Ldb.xml +++ b/jieling-dbgen/Ldb.xml @@ -1,7 +1,5 @@ - - 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 c952096f4..d5ad9f16f 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,7 @@ package com.ljsd.jieling.db.mongo; -import com.google.gson.ExclusionStrategy; -import com.google.gson.FieldAttributes; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import com.fasterxml.jackson.core.type.TypeReference; +import com.google.gson.*; import com.ljsd.common.mogodb.LjsdMongoTemplate; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.root.User; @@ -23,6 +21,7 @@ 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.*; @@ -51,8 +50,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"); } @@ -64,11 +63,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); @@ -81,15 +81,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(); @@ -116,20 +117,31 @@ public class MongoUtil { } - public static void checkDb(){ + 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++) { + 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->{ + 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); @@ -138,10 +150,14 @@ public class MongoUtil { } return false; } - @Override - public boolean shouldSkipClass(Class arg0) { - return false; + }).registerTypeAdapter(Map.class, (JsonDeserializer>) (json, typeOfT, context) -> { + TreeMap treeMap = new TreeMap<>(); + JsonObject jsonObject = json.getAsJsonObject(); + Set> entrySet = jsonObject.entrySet(); + for (Map.Entry entry : entrySet) { + treeMap.put(entry.getKey(), entry.getValue()); } + return treeMap; }).create(); @@ -154,50 +170,54 @@ public class MongoUtil { int m2 = v2.length; int j = 0; while (n-- != 0) { - if (v1[j] != v2[j]){ + if (v1[j] != v2[j]) { System.out.println("args = [" + v1[j] + "][" + v2[j] + "]\r\n"); - break;} + 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));) { + 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));) { + 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"); + 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); + 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.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()); + LOGGER.error("定期检查数据库对象数据一致性 err" + byId.getId() + " \r\nmem_string \r\n" + substring + " \r\ndb_string \r\n" + dbstring); + } else { + LOGGER.info("定期检查数据库对象数据一致性 匹配" + byId.getId()); } + //JsonObject obj = (JsonObject) parser.parse(json1); + //JsonParser parser1 = new JsonParser(); + //JsonObject obj1 = (JsonObject) parser1.parse(json2); 也可以 不好排查 + }, 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 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/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/expedition/ExpeditionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java index 3311f0a5d..d8c7d960c 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 @@ -292,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)); @@ -813,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); @@ -864,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); } From 41f90ab191045d3c1c22f78c4bc5dc04f7c2cfa5 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Thu, 28 May 2020 11:39:03 +0800 Subject: [PATCH 13/17] =?UTF-8?q?=E5=AF=B9=E6=89=8B=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=88=A4=E7=A9=BA=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/championship/ChampionshipLogic.java | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) 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); From 32962c32d4ca368a2df84262d777c3de8cfdf5b6 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Fri, 29 May 2020 13:40:21 +0800 Subject: [PATCH 14/17] =?UTF-8?q?=E7=8C=8E=E5=A6=96=E5=92=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=A3=80=E6=9F=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/mongo/MongoUtil.java | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) 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 d5ad9f16f..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,7 +1,9 @@ package com.ljsd.jieling.db.mongo; +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; @@ -24,6 +26,7 @@ import java.io.PrintWriter; import java.lang.reflect.Type; import java.net.UnknownHostException; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class MongoUtil { @@ -150,15 +153,16 @@ public class MongoUtil { } return false; } - }).registerTypeAdapter(Map.class, (JsonDeserializer>) (json, typeOfT, context) -> { - TreeMap treeMap = new TreeMap<>(); - JsonObject jsonObject = json.getAsJsonObject(); - Set> entrySet = jsonObject.entrySet(); - for (Map.Entry entry : entrySet) { - treeMap.put(entry.getKey(), entry.getValue()); - } - return treeMap; - }).create(); + }).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); @@ -211,10 +215,15 @@ public class MongoUtil { } else { LOGGER.info("定期检查数据库对象数据一致性 匹配" + byId.getId()); } - - //JsonObject obj = (JsonObject) parser.parse(json1); - //JsonParser parser1 = new JsonParser(); - //JsonObject obj1 = (JsonObject) parser1.parse(json2); 也可以 不好排查 + 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); } From 69a4ac54236082db900547fef5fae4d0eedfbafb Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Sat, 30 May 2020 17:56:51 +0800 Subject: [PATCH 15/17] =?UTF-8?q?BUG=E3=80=90ID1007698=E3=80=91=E3=80=90?= =?UTF-8?q?=E6=88=90=E5=91=98=E3=80=91=E8=BF=9B=E9=98=B6=E5=BC=B9=E4=BA=86?= =?UTF-8?q?=E6=81=AD=E5=96=9C=E8=8E=B7=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/logic/item/ItemLogic.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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 7c4f18c4f..f455c684e 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 @@ -321,11 +321,14 @@ public class ItemLogic { } SItem sItem = SItem.getsItemMap().get(hero.getTemplateId()); - if (reward.length() == 0) { - reward = new StringBuilder(sItem.getResolveReward()); - } else { - reward.append("#").append(sItem.getResolveReward()); + if(null==filterItem){ + if (reward.length() == 0) { + reward = new StringBuilder(sItem.getResolveReward()); + } else { + reward.append("#").append(sItem.getResolveReward()); + } } + } ItemUtil.combineReward(user,false, StringUtil.parseFiledInt(reward.toString()),1,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,-1); From 2e3a64205be2f9894f3061b50e42bc635e80c31b Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Mon, 1 Jun 2020 15:19:32 +0800 Subject: [PATCH 16/17] =?UTF-8?q?=E7=BC=BA=E5=B0=91=E5=88=A4null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/logic/family/DeathPathLogic.java | 4 ++++ 1 file changed, 4 insertions(+) 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()){ From 26c1259480cfc2e49bb4b15e42335e0d55484dbe Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Mon, 1 Jun 2020 15:26:12 +0800 Subject: [PATCH 17/17] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E6=A2=B3=E7=90=86=E5=92=8C=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/logic/dao/UserMissionManager.java | 18 + .../jieling/logic/mission/MissionLoigc.java | 6 + .../jieling/logic/mission/MissionType.java | 336 ++++++++++-------- 3 files changed, 202 insertions(+), 158 deletions(-) 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/mission/MissionLoigc.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java index 85cbe0acd..1396a47b8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java @@ -448,6 +448,12 @@ public class MissionLoigc { } } + + /** + * TODO 不够抽象 ifelse? + * + * 已经有了映射关系 不应再ifelse 现100及1以后的类型 进度完成状态及进度迁移到类型处理器中 + */ public static int getDoingProgress(User user,CumulationData cumulationData, int missionTypeId, int[] missionSubType){ MissionType missionType = MissionType.findByMissionId(missionTypeId); if(missionType == null){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java index fc262affb..3f31bbcee 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java @@ -1,5 +1,8 @@ package com.ljsd.jieling.logic.mission; +import java.util.HashMap; +import java.util.Map; + public enum MissionType { RECRUITMENT_RANDOM_HEROES(1), //群英征募 群英招募次数 COLLECT_QUALITY_HERO (2), //获得某品质妖灵师 获得SSR、SR品质的妖灵师数量 @@ -92,7 +95,11 @@ public enum MissionType { FINISH_EXPEDITION_HERO_TIMES(84),//完成猎妖之路次数达到 SEVEN_GIFT_BUY(86),//购买7日狂欢福利礼包%s次七日狂欢积分 FINISIN_DAILY_CHALLENGE_TIMES(87),//完成%s类型(0为不限类型)的日常副本%s次 - + SIX_RANDOM_TIMES(88),//使用6灵阁召唤num次 + EXPEDITION_FLOOR_TIMES(89),//猎妖之路通过第floor层的首领节点(每层最多一个)num次 + DECOMPOSE_TIMES(100),//献祭武将num个 + DEATH_PATH_TIMES(101),//击杀过关十绝阵num次 + JEWL_ALL_LEVE(102),//全体上阵成员法宝等级达到level(需求人数6人,不满上阵不计完成度) ; private int missionType; @@ -105,163 +112,176 @@ public enum MissionType { this.missionType = missionType; } - 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; - } + static Map 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; +// } +// +// } }