diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildChallengeLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildChallengeLogic.java index 94fc334..c2daf0f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildChallengeLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildChallengeLogic.java @@ -266,40 +266,19 @@ public class GuildChallengeLogic { long score = Double.valueOf(rank.getScoreById(user.getId(), guildId+":"+bossId)).longValue(); rank.addRank(uid,guildId+":"+bossId,score==-1?damage:score+damage); if(kill==1){ + //先处理自己的发奖逻辑,防止以已击杀bossid信息判断错误,1之前加完信息再结算永远会标记为已击杀,2就是之前遍历记录已击杀bossid,最后强制发击杀奖,实际击杀重复没做判断 GuildLogic.sendFamilyBaseUpdateIndication(guildInfo); - Map> members = guildInfo.getMembers(); - for(Set items : members.values()){ - for(Integer sendUid : items){ - if(!OnlineUserManager.sessionMap.containsKey(sendUid)){ - continue; - } - AyyncWorker worker = new AyyncWorker(UserManager.getUser(sendUid),false,(user1)->{ - GuildMyInfo guildMyInfo = user1.getGuildMyInfo(); - if(guildMyInfo.getGuildChallengeDamage()==0){ - return; - } - if(guildMyInfo.getRefreshedBoss().contains(bossId)) { - return; - } - int[] refreshPrivilege = config.getPrivilege(); - for(int clearPrivilege:refreshPrivilege){ - user1.getPlayerInfoManager().clearVipCount(clearPrivilege); - } - user1.getPlayerInfoManager().removeVipPriviliageId(3013); - user1.getStoreManager().removeStoreItemInfo(7,10031); - StoreLogic.sendStoreUpdateIndication(user1.getId(),user1.getStoreManager().getStoreInfoMap().get(7)); - guildMyInfo.setLastMonsterId(bossId+1); - guildMyInfo.setGuildChallengeDamage(0); - guildMyInfo.addRefreshedBoss(bossId); - }); - ProtocolsManager.getInstance().updateAyncWorker(worker); - } + GuildMyInfo info = user.getGuildMyInfo(); + //已经击杀过了,就不再发击杀奖励了 + if(info.getRefreshedBoss().contains(bossId)) { + drop = ItemUtil.drop(user, new int[]{config.getReward()}, 1, 0, 1); + }else{ + drop = ItemUtil.drop(user, new int[]{config.getReward(),config.getKillReward()}, 1, 0, 1); } - //异步发奖 - Runnable runnable = () -> sendRankReward(guildId,bossId); - runnable.run(); - drop = ItemUtil.drop(user, new int[]{config.getReward(),config.getKillReward()}, 1, 0, 1); + //异步发奖和处理boss刷新信息 + Runnable runnable = () -> sendRankReward(guildInfo,bossId,config); + runnable.run(); user.getUserMissionManager().onGameEvent(user, GameEvent.GUILD_ACTIVE_MISSION_UPDATE,101); //任务AchievementConfig 成功击杀1次公会副本type=101 user.getUserMissionManager().onGameEvent(user,GameEvent.DEATH_PATH); }else{ @@ -427,34 +406,69 @@ public class GuildChallengeLogic { MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true); } - private void sendRankReward(int guildId,int bossId){ + private void sendRankReward(GuildInfo guildInfo,int bossId,SGuildCheckpointConfig config){ AbstractRank rank = RankContext.getRankEnum(RankEnum.GUILD_CHALLENGE_RANK.getType()); Map configMap = RewardStaticConfig.getGuildChallengeConfigMap().get(bossId); - if (configMap==null||configMap.isEmpty()){ - return; - } - Set> rankInfos = rank.getRankByKey(guildId + ":" + bossId, 0, configMap.size()); - if(rankInfos.size()<1){ - return; - } - try{ - int index = 1; - for(ZSetOperations.TypedTuple rankInfo:rankInfos){ - String title = SErrorCodeEerverConfig.getI18NMessage("GuildRanking_mail_gonghui_title"); - List content = SErrorCodeEerverConfig.getI18NMessageNew("GuildRanking_mail_gonghui_txt", new Object[]{index}); + if (configMap!=null&&!configMap.isEmpty()){ + Set> rankInfos = rank.getRankByKey(guildInfo.getId() + ":" + bossId, 0, configMap.size()); + if(rankInfos.size()>=1){ + try{ + int index = 1; + for(ZSetOperations.TypedTuple rankInfo:rankInfos){ + String title = SErrorCodeEerverConfig.getI18NMessage("GuildRanking_mail_gonghui_title"); + List content = SErrorCodeEerverConfig.getI18NMessageNew("GuildRanking_mail_gonghui_txt", new Object[]{index}); - SGuildCheckpointRank config = configMap.get(index); - if(config==null){ - continue; - } - String mailReward = ItemUtil.getMailReward(config.getRankingReward()); - MailLogic.getInstance().sendMail(Integer.parseInt(rankInfo.getValue()), title, content, mailReward, TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); - index++; - } + SGuildCheckpointRank rankConfig = configMap.get(index); + if(rankConfig==null){ + continue; + } + int uid = Integer.parseInt(rankInfo.getValue()); + User user = UserManager.getUser(uid,true); + if(user != null){ + GuildMyInfo guildMyInfo = user.getGuildMyInfo(); + if(!guildMyInfo.getRefreshedBoss().contains(bossId)) { + //不在重复击杀名单里才发排行奖励 + String mailReward = ItemUtil.getMailReward(rankConfig.getRankingReward()); + MailLogic.getInstance().sendMail(uid, title, content, mailReward, TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + } + } + index++; + } // 排行不清除 // RedisUtil.getInstence().del(RedisKey.getKey(rank.getRedisKey(),"",false)); - }catch (Exception e){ - e.printStackTrace(); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + //刷新boss击杀信息 + Map> members = guildInfo.getMembers(); + for(Set items : members.values()){ + for(Integer sendUid : items){ + if(!OnlineUserManager.sessionMap.containsKey(sendUid)){ + continue; + } + AyyncWorker worker = new AyyncWorker(UserManager.getUser(sendUid),false,(user1)->{ + GuildMyInfo guildMyInfo = user1.getGuildMyInfo(); + if(guildMyInfo.getGuildChallengeDamage()==0){ + return; + } + if(guildMyInfo.getRefreshedBoss().contains(bossId)) { + return; + } + int[] refreshPrivilege = config.getPrivilege(); + for(int clearPrivilege:refreshPrivilege){ + user1.getPlayerInfoManager().clearVipCount(clearPrivilege); + } + user1.getPlayerInfoManager().removeVipPriviliageId(3013); + user1.getStoreManager().removeStoreItemInfo(7,10031); + StoreLogic.sendStoreUpdateIndication(user1.getId(),user1.getStoreManager().getStoreInfoMap().get(7)); + guildMyInfo.setLastMonsterId(bossId+1); + guildMyInfo.setGuildChallengeDamage(0); + guildMyInfo.addRefreshedBoss(bossId); + }); + ProtocolsManager.getInstance().updateAyncWorker(worker); + } } }