Просмотр исходного кода

fix 一次生多级时重复发等级奖励

Jim 10 месяцев назад
Родитель
Сommit
8c103742bd

+ 4 - 0
serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java

@@ -1030,6 +1030,10 @@ public class MapManager extends MongoBase {
         return levelUpRewarded;
     }
 
+    public void setLevelUpRewarded(Map<Integer, Integer> levelUpRewarded) {
+        this.levelUpRewarded = levelUpRewarded;
+        updateString("levelUpRewarded", levelUpRewarded);
+    }
     public void addLevelUpRewarded(int level) {
         difficultyOptions.put(level,1);
         updateString("levelUpRewarded", difficultyOptions);

+ 1 - 0
serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java

@@ -88,6 +88,7 @@ public class ActivityLogic implements IEventHandler {
         ActivityLogic.getInstance().resumeActivity(user, ActivityType.DAILY_RECHARGE_2);
         //更新每日累计充值
         ActivityLogic.getInstance().resumeActivity(user, ActivityType.RECHARGE_NUM);
+        ActivityLogic.getInstance().resumeActivity(user, ActivityType.RECHARGE_SUM_DAY);
         //更新首日充值st
         user.getPlayerInfoManager().getRechargeInfo().setDailyFirst(0);
         //更新累计充值天数

+ 1 - 1
serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java

@@ -34,7 +34,7 @@ public interface ActivityType {
     int DAILY_RECHARGE_2 = 130;//每日充值
     int RealGrowthFund = 666; //成长基金
 
-    int RECHARGE_SUM_DAY = 14;//累计充值天数
+    int RECHARGE_SUM_DAY = 14;//累计充值天数 目前只用于累充礼盒
     int EXCHANGEANDDROP = 15;//限时兑换活动
     int SECURT_EXPERT = 16;//  探索达人 == 秘境达人
     int ARENA_EXPERT = 17;//  竞技达人

+ 9 - 4
serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java

@@ -55,7 +55,7 @@ public class ItemUtil {
     private static Map<Integer, String> dropRewardMap = new ConcurrentHashMap<>();
     private static Set<Integer> dropAddition = new HashSet<>();//掉落权重加成id
     public static Map<Integer, String> equipQulityNameMap = new HashMap<>(2);
-    private static final Logger LOGGER = LoggerFactory.getLogger("ItemLog");
+    private static final Logger LOGGER = LoggerFactory.getLogger(ItemUtil.class);
 
     private static Set<Integer> currencyMap = new HashSet<>(2);
 
@@ -868,6 +868,8 @@ public class ItemUtil {
             levelUpExp = sPlayerLevelConfig.getExp();
         }
         PlayerInfoProto.UpdateUserExpIndicaiton.Builder builder = PlayerInfoProto.UpdateUserExpIndicaiton.newBuilder();
+        Map<Integer, Integer> map = user.getMapManager().getLevelUpRewarded();
+        boolean isSendLevelReward = false;
         while (curExp >= levelUpExp && curExp <= maxExp) {
             if (playerInfoManager.getLevel() == 2 && playerInfoManager.getNickName().equals(String.valueOf(playerInfoManager.getRootId()))) {
                 //TODO 走表
@@ -891,10 +893,9 @@ public class ItemUtil {
                     sPlayerLevelConfig = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(playerInfoManager.getLevel());
                     levelUpExp = sPlayerLevelConfig.getExp();
                     // 等级奖励
-                    MapManager map = user.getMapManager();
                     Integer lv = playerInfoManager.getLevel();
                     for (Map.Entry<Integer, String> entry : levelUpReward.entrySet()) {
-                        if (entry.getKey()>lv || map.isLevelUpRewarded(entry.getKey())) {
+                        if (entry.getKey()>lv || map.containsKey(entry.getKey())) {
                             continue;
                         }
                         int[][] reward = getItemArray(entry.getValue());
@@ -905,12 +906,16 @@ public class ItemUtil {
                         LOGGER.info("levelUpReward, player level = {}, rewardLv = {}, rewardStr = {}", lv, entry.getKey(), entry.getValue());
                         CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.LEVEL_UP_REWARD);
                         builder.setDrop(drop);
-                        map.addLevelUpRewarded(entry.getKey());
+                        map.put(entry.getKey(),1);
+                        isSendLevelReward = true;
                     }
                 }
             }
             //  Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.ROLE_LEVEUP_EVENT);
         }
+        if (isSendLevelReward) {
+            user.getMapManager().setLevelUpRewarded(map);
+        }
         playerInfoManager.setExp(curExp);
         ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId());
         boolean needPushUnlockEncouragePlan = false;