generated from root/miduo_server
修复公会副本重复刷新的bug
parent
96b04d6e71
commit
65d4c814e2
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue