轩辕宝镜代码提交

lvxinran 2020-08-15 13:42:36 +08:00
parent 5c23253d5e
commit 00198786e9
10 changed files with 191 additions and 36 deletions

View File

@ -261,6 +261,8 @@ public class RedisKey {
public static final String DEATH_PATH_TOTAL_GUILD_RANK = "DEATH_PATH_TOTAL_GUILD_RANK";
public static final String SITUATION_RANK = "SITUATION_RANK";
public static final String DEATH_PAHT_TOTAL_CHALLENGE_COUNT = "DEATH_PAHT_TOTAL_CHALLENGE_COUNT";

View File

@ -144,6 +144,8 @@ public interface BIReason {
int EQUIP_UNLOAD_REWARD = 79;
int ESPECIAL_BACK = 80;//法宝归元获得
int SITUATION_CHALLENGE_REWARD = 81;//轩辕宝镜获得
int ADVENTURE_UPLEVEL_CONSUME = 1000;//秘境升级
int SECRETBOX_CONSUME = 1001;//秘盒抽卡
int DECOMPOSE_ITEM_CONSUME = 1002;//分解道具消耗

View File

@ -332,7 +332,9 @@ public class GlobalDataManaager implements IManager {
FriendLogic.getInstance().refreshState(session);
PlayerLogic.getInstance().sendTimingMail(user);
user.getGuildMyInfo().setLastHurt(0);
if(TimeUtils.isSpanTime(user.getPlayerInfoManager().getLoginTime(),TimeUtils.now(),1,5)){
user.getPlayerInfoManager().updateSituationPass(new HashMap<>());
}
if(fBuilder!=null){
fBuilder.setSignInInfo(CommonProto.SignInInfo.newBuilder().setDays(user.getPlayerInfoManager().getSign()+1).setState(user.getPlayerInfoManager().getSignTotay()).build());
user.getPlayerInfoManager().setLoginTime(TimeUtils.now());

View File

@ -1,39 +1,44 @@
package com.ljsd.jieling.logic;
import com.ljsd.fight.CheckFight;
import com.ljsd.jieling.core.FunctionIdEnum;
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.ktbeans.ReportEventEnum;
import com.ljsd.jieling.ktbeans.ReportUtil;
import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.TeamPosHeroInfo;
import com.ljsd.jieling.logic.dao.TimeControllerOfFunction;
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.GameFightType;
import com.ljsd.jieling.logic.fight.PVEFightEvent;
import com.ljsd.jieling.logic.fight.*;
import com.ljsd.jieling.logic.fight.result.FightResult;
import com.ljsd.jieling.logic.mission.GameEvent;
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.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MapInfoProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.FightDataUtil;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import com.ljsd.jieling.util.MonsterUtil;
import config.SDailyChallengeConfig;
import config.SMainLevelConfig;
import config.SRaceTowerConfig;
import config.SSpecialConfig;
import config.*;
import manager.STableManager;
import org.luaj.vm2.LuaValue;
import util.TimeUtils;
import java.util.*;
import static com.ljsd.jieling.logic.fight.FightUtil.makePersonFightData;
/**
* @author lvxinran
* @date 2020/8/6
@ -56,7 +61,7 @@ public class SituationLogic {
private int[] overTime;
public void createCheckstatusTask(){
public void createCheckStatusTask(){
Runnable runnable = this::checkStatus;
runnable.run();
}
@ -80,6 +85,7 @@ public class SituationLogic {
if(hourOfDay<5){
week = week==0?7:week-1;
}
boolean isIndication = false;
for(int[] config:openConfig){
boolean isOpen = false;
for(int i = 1;i<config.length;i++){
@ -88,22 +94,59 @@ public class SituationLogic {
}
isOpen = true;
}
if((isOpen&&status[config[0]-1]==1)||(!isOpen&&status[config[0]-1]==0)){
isIndication = true;
}
status[config[0]-1] = isOpen?1:0;
overTime[config[0]-1] =isOpen?(int)(TimeUtils.getLastOrUnderHour(now,5,0,false)/1000):0;
}
if(isIndication){
//周一刷新
boolean remove = false;
if(TimeUtils.getDayOfWeek()==1){
remove = true;
}
try {
Map<Integer, ISession> sessionMap = OnlineUserManager.sessionMap;
for(Map.Entry<Integer, ISession> entry:sessionMap.entrySet()){
//发推送
PlayerManager playerInfoManager= UserManager.getUser(entry.getKey()).getPlayerInfoManager();
if (remove){
playerInfoManager.updateSituationPass(new HashMap<>());
}
MapInfoProto.GetAllSituationInfoResponse.Builder indication = MapInfoProto.GetAllSituationInfoResponse.newBuilder();
for(int i = 0 ; i < status.length;i++){
if(status[i]==0){
continue;
}
CommonProto.SituationInfo info = CommonProto.SituationInfo.newBuilder().setId(i+1)
.setOverTime(overTime[i])
.setPassId(playerInfoManager.getSituationPass().getOrDefault(i+1,0)).build();
indication.addInfos(info);
}
MessageUtil.sendIndicationMessage(entry.getValue(),1,MessageTypeProto.MessageType.SITUATION_INFO_INDICATION_VALUE,indication.build(),true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void getAllSituationStatus(ISession session, MessageTypeProto.MessageType messageType){
public void getAllSituationStatus(ISession session, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
MapInfoProto.GetAllSituationInfoResponse.Builder response = MapInfoProto.GetAllSituationInfoResponse.newBuilder();
Map<Integer, Integer> situationPass = user.getPlayerInfoManager().getSituationPass();
for(int i = 0 ; i < status.length;i++){
if(status[i]==0){
continue;
}
CommonProto.SituationInfo info = CommonProto.SituationInfo.newBuilder().setId(i+1).setOverTime(overTime[i]).build();
CommonProto.SituationInfo info = CommonProto.SituationInfo.newBuilder().setId(i+1)
.setOverTime(overTime[i])
.setPassId(situationPass.getOrDefault(i+1,0)).build();
response.addInfos(info);
}
MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true);
}
@ -113,27 +156,49 @@ public class SituationLogic {
PlayerManager playerInfoManager = user.getPlayerInfoManager();
// //次数校验
SRaceTowerConfig sRaceTowerConfig = STableManager.getConfig(SRaceTowerConfig.class).get(id);
Set<Integer> situationPass = playerInfoManager.getSituationPass();
Map<Integer,Integer> situationPass = playerInfoManager.getSituationPass();
boolean consumeCount = false;
if(type==2){
if(!situationPass.contains(id)){
if(!situationPass.containsKey(sRaceTowerConfig.getType())||situationPass.get(sRaceTowerConfig.getType())<id){
throw new ErrorCodeException(ErrorCode.DAILY_ALREADY_PASS);
}
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sRaceTowerConfig.getReward(), 1, 0, 1);
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sRaceTowerConfig.getReward(), 1, 0, BIReason.SITUATION_CHALLENGE_REWARD);
builder.setDrop(drop);
consumeCount = true;
}else if(type==1){
// //判断上一关是否已过
int openRules = sRaceTowerConfig.getOpenRules();
if(openRules!=0&&!situationPass.contains(openRules)){
if(openRules!=0&&situationPass.get(sRaceTowerConfig.getType())!=openRules){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
PVEFightEvent pveFightEvent = new PVEFightEvent(user.getId(), GlobalsDef.FORMATION_NORMAL, 1000, "", GameFightType.DailyChallenge, sRaceTowerConfig.getMonsterId(), 3);
FightResult fightResult = FightDispatcher.dispatcher(pveFightEvent);
//编队规则校验
int formation = sRaceTowerConfig.getFormation();
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(formation);
if(teamPosHeroInfos==null||teamPosHeroInfos.isEmpty()){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
int[] heroType = new int[5];
teamPosHeroInfos.forEach(hero->{
int tempId = user.getHeroManager().getHero(hero.getHeroId()).getTemplateId();
int profession = SCHero.getsCHero().get(tempId).getPropertyName();
heroType[profession] = heroType[profession]+1;
});
for(int[] rule:sRaceTowerConfig.getTeamRules()){
if(heroType[rule[0]]<rule[1]){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
}
Map<Integer,List<Integer>> buffMap = new HashMap<>();
for(int[] buffid:sRaceTowerConfig.getAttribute()){
buffMap.computeIfAbsent(buffid[0],n->new ArrayList<>()).add(buffid[1]);
}
//组装战斗数据
PVEFightEvent pveFightEvent = new PVEFightEvent(user.getId(), formation, 20, "", GameFightType.DailyChallenge, sRaceTowerConfig.getMonsterId(), 3);
// FightResult fightResult = FightDispatcher.dispatcher(pveFightEvent);
FightResult fightResult = getFightForSituation(pveFightEvent, buffMap);
CommonProto.FightData fightData = CommonProto.FightData.newBuilder()
.setFightMaxTime(20)
.setFightSeed(fightResult.getSeed())
@ -142,11 +207,15 @@ public class SituationLogic {
.build();
int[] checkResult = fightResult.getCheckResult();
builder.setFightData(fightData);
//挑战成功
if(checkResult[0]>0){
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sRaceTowerConfig.getFirstReward(), 1, 0, 1);
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sRaceTowerConfig.getFirstReward(), 1, 0, BIReason.SITUATION_CHALLENGE_REWARD);
builder.setDrop(drop);
situationPass.add(id);
situationPass.put(sRaceTowerConfig.getType(),id);
playerInfoManager.updateSituationPass(situationPass);
AbstractRank rankEnum = RankContext.getRankEnum(RankEnum.SITUATION_RANK.getType());
int score = Double.valueOf(rankEnum.getScoreById(user.getId(), "")).intValue();
rankEnum.addRank(user.getId(),"",score==-1?1:score+1);
consumeCount = true;
}
}else{
@ -154,7 +223,7 @@ public class SituationLogic {
}
// ReportUtil.onReportEvent(user, ReportEventEnum.START_DAILY_DUNGEON.getType(),id,sDailyChallengeConfig.getMonsterId(), MonsterUtil.getMonsterForce(new int[]{sDailyChallengeConfig.getMonsterId()}),"",0);
if(consumeCount){
boolean consume = PlayerLogic.getInstance().checkAndUpdate(user, sRaceTowerConfig.getPrivilege()[1], 1);
boolean consume = PlayerLogic.getInstance().checkAndUpdate(user, sRaceTowerConfig.getPrivilege()[0], 1);
if(!consume){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
@ -162,5 +231,24 @@ public class SituationLogic {
// user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_CHALLENGE,sDailyChallengeConfig.getType());
MessageUtil.sendMessage(session,1,messageType.getNumber(),builder.build());
}
public static FightResult getFightForSituation(FightEvent fightEvent,Map<Integer,List<Integer>> buffInfo){
PVEFightEvent pveFightEvent = (PVEFightEvent)fightEvent;
User userInMem = UserManager.getUserInMem(pveFightEvent.getAttackUid());
CommonProto.FightTeamInfo fightTeamInfo = FightUtil.getFightTeamInfoWithSomeBuff(userInMem, pveFightEvent.getTeamId(),pveFightEvent.getAttackBloodMap(),buffInfo);
int fightSeed = FightUtil.getFightSeed();
List<CommonProto.FightTeamInfo> monsterfightTeamInfos = FightUtil.makeMonsterFightData(pveFightEvent.getMonsterGroupId(), pveFightEvent.getNums());
LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, monsterfightTeamInfos);
LuaValue getOptionData = FightDataUtil.getOptionData(pveFightEvent.getAttackUid()+"");
int[] fightResult = CheckFight.getInstance().checkFight(fightSeed, fightEvent.getMostTime(), getFightData, getOptionData, fightEvent.getFightType().getFightType());
FightResult.Builder builder = FightResult.newBuilder();
builder.setCheckResult(fightResult);
builder.setSeed(fightSeed);
builder.setFightTeamInfo(fightTeamInfo);
builder.setMonsterTeamList(monsterfightTeamInfos);
CommonProto.FightData fightData = CommonProto.FightData.newBuilder().setFightType(fightEvent.getFightType().getFightType().getType()).setHeroFightInfos(fightTeamInfo).addAllMonsterList(monsterfightTeamInfos).setFightSeed(fightSeed).setFightMaxTime(fightEvent.getMostTime()).build();
builder.setFightData(fightData);
return builder.build();
}
}

View File

@ -116,7 +116,7 @@ public class PlayerManager extends MongoBase {
private String ip;
private Set<Integer> situationPass = new HashSet<>();
private Map<Integer,Integer> situationPass = new HashMap<>();
public PlayerManager(){
@ -777,11 +777,13 @@ public class PlayerManager extends MongoBase {
}
public Set<Integer> getSituationPass() {
public Map<Integer, Integer> getSituationPass() {
return situationPass;
}
public void updateSituationPass(Set<Integer> dailyPass){
this.dailyPass = dailyPass;
public void updateSituationPass(Map<Integer, Integer> situationPass){
this.situationPass = situationPass;
updateString("situationPass",situationPass);
}
}

View File

@ -287,6 +287,42 @@ public class FightUtil {
.setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId,user))
.build();
}
//
public static CommonProto.FightTeamInfo getFightTeamInfoWithSomeBuff(User user, int teamId, Map<String, Integer> attackBloodMap,Map<Integer,List<Integer>> buffInfo) {
user.getTeamPosManager().setCurTeamPosId(teamId);
List<CommonProto.FightUnitInfo> heroFightInfos = new ArrayList<>();
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId);
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) {
Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId());
if (hero == null) {
continue;
}
Map<Integer, Integer> heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false, teamId);
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
if(buffInfo.containsKey(scHero.getPropertyName())){
CombatLogic.getInstance().bufferOneHeroAttrAfterEat(heroAttributeMap,buffInfo.get(scHero.getPropertyName()));
}
StringBuilder skillSb = new StringBuilder();
StringBuilder propertySb = new StringBuilder();
String heroSkill = HeroLogic.getInstance().getHeroSkills(user,hero,skillSb).toString();
String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb, hero.getTemplateId(),hero.getLevel(), heroAttributeMap).toString();
CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo
.newBuilder()
.setUnitId(Integer.toString(hero.getTemplateId()))
.setUnitSkillIds(heroSkill.substring(0,heroSkill.length()-1))
.setProperty(property.substring(0, property.length()-1))
.setStar(hero.getStar())
.build();
heroFightInfos.add(heroFightInfo);
}
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user,teamId))
.setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId))
.setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId,user))
.build();
}
/**

View File

@ -1,6 +1,7 @@
package com.ljsd.jieling.logic.rank;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.rank.rankImpl.*;
import java.util.Arrays;
@ -30,8 +31,10 @@ public enum RankEnum {
DEATH_PATH_TOTAL_GUILD_RANK(18,RedisKey.DEATH_PATH_TOTAL_GUILD_RANK,DeathPathTotalGuildRank::new),//param1工会总伤害 param2无 param3:无
GUILD_FORCE_RANK(20,RedisKey.GUILD_FORCE_RANK,GuildForceRank::new),//param1公会总战力 param2无 param3:无
EXPERT_RANK(21,RedisKey.EXPERT_RANK,GoldRank::new),//param1活动进度 param2无 param3:无
FORCE_CURR_RANK(22,RedisKey.FORCE_CURR_RANK,ForceCurrRank::new);//param1人物战力 param2无 param3:无
FORCE_CURR_RANK(22,RedisKey.FORCE_CURR_RANK,ForceCurrRank::new),//param1人物战力 param2无 param3:无
SITUATION_RANK(24,RedisKey.SITUATION_RANK,SituationRank::new),//param1通关次数 param2无 param3:无
;
private int type;
private String redisKey;

View File

@ -0,0 +1,25 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import util.TimeUtils;
/**
* @author lvxinran
* @date 2020/8/14
* @discribe
*/
public class SituationRank extends AbstractRank {
public SituationRank(int type, String redisKey) {
super(type, redisKey);
}
@Override
public long[] getDataByScore(Double score) {
return new long[]{score.longValue()};
}
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();
}
}

View File

@ -70,7 +70,7 @@ public class MinuteTask extends Thread {
ActivityLogic.getInstance().checkSecretBoxSeason();
StoreLogic.checkGlobalStore(false);
MapLogic.getInstance().minuteCheckAndRemoveMapRank();
SituationLogic.getInstance().createCheckStatusTask();
everyZeroTask();
everyFiveTask();
everyMondyFiveClockTask();
@ -87,7 +87,6 @@ public class MinuteTask extends Thread {
BuyGoodsLogic.minuteCheckReharge();
RedisUtil.getInstence().set(RedisKey.ONLINE_NUM+RedisKey.Delimiter_colon+GameApplication.serverId, String.valueOf(OnlineUserManager.sessionMap.entrySet().size()));
DeathPathLogic.getInstance().statusCheck();
SituationLogic.getInstance().createCheckstatusTask();
GuildFightLogic.minuteCheckForCarFight();
reportUserOnline();
OnlineUserManager.checkOnline();
@ -134,8 +133,6 @@ public class MinuteTask extends Thread {
LOGGER.info("everyHourTask end ...");
}
}
//每日凌晨执行
public void everyZeroTask() throws Exception {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);

View File

@ -26,7 +26,7 @@ public class SRaceTowerConfig implements BaseConfig {
private int[] privilege;
private String remarks;
private int formation;
@Override
@ -71,9 +71,7 @@ public class SRaceTowerConfig implements BaseConfig {
return privilege;
}
public String getremarks() {
return remarks;
public int getFormation() {
return formation;
}
}