跨服灵脉秘境
parent
1acf753951
commit
d4daed3d65
|
@ -1624,6 +1624,21 @@ public class TimeUtils {
|
||||||
calendar.set(Calendar.MILLISECOND, 0);
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
return calendar.getTimeInMillis();
|
return calendar.getTimeInMillis();
|
||||||
}
|
}
|
||||||
|
//周几的零点
|
||||||
|
public static long getWeekZero(int weekDay){
|
||||||
|
if(weekDay ==7){
|
||||||
|
weekDay =1;
|
||||||
|
}else {
|
||||||
|
weekDay +=1;
|
||||||
|
}
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
calendar.set( Calendar.DAY_OF_WEEK,weekDay);
|
||||||
|
return calendar.getTimeInMillis();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 5月6日首冲bug解决方案
|
* 5月6日首冲bug解决方案
|
||||||
|
|
|
@ -63,27 +63,41 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
||||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//功能开关
|
||||||
|
int[] func = new int[2];
|
||||||
|
CrossLingmaiLogic.getInstance().functionIsOpen(func);
|
||||||
|
if(func[0]!=1){
|
||||||
|
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
int id = request.getId();//灵脉id
|
int id = request.getId();//灵脉id
|
||||||
ArenaManager arenaManager = user.getArenaManager();
|
ArenaManager arenaManager = user.getArenaManager();
|
||||||
int group = SMServerLodeSetting.getGroupByLevel(arenaManager.getCrossLingmaiFirstLevel());
|
int group = SMServerLodeSetting.getGroupByLevel(arenaManager.getCrossLingmaiFirstLevel());
|
||||||
//CROSS_LINGMAISECRET_INFO:跨服分组:分组
|
//CROSS_LINGMAISECRET_INFO:跨服分组:分组
|
||||||
Map<String, LingMaiSecretArea> lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.class, LingMaiSecretArea.class);
|
Map<String, LingMaiSecretArea> lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.class, LingMaiSecretArea.class);
|
||||||
int myLingmaiId = CrossLingmaiLogic.getInstance().getLingmaiIdOccupy(uid,lingMaiMap);
|
int myLingmaiId = CrossLingmaiLogic.getInstance().getLingmaiIdOccupy(uid, lingMaiMap);
|
||||||
if(myLingmaiId >= id){
|
if (myLingmaiId != 0 && myLingmaiId < id) {
|
||||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//跨服灵脉锁
|
//跨服灵脉锁
|
||||||
RedisUtil redisUtil = RedisUtil.getInstence();
|
RedisUtil redisUtil = RedisUtil.getInstence();
|
||||||
boolean lock = redisUtil.lock("SERVER_LINGMAI_LOCK"+ RedisKey.Delimiter_colon +crossGroup + RedisKey.Delimiter_colon + group, TimeUtils.ONE_MILLSECOND*500 );
|
boolean lock = redisUtil.lock("SERVER_LINGMAI_LOCK" + RedisKey.Delimiter_colon + crossGroup + RedisKey.Delimiter_colon + group, TimeUtils.ONE_MILLSECOND * 500);
|
||||||
if(!lock){
|
if (!lock) {
|
||||||
//没有拿到锁直接返回
|
//没有拿到锁直接返回
|
||||||
LOGGER.info("跨服灵脉,跨服分组 ={},灵脉分组 ={},未获取到锁",crossGroup,group);
|
LOGGER.info("跨服灵脉,跨服分组 ={},灵脉分组 ={},未获取到锁", crossGroup, group);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//检测特权次数
|
||||||
|
boolean countBol = PlayerLogic.getInstance().check(user, request.getPrivilageTypeId(), 1);
|
||||||
|
if (request.getPrivilageTypeId() == 0 || !countBol) {
|
||||||
|
LOGGER.error("跨服灵脉秘境挑战失败,挑战id:{},挑战结果:{}", request.getPrivilageTypeId(), countBol);
|
||||||
|
throw new ErrorCodeException(ErrorCode.REFRESH_WHEL_TIME_NOT, "挑战次数不足");
|
||||||
|
}
|
||||||
|
SLodeConfig config = SLodeConfig.lodeConfig.get(id);
|
||||||
|
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||||
if (!lingMaiMap.containsKey(String.valueOf(id))) {
|
if (!lingMaiMap.containsKey(String.valueOf(id))) {
|
||||||
//没人占领 攻击机器人 pve
|
//没人占领 攻击机器人 pve
|
||||||
SLodeConfig config = SLodeConfig.lodeConfig.get(id);
|
|
||||||
if (config == null) {
|
if (config == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -98,35 +112,49 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
||||||
.setFightId(FightUtil.getFightId(user.getId(), FightType.CrossLingMaiSecretFight.getType()))
|
.setFightId(FightUtil.getFightId(user.getId(), FightType.CrossLingMaiSecretFight.getType()))
|
||||||
.build();
|
.build();
|
||||||
res.setFightData(fightData);
|
res.setFightData(fightData);
|
||||||
if(fightResult.getResult()==-1){
|
if (fightResult.getResult() == -1) {
|
||||||
throw new ErrorCodeException(ErrorCode.FIGHT_EXCEPTION);
|
throw new ErrorCodeException(ErrorCode.FIGHT_EXCEPTION);
|
||||||
}else if (fightResult.getResult() == 1){
|
} else if (fightResult.getResult() == 1) {
|
||||||
//赢了
|
//赢了
|
||||||
LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id,uid,user);;
|
//结算已有的灵脉
|
||||||
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id),lingMaiSecretArea);
|
if (myLingmaiId != 0){
|
||||||
|
LingMaiSecretArea myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId));
|
||||||
|
config = SLodeConfig.lodeConfig.get(myLingmaiId);
|
||||||
|
int second = ((TimeUtils.nowInt() - myLingmai.getOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - myLingmai.getOccupyTime()) / 60);
|
||||||
|
myLingmai.setScore1(myLingmai.getScore1()+second*config.getRewardList()[0][1]);
|
||||||
|
int score = myLingmai.getScore1() + config.getRewardList()[0][1] * myLingmai.getOccupyTime();
|
||||||
|
rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||||
|
rank.addRank(user.getId(), String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score);
|
||||||
|
//清除已有灵脉数据
|
||||||
|
lingMaiMap.remove(String.valueOf(myLingmaiId));
|
||||||
|
RedisUtil.getInstence().removeMapEntrys(RedisKey.CROSS_LINGMAISECRET_INFO,
|
||||||
|
crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(myLingmaiId));
|
||||||
}
|
}
|
||||||
}else {
|
|
||||||
|
LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id, uid, user);
|
||||||
|
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id), lingMaiSecretArea);
|
||||||
|
}
|
||||||
|
res.setResult(fightResult.getResult());
|
||||||
|
} else {
|
||||||
//PVP
|
//PVP
|
||||||
// 组装真人数据
|
// 组装真人数据
|
||||||
// 战斗逻辑
|
// 战斗逻辑
|
||||||
int defUid = lingMaiMap.get(String.valueOf(id)).getUid();
|
int defUid = lingMaiMap.get(String.valueOf(id)).getUid();
|
||||||
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(defUid);
|
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(defUid);
|
||||||
if (csPlayer == null){
|
if (csPlayer == null) {
|
||||||
throw new ErrorCodeException(ErrorCode.USE_NOT_EXIT);
|
throw new ErrorCodeException(ErrorCode.USE_NOT_EXIT);
|
||||||
}
|
}
|
||||||
//其他服玩家rpc 数据调用
|
//其他服玩家rpc 数据调用
|
||||||
CrossArenaManager crossArenaManager = null;
|
CrossArenaManager crossArenaManager = null;
|
||||||
int myforce = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), false);
|
int myforce = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), false);
|
||||||
int defforce = 0;
|
int defforce = 0;
|
||||||
|
if (GameApplication.serverId != csPlayer.getServerId()) {
|
||||||
if(GameApplication.serverId != csPlayer.getServerId()){
|
|
||||||
crossArenaManager = PlayerLogic.getInstance().getCrossArenaManagerData(csPlayer);
|
crossArenaManager = PlayerLogic.getInstance().getCrossArenaManagerData(csPlayer);
|
||||||
defforce = crossArenaManager.getTotalForceByTeam().getOrDefault( TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(),0);
|
defforce = crossArenaManager.getTotalForceByTeam().getOrDefault(TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), 0);
|
||||||
}
|
}
|
||||||
CommonProto.FightTeamInfo fightTeamInfo = FightUtil.makePersonFightData(user, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), null, null);
|
CommonProto.FightTeamInfo fightTeamInfo = FightUtil.makePersonFightData(user, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), null, null);
|
||||||
//对手
|
//对手
|
||||||
CommonProto.FightTeamInfo defteamInfo = FightUtil.makeCrossPersonData(csPlayer, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), null, crossArenaManager);
|
CommonProto.FightTeamInfo defteamInfo = FightUtil.makeCrossPersonData(csPlayer, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), null, crossArenaManager);
|
||||||
|
|
||||||
FightResult fightResult = GetWorldArenaChallengeRequestHandler.getFightForPVP(uid, defUid,
|
FightResult fightResult = GetWorldArenaChallengeRequestHandler.getFightForPVP(uid, defUid,
|
||||||
fightTeamInfo, defteamInfo, FightUtil.getFightSeed(), myforce < defforce);
|
fightTeamInfo, defteamInfo, FightUtil.getFightSeed(), myforce < defforce);
|
||||||
int seed = fightResult.getSeed();
|
int seed = fightResult.getSeed();
|
||||||
|
@ -140,32 +168,35 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
||||||
.build();
|
.build();
|
||||||
int result = (int) fightResult.getCheckResult()[0];
|
int result = (int) fightResult.getCheckResult()[0];
|
||||||
res.setFightData(build);
|
res.setFightData(build);
|
||||||
if(result == 1){
|
res.setResult(result);
|
||||||
|
if (result == 1) {
|
||||||
//赢了 我有灵脉 我没灵脉
|
//赢了 我有灵脉 我没灵脉
|
||||||
//积分收益结算
|
//别人积分收益结算
|
||||||
LingMaiSecretArea oldOwner = lingMaiMap.get(String.valueOf(id));//上一个占领者
|
LingMaiSecretArea oldOwner = lingMaiMap.get(String.valueOf(id));//上一个占领者
|
||||||
int second =(TimeUtils.nowInt()-oldOwner.getOccupyTime())/60>10?10:(TimeUtils.nowInt()-oldOwner.getOccupyTime());
|
int second = ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60);
|
||||||
int score =oldOwner.getScore1()+1* second;
|
oldOwner.setScore1(oldOwner.getScore1()+second*config.getRewardList()[0][1]);
|
||||||
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
int score = oldOwner.getScore1() + config.getRewardList()[0][1]*oldOwner.getOccupyTime();
|
||||||
rank.addRank(user.getId(), String.valueOf(crossGroup)+RedisKey.Delimiter_colon + group, score);
|
rank.addRank(defUid, String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score);
|
||||||
|
if (myLingmaiId != 0) {
|
||||||
if(myLingmaiId !=0) {
|
|
||||||
//本人已有灵脉结算
|
//本人已有灵脉结算
|
||||||
LingMaiSecretArea myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId));//上一个占领者
|
LingMaiSecretArea myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId));//上一个占领者
|
||||||
second =(TimeUtils.nowInt()-myLingmai.getOccupyTime())/60>10?10:(TimeUtils.nowInt()-myLingmai.getOccupyTime());
|
config = SLodeConfig.lodeConfig.get(myLingmaiId);
|
||||||
score =myLingmai.getScore1()+1* second;
|
second = ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - (int)myLingmai.getGetAwardTimeOrOccupyTime()) / 60);
|
||||||
|
myLingmai.setScore1(myLingmai.getScore1()+second*config.getRewardList()[0][1]);
|
||||||
|
myLingmai.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt());
|
||||||
|
score = myLingmai.getScore1() + config.getRewardList()[0][1] * myLingmai.getOccupyTime();
|
||||||
rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||||
rank.addRank(user.getId(), String.valueOf(crossGroup)+RedisKey.Delimiter_colon + group, score);
|
rank.addRank(user.getId(), String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score);
|
||||||
//两边都计算分 置换
|
//两边都计算分 置换
|
||||||
oldOwner.setScore1(score);
|
//oldOwner.setScore1(score);
|
||||||
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(myLingmaiId),oldOwner);
|
oldOwner.setGetAwardTimeOrOccupyTime(TimeUtils.nowInt());
|
||||||
|
oldOwner.setId(myLingmaiId);
|
||||||
|
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(myLingmaiId), oldOwner);
|
||||||
}
|
}
|
||||||
//易主
|
//易主
|
||||||
LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id,uid,user);
|
LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id, uid, user);
|
||||||
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id),lingMaiSecretArea);
|
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id), lingMaiSecretArea);
|
||||||
//挑战记录
|
|
||||||
//挑战者记录
|
//挑战者记录
|
||||||
|
|
||||||
String key1 = RedisKey.getKey(RedisKey.CROSS_LINGMAISECRET_RECORD, String.valueOf(user.getId()), false);
|
String key1 = RedisKey.getKey(RedisKey.CROSS_LINGMAISECRET_RECORD, String.valueOf(user.getId()), false);
|
||||||
long defLenth = redisUtil.lGetListSize(key1);
|
long defLenth = redisUtil.lGetListSize(key1);
|
||||||
if (defLenth > 20) {
|
if (defLenth > 20) {
|
||||||
|
@ -191,23 +222,20 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
||||||
arenaRecordDef.setUserName(user.getPlayerInfoManager().getNickName());
|
arenaRecordDef.setUserName(user.getPlayerInfoManager().getNickName());
|
||||||
arenaRecordDef.setId(String.valueOf(id));
|
arenaRecordDef.setId(String.valueOf(id));
|
||||||
arenaRecordDef.setPracticeLevel(user.getHeroManager().getPracticeLevel());
|
arenaRecordDef.setPracticeLevel(user.getHeroManager().getPracticeLevel());
|
||||||
//arenaRecord.setPracticeLevel(user.getHeroManager().getPracticeLevel());//修行等级 TODO
|
|
||||||
arenaRecordDef.setCreateTime(TimeUtils.nowInt());
|
arenaRecordDef.setCreateTime(TimeUtils.nowInt());
|
||||||
String defarenaRecordJsonDef = new Gson().toJson(arenaRecordDef);
|
String defarenaRecordJsonDef = new Gson().toJson(arenaRecordDef);
|
||||||
redisUtil.lSet(key2, defarenaRecordJsonDef);
|
redisUtil.lSet(key2, defarenaRecordJsonDef);
|
||||||
//被抢占 给在线的被抢占玩家发红点
|
//被抢占 给在线的被抢占玩家发红点
|
||||||
ISession sess= OnlineUserManager.sessionMap.get(defUid);
|
ISession sess = OnlineUserManager.sessionMap.get(defUid);
|
||||||
if(sess!=null){
|
if (sess != null) {
|
||||||
ArenaInfoProto.CrossLingmaiIndicationResponse indication = ArenaInfoProto.CrossLingmaiIndicationResponse.newBuilder().build();
|
ArenaInfoProto.CrossLingmaiIndicationResponse indication = ArenaInfoProto.CrossLingmaiIndicationResponse.newBuilder().build();
|
||||||
MessageUtil.sendIndicationMessage(sess, 1, MessageTypeProto.MessageType.CrossLingmaiIndicationResponse_VALUE, indication, true);
|
MessageUtil.sendIndicationMessage(sess, 1, MessageTypeProto.MessageType.CrossLingmaiIndicationResponse_VALUE, indication, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}else{
|
|
||||||
//输记录
|
|
||||||
}
|
}
|
||||||
//释放分布式锁
|
//释放分布式锁
|
||||||
redisUtil.del("SERVER_LINGMAI_LOCK"+ RedisKey.Delimiter_colon +crossGroup + RedisKey.Delimiter_colon + group);
|
redisUtil.del("SERVER_LINGMAI_LOCK" + RedisKey.Delimiter_colon + crossGroup + RedisKey.Delimiter_colon + group);
|
||||||
}
|
}
|
||||||
|
PlayerLogic.getInstance().checkAndUpdate(user, request.getPrivilageTypeId(), 1);
|
||||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,16 +6,15 @@ import com.ljsd.jieling.db.redis.RedisUtil;
|
||||||
import com.ljsd.jieling.handler.BaseHandler;
|
import com.ljsd.jieling.handler.BaseHandler;
|
||||||
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
||||||
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
|
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
|
||||||
import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic;
|
import com.ljsd.jieling.logic.arena.CrossLingmaiLogic;
|
||||||
import com.ljsd.jieling.logic.championship.ChampionshipLogic;
|
|
||||||
import com.ljsd.jieling.logic.dao.ArenaManager;
|
import com.ljsd.jieling.logic.dao.ArenaManager;
|
||||||
import com.ljsd.jieling.logic.dao.UserManager;
|
import com.ljsd.jieling.logic.dao.UserManager;
|
||||||
import com.ljsd.jieling.logic.dao.cross.CSPlayer;
|
import com.ljsd.jieling.logic.dao.cross.CSPlayer;
|
||||||
import com.ljsd.jieling.logic.dao.root.GuildCache;
|
|
||||||
import com.ljsd.jieling.logic.dao.root.User;
|
import com.ljsd.jieling.logic.dao.root.User;
|
||||||
import com.ljsd.jieling.network.session.ISession;
|
import com.ljsd.jieling.network.session.ISession;
|
||||||
import com.ljsd.jieling.util.MessageUtil;
|
import com.ljsd.jieling.util.MessageUtil;
|
||||||
import config.SLodeConfig;
|
import config.SLodeConfig;
|
||||||
|
import config.SMServerLodeSetting;
|
||||||
import rpc.protocols.ArenaInfoProto;
|
import rpc.protocols.ArenaInfoProto;
|
||||||
import rpc.protocols.CommonProto;
|
import rpc.protocols.CommonProto;
|
||||||
import rpc.protocols.MessageTypeProto;
|
import rpc.protocols.MessageTypeProto;
|
||||||
|
@ -23,9 +22,7 @@ import util.TimeUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collector;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import config.SMServerLodeSetting;
|
|
||||||
|
|
||||||
public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler<ArenaInfoProto.CrossLingmaiSecretAreaInfoRequest> {
|
public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler<ArenaInfoProto.CrossLingmaiSecretAreaInfoRequest> {
|
||||||
|
|
||||||
|
@ -36,7 +33,7 @@ public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler<ArenaInfoProt
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processWithProto(ISession session, ArenaInfoProto.CrossLingmaiSecretAreaInfoRequest request) throws Exception{
|
public void processWithProto(ISession session, ArenaInfoProto.CrossLingmaiSecretAreaInfoRequest request) throws Exception {
|
||||||
int uid = session.getUid();
|
int uid = session.getUid();
|
||||||
User user = UserManager.getUser(uid);
|
User user = UserManager.getUser(uid);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
|
@ -48,47 +45,55 @@ public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler<ArenaInfoProt
|
||||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaInfoResponse.getNumber(), res.build(), true);
|
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaInfoResponse.getNumber(), res.build(), true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//功能开关
|
||||||
|
int[] func = new int[2];
|
||||||
|
CrossLingmaiLogic.getInstance().functionIsOpen(func);
|
||||||
|
res.setState(func[0]);
|
||||||
|
res.setTimePoint(func[1]);
|
||||||
|
if(func[0]==0){
|
||||||
|
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaInfoResponse.getNumber(), res.build(), true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
ArenaManager arenaManager = user.getArenaManager();
|
ArenaManager arenaManager = user.getArenaManager();
|
||||||
long lingmaiFirst = arenaManager.getCrossLingmaiFirst();
|
long lingmaiFirst = arenaManager.getCrossLingmaiFirst();
|
||||||
|
if (!TimeUtils.isSameDay(lingmaiFirst, TimeUtils.now())) {
|
||||||
if(!TimeUtils.isSameDay(lingmaiFirst,TimeUtils.now())){
|
|
||||||
arenaManager.setCrossLingmaiFirst(TimeUtils.now());
|
arenaManager.setCrossLingmaiFirst(TimeUtils.now());
|
||||||
arenaManager.setCrossLingmaiFirstLevel(user.getPlayerInfoManager().getLevel());
|
arenaManager.setCrossLingmaiFirstLevel(user.getPlayerInfoManager().getLevel());
|
||||||
}
|
}
|
||||||
int group = SMServerLodeSetting.getGroupByLevel(arenaManager.getCrossLingmaiFirstLevel());
|
int group = SMServerLodeSetting.getGroupByLevel(arenaManager.getCrossLingmaiFirstLevel());
|
||||||
int page = request.getPage();
|
int page = request.getPage();
|
||||||
//CROSS_LINGMAISECRET_INFO:跨服分组:分组
|
//CROSS_LINGMAISECRET_INFO:跨服分组:分组
|
||||||
Map<String, LingMaiSecretArea> lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup+RedisKey.Delimiter_colon+group, String.class, LingMaiSecretArea.class);
|
Map<String, LingMaiSecretArea> lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.class, LingMaiSecretArea.class);
|
||||||
if(page == 0){
|
if (page == 0) {
|
||||||
int id = lingMaiMap.values().stream().filter(n->n.getUid()==uid).mapToInt(n->n.getId()).sum();
|
int id = lingMaiMap.values().stream().filter(n -> n.getUid() == uid).mapToInt(n -> n.getId()).sum();
|
||||||
if(SLodeConfig.lodeConfig.get(id)!=null){
|
if (SLodeConfig.lodeConfig.get(id) != null) {
|
||||||
page = SLodeConfig.lodeConfig.get(id).getPageNo();
|
page = SLodeConfig.lodeConfig.get(id).getPageNo();
|
||||||
}else {
|
} else {
|
||||||
//找到第一个未被占领的灵脉
|
//找到第一个未被占领的灵脉
|
||||||
for(Map.Entry<Integer, SLodeConfig> configEntry:SLodeConfig.lodeConfig.entrySet()){
|
for (Map.Entry<Integer, SLodeConfig> configEntry : SLodeConfig.lodeConfig.entrySet()) {
|
||||||
if(!lingMaiMap.containsKey(configEntry.getKey())){
|
if (!lingMaiMap.containsKey(configEntry.getKey())) {
|
||||||
page = SLodeConfig.lodeConfig.get(configEntry.getValue().getPageNo()).getPageNo();
|
page = SLodeConfig.lodeConfig.get(configEntry.getValue().getPageNo()).getPageNo();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
List<SLodeConfig> pageConfig= SLodeConfig.getByGroupAndPageNo(group,page);
|
List<SLodeConfig> pageConfig = SLodeConfig.getByGroupAndPageNo(group, page);
|
||||||
if(pageConfig==null){
|
if (pageConfig == null) {
|
||||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaInfoResponse.getNumber(), res.build(), true);
|
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaInfoResponse.getNumber(), res.build(), true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int myOccupyId = 0;
|
int myOccupyId = 0;
|
||||||
int myOccupyTime = 0;
|
int myOccupyTime = 0;
|
||||||
//自己相关的
|
//自己相关的
|
||||||
List<LingMaiSecretArea> matchMyInfoList = lingMaiMap.values().stream().filter(n->n.getUid()==uid).collect(Collectors.toList());
|
List<LingMaiSecretArea> matchMyInfoList = lingMaiMap.values().stream().filter(n -> n.getUid() == uid).collect(Collectors.toList());
|
||||||
if(matchMyInfoList!=null&&matchMyInfoList.size()>0){
|
if (matchMyInfoList != null && matchMyInfoList.size() > 0) {
|
||||||
myOccupyId = matchMyInfoList.get(0).getId();
|
myOccupyId = matchMyInfoList.get(0).getId();
|
||||||
myOccupyTime = (int)matchMyInfoList.get(0).getGetAwardTimeOrOccupyTime();
|
myOccupyTime = (int) matchMyInfoList.get(0).getGetAwardTimeOrOccupyTime();
|
||||||
}
|
}
|
||||||
//当前页面数据
|
//当前页面数据
|
||||||
for(SLodeConfig config:pageConfig){
|
for (SLodeConfig config : pageConfig) {
|
||||||
if(lingMaiMap.containsKey(String.valueOf(config.getId()))){
|
if (lingMaiMap.containsKey(String.valueOf(config.getId()))) {
|
||||||
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(lingMaiMap.get(String.valueOf(config.getId())).getUid());
|
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(lingMaiMap.get(String.valueOf(config.getId())).getUid());
|
||||||
CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder()
|
CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder()
|
||||||
.setUid(lingMaiMap.get(String.valueOf(config.getId())).getUid())
|
.setUid(lingMaiMap.get(String.valueOf(config.getId())).getUid())
|
||||||
|
@ -108,8 +113,7 @@ public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler<ArenaInfoProt
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
res.addLingmaiData(lingMaiSecret);
|
res.addLingmaiData(lingMaiSecret);
|
||||||
|
} else {
|
||||||
}else{
|
|
||||||
//没人占领 给机器人数据
|
//没人占领 给机器人数据
|
||||||
CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder().setLingmaiId(config.getId()).build();
|
CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder().setLingmaiId(config.getId()).build();
|
||||||
res.addLingmaiData(lingMaiSecret);
|
res.addLingmaiData(lingMaiSecret);
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class CrossLingmaiSecretAreaRecordHandler extends BaseHandler<ArenaInfoPr
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processWithProto(ISession session, ArenaInfoProto.CrossLingmaiSecretAreaRecordRequest request) throws Exception{
|
public void processWithProto(ISession session, ArenaInfoProto.CrossLingmaiSecretAreaRecordRequest request) throws Exception {
|
||||||
int uid = session.getUid();
|
int uid = session.getUid();
|
||||||
User user = UserManager.getUser(uid);
|
User user = UserManager.getUser(uid);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
|
@ -35,13 +35,13 @@ public class CrossLingmaiSecretAreaRecordHandler extends BaseHandler<ArenaInfoPr
|
||||||
RedisUtil redisUtil = RedisUtil.getInstence();
|
RedisUtil redisUtil = RedisUtil.getInstence();
|
||||||
List<String> list = redisUtil.lGet(RedisKey.CROSS_LINGMAISECRET_RECORD, String.valueOf(uid), 0, -1);
|
List<String> list = redisUtil.lGet(RedisKey.CROSS_LINGMAISECRET_RECORD, String.valueOf(uid), 0, -1);
|
||||||
Collections.reverse(list);
|
Collections.reverse(list);
|
||||||
if (list != null){
|
if (list != null) {
|
||||||
for(String s:list){
|
for (String s : list) {
|
||||||
ArenaRecord arenaRecord = new Gson().fromJson(s, ArenaRecord.class);
|
ArenaRecord arenaRecord = new Gson().fromJson(s, ArenaRecord.class);
|
||||||
CommonProto.LingMaiSecretRecord record = CommonProto.LingMaiSecretRecord.newBuilder().setType(arenaRecord.getType())
|
CommonProto.LingMaiSecretRecord record = CommonProto.LingMaiSecretRecord.newBuilder().setType(arenaRecord.getType())
|
||||||
.setUserName(user.getPlayerInfoManager().getNickName())
|
.setUserName(user.getPlayerInfoManager().getNickName())
|
||||||
.setDefName(arenaRecord.getUserName()).setLingMaiId(Integer.parseInt(arenaRecord.getId()))
|
.setDefName(arenaRecord.getUserName()).setLingMaiId(Integer.parseInt(arenaRecord.getId()))
|
||||||
.setTime(arenaRecord.getOccurTime()).setPracticeLevel(arenaRecord.getPracticeLevel()).build();
|
.setTime(arenaRecord.getCreateTime()).setPracticeLevel(arenaRecord.getPracticeLevel()).build();
|
||||||
builder.addRecordData(record);
|
builder.addRecordData(record);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ import com.ljsd.jieling.util.ItemUtil;
|
||||||
import config.SErrorCodeEerverConfig;
|
import config.SErrorCodeEerverConfig;
|
||||||
import config.SLodeConfig;
|
import config.SLodeConfig;
|
||||||
import config.SLodeRankReward;
|
import config.SLodeRankReward;
|
||||||
|
import config.SMServerLodeSetting;
|
||||||
|
import manager.STableManager;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import util.StringUtil;
|
import util.StringUtil;
|
||||||
|
@ -46,6 +48,32 @@ public class CrossLingmaiLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//功能是否开启 关闭、休战 、战斗
|
||||||
|
public void functionIsOpen(int [] result){
|
||||||
|
SMServerLodeSetting setting = SMServerLodeSetting.lodeConfig.get(1);
|
||||||
|
int[][]restTime = setting.getRestTime();
|
||||||
|
int[][]battleTime = setting.getBattleTime();
|
||||||
|
long mondayZeroTime = TimeUtils.getWeekZero(1);
|
||||||
|
//休战期
|
||||||
|
for(int [] everyTime:restTime){
|
||||||
|
if(TimeUtils.now()>=mondayZeroTime+everyTime[0]*1000 && TimeUtils.now()<=mondayZeroTime+everyTime[1]*1000){
|
||||||
|
result[0]=2;
|
||||||
|
result[1]=(int)(mondayZeroTime/1000)+everyTime[1];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//抢夺期
|
||||||
|
for(int [] everyTime:battleTime){
|
||||||
|
if(TimeUtils.now()>mondayZeroTime+everyTime[0]*1000 && TimeUtils.now()<mondayZeroTime+everyTime[1]*1000){
|
||||||
|
result[0]=1;
|
||||||
|
result[1]=(int)(mondayZeroTime/1000)+everyTime[1];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result[0]=0;
|
||||||
|
result[1]=0;
|
||||||
|
}
|
||||||
|
|
||||||
public int getLingmaiIdOccupy(int uid, Map<String, LingMaiSecretArea> lingMaiMap){
|
public int getLingmaiIdOccupy(int uid, Map<String, LingMaiSecretArea> lingMaiMap){
|
||||||
for (Map.Entry<String, LingMaiSecretArea> data :lingMaiMap.entrySet()){
|
for (Map.Entry<String, LingMaiSecretArea> data :lingMaiMap.entrySet()){
|
||||||
if(data.getValue().getUid()==uid){
|
if(data.getValue().getUid()==uid){
|
||||||
|
@ -76,16 +104,14 @@ public class CrossLingmaiLogic {
|
||||||
if(config!=null){
|
if(config!=null){
|
||||||
int occupyTime = (int) map.getValue().getGetAwardTimeOrOccupyTime();
|
int occupyTime = (int) map.getValue().getGetAwardTimeOrOccupyTime();
|
||||||
int difVal = (nowTime-occupyTime)/60>=10?10:(nowTime-occupyTime)/60;
|
int difVal = (nowTime-occupyTime)/60>=10?10:(nowTime-occupyTime)/60;
|
||||||
difVal =1 ;
|
//difVal =1 ;
|
||||||
map.getValue().setOccupyTime(map.getValue().getOccupyTime()+difVal);
|
map.getValue().setOccupyTime(map.getValue().getOccupyTime()+difVal);
|
||||||
map.getValue().setGetAwardTimeOrOccupyTime(TimeUtils.nowInt());
|
map.getValue().setGetAwardTimeOrOccupyTime(TimeUtils.nowInt());
|
||||||
|
|
||||||
LOGGER.error("玩家"+map.getValue().getUid()+"获得"+difVal);
|
LOGGER.error("玩家"+map.getValue().getUid()+"获得"+difVal);
|
||||||
|
|
||||||
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO,
|
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO,
|
||||||
crossGroup + RedisKey.Delimiter_colon + group, map.getKey(),map.getValue());
|
crossGroup + RedisKey.Delimiter_colon + group, map.getKey(),map.getValue());
|
||||||
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||||
int score =map.getValue().getOccupyTime()*1+map.getValue().getScore1();//TODO 乘以每分钟收益
|
int score =map.getValue().getOccupyTime()*config.getRewardList()[0][1]+map.getValue().getScore1();
|
||||||
double test =rank.getScoreById(user.getId(),crossGroup + RedisKey.Delimiter_colon + group);
|
double test =rank.getScoreById(user.getId(),crossGroup + RedisKey.Delimiter_colon + group);
|
||||||
LOGGER.error("之前是:"+test +"之后是:"+score);
|
LOGGER.error("之前是:"+test +"之后是:"+score);
|
||||||
rank.addRank(user.getId(), String.valueOf(crossGroup)+RedisKey.Delimiter_colon + group, score);
|
rank.addRank(user.getId(), String.valueOf(crossGroup)+RedisKey.Delimiter_colon + group, score);
|
||||||
|
@ -119,16 +145,18 @@ public class CrossLingmaiLogic {
|
||||||
if (crossGroup == -1){
|
if (crossGroup == -1){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String rkey1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+"1");
|
String rkey1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+ RedisKey.Delimiter_colon +"1");
|
||||||
String rkey2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+"2");
|
String rkey2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+ RedisKey.Delimiter_colon +"2");
|
||||||
Set<String> arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey1, 0, -1);
|
Set<String> arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey1, 0, -1);
|
||||||
Set<String> arenaRank2= RedisUtil.getInstence().getReverseZset(rkey2, 0, -1);
|
Set<String> arenaRank2= RedisUtil.getInstence().getReverseZset(rkey2, 0, -1);
|
||||||
sendMailReward(arenaRank1);
|
sendMailReward(arenaRank1);
|
||||||
sendMailReward(arenaRank2);
|
sendMailReward(arenaRank2);
|
||||||
|
RedisUtil.getInstence().del(rkey1);
|
||||||
|
RedisUtil.getInstence().del(rkey2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendMailReward(Set<String> arenaRank){
|
public void sendMailReward(Set<String> arenaRank){
|
||||||
List<Integer> arenaRankfilt = arenaRank.stream().mapToInt(n -> Integer.parseInt(n)).filter(n -> n > 1000).boxed().collect(Collectors.toList());
|
List<Integer> arenaRankfilt = arenaRank.stream().mapToInt(n -> Integer.parseInt(n)).boxed().collect(Collectors.toList());
|
||||||
String title = SErrorCodeEerverConfig.getI18NMessage("LingmaiReward_mail_title");
|
String title = SErrorCodeEerverConfig.getI18NMessage("LingmaiReward_mail_title");
|
||||||
for(int i=0;i<arenaRankfilt.size();i++){
|
for(int i=0;i<arenaRankfilt.size();i++){
|
||||||
SLodeRankReward config = SLodeRankReward.getIdByScore(i+1);
|
SLodeRankReward config = SLodeRankReward.getIdByScore(i+1);
|
||||||
|
|
|
@ -318,7 +318,7 @@ public class MinuteTask extends Thread {
|
||||||
if(w==0 || w ==2|| w==4 || w == 6){
|
if(w==0 || w ==2|| w==4 || w == 6){
|
||||||
//占领奖励
|
//占领奖励
|
||||||
if(hour>9&&hour<21){
|
if(hour>9&&hour<21){
|
||||||
int mod = minute%2;
|
int mod = minute%10;
|
||||||
if(mod ==0 ){
|
if(mod ==0 ){
|
||||||
CrossLingmaiLogic.getInstance().sendOccypyReward();
|
CrossLingmaiLogic.getInstance().sendOccypyReward();
|
||||||
}
|
}
|
||||||
|
@ -326,7 +326,7 @@ public class MinuteTask extends Thread {
|
||||||
//结算每日排行奖励
|
//结算每日排行奖励
|
||||||
if(hour ==21 && minute==0){
|
if(hour ==21 && minute==0){
|
||||||
//删除数据 TODO
|
//删除数据 TODO
|
||||||
CrossLingmaiLogic.getInstance().sendOccypyReward();
|
CrossLingmaiLogic.getInstance().sendMailReward();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue