diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java index 1796de43c..b8571cae9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/HeroNodeRequestHandler.java @@ -4,6 +4,8 @@ import com.google.protobuf.GeneratedMessage; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.ktbeans.ReportEventEnum; +import com.ljsd.jieling.ktbeans.ReportUtil; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; @@ -18,6 +20,7 @@ import config.SExpeditionNodeConfig; import manager.STableManager; import util.StringUtil; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -115,7 +118,11 @@ public class HeroNodeRequestHandler extends BaseHandler itemlistList = drop.getItemlistList(); + List rewardIds = new ArrayList<>(itemlistList.size()); + List rewardNums = new ArrayList<>(itemlistList.size()); + itemlistList.forEach(item->{rewardIds.add(item.getItemId());rewardIds.add(item.getItemNum());}); + ReportUtil.onReportEvent(user,ReportEventEnum.START_TIANGONG.getType(),nodeInfo.getType(),rewardIds,rewardNums); return Expedition.HeroNodeResponse.newBuilder().setDrop(drop).build(); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java index a83ae5600..1ad32f8be 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java @@ -126,7 +126,7 @@ public class StartExpeditionBattleRequest extends BaseHandler0){ + canSweep = 1; + } Family.GetGuildChallengeInfoResponse response = Family.GetGuildChallengeInfoResponse.newBuilder() + .setCanSweep(canSweep) .setCurBoss(currBossId) - .setBlood(bossHpRemain==0?10000:(int)(bossHpRemain*10000/999999)).build(); + .setBlood(bossHpRemain==0?10000:(int)(bossHpRemain*10000/config.getMonsterHp())).build(); MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true); @@ -98,18 +114,37 @@ public class GuildChallengeLogic { CommonProto.FightData fightData = null; int kill = 0; long damage = 0; + GuildInfo guildInfo; + SGuildCheckpointConfig config = STableManager.getConfig(SGuildCheckpointConfig.class).get(bossId); + int[] privilege = config.getPrivilege(); + boolean check = PlayerLogic.getInstance().check(user, privilege[0], 1); +// if(!check){ +// throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); +// } + //锁住 synchronized (lockMap.get(guildId)){ - GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId); + guildInfo = GuilidManager.guildInfoMap.get(guildId); + GuildMyInfo guildMyInfo = user.getGuildMyInfo(); + //先清除特权 + if(guildInfo.getCurrBossId()!=0&&guildInfo.getCurrBossId()== guildMyInfo.getLastMonsterId()){ + for(int clearPrivilege:privilege){ + user.getPlayerInfoManager().clearVipCount(clearPrivilege); + } + } if(guildInfo.getCurrBossId()!=bossId){ error = "已被击杀"; }else{ - SGuildCheckpointConfig config = STableManager.getConfig(SGuildCheckpointConfig.class).get(bossId); - if(type==0){ - PVEFightEvent pveFightEvent = new PVEFightEvent(uid, 1, 10, "", GameFightType.GuildChallenge, config.getMonsterId(), 3); + PVEFightEvent pveFightEvent = new PVEFightEvent(uid, 1501, 5, "", GameFightType.GuildChallenge, config.getMonsterId(), 3); if(guildInfo.getBossHpRemain()!=0){ List hp = new ArrayList<>(); - hp.add(guildInfo.getBossHpRemain()); + for(int i = 0 ; i <6;i++){ + if(i==1){ + hp.add(guildInfo.getBossHpRemain()); + }else{ + hp.add(0); + } + } pveFightEvent.setMonsterRemainHp(hp); } FightResult fightResult = FightDispatcher.dispatcher(pveFightEvent); @@ -123,24 +158,38 @@ public class GuildChallengeLogic { guildInfo.setCurrBossId(guildInfo.getCurrBossId() + 1); guildInfo.setBossHpRemain(0); }else if(checkResult[0]==0){ - guildInfo.setBossHpRemain(guildInfo.getBossHpRemain()==0?999999-damageInt:guildInfo.getBossHpRemain()-damageInt); + //怪物保持在第四位 + guildInfo.setBossHpRemain(checkResult[3]==0?10000:checkResult[3]); }else{ error = "战斗异常!"; } - user.getGuildMyInfo().setGuildChallengeDamage(damageInt); + guildMyInfo.setGuildChallengeDamage(damageInt); + guildMyInfo.setLastMonsterId(bossId); //记录血量 damage = damageInt; }else{ //扫荡 - guildInfo.setBossHpRemain(guildInfo.getBossHpRemain()-user.getGuildMyInfo().getGuildChallengeDamage()); - damage = user.getGuildMyInfo().getGuildChallengeDamage(); + guildInfo.setBossHpRemain(guildInfo.getBossHpRemain()- guildMyInfo.getGuildChallengeDamage()); + damage = guildMyInfo.getGuildChallengeDamage(); } drop = ItemUtil.drop(user, new int[]{config.getReward()}, 1, 0, 1); } } + if(kill==1){ + drop = ItemUtil.drop(user, new int[]{config.getReward(),config.getKillReward()}, 1, 0, 1); + } + double blood = guildInfo.getBossHpRemain(); + Family.GuildChallengeIndication.Builder indication = Family.GuildChallengeIndication.newBuilder() + .setBlood(guildInfo.getBossHpRemain()==0?10000:(int)(blood*10000/config.getMonsterHp())) + .setCurBoss(guildInfo.getCurrBossId()); + + GuildLogic.sendIndicationToMemberWithoutUser(guildInfo, MessageTypeProto.MessageType.GUILD_CHALLENGE_INDICATION,indication.build(),uid); + indication.setIsKill(kill); + MessageUtil.sendIndicationMessage(session,1,MessageTypeProto.MessageType.GUILD_CHALLENGE_INDICATION_VALUE,indication.build(),true); //伤害排行 + AbstractRank rank = RankContext.getRankEnum(RankEnum.GUILD_CHALLENGE_RANK.getType()); long score = Double.valueOf(rank.getScoreById(user.getId(), guildId+":"+bossId)).longValue(); rank.addRank(uid,guildId+":"+bossId,score==-1?damage:score+damage); @@ -154,6 +203,8 @@ public class GuildChallengeLogic { response.setFightData(fightData); } response.setKill(kill); + response.setDamage((int)damage); + PlayerLogic.getInstance().checkAndUpdate(user,config.getPrivilege()[0],1); MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java index a3b6c7929..eb65e0d26 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java @@ -1070,6 +1070,21 @@ public class GuildLogic { } } } + public static void sendIndicationToMemberWithoutUser(GuildInfo guildInfo, MessageTypeProto.MessageType messageType, GeneratedMessage generatedMessage,int withOutUId){ + Map> members = guildInfo.getMembers(); + for(Set items : members.values()){ + for(Integer sendUid : items){ + if(sendUid==withOutUId){ + continue; + } + ISession isession = OnlineUserManager.getSessionByUid(sendUid); + if(isession!=null){ + LOGGER.info("向{}发送indication",sendUid); + MessageUtil.sendIndicationMessage(isession,1,messageType.getNumber(),generatedMessage,true); + } + } + } + } /** * 修改公会图腾 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java index dee0e7cb6..cd4f54813 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java @@ -92,12 +92,13 @@ public class MonsterUtil { List monsterList = new ArrayList<>(); List hpInfo = hps.get(i); if(hpInfo!=null && !hpInfo.isEmpty()){ - int index=0; int position=1; for (int monsterId : monsterIds) { if(monsterId!=0){ SMonsterConfig sMonsterConfig = STableManager.getConfig(SMonsterConfig.class).get(monsterId); - monsterList.add( CBean2Proto.getMonster(sMonsterConfig, hpInfo.get(index++)).setPosition(position++).build()); + monsterList.add( CBean2Proto.getMonster(sMonsterConfig, hpInfo.get(position-1)).setPosition(position++).build()); + }else{ + position++; } } @@ -106,7 +107,10 @@ public class MonsterUtil { for (int monsterId : monsterIds) { if(monsterId!=0){ monsterList.add(monsterMap.get(monsterId).setPosition(position++).build()); + }else{ + position++; } + } } map.put(i,monsterList); diff --git a/tablemanager/src/main/java/config/SGuildCheckpointConfig.java b/tablemanager/src/main/java/config/SGuildCheckpointConfig.java index 17cddb296..d9fb84e46 100644 --- a/tablemanager/src/main/java/config/SGuildCheckpointConfig.java +++ b/tablemanager/src/main/java/config/SGuildCheckpointConfig.java @@ -32,6 +32,8 @@ public class SGuildCheckpointConfig implements BaseConfig { private int[][] rewardNumber; + private int monsterHp; + @Override public void init() throws Exception { @@ -87,5 +89,7 @@ public class SGuildCheckpointConfig implements BaseConfig { return rewardNumber; } - + public int getMonsterHp() { + return monsterHp; + } } \ No newline at end of file