修复公会副本重复刷新的bug

main
grimm 2025-03-23 01:28:35 +08:00
parent 96b04d6e71
commit 65d4c814e2
1 changed files with 68 additions and 54 deletions

View File

@ -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<Integer, Set<Integer>> members = guildInfo.getMembers();
for(Set<Integer> 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<Integer, SGuildCheckpointRank> configMap = RewardStaticConfig.getGuildChallengeConfigMap().get(bossId);
if (configMap==null||configMap.isEmpty()){
return;
}
Set<ZSetOperations.TypedTuple<String>> rankInfos = rank.getRankByKey(guildId + ":" + bossId, 0, configMap.size());
if(rankInfos.size()<1){
return;
}
try{
int index = 1;
for(ZSetOperations.TypedTuple<String> rankInfo:rankInfos){
String title = SErrorCodeEerverConfig.getI18NMessage("GuildRanking_mail_gonghui_title");
List<String> content = SErrorCodeEerverConfig.getI18NMessageNew("GuildRanking_mail_gonghui_txt", new Object[]{index});
if (configMap!=null&&!configMap.isEmpty()){
Set<ZSetOperations.TypedTuple<String>> rankInfos = rank.getRankByKey(guildInfo.getId() + ":" + bossId, 0, configMap.size());
if(rankInfos.size()>=1){
try{
int index = 1;
for(ZSetOperations.TypedTuple<String> rankInfo:rankInfos){
String title = SErrorCodeEerverConfig.getI18NMessage("GuildRanking_mail_gonghui_title");
List<String> 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<Integer, Set<Integer>> members = guildInfo.getMembers();
for(Set<Integer> 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);
}
}
}