挑战副本

back_recharge
xuexinpeng 2022-04-14 18:23:30 +08:00
parent df7006924b
commit a325ba0451
9 changed files with 507 additions and 2 deletions

View File

@ -31,6 +31,8 @@ public enum FightType {
CrossLingMaiSecretFight(25),//灵脉秘境 CrossLingMaiSecretFight(25),//灵脉秘境
ExploreShouChao(26),//兽潮来袭 ExploreShouChao(26),//兽潮来袭
ExploreXinMo(27),//心魔试炼 ExploreXinMo(27),//心魔试炼
ENDLESS_NEW_TEAM(28),//新无尽战斗
TREASURE_TEAM(29),//宝物战斗
; ;
private int type; private int type;

View File

@ -0,0 +1,182 @@
package com.ljsd.jieling.handler.map.mapHandler;
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.handler.map.MapLogic;
import com.ljsd.jieling.logic.dao.TeamEnum;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.fight.FightDispatcher;
import com.ljsd.jieling.logic.fight.FightUtil;
import com.ljsd.jieling.logic.fight.GameFightType;
import com.ljsd.jieling.logic.fight.PVEFightEvent;
import com.ljsd.jieling.logic.fight.result.FightResult;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SChallengeStage;
import config.SDailyChallengeConfig;
import config.SLotterySetting;
import manager.STableManager;
import org.springframework.stereotype.Component;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
import java.util.HashMap;
import java.util.Map;
/**
* @author lvxinran
* @date 2020/4/24
* @discribe
*/
@Component
public class ChallengeHandler extends BaseHandler<PlayerInfoProto.ChallengeRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.CHALLENGE_REQUEST;
}
@Override
public void processWithProto(ISession iSession, PlayerInfoProto.ChallengeRequest proto) throws Exception {
//MapLogic.getInstance().dailyChallenge(iSession,proto.getType(),proto.getId(), MessageTypeProto.MessageType.CHALLENGE_RESPONSE);
User user = UserManager.getUser(iSession.getUid());
if(user == null){
return;
}
PlayerInfoProto.ChallengeResponse.Builder builder = PlayerInfoProto.ChallengeResponse.newBuilder();
int type = proto.getType(); //1无尽 2宝物
int model = proto.getModel(); //1为挑战 2为扫荡
int id = proto.getId();
Map<Integer, SLotterySetting> config = STableManager.getConfig(SLotterySetting.class);
SChallengeStage sChallengeConfig = STableManager.getConfig(SChallengeStage.class).get(id);
SChallengeStage lastChange = STableManager.getConfig(SChallengeStage.class).get(id - 1);
if (sChallengeConfig == null) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
//次數
/*boolean consume = PlayerLogic.getInstance().checkAndUpdate(user, sChallengeConfig.getPivilegeID()[1], 1);
if (!consume) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}*/
int endlessNewReplicaLexel = user.getPlayerInfoManager().getEndlessNewReplica();
int treasureReplicaLexel = user.getPlayerInfoManager().getTreasureReplica();
/*
+ +
= +
+*
*/
if(model == 2){
//掃蕩
if(type ==1){
if(endlessNewReplicaLexel>id){
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.ExplorerMapEventResponse.getNumber(), builder.build(), true);
return;
}
}else if(type == 2){
if(treasureReplicaLexel>id){
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.ExplorerMapEventResponse.getNumber(), builder.build(), true);
return;
}
}
//扫荡 = 保底 +总奖励
Map<Integer, Integer> comDropMap = new HashMap<>();
/*for(int [] fix : sChallengeConfig.getFixedReward()){
if (comDropMap.containsKey(fix[0])) {
comDropMap.put(fix[0], comDropMap.get(fix[0]) + fix[1]);
} else {
comDropMap.put(fix[0], fix[1]);
}
}*/
for(int [] fix : sChallengeConfig.getPassReward()){
if (comDropMap.containsKey(fix[0])) {
comDropMap.put(fix[0], comDropMap.get(fix[0]) + fix[1]);
} else {
comDropMap.put(fix[0], fix[1]);
}
}
CommonProto.Drop.Builder drop = ItemUtil.drop(user, comDropMap.entrySet().stream().map(n ->
new int[]{n.getKey(), n.getValue()}).toArray(int[][]::new), BIReason.EXPLORE_MAP_COST_RETURN);
builder.setDrop(drop);
}else{
GameFightType fightType = GameFightType.EndlessNewTeam;
if(type ==1){
fightType = GameFightType.EndlessNewTeam;
if(sChallengeConfig.getNextLevel()!=endlessNewReplicaLexel){
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.ExplorerMapEventResponse.getNumber(), builder.build(), true);
return;
}else{
user.getPlayerInfoManager().setEndlessNewReplica(id);
}
}else if(type == 2){
fightType = GameFightType.TreasureTeam;
if(sChallengeConfig.getNextLevel()!= treasureReplicaLexel){
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.ExplorerMapEventResponse.getNumber(), builder.build(), true);
return;
}else{
user.getPlayerInfoManager().setTreasureReplica(id);
}
}
PVEFightEvent pveFightEvent = new PVEFightEvent(user.getId(), TeamEnum.FORMATION_NORMAL.getTeamId(), 1000, "",
fightType, 810020, 3);
FightResult fightResult = FightDispatcher.dispatcher(pveFightEvent);
Map<Integer, Integer> comDropMap = new HashMap<>();
/*for(int [] fix : sChallengeConfig.getFixedReward()){
if (comDropMap.containsKey(fix[0])) {
comDropMap.put(fix[0], comDropMap.get(fix[0]) + fix[1]);
} else {
comDropMap.put(fix[0], fix[1]);
}
}*/
//首次通关 给 保底 +总奖励 +通关奖励
if ((int) fightResult.getCheckResult()[0] == 1){
//赢了
for(int [] fix : sChallengeConfig.getPassReward()){
if (comDropMap.containsKey(fix[0])) {
comDropMap.put(fix[0], comDropMap.get(fix[0]) + fix[1]);
} else {
comDropMap.put(fix[0], fix[1]);
}
}
for(int [] fix : sChallengeConfig.getVictoryReward()){
if (comDropMap.containsKey(fix[0])) {
comDropMap.put(fix[0], comDropMap.get(fix[0]) + fix[1]);
} else {
comDropMap.put(fix[0], fix[1]);
}
}
}else{
//没打过 保底+总奖励*奖励百分比
//输了
for(int [] fix : sChallengeConfig.getPassReward()){
if (comDropMap.containsKey(fix[0])) {
comDropMap.put(fix[0], comDropMap.get(fix[0]) + (int)(fix[1]*0.5));
} else {
comDropMap.put(fix[0], (int)(fix[1]*0.5));
}
}
}
CommonProto.FightData fightData = CommonProto.FightData.newBuilder()
.setFightMaxTime(20)
.setFightSeed(fightResult.getSeed())
.setHeroFightInfos(fightResult.getFightTeamInfo())
.addAllMonsterList(fightResult.getMonsterTeamList())
.setFightType(fightType.getFightType().getType())
.setFightId(FightUtil.getFightId(user.getId(), fightType))
.build();
builder.setFightData(fightData);
CommonProto.Drop.Builder drop = ItemUtil.drop(user, comDropMap.entrySet().stream().map(n ->
new int[]{n.getKey(), n.getValue()}).toArray(int[][]::new), BIReason.EXPLORE_MAP_COST_RETURN);
builder.setDrop(drop);
}
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.ExplorerMapEventResponse.getNumber(), builder.build(), true);
}
}

