diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index d7c1a2d22..b9c49199d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -253,6 +253,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ Poster.getPoster().dispatchEvent(new HeroUpStarEvent(user.getId(),10023,0)); // 无尽秘宝处理 endLessTreasureHandler(user); + expeditionTreasureHandler(user); user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_TASK_TYPE,0,user); MessageUtil.sendIndicationMessage(iSession, 1, MessageTypeProto.MessageType.WorldLevelIndication_VALUE, PlayerInfoProto.WorldLevelIndication.newBuilder().setWorldLeve(GlobleSystemLogic.getGlobalWorldLevelCache()).build(), true); MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_PLAYERINFO_RESPONSE_VALUE, getPlayerInfoResponse, true); @@ -283,6 +284,22 @@ public class GetPlayerInfoHandler extends BaseHandler{ } } + /** + * 天宫秘宝刷新 + * @param user + */ + private void expeditionTreasureHandler(User user){ + // 天宫秘宝礼包获取 + ReceiveWelfareBag bagInfo = (ReceiveWelfareBag) user.getPlayerInfoManager().getNewRechargeInfo().getReceiveMap().get(106); + if (bagInfo == null){ + return; + } + // 刷新礼包 + if (user.getExpeditionManager().getWorldTreasureReward().getIsBuy() == 0 && bagInfo.isBought()){ + bagInfo.refresh(); + } + } + ///登录获取四象心法数据 private List getSixiangxinfaInfos(HeroManager heroManager) { Map sixiangDataMap = heroManager.getSixiangDataMap(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java index 815fdc6e2..f8dde5836 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java @@ -152,6 +152,13 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler activityMission.getV()){ activityMission.setV(trialInfo.getFloor()); - rankFloor = trialInfo.getFloor(); }else if(trialInfo.getFloor()>10000){ activityMission.setV(trialInfo.getFloor()-10000); - rankFloor = trialInfo.getFloor()-10000; - } - if( rankFloor!=0 ){ - RankContext.getRankEnum(RankEnum.EXPERT_RANK.getType()).addRank(user.getId(),String.valueOf(id),rankFloor); - } + } + RankContext.getRankEnum(RankEnum.EXPERT_RANK.getType()).addRank(user.getId(),String.valueOf(id),activityMission.getV()); }else{ activityMission.setV(count + activityMission.getV()); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GrowthFundActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GrowthFundActivity.java index 801dd48bc..ce864b3c4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GrowthFundActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/GrowthFundActivity.java @@ -25,9 +25,8 @@ class GrowthFundActivity extends AbstractActivity { int[][] values = sActivityRewardConfig.getValues(); User user = UserManager.getUser(session.getUid()); SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); - AbstractWelfareBag bag = user.getPlayerInfoManager().getNewRechargeInfo().getReceiveMap().get(sGlobalActivity.getCanBuyRechargeId()[0]); - int buyTimes = bag.getBuyTimes(); - if(buyTimes == 0){ + ReceiveWelfareBag bag = (ReceiveWelfareBag)user.getPlayerInfoManager().getNewRechargeInfo().getReceiveMap().get(sGlobalActivity.getCanBuyRechargeId()[0]); + if (!bag.isBought()){ return false; } int type = values[0][0]; @@ -43,14 +42,6 @@ class GrowthFundActivity extends AbstractActivity { return true; } - @Override - public void onActivityEndOnMySelf(User user) throws Exception { -// SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); -// if(sGlobalActivity.getCanBuyRechargeId()!=null&&sGlobalActivity.getCanBuyRechargeId().length>0){ -// Arrays.stream(sGlobalActivity.getCanBuyRechargeId()).forEach(n->user.getPlayerInfoManager().getRechargeInfo().updateBuyGoodsTimes(n,0)); -// } - } - @Override void updateProgress(ActivityMission activityMission, int count) { activityMission.setV(count); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java index cac7e9513..5fde07fb2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java @@ -107,43 +107,43 @@ public class CrossServiceLogic { } private static CSPlayer formatUserToPlayer(User user){ - CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(user.getId()); + CSPlayer csPlayer = RedisUtil.getInstence().getObject(getKey(user.getId()), CSPlayer.class); int newScore=0,oldScore =0,crossYxldMaxLevel=0 ; - if(csPlayer!=null){ + if (csPlayer != null) { newScore = csPlayer.getCrossYuxulundaoNewScore(); oldScore = csPlayer.getCrossYuxulundaoOldScore(); crossYxldMaxLevel = csPlayer.getCrossYxldMaxLevel(); + } else { + csPlayer = new CSPlayer(); } - - CSPlayer player = new CSPlayer(); PlayerManager p = user.getPlayerInfoManager(); - player.setUserId(user.getId()); - player.setLevel(p.getLevel()); - player.setName(p.getNickName()); - player.setHead(p.getHead()); - player.setHeadFrame(p.getHeadFrame()); - player.setSkin(p.getUserSkin()); - player.setUserTitle(p.getUserTitle()); - player.setPracticeLevel(user.getHeroManager().getPracticeLevel()); - player.setServerId(GameApplication.serverId); - player.setSex(p.getSex()); - player.setUserMount(p.getUserMount()); - player.setCrossYuxulundaoNewScore(newScore); - player.setCrossYuxulundaoOldScore(oldScore); - player.setGuildId(p.getGuildId()); - player.setCrossYxldMaxLevel(crossYxldMaxLevel); + csPlayer.setUserId(user.getId()); + csPlayer.setLevel(p.getLevel()); + csPlayer.setName(p.getNickName()); + csPlayer.setHead(p.getHead()); + csPlayer.setHeadFrame(p.getHeadFrame()); + csPlayer.setSkin(p.getUserSkin()); + csPlayer.setUserTitle(p.getUserTitle()); + csPlayer.setPracticeLevel(user.getHeroManager().getPracticeLevel()); + csPlayer.setServerId(GameApplication.serverId); + csPlayer.setSex(p.getSex()); + csPlayer.setUserMount(p.getUserMount()); + csPlayer.setCrossYuxulundaoNewScore(newScore); + csPlayer.setCrossYuxulundaoOldScore(oldScore); + csPlayer.setGuildId(p.getGuildId()); + csPlayer.setCrossYxldMaxLevel(crossYxldMaxLevel); //玉虚三个队伍总战力 int force1 = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_YU_XU_LUN_DAO_ONE.getTeamId(), false); int force2 = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_YU_XU_LUN_DAO_TWO.getTeamId(), false); int force3 = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_YU_XU_LUN_DAO_THREE.getTeamId(), false); - player.setMaxFore(force1+force2+force3); + csPlayer.setMaxFore(force1+force2+force3); // 主线编队战力 int mainLine = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.FORMATION_NORMAL.getTeamId(), false); - player.setMainLineForce(mainLine); + csPlayer.setMainLineForce(mainLine); // 罗浮编队战力 int luoFu = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.FORMATION_NORMAL.getTeamId(), false); - player.setLuoFuForce(luoFu); - return player; + csPlayer.setLuoFuForce(luoFu); + return csPlayer; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index adc1bebb5..13deab3ae 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -684,6 +684,15 @@ public class ArenaLogic { CrossArenaManager crossArenaManager = null; if (csPlayer.getServerId() != GameApplication.serverId){ crossArenaManager = PlayerLogic.getInstance().getCrossArenaManagerData(csPlayer); + if(crossArenaManager.getTotalForceByTeam().containsKey(myteamId)){ + deforce = crossArenaManager.getTotalForceByTeam().get(myteamId); + } + }else{ + User defUser = UserManager.getUserNotCache(challengeUid); + if (defUser == null){ + throw new ErrorCodeException(ErrorCode.USE_NOT_EXIT); + } + deforce = HeroLogic.getInstance().calTeamTotalForce(defUser, myteamId, false); } deffightTeamInfo = FightUtil.makeCrossPersonData(csPlayer, myteamId, null, crossArenaManager); } @@ -1001,6 +1010,13 @@ public class ArenaLogic { Object get = RedisUtil.getInstence().hget(RedisKey.ARENA_PROUD_COUNT, String.valueOf(csPlayer.getUserId())); int proudTime = get==null?1:Integer.parseInt((String)get); String serverName = CrossServiceLogic.simplifyServerName(csPlayer.getServerId()); + // 旧数据兼容 + if (csPlayer.getLuoFuForce() == 0){ + CSPlayer redis = CrossServiceLogic.getPlayerByRedis(csPlayer.getUserId(), false); + if (redis != null){ + csPlayer = redis; + } + } CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder() .setUid(csPlayer.getUserId()) .setLevel(csPlayer.getLevel()) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index ec63c796b..6a0d1300c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -45,7 +45,7 @@ public class UserManager { private static Map userMapPutTime = new ConcurrentHashMap<>(); //离线读入 private static AtomicInteger login_f_num = new AtomicInteger(0);//登陆计数 private static final int LOGIN_F_LIMIT = 100;//报警界限 - private static final long LIVE_TIME = 60 * 60 * 1000L; + private static final long LIVE_TIME = 12 * 60 * 60 * 1000L; public static void addUser(User user) { userMap.put(user.getId(), user); @@ -62,43 +62,37 @@ public class UserManager { //离线清除逻辑 public static void checkOffline(){ -// try { -// Set collect = userMap.entrySet().stream().filter(integerUserEntry -> !OnlineUserManager.checkUidOnline(integerUserEntry.getKey())).map(Map.Entry::getValue).collect(Collectors.toSet()); -// if (OnlineUserManager.sessionMap.entrySet().isEmpty() && ChampionshipLogic.getProgress() == -1) { -// userMap.clear(); -// userMapPutTime.clear(); -// LOGGER.info("checkOffline no online clear all {}", userMap.keySet().size()); -// return; -// } -// long now = System.currentTimeMillis(); -// for (User integerUserEntry : collect) { -// Long addTime = userMapPutTime.getOrDefault(integerUserEntry.getId(), LIVE_TIME); -// if (now - addTime >= LIVE_TIME) { -// userMap.remove(integerUserEntry.getId()); -// userMapPutTime.remove(integerUserEntry.getId()); -// } -// } -// LOGGER.info("checkOffline left count={}", userMap.keySet().size()); -// }catch (Exception e){ -// LOGGER.error("Exception离线清除逻辑err={}",e.toString()); -// } try { Set collect = userMap.entrySet().stream().filter(integerUserEntry -> !OnlineUserManager.checkUidOnline(integerUserEntry.getKey())).map(Map.Entry::getValue).collect(Collectors.toSet()); - long l = System.currentTimeMillis(); - collect.forEach(integerUserEntry -> { - long offLineTime = integerUserEntry.getPlayerInfoManager().getOffLineTime(); - if (offLineTime < integerUserEntry.getPlayerInfoManager().getOnlineTime()) { - return; - } - if (l - offLineTime > 12 * 60 * 60 * 1000 && userMapPutTime.getOrDefault(integerUserEntry.getId(), 0L) > 12 * 60 * 60 * 1000) { + long now = System.currentTimeMillis(); + for (User integerUserEntry : collect) { + Long addTime = userMapPutTime.getOrDefault(integerUserEntry.getId(), LIVE_TIME); + if (now - addTime >= LIVE_TIME) { userMap.remove(integerUserEntry.getId()); userMapPutTime.remove(integerUserEntry.getId()); } - }); + } LOGGER.info("checkOffline left count={}", userMap.keySet().size()); - } catch (Exception e) { - LOGGER.error("Exception离线清除逻辑err={}", e.toString()); + }catch (Exception e){ + LOGGER.error("Exception离线清除逻辑err={}",e.toString()); } +// try { +// Set collect = userMap.entrySet().stream().filter(integerUserEntry -> !OnlineUserManager.checkUidOnline(integerUserEntry.getKey())).map(Map.Entry::getValue).collect(Collectors.toSet()); +// long l = System.currentTimeMillis(); +// collect.forEach(integerUserEntry -> { +// long offLineTime = integerUserEntry.getPlayerInfoManager().getOffLineTime(); +// if (offLineTime < integerUserEntry.getPlayerInfoManager().getOnlineTime()) { +// return; +// } +// if (l - offLineTime > 12 * 60 * 60 * 1000 && userMapPutTime.getOrDefault(integerUserEntry.getId(), 0L) > 12 * 60 * 60 * 1000) { +// userMap.remove(integerUserEntry.getId()); +// userMapPutTime.remove(integerUserEntry.getId()); +// } +// }); +// LOGGER.info("checkOffline left count={}", userMap.keySet().size()); +// } catch (Exception e) { +// LOGGER.error("Exception离线清除逻辑err={}", e.toString()); +// } } @@ -209,6 +203,7 @@ public class UserManager { public static User getUser(int uid,boolean canNull) throws Exception { User user = userMap.get(uid); if (user != null) { + userMapPutTime.put(uid, TimeUtils.now()); return user; } user = MongoUtil.getInstence().getMyMongoTemplate().findById(User.getCollectionName(), uid, User.class); 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 423060586..ca82a45c9 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 @@ -36,7 +36,6 @@ public class WorldTreasureReward extends MongoBase { score = 0; setRewardStatusMap(new HashMap<>()); setIsBuy(0); -// updateRound(round+1); } @Override diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java index 3b69dd4b3..b087690dc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.logic.dao.cross; -import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; +import com.ljsd.GameApplication; +import com.ljsd.jieling.db.mongo.AreaManager; /** * @Author hj @@ -191,6 +192,7 @@ public class CSPlayer { } public int getServerId() { + int serverId = AreaManager.getInstance().getServerIdByUid(userId, GameApplication.serverId); return serverId; } @@ -231,10 +233,6 @@ public class CSPlayer { } public int getMainLineForce() { - if (mainLineForce == 0){ - CSPlayer redis = CrossServiceLogic.getPlayerByRedis(userId, false); - mainLineForce = redis==null?0:redis.getMainLineForce(); - } return mainLineForce; } @@ -243,10 +241,6 @@ public class CSPlayer { } public int getLuoFuForce() { - if (mainLineForce == 0){ - CSPlayer redis = CrossServiceLogic.getPlayerByRedis(userId, false); - luoFuForce = redis==null?0:redis.getLuoFuForce(); - } return luoFuForce; } 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 57484a171..b1e5f30de 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 @@ -23,6 +23,7 @@ import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.mission.GameEvent; import com.ljsd.jieling.logic.store.BuyGoodsNewLogic; import com.ljsd.jieling.logic.store.StoreLogic; +import com.ljsd.jieling.logic.store.newRechargeInfo.bean.ReceiveWelfareBag; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; @@ -550,6 +551,12 @@ public class ExpeditionLogic { //重置 if(TimeUtils.nowInt()>=createTime){ user.getExpeditionManager().resetTreasureReward(); + // 天宫秘宝礼包刷新 + ReceiveWelfareBag bagInfo = (ReceiveWelfareBag) user.getPlayerInfoManager().getNewRechargeInfo().getReceiveMap().get(106); + if (bagInfo == null){ + return; + } + bagInfo.refresh(); sendAllTreasureInfo(user); BuyGoodsNewLogic.sendGiftGooodsIndication(user.getId()); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java index d322ff6cc..432eb9674 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java @@ -330,13 +330,16 @@ public class FriendLogic { public void sendAgree(ISession iSession, int type, int friendId ) throws Exception { int msgId = MessageTypeProto.MessageType.FRIEND_INVITE_OPERATION_RESPONSE_VALUE; int uid = iSession.getUid(); + // 自己的信息 User user = UserManager.getUser(uid); FriendManager friendManager = user.getFriendManager(); - User friendUser = UserManager.getUserNotCache(friendId); - if (friendId == 0 || friendUser == null){ - return; + // 好友的信息 + User friendUser = null; + FriendManager friendManager1 = null; + if(friendId!=0){ + friendUser = UserManager.getUserNotCache(friendId); + friendManager1 = friendUser.getFriendManager(); } - FriendManager friendManager1 = friendUser.getFriendManager(); List friends = friendManager.getFriends(); List applyFriends = friendManager.getApplyFriends(); int maxFriends = SSpecialConfig.getIntegerValue(SSpecialConfig.FRIENDAMOUNT_LIMIT); 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 ac7d817ce..a2fe32f40 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 @@ -1,5 +1,7 @@ package com.ljsd.jieling.logic.hero; +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; import com.ljsd.GameApplication; import com.ljsd.fight.FamilyHeroInfo; import com.ljsd.jieling.chat.logic.ChatLogic; @@ -1222,7 +1224,7 @@ public class HeroLogic { if (teamId == TeamEnum.FORMATION_NORMAL.getTeamId()) { Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(iSession.getUid())); } - //跨服 玉虚论道 + //跨服编队 if (TeamEnum.isCrossTeam(teamId)) { CrossServiceLogic.getInstance().saveBasicPlayerToRedis(user); } @@ -2728,7 +2730,16 @@ public class HeroLogic { if (propertyItem == null) { continue; } - Jewel j = (Jewel) propertyItem; + Jewel j = null; + if (propertyItem instanceof Jewel){ + j = (Jewel) propertyItem; + }else { + j = new Jewel(); + j.setHeroId(propertyItem.getHeroId()); + j.setLevel(propertyItem.getLevel()); + j.setEquipId(propertyItem.getEquipId()); + j.setBuildLevel(1); + } SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(j.getEquipId()); // 进阶 Map> rankPoolMap = SJewelRankupConfig.rankupMap.get(config.getRankupPool()); @@ -3300,7 +3311,6 @@ public class HeroLogic { if (heroManager.getHero(equip.getHeroId()) == null) { equip.setHeroId(""); } - return; } String remove = ""; 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 41b93ff25..7c9816047 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 @@ -336,8 +336,11 @@ public class ItemLogic { throw new ErrorCodeException(ErrorCode.ITEM_DECOMPOSE_NO_EQUIP); } PropertyItem propertyItem = equipMap.get(jewelId); - if (!StringUtil.isEmpty(propertyItem.getHeroId())&&user.getHeroManager().getHero(propertyItem.getHeroId())!=null) { - throw new ErrorCodeException(ErrorCode.ITEM_DECOMPOSE_SOULE_CANT); + if (!StringUtil.isEmpty(propertyItem.getHeroId())) { + Hero hero = user.getHeroManager().getHero(propertyItem.getHeroId()); + if (hero != null && hero.getJewelInfo().contains(jewelId)) { + throw new ErrorCodeException(ErrorCode.ITEM_DECOMPOSE_SOULE_CANT); + } } Jewel jewel = (Jewel) propertyItem; SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(propertyItem.getEquipId()); @@ -781,18 +784,27 @@ public class ItemLogic { } public static TreeSet getJewelEquipWithLeve(User user, int type, int rance, int leve) { - return user.getEquipManager().getEquipMap().entrySet().stream().filter(stringEquipEntry -> - StringUtil.isEmpty(stringEquipEntry.getValue().getHeroId()) - ).filter(stringPropertyItemEntry -> stringPropertyItemEntry.getValue() instanceof Jewel).filter(stringPropertyItemEntry -> { - if (((Jewel) stringPropertyItemEntry.getValue()).getBuildLevel() != 0 || stringPropertyItemEntry.getValue().getLevel() != 0) { - return false; - } + TreeSet strings = new TreeSet<>(); + for (Map.Entry stringPropertyItemEntry : user.getEquipManager().getEquipMap().entrySet()) { SJewelConfig config = STableManager.getConfig(SJewelConfig.class).get(stringPropertyItemEntry.getValue().getEquipId()); if (config == null) { - return false; + continue; } - return config.getLocation() == type && config.getRace() == rance && config.getLevel() == leve; - }).map(Map.Entry::getKey).collect(Collectors.toCollection(TreeSet::new)); + if (config.getLocation() != type || config.getRace() != rance || config.getLevel() != leve) { + continue; + } + if (!StringUtil.isEmpty(stringPropertyItemEntry.getValue().getHeroId())) { + Hero hero = user.getHeroManager().getHero(stringPropertyItemEntry.getValue().getHeroId()); + if (hero != null && hero.getJewelInfo().contains(stringPropertyItemEntry.getKey())) { + continue; + } + } + if (((Jewel) stringPropertyItemEntry.getValue()).getBuildLevel() != 0 || stringPropertyItemEntry.getValue().getLevel() != 0) { + continue; + } + strings.add(stringPropertyItemEntry.getValue().getId()); + } + return strings; } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index 47066f3a2..ccd9b0717 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -1710,6 +1710,9 @@ public class PlayerLogic { } } String rpcString = RedisUtil.getInstence().getObject(RedisKey.LOGIC_SERVER_INFO, Integer.toString(serverId), String.class, -1); + if (rpcString == null) { + return null; + } String[] split = rpcString.split(":"); if (split.length < 4) { LOGGER.error("获取玩家rpc地址,长度错误,rpc:{},玩家id:{},服务器id:{}", rpcString, uid, serverId); @@ -1736,7 +1739,8 @@ public class PlayerLogic { return null; } } - if (userStr == null) { + if (userStr == null || userStr.isEmpty()) { + LOGGER.error("getUserByRpc ,userStr == null uid={}", uid); return null; } Gson gson = RedisUtil.getInstence().getGson(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java index 722372419..717b130fa 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java @@ -267,6 +267,13 @@ public abstract class AbstractRank implements IRank { public CommonProto.UserRank.Builder getCrossOneUserRank(CSPlayer csPlayer, CommonProto.RankInfo.Builder everyRankInfo){ String serverName = CrossServiceLogic.simplifyServerName(csPlayer.getServerId()); GuildCache mapEntry = CrossDeathPathLogic.getCrossGuild(csPlayer.getGuildId()); + // 兼容 + if (csPlayer.getMainLineForce() == 0){ + CSPlayer redis = CrossServiceLogic.getPlayerByRedis(csPlayer.getUserId(), false); + if (redis != null){ + csPlayer = redis; + } + } return CommonProto.UserRank.newBuilder() .setUid(csPlayer.getUserId()) .setLevel(csPlayer.getLevel()) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java index 434eff572..6e89f5539 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java @@ -76,6 +76,13 @@ public class CrossArenaRank extends AbstractRank { if (query == null){ return; } + // 旧数据兼容 + if (query.getLuoFuForce() == 0){ + CSPlayer redis = CrossServiceLogic.getPlayerByRedis(query.getUserId(), false); + if (redis != null){ + query = redis; + } + } CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder() .setRank(index) .setParam1(query.getLuoFuForce()) @@ -89,6 +96,13 @@ public class CrossArenaRank extends AbstractRank { @Override public CommonProto.UserRank.Builder getCrossOneUserRank(CSPlayer csPlayer, CommonProto.RankInfo.Builder everyRankInfo){ CommonProto.UserRank.Builder oneUserRank = super.getCrossOneUserRank(csPlayer, everyRankInfo); + // 旧数据兼容 + if (csPlayer.getLuoFuForce() == 0){ + CSPlayer redis = CrossServiceLogic.getPlayerByRedis(csPlayer.getUserId(), false); + if (redis != null){ + csPlayer = redis; + } + } oneUserRank.setForce(csPlayer.getLuoFuForce()); return oneUserRank; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java index c3a6de4a5..387221167 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java @@ -389,7 +389,7 @@ public class BuyGoodsNewLogic { ExpeditionLogic.sendTreasureRewardUpdate(session,user.getExpeditionManager().getWorldTreasureReward().getScore(), rewardStatusMap,user.getExpeditionManager().getWorldTreasureReward().getCreateTime(),1); } - if(type == GiftGoodsType.SUN_LONG){ + if(type == GiftGoodsType.SUN_LONG){ PlayerManager playerManager = user.getPlayerInfoManager(); playerManager.setHadBuyTreasure(1); playerManager.setTreasureLevel(playerManager.getTreasureLevel()+15); @@ -786,7 +786,12 @@ public class BuyGoodsNewLogic { }else{ builder.setDynamicBuyTimes(bag.getLimit() - bag.getBuyTimes()); } - + // 礼包类型特殊处理,使用bought字段验证是否购买 + if(bag.getType() == RechargeType.receive.getType()){ + ReceiveWelfareBag receiveBag = (ReceiveWelfareBag) bag; + int bought = receiveBag.isBought()?1:0; + builder.setIsBought(bought); + } return builder.build(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/newRechargeInfo/bean/ReceiveWelfareBag.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/newRechargeInfo/bean/ReceiveWelfareBag.java index ef43567ef..e550848a5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/newRechargeInfo/bean/ReceiveWelfareBag.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/newRechargeInfo/bean/ReceiveWelfareBag.java @@ -58,23 +58,20 @@ public class ReceiveWelfareBag extends AbstractWelfareBag { @Override public boolean buy() { - if(super.buy()){ - if(bought){ - LOGGER.error("礼包:{}已经购买",getModId()); - return false; - }else { - setBought(true); - setStartTime(TimeUtils.getTodayZero()); - if(getDailyUpdate()>0){ - setRefreshTime(getStartTime() + getDailyUpdate() * TimeUtils.DAY); - } - if(getEndTime()!=0){ - setEndTime(TimeUtils.getTodayZero() + getContinueDays() * TimeUtils.DAY); - } - return true; + if (bought) { + LOGGER.error("礼包:{}已经购买", getModId()); + return false; + } else { + setBought(true); + setStartTime(TimeUtils.getTodayZero()); + if (getDailyUpdate() > 0) { + setRefreshTime(getStartTime() + getDailyUpdate() * TimeUtils.DAY); } + if (getEndTime() != 0) { + setEndTime(TimeUtils.getTodayZero() + getContinueDays() * TimeUtils.DAY); + } + return true; } - return false; } @Override