跨服灵脉秘境

xuexinpeng 2021-11-18 21:08:32 +08:00
parent 1acf753951
commit d4daed3d65
6 changed files with 184 additions and 109 deletions

View File

@ -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();
}
/**
* 56bug

View File

@ -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));
}
LingMaiSecretArea lingMaiSecretArea = CrossLingmaiLogic.getLingaMaiData(id, uid, user);
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_LINGMAISECRET_INFO, crossGroup + RedisKey.Delimiter_colon + group, String.valueOf(id), lingMaiSecretArea);
}
}else {
//PVP
// 组装真人数据
// 战斗逻辑
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 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,
fightTeamInfo, defteamInfo, FightUtil.getFightSeed(), myforce < defforce);
int seed = fightResult.getSeed();
@ -140,38 +168,41 @@ 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) {
redisUtil.lPop(key1);
}
ArenaRecord arenaRecord = new ArenaRecord();
ArenaRecord arenaRecord = new ArenaRecord();
arenaRecord.setType(0);
arenaRecord.setUserName(csPlayer.getName());
arenaRecord.setId(String.valueOf(id));
@ -186,29 +217,26 @@ public class CrossLingmaiSecretAreaBattleHandler extends BaseHandler<ArenaInfoPr
if (defLenth2 > 20) {
redisUtil.lPop(key2);
}
ArenaRecord arenaRecordDef = new ArenaRecord();
ArenaRecord arenaRecordDef = new ArenaRecord();
arenaRecordDef.setType(1);
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);
}
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossLingmaiSecretAreaResponse.getNumber(), res.build(), true);
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);
}
}

View File

@ -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,72 +45,79 @@ 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()))){
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())
.setLevel(csPlayer.getLevel())
.setName(csPlayer.getName())
.setServername(lingMaiMap.get(String.valueOf(config.getId())).getServerName())
.setTotalForce(csPlayer.getMaxFore()) //.setTotalForce(crossArenaManager.getTotalForce())
.setUserTitle(csPlayer.getUserTitle())
.setUserMount(csPlayer.getUserMount())
.setGender(csPlayer.getSex())
.setUserSkin(csPlayer.getSkin())
.setPracticeLevel(csPlayer.getPracticeLevel())
.setScore(csPlayer.getCrossYuxulundaoNewScore())
.setHead(csPlayer.getHead())
.setHeadFrame(csPlayer.getHeadFrame())
.setLingmaiId(lingMaiMap.get(String.valueOf(config.getId())).getId())
.build();
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())
.setLevel(csPlayer.getLevel())
.setName(csPlayer.getName())
.setServername(lingMaiMap.get(String.valueOf(config.getId())).getServerName())
.setTotalForce(csPlayer.getMaxFore()) //.setTotalForce(crossArenaManager.getTotalForce())
.setUserTitle(csPlayer.getUserTitle())
.setUserMount(csPlayer.getUserMount())
.setGender(csPlayer.getSex())
.setUserSkin(csPlayer.getSkin())
.setPracticeLevel(csPlayer.getPracticeLevel())
.setScore(csPlayer.getCrossYuxulundaoNewScore())
.setHead(csPlayer.getHead())
.setHeadFrame(csPlayer.getHeadFrame())
.setLingmaiId(lingMaiMap.get(String.valueOf(config.getId())).getId())
.build();
res.addLingmaiData(lingMaiSecret);
}else{
//没人占领 给机器人数据
CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder().setLingmaiId(config.getId()).build();
res.addLingmaiData(lingMaiSecret);
}
res.addLingmaiData(lingMaiSecret);
} else {
//没人占领 给机器人数据
CommonProto.ArenaPersonInfo lingMaiSecret = CommonProto.ArenaPersonInfo.newBuilder().setLingmaiId(config.getId()).build();
res.addLingmaiData(lingMaiSecret);
}
}
res.setMyOccupyId(myOccupyId);
res.setMyOccupyTime(myOccupyTime);

View File

@ -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())
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);
}
}

View File

@ -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);

View File

@ -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();
}
}