View File

@ -0,0 +1,57 @@
package com.ljsd.jieling.handler.map.mapHandler;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.handler.map.MapLogic;
import com.ljsd.jieling.logic.arena.ChallengeLogic;
import com.ljsd.jieling.logic.dao.TeamEnum;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.fight.FightDispatcher;
import com.ljsd.jieling.logic.fight.FightUtil;
import com.ljsd.jieling.logic.fight.GameFightType;
import com.ljsd.jieling.logic.fight.PVEFightEvent;
import com.ljsd.jieling.logic.fight.result.FightResult;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.MessageUtil;
import config.SChallengeStage;
import manager.STableManager;
import org.springframework.stereotype.Component;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
/**
* @author lvxinran
* @date 2020/4/24
* @discribe
*/
@Component
public class ChallengeInfoHandler extends BaseHandler<PlayerInfoProto.ChallengeInfoRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.CHALLENGE_INFO_REQUEST;
}
@Override
public void processWithProto(ISession iSession, PlayerInfoProto.ChallengeInfoRequest proto) throws Exception {
User user = UserManager.getUser(iSession.getUid());
if(user == null){
return;
}
PlayerInfoProto.ChallengeInfoResponse.Builder builder = PlayerInfoProto.ChallengeInfoResponse.newBuilder();
ChallengeLogic.getInstance().check();
for (int i = 1; i <= 2; i++) {
CommonProto.ChallengeInfo.Builder info = CommonProto.ChallengeInfo.newBuilder()
.setType(i)
.setOverTime(ChallengeLogic.status[i-1])
.setCurrentFloor(i== 1? user.getPlayerInfoManager().getEndlessNewReplica():user.getPlayerInfoManager().getTreasureReplica());
builder.addInfo(info.build());
}
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.CHALLENGE_INFO_RESPONSE.getNumber(), builder.build(), true);
}
}

