跨服灵脉秘境
parent
1acf753951
commit
d4daed3d65
|
@ -1624,6 +1624,21 @@ public class TimeUtils {
|
|||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
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解决方案
|
||||
|
|
|
@ -63,27 +63,41 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
||||
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
|
||||
ArenaManager arenaManager = user.getArenaManager();
|
||||
int group = SMServerLodeSetting.getGroupByLevel(arenaManager.getCrossLingmaiFirstLevel());
|
||||
//CROSS_LINGMAISECRET_INFO:跨服分组:分组
|
||||
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);
|
||||
if(myLingmaiId >= id){
|
||||
int myLingmaiId = CrossLingmaiLogic.getInstance().getLingmaiIdOccupy(uid, lingMaiMap);
|
||||
if (myLingmaiId != 0 && myLingmaiId < id) {
|
||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
|
||||
return;
|
||||
}
|
||||
//跨服灵脉锁
|
||||
RedisUtil redisUtil = RedisUtil.getInstence();
|
||||
boolean lock = redisUtil.lock("SERVER_LINGMAI_LOCK"+ RedisKey.Delimiter_colon +crossGroup + RedisKey.Delimiter_colon + group, TimeUtils.ONE_MILLSECOND*500 );
|
||||
if(!lock){
|
||||
boolean lock = redisUtil.lock("SERVER_LINGMAI_LOCK" + RedisKey.Delimiter_colon + crossGroup + RedisKey.Delimiter_colon + group, TimeUtils.ONE_MILLSECOND * 500);
|
||||
if (!lock) {
|
||||
//没有拿到锁直接返回
|
||||
LOGGER.info("跨服灵脉,跨服分组 ={},灵脉分组 ={},未获取到锁",crossGroup,group);
|
||||
LOGGER.info("跨服灵脉,跨服分组 ={},灵脉分组 ={},未获取到锁", crossGroup, group);
|
||||
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))) {
|
||||
//没人占领 攻击机器人 pve
|
||||
SLodeConfig config = SLodeConfig.lodeConfig.get(id);
|
||||
if (config == null) {
|
||||
return;
|
||||
}
|
||||
|
@ -98,35 +112,49 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
.setFightId(FightUtil.getFightId(user.getId(), FightType.CrossLingMaiSecretFight.getType()))
|
||||
.build();
|
||||
res.setFightData(fightData);
|
||||
if(fightResult.getResult()==-1){
|
||||
if (fightResult.getResult() == -1) {
|
||||
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
|
||||
// 组装真人数据
|
||||
// 战斗逻辑
|
||||
int defUid = lingMaiMap.get(String.valueOf(id)).getUid();
|
||||
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(defUid);
|
||||
if (csPlayer == null){
|
||||
if (csPlayer == null) {
|
||||
throw new ErrorCodeException(ErrorCode.USE_NOT_EXIT);
|
||||
}
|
||||
//其他服玩家rpc 数据调用
|
||||
CrossArenaManager crossArenaManager = null;
|
||||
int myforce = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), false);
|
||||
int defforce = 0;
|
||||
|
||||
if(GameApplication.serverId != csPlayer.getServerId()){
|
||||
if (GameApplication.serverId != csPlayer.getServerId()) {
|
||||
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 defteamInfo = FightUtil.makeCrossPersonData(csPlayer, TeamEnum.CROSS_LING_MAI_SECRET_AREA.getTeamId(), null, crossArenaManager);
|
||||
|
||||
FightResult fightResult = GetWorldArenaChallengeRequestHandler.getFightForPVP(uid, defUid,
|
||||
fightTeamInfo, defteamInfo, FightUtil.getFightSeed(), myforce < defforce);
|
||||
int seed = fightResult.getSeed();
|
||||
|
@ -140,32 +168,35 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
.build();
|
||||
int result = (int) fightResult.getCheckResult()[0];
|
||||
res.setFightData(build);
|
||||
if(result == 1){
|
||||
res.setResult(result);
|
||||
if (result == 1) {
|
||||
//赢了 我有灵脉 我没灵脉
|
||||
//积分收益结算
|
||||
//别人积分收益结算
|
||||
LingMaiSecretArea oldOwner = lingMaiMap.get(String.valueOf(id));//上一个占领者
|
||||
int second =(TimeUtils.nowInt()-oldOwner.getOccupyTime())/60>10?10:(TimeUtils.nowInt()-oldOwner.getOccupyTime());
|
||||
int score =oldOwner.getScore1()+1* second;
|
||||
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_LINGMAI_RANK_PERSON.getType());
|
||||
rank.addRank(user.getId(), String.valueOf(crossGroup)+RedisKey.Delimiter_colon + group, score);
|
||||
|
||||
if(myLingmaiId !=0) {
|
||||
int second = ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60) > 10 ? 10 : ((TimeUtils.nowInt() - (int)oldOwner.getGetAwardTimeOrOccupyTime()) / 60);
|
||||
oldOwner.setScore1(oldOwner.getScore1()+second*config.getRewardList()[0][1]);
|
||||
int score = oldOwner.getScore1() + config.getRewardList()[0][1]*oldOwner.getOccupyTime();
|
||||
rank.addRank(defUid, String.valueOf(crossGroup) + RedisKey.Delimiter_colon + group, score);
|
||||
if (myLingmaiId != 0) {
|
||||
//本人已有灵脉结算
|
||||
LingMaiSecretArea myLingmai = lingMaiMap.get(String.valueOf(myLingmaiId));//上一个占领者
|
||||
second =(TimeUtils.nowInt()-myLingmai.getOccupyTime())/60>10?10:(TimeUtils.nowInt()-myLingmai.getOccupyTime());
|
||||
score =myLingmai.getScore1()+1* second;
|
||||
config = SLodeConfig.lodeConfig.get(myLingmaiId);
|
||||
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.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);
|
||||
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(myLingmaiId),oldOwner);
|
||||
//oldOwner.setScore1(score);
|
||||
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);
|
||||
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id),lingMaiSecretArea);
|
||||
//挑战记录
|
||||
LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id, uid, user);
|
||||
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);
|
||||
long defLenth = redisUtil.lGetListSize(key1);
|
||||
if (defLenth > 20) {
|
||||
|
@ -191,23 +222,20 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
|
|||
arenaRecordDef.setUserName(user.getPlayerInfoManager().getNickName());
|
||||
arenaRecordDef.setId(String.valueOf(id));
|
||||
arenaRecordDef.setPracticeLevel(user.getHeroManager().getPracticeLevel());
|
||||
//arenaRecord.setPracticeLevel(user.getHeroManager().getPracticeLevel());//修行等级 TODO
|
||||
arenaRecordDef.setCreateTime(TimeUtils.nowInt());
|
||||
String defarenaRecordJsonDef = new Gson().toJson(arenaRecordDef);
|
||||
redisUtil.lSet(key2, defarenaRecordJsonDef);
|
||||
//被抢占 给在线的被抢占玩家发红点
|
||||
ISession sess= OnlineUserManager.sessionMap.get(defUid);
|
||||
if(sess!=null){
|
||||
ISession sess = OnlineUserManager.sessionMap.get(defUid);
|
||||
if (sess != null) {
|
||||
ArenaInfoProto.CrossLingmaiIndicationResponse indication = ArenaInfoProto.CrossLingmaiIndicationResponse.newBuilder().build();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,16 +6,15 @@ import com.ljsd.jieling.db.redis.RedisUtil;
|
|||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
||||
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
|
||||
import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic;
|
||||
import com.ljsd.jieling.logic.championship.ChampionshipLogic;
|
||||
import com.ljsd.jieling.logic.arena.CrossLingmaiLogic;
|
||||
import com.ljsd.jieling.logic.dao.ArenaManager;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
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.network.session.ISession;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import config.SLodeConfig;
|
||||
import config.SMServerLodeSetting;
|
||||
import rpc.protocols.ArenaInfoProto;
|
||||
import rpc.protocols.CommonProto;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
|
@ -23,9 +22,7 @@ import util.TimeUtils;
|
|||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collector;
|
||||
import java.util.stream.Collectors;
|
||||
import config.SMServerLodeSetting;
|
||||
|
||||
public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler<ArenaInfoProto.CrossLingmaiSecretAreaInfoRequest> {
|
||||
|
||||
|
@ -36,7 +33,7 @@ public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler<ArenaInfoProt
|
|||
}
|
||||
|
||||
@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();
|
||||
User user = UserManager.getUser(uid);
|
||||
if (user == null) {
|
||||
|
@ -48,47 +45,55 @@ public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler<ArenaInfoProt
|
|||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaInfoResponse.getNumber(), res.build(), true);
|
||||
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();
|
||||
long lingmaiFirst = arenaManager.getCrossLingmaiFirst();
|
||||
|
||||
if(!TimeUtils.isSameDay(lingmaiFirst,TimeUtils.now())){
|
||||
if (!TimeUtils.isSameDay(lingmaiFirst, TimeUtils.now())) {
|
||||
arenaManager.setCrossLingmaiFirst(TimeUtils.now());
|
||||
arenaManager.setCrossLingmaiFirstLevel(user.getPlayerInfoManager().getLevel());
|
||||
}
|
||||
int group = SMServerLodeSetting.getGroupByLevel(arenaManager.getCrossLingmaiFirstLevel());
|
||||
int page = request.getPage();
|
||||
//CROSS_LINGMAISECRET_INFO:跨服分组:分组
|
||||
Map<String, LingMaiSecretArea> lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup+RedisKey.Delimiter_colon+group, String.class, LingMaiSecretArea.class);
|
||||
if(page == 0){
|
||||
int id = lingMaiMap.values().stream().filter(n->n.getUid()==uid).mapToInt(n->n.getId()).sum();
|
||||
if(SLodeConfig.lodeConfig.get(id)!=null){
|
||||
Map<String, LingMaiSecretArea> lingMaiMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.class, LingMaiSecretArea.class);
|
||||
if (page == 0) {
|
||||
int id = lingMaiMap.values().stream().filter(n -> n.getUid() == uid).mapToInt(n -> n.getId()).sum();
|
||||
if (SLodeConfig.lodeConfig.get(id) != null) {
|
||||
page = SLodeConfig.lodeConfig.get(id).getPageNo();
|
||||
}else {
|
||||
} else {
|
||||
//找到第一个未被占领的灵脉
|
||||
for(Map.Entry<Integer, SLodeConfig> configEntry:SLodeConfig.lodeConfig.entrySet()){
|
||||
if(!lingMaiMap.containsKey(configEntry.getKey())){
|
||||
for (Map.Entry<Integer, SLodeConfig> configEntry : SLodeConfig.lodeConfig.entrySet()) {
|
||||
if (!lingMaiMap.containsKey(configEntry.getKey())) {
|
||||
page = SLodeConfig.lodeConfig.get(configEntry.getValue().getPageNo()).getPageNo();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
List<SLodeConfig> pageConfig= SLodeConfig.getByGroupAndPageNo(group,page);
|
||||
if(pageConfig==null){
|
||||
List<SLodeConfig> pageConfig = SLodeConfig.getByGroupAndPageNo(group, page);
|
||||
if (pageConfig == null) {
|
||||
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaInfoResponse.getNumber(), res.build(), true);
|
||||
return;
|
||||
}
|
||||
int myOccupyId = 0;
|
||||
int myOccupyTime = 0;
|
||||
//自己相关的
|
||||
List<LingMaiSecretArea> matchMyInfoList = lingMaiMap.values().stream().filter(n->n.getUid()==uid).collect(Collectors.toList());
|
||||
if(matchMyInfoList!=null&&matchMyInfoList.size()>0){
|
||||
List<LingMaiSecretArea> matchMyInfoList = lingMaiMap.values().stream().filter(n -> n.getUid() == uid).collect(Collectors.toList());
|
||||
if (matchMyInfoList != null && matchMyInfoList.size() > 0) {
|
||||
myOccupyId = matchMyInfoList.get(0).getId();
|
||||
myOccupyTime = (int)matchMyInfoList.get(0).getGetAwardTimeOrOccupyTime();
|
||||
myOccupyTime = (int) matchMyInfoList.get(0).getGetAwardTimeOrOccupyTime();
|
||||
}
|
||||
//当前页面数据
|
||||
for(SLodeConfig config:pageConfig){
|
||||
if(lingMaiMap.containsKey(String.valueOf(config.getId()))){
|
||||
for (SLodeConfig config : pageConfig) {
|
||||
if (lingMaiMap.containsKey(String.valueOf(config.getId()))) {
|
||||
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(lingMaiMap.get(String.valueOf(config.getId())).getUid());
|
||||
CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder()
|
||||
.setUid(lingMaiMap.get(String.valueOf(config.getId())).getUid())
|
||||
|
@ -108,8 +113,7 @@ public class CrossLingmaiSecretAreaInfoHandler extends BaseHandler<ArenaInfoProt
|
|||
.build();
|
||||
|
||||
res.addLingmaiData(lingMaiSecret);
|
||||
|
||||
}else{
|
||||
} else {
|
||||
//没人占领 给机器人数据
|
||||
CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder().setLingmaiId(config.getId()).build();
|
||||
res.addLingmaiData(lingMaiSecret);
|
||||
|
|
|
@ -25,7 +25,7 @@ public class CrossLingmaiSecretAreaRecordHandler extends BaseHandler<ArenaInfoPr
|
|||
}
|
||||
|
||||
@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();
|
||||
User user = UserManager.getUser(uid);
|
||||
if (user == null) {
|
||||
|
@ -35,13 +35,13 @@ public class CrossLingmaiSecretAreaRecordHandler extends BaseHandler<ArenaInfoPr
|
|||
RedisUtil redisUtil = RedisUtil.getInstence();
|
||||
List<String> list = redisUtil.lGet(RedisKey.CROSS_LINGMAISECRET_RECORD, String.valueOf(uid), 0, -1);
|
||||
Collections.reverse(list);
|
||||
if (list != null){
|
||||
for(String s:list){
|
||||
if (list != null) {
|
||||
for (String s : list) {
|
||||
ArenaRecord arenaRecord = new Gson().fromJson(s, ArenaRecord.class);
|
||||
CommonProto.LingMaiSecretRecord record = CommonProto.LingMaiSecretRecord.newBuilder().setType(arenaRecord.getType())
|
||||
.setUserName(user.getPlayerInfoManager().getNickName())
|
||||
.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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@ import com.ljsd.jieling.util.ItemUtil;
|
|||
import config.SErrorCodeEerverConfig;
|
||||
import config.SLodeConfig;
|
||||
import config.SLodeRankReward;
|
||||
import config.SMServerLodeSetting;
|
||||
import manager.STableManager;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
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){
|
||||
for (Map.Entry<String, LingMaiSecretArea> data :lingMaiMap.entrySet()){
|
||||
if(data.getValue().getUid()==uid){
|
||||
|
@ -76,16 +104,14 @@ public class CrossLingmaiLogic {
|
|||
if(config!=null){
|
||||
int occupyTime = (int) map.getValue().getGetAwardTimeOrOccupyTime();
|
||||
int difVal = (nowTime-occupyTime)/60>=10?10:(nowTime-occupyTime)/60;
|
||||
difVal =1 ;
|
||||
//difVal =1 ;
|
||||
map.getValue().setOccupyTime(map.getValue().getOccupyTime()+difVal);
|
||||
map.getValue().setGetAwardTimeOrOccupyTime(TimeUtils.nowInt());
|
||||
|
||||
LOGGER.error("玩家"+map.getValue().getUid()+"获得"+difVal);
|
||||
|
||||
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO,
|
||||
crossGroup + RedisKey.Delimiter_colon + group, map.getKey(),map.getValue());
|
||||
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);
|
||||
LOGGER.error("之前是:"+test +"之后是:"+score);
|
||||
rank.addRank(user.getId(), String.valueOf(crossGroup)+RedisKey.Delimiter_colon + group, score);
|
||||
|
@ -119,16 +145,18 @@ public class CrossLingmaiLogic {
|
|||
if (crossGroup == -1){
|
||||
return;
|
||||
}
|
||||
String rkey1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+"1");
|
||||
String rkey2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_LINGMAI_RANK_PERSON, Integer.toString(crossGroup)+"2");
|
||||
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)+ RedisKey.Delimiter_colon +"2");
|
||||
Set<String> arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey1, 0, -1);
|
||||
Set<String> arenaRank2= RedisUtil.getInstence().getReverseZset(rkey2, 0, -1);
|
||||
sendMailReward(arenaRank1);
|
||||
sendMailReward(arenaRank2);
|
||||
RedisUtil.getInstence().del(rkey1);
|
||||
RedisUtil.getInstence().del(rkey2);
|
||||
}
|
||||
|
||||
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");
|
||||
for(int i=0;i<arenaRankfilt.size();i++){
|
||||
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(hour>9&&hour<21){
|
||||
int mod = minute%2;
|
||||
int mod = minute%10;
|
||||
if(mod ==0 ){
|
||||
CrossLingmaiLogic.getInstance().sendOccypyReward();
|
||||
}
|
||||
|
@ -326,7 +326,7 @@ public class MinuteTask extends Thread {
|
|||
//结算每日排行奖励
|
||||
if(hour ==21 && minute==0){
|
||||
//删除数据 TODO
|
||||
CrossLingmaiLogic.getInstance().sendOccypyReward();
|
||||
CrossLingmaiLogic.getInstance().sendMailReward();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue