diff --git a/fightmanager/src/main/java/com/ljsd/fight/FightType.java b/fightmanager/src/main/java/com/ljsd/fight/FightType.java index 6c361ba1b..cf31baee7 100644 --- a/fightmanager/src/main/java/com/ljsd/fight/FightType.java +++ b/fightmanager/src/main/java/com/ljsd/fight/FightType.java @@ -22,7 +22,7 @@ public enum FightType { TenDespairArray(16),//十绝阵 Firend(17),//好友 TowerMap(18),//森罗幻境 - + TaSuiLingXiao(19),//踏碎凌霄 ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/TasuilingxiaoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/TasuilingxiaoHandler.java new file mode 100644 index 000000000..57e1d2881 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/TasuilingxiaoHandler.java @@ -0,0 +1,132 @@ +package com.ljsd.jieling.handler.activity; +import com.google.protobuf.GeneratedMessage; +import com.ljsd.fight.FightType; +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.ktbeans.ReportEventEnum; +import com.ljsd.jieling.ktbeans.ReportUtil; +import com.ljsd.jieling.logic.activity.event.GoldRefreshEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.activity.event.TaSuiLingXiaoEvent; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.fight.*; +import com.ljsd.jieling.logic.fight.result.FightResult; +import com.ljsd.jieling.logic.player.PlayerLogic; +import com.ljsd.jieling.util.ItemUtil; +import config.SMonsterConfig; +import config.SMonsterGroup; +import config.SNewHeroConfig; +import manager.STableManager; +import org.springframework.stereotype.Component; +import rpc.protocols.ActivityProto; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.CommonProto; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +@Component +public class TasuilingxiaoHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.TasuilingxiaoRequest; + } + @Override + public GeneratedMessage processWithProto(int uid, ActivityProto.TasuilingxiaoRequest proto) throws Exception { + // 用户信息 + User user = UserManager.getUser(uid); + if (user == null) { + throw new ErrorCodeException(ErrorCode.UNKNOWN); + } + // 读表 + SNewHeroConfig newHeroConfig = STableManager.getConfig(SNewHeroConfig.class).get(proto.getActivityId()); + int monsterGroupId = newHeroConfig.getMonsterGroup(); //怪物id + // 战斗逻辑 + PVEFightEvent pveFightEvent = new PVEFightEvent(user.getId(), GlobalsDef.FORMATION_NORMAL, 20, "", GameFightType.NewGeneral, monsterGroupId, 3); + FightResult fightResult = FightDispatcher.dispatcher(pveFightEvent); + CommonProto.FightData fightData = CommonProto.FightData.newBuilder() + .setFightMaxTime(20) + .setFightSeed(fightResult.getSeed()) + .setHeroFightInfos(fightResult.getFightTeamInfo()) + .addAllMonsterList(fightResult.getMonsterTeamList()) + .setFightType(FightType.TaSuiLingXiao.getType()) + .setFightId(FightUtil.getFightId(user.getId(), FightType.TaSuiLingXiao.getType())) + .build(); + + // 记录战报 + FightRecordLogic.getInstance().addRecordMap(user,fightData); + // 道具逻辑,封装好的 + CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder(); + // 消耗道具 + //PlayerLogic.getInstance().checkAndUpdate(user, proto.getPrivilageTypeId(),1); + SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(monsterGroupId); + // 获取怪物组 + int[][] contents = sMonsterGroup.getContents(); + double bossBlood = 0.0; //怪物初始化血量 + for (int i = 0; i < contents.length; i++) { + int[] ints = contents[i]; + for (int j = 0; j < ints.length; j++) { + if (ints[j] == 0){ + // 怪物不存在 + continue; + } + SMonsterConfig monsterConfig = STableManager.getConfig(SMonsterConfig.class).get(ints[j]); + // 计算总血量 + bossBlood+=monsterConfig.getHp(); + } + } + // 战斗结果,{战斗结果,战斗时间,单位1剩余血量......} + long[] checkResult = fightResult.getCheckResult(); + //输 + double lessBlood = 0.0; + + if (checkResult[0] == 1){ + lessBlood = bossBlood; + }else { + // 输 checkResult第三位开始为血量,下标0开始 + for (int i = 2; i < checkResult.length; i++) { + lessBlood+=checkResult[i]; + } + lessBlood = bossBlood - lessBlood; + //return ActivityProto.TasuilingxiaoResponse.newBuilder().setFightData(fightData).setDrop(drop).setDamageVal((int)lessBlood).build(); + } + + //取出所有奖励状态 + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(proto.getActivityId()); + int [][]damageListData = newHeroConfig.getValueDropCell(); + //完成目标个数 + int goal = 0; + List listState =mission.getActivityMissionMap().entrySet().stream() + .sorted(Map.Entry.comparingByKey()).map(e->e.getValue().getState()).collect(Collectors.toList()); + ListdropList = new ArrayList(); + for (int i = 0; i < damageListData.length; i++) { + int[] ints = damageListData[i]; + if(ints[0] > lessBlood){ + break; + } + goal += 1; + if(i <= listState.size()-1){ + if( listState.get(i) != 1){ + dropList.add(ints[1]); + } + } + } + boolean extarReward = PlayerLogic.getInstance().check(user, newHeroConfig.getDailyNumber(), 1); + if(extarReward){ + dropList.add(newHeroConfig.getDailyReward()); + user.getPlayerInfoManager().updateVipPrivilage(newHeroConfig.getDailyNumber(),1); + } + Poster.getPoster().dispatchEvent(new TaSuiLingXiaoEvent(uid,(int)lessBlood,goal)); + ItemUtil.drop(user,dropList.stream().mapToInt(Integer::intValue).toArray(),drop,1,0, BIReason.TA_SUI_LING_XIAO); + return ActivityProto.TasuilingxiaoResponse.newBuilder().setFightData(fightData).setDrop(drop).setDamageVal((int)lessBlood).build(); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java index 1c8df05cb..0f3749a89 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java @@ -106,7 +106,8 @@ public enum ReportEventEnum { START_DEMON_INVASION(72,"start_demon_invasion",CommonEventHandler.getInstance(),new String[]{"stage_id_travel","boss_ids","combat_results"}), // 通过逍遥游 COMPLETE_TRAVEL(73,"complete_travel",CommonEventHandler.getInstance(),new String[]{"stage_id_travel"}), - + // 新将来袭 + TA_SUI_LING_XIAO(74,"tasuilingxiao_boss",CommonEventHandler.getInstance(),new String[]{"boss_id","damage_num","reward_nums_list"}), VIP_LEVEL_UP(100,"", new VipLevelUpEventHandler(),new String[]{""}); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java index e047f9e6d..60f35d0fa 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java @@ -72,6 +72,7 @@ public interface ActivityType { int NEW_EIGHT_LOGIN = 56;//新的八日登录 int SIGN_BOX= 57;//累计签到宝箱 int JADE_DYNASTY_RECHARGE_SUM = 58;//破阵诛仙累充 + int TA_SUI_LING_XIAO = 66;//踏碎凌霄 int JADE_DYNASTY_MISSION = 20000;//破阵诛仙任务 int JADE_DYNASTY_SHOP = 20001;//破阵诛仙限时商市 int JADE_DYNASTY_RARE_SHOP = 20002;//破阵诛仙珍奇宝阁 @@ -92,4 +93,5 @@ public interface ActivityType { int DEMON_TREASURE = 36;//降妖夺宝 int NEW_GENERAL_ATTACK = 200;//新将来袭 + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java index 09e7dd157..b363b2b70 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java @@ -70,6 +70,8 @@ public enum ActivityTypeEnum { FIFTEEN_LOGIN(ActivityType.FIFTEEN_LOGIN,FifteenActivity::new), LUCKY_GET(ActivityType.LUCKY_GET,LuckyGetActivity::new), EQUIP_UPLEVEL(ActivityType.EQUIP_UPLEVEL,EquipUpLevelActivity::new), + TA_SUI_LING_XIAO(ActivityType.TA_SUI_LING_XIAO,TaSuiLingXiaoActivity::new), + ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TaSuiLingXiaoActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TaSuiLingXiaoActivity.java new file mode 100644 index 000000000..b81732071 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TaSuiLingXiaoActivity.java @@ -0,0 +1,75 @@ +package com.ljsd.jieling.logic.activity; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.jbean.ActivityManager; +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.activity.event.BlessInfoRefreshEvent; +import com.ljsd.jieling.logic.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.activity.event.TaSuiLingXiaoEvent; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SActivityRewardConfig; +import config.SGlobalActivity; +import config.SLuckyCatConfig; +import rpc.protocols.MessageTypeProto; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class TaSuiLingXiaoActivity extends AbstractActivity { + + public TaSuiLingXiaoActivity(int id) { + super(id); + Poster.getPoster().listenEvent(this, TaSuiLingXiaoEvent.class); + } + @Override + public void onEvent(IEvent event) throws Exception { + if(event instanceof TaSuiLingXiaoEvent){ + User user = UserManager.getUser(((TaSuiLingXiaoEvent) event).getUid()); + if(user == null){ + return; + } + if(user.getActivityManager().getActivityMissionMap().get(id) == null){ + return; + } + update(user,((TaSuiLingXiaoEvent) event).getCount(),((TaSuiLingXiaoEvent) event).getGoal()); + } + } + @Override + public boolean takeReward(ISession session, int missionId) throws Exception{ + //不能领取 随掉落走 + return false; + } + + public void update(User user, int count,int goal) { + ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); + if( null == activityMission){ + return; + } + if(count>activityMission.getV()){ + //最大伤害更新 + activityMission.setV(count); + } + //领取状态更新 + activityMission.getActivityMissionMap().entrySet().stream() + .sorted(Map.Entry.comparingByKey()).limit(goal) + .forEachOrdered(x->{ + if(x.getValue().getState() !=1){ + x.getValue().setState(1); + } + }); + //历史最高伤害 + ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); + sendActivityProgress(sessionByUid, activityMission, null); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/TaSuiLingXiaoEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/TaSuiLingXiaoEvent.java new file mode 100644 index 000000000..128460582 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/TaSuiLingXiaoEvent.java @@ -0,0 +1,37 @@ +package com.ljsd.jieling.logic.activity.event; + +public class TaSuiLingXiaoEvent implements IEvent { + private int uid; + private int count; + private int goal; + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public TaSuiLingXiaoEvent(int uid, int count, int goal) { + this.uid = uid; + this.count = count; + this.goal = goal; + } + + public int getGoal() { + return goal; + } + + public void setGoal(int goal) { + this.goal = goal; + } +} diff --git a/tablemanager/src/main/java/config/SNewHeroConfig.java b/tablemanager/src/main/java/config/SNewHeroConfig.java index 747c23487..8e781108c 100644 --- a/tablemanager/src/main/java/config/SNewHeroConfig.java +++ b/tablemanager/src/main/java/config/SNewHeroConfig.java @@ -20,6 +20,14 @@ public class SNewHeroConfig implements BaseConfig { private int[][] dropCell; + private int[][] valueDropCell; + + private int dailyReward; + + private int dailyNumber; + + + @Override public void init() throws Exception { @@ -50,6 +58,15 @@ public class SNewHeroConfig implements BaseConfig { public int[][] getDropCell() { return dropCell; } + public int[][] getValueDropCell() { + return valueDropCell; + } + public int getDailyReward() { + return dailyReward; + } + public int getDailyNumber() { + return dailyNumber; + } } \ No newline at end of file