View File

@ -19,6 +19,7 @@ import com.ljsd.jieling.logic.activity.event.SuperBoxEvent;
import com.ljsd.jieling.logic.activity.eventhandler.*; import com.ljsd.jieling.logic.activity.eventhandler.*;
import com.ljsd.jieling.logic.activity.fourChallenge.FourChallengeLogic; import com.ljsd.jieling.logic.activity.fourChallenge.FourChallengeLogic;
import com.ljsd.jieling.logic.arena.ArenaLogic; import com.ljsd.jieling.logic.arena.ArenaLogic;
import com.ljsd.jieling.logic.arena.ChallengeLogic;
import com.ljsd.jieling.logic.championship.ChampionshipLogic; import com.ljsd.jieling.logic.championship.ChampionshipLogic;
import com.ljsd.jieling.logic.dao.ServerConfig; import com.ljsd.jieling.logic.dao.ServerConfig;
import com.ljsd.jieling.logic.dao.TimeControllerOfFunction; import com.ljsd.jieling.logic.dao.TimeControllerOfFunction;
@ -466,7 +467,8 @@ public class GlobalDataManaager implements IManager {
WeekCardLogic.getInstance().sendWeekCardRewardMail(session); WeekCardLogic.getInstance().sendWeekCardRewardMail(session);
//周卡每日刷新 //周卡每日刷新
WeekCardLogic.getInstance().sendWeekCardInitInfo(session); WeekCardLogic.getInstance().sendWeekCardInitInfo(session);
//TODO
ChallengeLogic.getInstance().ChallengeInfoIndication(session);
// GuildChallengeLogic.getInstance().resetBossDamage(user); // GuildChallengeLogic.getInstance().resetBossDamage(user);
if(TimeUtils.isSpanTime(user.getPlayerInfoManager().getLoginTime(),TimeUtils.now(),1,0)){ if(TimeUtils.isSpanTime(user.getPlayerInfoManager().getLoginTime(),TimeUtils.now(),1,0)){
user.getPlayerInfoManager().updateSituationPass(new HashMap<>()); user.getPlayerInfoManager().updateSituationPass(new HashMap<>());

View File

@ -0,0 +1,134 @@
package com.ljsd.jieling.logic.arena;
import com.google.gson.reflect.TypeToken;
import com.ljsd.GameApplication;
import com.ljsd.fight.ArenaRecord;
import com.ljsd.fight.FightType;
import com.ljsd.jieling.config.clazzStaticCfg.SArenaRobotStaticConfig;
import com.ljsd.jieling.core.FunctionIdEnum;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.core.VipPrivilegeType;
import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
import com.ljsd.jieling.logic.GlobalDataManaager;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.fourChallenge.FourChallengeLogic;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.cross.CSPlayer;
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.hero.HeroLogic;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.mission.event.MissionEventDistributor;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.logic.rank.RankContext;
import com.ljsd.jieling.logic.rank.RankEnum;
import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank;
import com.ljsd.jieling.logic.redpacket.WelfareRedPackEvent;
import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.thrift.idl.CrossArenaManager;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.*;
import manager.STableManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.*;
import util.MathUtils;
import util.StringUtil;
import util.TimeUtils;
import java.util.*;
public class ChallengeLogic {
private static final Logger LOGGER = LoggerFactory.getLogger(ChallengeLogic.class);
private ChallengeLogic(){}
public static class Instance {
public final static ChallengeLogic instance = new ChallengeLogic();
}
public static ChallengeLogic getInstance() {
return ChallengeLogic.Instance.instance;
}
/**
* 01
* 01
*/
public static int[] status = new int[2];
/**
*
*/
//public final int[][] config;
/*public static class Instance {
public final static FourChallengeLogic instance = new FourChallengeLogic(STableManager.getConfig(SCampTowerSetting.class).get(1).getCampOpenDay());
}
private FourChallengeLogic(int[][] config) {
this.config = config;
}*/
/**
*
*/
public static final int FIRST = 1;
/**
*
*/
public static final int MINI = 2;
/**
*
*/
public static final String fc = "fc";
/**
*
*/
public void check() {
status[0] = 1;
status[1] = 1;
/* int [][] config = {{1,3,5,7},{2,4,6,7}};
//status = new int[2];
for(int i = 0; i < config.length; i++){
for(int j = 0; j < config[i].length; j++){
// 判断当前周几
if (TimeUtils.getDayOfWeek() == config[i][j]) {
status[i] = 1;
break;
}
}
}*/
}
public void ChallengeInfoIndication(ISession session) throws Exception {
PlayerInfoProto.ChallengeInfoIndication.Builder builder = PlayerInfoProto.ChallengeInfoIndication.newBuilder();
check();
User user = UserManager.getUser(session.getUid());
for (int i = 1; i <= 2; i++) {
CommonProto.ChallengeInfo.Builder info = CommonProto.ChallengeInfo.newBuilder()
.setType(i)
.setOverTime(status[i-1])
.setCurrentFloor(i== 1? user.getPlayerInfoManager().getEndlessNewReplica():user.getPlayerInfoManager().getTreasureReplica());
builder.addInfo(info.build());
}
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.CHALLENGE_INFO_INDICATION_VALUE, builder.build(), true);
}
}

View File

@ -223,6 +223,12 @@ public class PlayerManager extends MongoBase {
return architectureInfoMap; return architectureInfoMap;
} }
/**
*
*/
private int endlessNewReplica; //无尽副本
private int treasureReplica; //宝物副本
public void putArchitectureInfo(int key, ArchitectureInfo info) { public void putArchitectureInfo(int key, ArchitectureInfo info) {
this.architectureInfoMap.put(key,info); this.architectureInfoMap.put(key,info);
updateString("architectureInfoMap", architectureInfoMap); updateString("architectureInfoMap", architectureInfoMap);
@ -1425,4 +1431,23 @@ public class PlayerManager extends MongoBase {
this.exploreEventMatchDefUid = exploreEventMatchDefUid; this.exploreEventMatchDefUid = exploreEventMatchDefUid;
updateString("exploreEventMatchDefUid",exploreEventMatchDefUid); updateString("exploreEventMatchDefUid",exploreEventMatchDefUid);
} }
public int getEndlessNewReplica() {
return endlessNewReplica;
}
public void setEndlessNewReplica(int endlessNewReplica) {
this.endlessNewReplica = endlessNewReplica;
updateString("endlessNewReplica",endlessNewReplica);
}
public int getTreasureReplica() {
return treasureReplica;
}
public void setTreasureReplica(int treasureReplica) {
this.treasureReplica = treasureReplica;
updateString("treasureReplica",treasureReplica);
}
} }

View File

@ -17,6 +17,8 @@ public enum TeamEnum {
TEAM_ARENA_ATTACH(201,"竞技场进攻编队(暂时不用)"), TEAM_ARENA_ATTACH(201,"竞技场进攻编队(暂时不用)"),
TRIAL_TEAM(301,"森罗环境编队"), TRIAL_TEAM(301,"森罗环境编队"),
ENDLESS_TEAM(401,"无尽编队"), ENDLESS_TEAM(401,"无尽编队"),
ENDLESS_NEW_TEAM(402,"新无尽编队"),
TREASURE_TEAM(403,"宝物编队"),
BLOODY_TEAM(701,"血战队伍"), BLOODY_TEAM(701,"血战队伍"),
CHAMPION_ATTACK_TEAM(801,"巅峰赛进攻队伍(暂时不用)"), CHAMPION_ATTACK_TEAM(801,"巅峰赛进攻队伍(暂时不用)"),
EXPEDITION_TEAM(1001,"大闹天宫"), EXPEDITION_TEAM(1001,"大闹天宫"),

View File

@ -51,7 +51,10 @@ public enum GameFightType {
FourChallenge(FightType.FourChallenge,new DefaultWithoutHandFightHandler(),null), FourChallenge(FightType.FourChallenge,new DefaultWithoutHandFightHandler(),null),
SevenWorld(FightType.QIJIE_FIGHT,new SevenWorldFightHandler(),null), SevenWorld(FightType.QIJIE_FIGHT,new SevenWorldFightHandler(),null),
CrossLingMaiSecretFight(FightType.CrossLingMaiSecretFight,new DefaultWithoutHandFightHandler(),null), CrossLingMaiSecretFight(FightType.CrossLingMaiSecretFight,new DefaultWithoutHandFightHandler(),null),
ExploreShouChaoFight(FightType.ExploreShouChao,new DefaultWithoutHandFightHandler(),null),; ExploreShouChaoFight(FightType.ExploreShouChao,new DefaultWithoutHandFightHandler(),null),
EndlessNewTeam(FightType.ENDLESS_NEW_TEAM,new DefaultWithoutHandFightHandler(),null),
TreasureTeam(FightType.TREASURE_TEAM,new DefaultWithoutHandFightHandler(),null),
;

View File

@ -0,0 +1,98 @@
package config;
import manager.STableManager;
import manager.Table;
import java.util.Map;
@Table(name ="ChallengeStage")
public class SChallengeStage implements BaseConfig {
private int id;
private int chapter;
private int section;
private int nextLevel;
private int[][] levelLimit;
private int stageType;
private int monsterGroup;
private int[] hardStageBuff;
private int[][] fixedReward;
private int[][] passReward;
private int[][] victoryReward;
private int[][] reward1;
private int[] pivilegeID;
@Override
public void init() throws Exception {
Map<Integer, SChallengeStage> config = STableManager.getConfig(SChallengeStage.class);
}
public int getId() {
return id;
}
public int getChapter() {
return chapter;
}
public int getSection() {
return section;
}
public int getNextLevel() {
return nextLevel;
}
public int[][] getLevelLimit() {
return levelLimit;
}
public int getStageType() {
return stageType;
}
public int getMonsterGroup() {
return monsterGroup;
}
public int[] getHardStageBuff() {
return hardStageBuff;
}
public int[][] getFixedReward() {
return fixedReward;
}
public int[][] getPassReward() {
return passReward;
}
public int[][] getVictoryReward() {
return victoryReward;
}
public int[][] getReward1() {
return reward1;
}
public int[] getPivilegeID() {
return pivilegeID;
}
}