罗浮争锋匹配逻辑修改
parent
e7e0ce8eb8
commit
a2f605cca6
|
@ -4,7 +4,6 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Array;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
|
@ -179,6 +178,4 @@ public class Utils {
|
|||
return object;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -39,9 +39,7 @@ import org.springframework.data.redis.core.ZSetOperations;
|
|||
import rpc.protocols.CommonProto;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import rpc.world.WorldProto;
|
||||
import util.TimeUtils;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -109,12 +107,14 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
|
|||
|
||||
//当前分组
|
||||
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
|
||||
String groupStr = String.valueOf(crossGroup);
|
||||
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_SERVICE_ARENA.getType());
|
||||
|
||||
int challengeUid = proto.getChallengeUid();
|
||||
int challengeRank = proto.getChallengeRank();
|
||||
Set<ZSetOperations.TypedTuple<String>> rankByKey = rank.getRankByKey(String.valueOf(crossGroup), challengeRank-1, challengeRank-1);
|
||||
int myRank = rank.getRankIndexByKey(String.valueOf(crossGroup),iSession.getUid());
|
||||
int challengeCurRank = rank.getRankIndexByKey(String.valueOf(crossGroup),proto.getChallengeUid());
|
||||
Set<ZSetOperations.TypedTuple<String>> rankByKey = rank.getRankByKey(groupStr, challengeRank-1, challengeRank-1);
|
||||
int myRank = rank.getRankIndexByKey(groupStr,iSession.getUid());
|
||||
int challengeCurRank = rank.getRankIndexByKey(groupStr, challengeUid);
|
||||
|
||||
int myCurrentRank = proto.getMyCurrentRank();
|
||||
|
||||
|
@ -137,12 +137,12 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
|
|||
ZSetOperations.TypedTuple<String> next = rankByKey.iterator().next();
|
||||
String value = next.getValue();
|
||||
double score = next.getScore();
|
||||
if(Integer.parseInt(value)!=proto.getChallengeUid()){
|
||||
if(Integer.parseInt(value)!= challengeUid){
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
int defendForce;
|
||||
if (proto.getChallengeUid()>1000) {
|
||||
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(proto.getChallengeUid());
|
||||
if (challengeUid >1000) {
|
||||
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(challengeUid);
|
||||
if (csPlayer == null){
|
||||
throw new ErrorCodeException(ErrorCode.USE_NOT_EXIT);
|
||||
}
|
||||
|
@ -152,19 +152,12 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
|
|||
}
|
||||
teamInfo = FightUtil.makeCrossPersonData(csPlayer, proto.getTeamId(), null, crossArenaManager);
|
||||
arenaEnemys = ArenaLogic.getInstance().getUserCrossArenaEnemy(csPlayer,proto.getChallengeRank(),false).build();
|
||||
// 旧数据兼容
|
||||
if (csPlayer.getLuoFuForce() == 0){
|
||||
CSPlayer redis = CrossServiceLogic.getPlayerByRedis(csPlayer.getUserId(), false);
|
||||
if (redis != null){
|
||||
csPlayer = redis;
|
||||
}
|
||||
}
|
||||
defendForce = csPlayer.getLuoFuForce();
|
||||
} else {
|
||||
//机器人
|
||||
CrossArenaEnemy info = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_ARENA_ROBOT_INFO, String.valueOf(crossGroup), String.valueOf(proto.getChallengeUid()), CrossArenaEnemy.class);
|
||||
CrossArenaEnemy info = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_ARENA_ROBOT_INFO, groupStr, String.valueOf(challengeUid), CrossArenaEnemy.class);
|
||||
teamInfo = FightUtil.makeRobotFightData(info.getEnemyId());
|
||||
arenaEnemys =ArenaLogic.getInstance().getRobotCrossArenaEnemy(crossGroup,proto.getChallengeRank(),proto.getChallengeUid()).build();
|
||||
arenaEnemys =ArenaLogic.getInstance().getRobotCrossArenaEnemy(crossGroup,proto.getChallengeRank(), challengeUid).build();
|
||||
defendForce = info.getTotalForce();
|
||||
}
|
||||
CommonProto.ArenaPersonInfo.Builder builder2 = CommonProto.ArenaPersonInfo.newBuilder()
|
||||
|
@ -178,7 +171,7 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
|
|||
int myForce = HeroLogic.getInstance().calTeamTotalForce(user, proto.getTeamId(), true);
|
||||
int teamId = proto.getTeamId();
|
||||
CommonProto.FightTeamInfo fightTeamInfo = FightUtil.makePersonFightData(UserManager.getUser(iSession.getUid()), teamId, null, null);
|
||||
FightResult fightResult = getFightForPVP(iSession.getUid(), proto.getChallengeUid(), fightTeamInfo, teamInfo, FightUtil.getFightSeed(),myForce<defendForce,FightType.CrossLuofuFight);
|
||||
FightResult fightResult = getFightForPVP(iSession.getUid(), challengeUid, fightTeamInfo, teamInfo, FightUtil.getFightSeed(),myForce<defendForce,FightType.CrossLuofuFight);
|
||||
builder1.setFightResult(fightResult.getResult());
|
||||
int seed = fightResult.getSeed();
|
||||
CommonProto.FightData build = CommonProto.FightData.newBuilder()
|
||||
|
@ -202,26 +195,25 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
|
|||
//打赢
|
||||
if (fightResult.getResult() > 0) {
|
||||
// if (proto.getChallengeUid() < 1000) {
|
||||
RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(iSession.getUid()), new HashSet<>());
|
||||
|
||||
// RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(iSession.getUid()), new HashSet<>());
|
||||
if(myRank==-1){
|
||||
//第一次 没有上榜的时候
|
||||
rank.removeOneRankByPiece(String.valueOf(crossGroup),String.valueOf(proto.getChallengeUid()));
|
||||
rank.addRank(iSession.getUid(), String.valueOf(crossGroup), score);
|
||||
newRank = rank.getRankIndexByKey(String.valueOf(crossGroup),iSession.getUid());
|
||||
if(proto.getChallengeUid()>1000){
|
||||
RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(proto.getChallengeUid()), new HashSet<>());
|
||||
ArenaLogic.randomRank(proto.getChallengeUid(),9999, crossGroup);
|
||||
}
|
||||
}else if(rank.getScoreById(iSession.getUid(),String.valueOf(crossGroup))<rank.getScoreById(proto.getChallengeUid(),String.valueOf(crossGroup))){
|
||||
rank.removeOneRankByPiece(groupStr,String.valueOf(challengeUid));
|
||||
rank.addRank(iSession.getUid(), groupStr, score);
|
||||
newRank = rank.getRankIndexByKey(groupStr,iSession.getUid());
|
||||
// if(challengeUid >1000){
|
||||
// RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(challengeUid), new HashSet<>());
|
||||
// ArenaLogic.randomRank(proto.getChallengeUid(),9999, crossGroup);
|
||||
// }
|
||||
}else if(rank.getScoreById(iSession.getUid(), groupStr)<rank.getScoreById(challengeUid, groupStr)){
|
||||
//在榜上 且排名要升高
|
||||
rank.addRank(proto.getChallengeUid(),String.valueOf(crossGroup),rank.getScoreById(iSession.getUid(),String.valueOf(crossGroup)));
|
||||
rank.addRank(iSession.getUid(), String.valueOf(crossGroup), score);
|
||||
newRank = rank.getRankIndexByKey(String.valueOf(crossGroup),iSession.getUid());
|
||||
if(proto.getChallengeUid()>1000){
|
||||
RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(proto.getChallengeUid()), new HashSet<>());
|
||||
ArenaLogic.randomRank(proto.getChallengeUid(),myRank, crossGroup);
|
||||
}
|
||||
rank.addRank(challengeUid, groupStr,rank.getScoreById(iSession.getUid(), groupStr));
|
||||
rank.addRank(iSession.getUid(), groupStr, score);
|
||||
newRank = rank.getRankIndexByKey(groupStr,iSession.getUid());
|
||||
// if(challengeUid >1000){
|
||||
// RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(challengeUid), new HashSet<>());
|
||||
// ArenaLogic.randomRank(proto.getChallengeUid(),myRank, crossGroup);
|
||||
// }
|
||||
}else{
|
||||
//排名不需升高,拿自己的排名重新匹配
|
||||
newRank = myRank;
|
||||
|
@ -245,11 +237,11 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
|
|||
builder.setOldrank(myRank==-1?9999:myRank);
|
||||
RedisUtil.getInstence().putMapEntry(RedisKey.WORLD_ARENA_RRECORD,Integer.toString(iSession.getUid()), s, builder.build().toByteArray());
|
||||
RedisUtil.getInstence().expire(RedisUtil.getInstence().getKey(RedisKey.WORLD_ARENA_RRECORD, Integer.toString(iSession.getUid())), 86400 * 7);
|
||||
if(proto.getChallengeUid()>1000){
|
||||
if(challengeUid >1000){
|
||||
builder.setRank(myRank==-1?9999:myRank);
|
||||
builder.setOldrank(newRank==-1?9999:newRank);
|
||||
RedisUtil.getInstence().putMapEntry(RedisKey.WORLD_ARENA_RRECORD, Integer.toString(proto.getChallengeUid()), s, builder.build().toByteArray());
|
||||
RedisUtil.getInstence().expire(RedisUtil.getInstence().getKey(RedisKey.WORLD_ARENA_RRECORD, Integer.toString(proto.getChallengeUid())), 86400 * 7);
|
||||
RedisUtil.getInstence().putMapEntry(RedisKey.WORLD_ARENA_RRECORD, Integer.toString(challengeUid), s, builder.build().toByteArray());
|
||||
RedisUtil.getInstence().expire(RedisUtil.getInstence().getKey(RedisKey.WORLD_ARENA_RRECORD, Integer.toString(challengeUid)), 86400 * 7);
|
||||
}
|
||||
PlayerLogic.getInstance().checkAndUpdate(user, VipPrivilegeType.WORLD_ARENA_CHALLENGE_TIMES, 1);
|
||||
}
|
||||
|
|
|
@ -3,8 +3,6 @@ package com.ljsd.jieling.handler.gtw;
|
|||
import com.ljsd.GameApplication;
|
||||
import com.ljsd.jieling.core.FunctionIdEnum;
|
||||
import com.ljsd.jieling.core.HandlerLogicThread;
|
||||
import com.ljsd.jieling.db.redis.RedisKey;
|
||||
import com.ljsd.jieling.db.redis.RedisUtil;
|
||||
import com.ljsd.jieling.exception.ErrorCode;
|
||||
import com.ljsd.jieling.exception.ErrorCodeException;
|
||||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
|
@ -28,7 +26,9 @@ import rpc.protocols.MessageTypeProto;
|
|||
import rpc.world.WorldProto;
|
||||
import util.TimeUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -94,17 +94,7 @@ public class GetWorldArenaInfoRequestHandler extends BaseHandler<WorldProto.GetW
|
|||
builder.setEnterable(-1);
|
||||
}
|
||||
CommonProto.ArenaInfo.Builder builder1 = CommonProto.ArenaInfo.newBuilder();
|
||||
// try {
|
||||
//// Lockeys.getInstance().lock("arena", rpcMessage.getServerId());
|
||||
// int serverId = rpcMessage.getServerId();
|
||||
// Integer integer = ArenaLogic.serverSplit.get(String.valueOf(serverId));
|
||||
// HashMap<Integer, ArenaEnemy> integerIntegerHashMap = ArenaLogic.ranInfo.get(integer);
|
||||
// if (integerIntegerHashMap == null) {
|
||||
// builder.setStage(1);
|
||||
// return builder.build();
|
||||
// }
|
||||
//获取我的排名
|
||||
// Map.Entry<Integer, ArenaEnemy> myRank = ArenaLogic.getKey(integerIntegerHashMap, rpcMessage.getUid());
|
||||
double score = rank.getRankIndexByKey(String.valueOf(crossGroup),iSession.getUid());
|
||||
builder1.setScore(score==-1?9999:(int)score);
|
||||
|
||||
|
@ -122,9 +112,7 @@ public class GetWorldArenaInfoRequestHandler extends BaseHandler<WorldProto.GetW
|
|||
|
||||
List<CommonProto.ArenaEnemy> arenaEnemyList = ArenaLogic.getInstance().getCrossArenaEnemyList(iSession.getUid(),rankInfo,crossGroup);
|
||||
builder1.addAllArenaEnemys(arenaEnemyList);
|
||||
|
||||
}
|
||||
// List<String> strings = RedisUtil.getInstence().lGet(RedisKey.WORLD_ARENA_MY_PRON,String.valueOf(iSession.getUid()), 0, -1);
|
||||
builder.setArenaInfo(builder1.build());
|
||||
MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.GetWorldArenaInfoResponse.getNumber(),builder.build(),true);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.ljsd.jieling.handler.map;
|
||||
|
||||
import com.ljsd.jieling.core.GlobalsDef;
|
||||
import com.ljsd.jieling.exception.ErrorCode;
|
||||
import com.ljsd.jieling.exception.ErrorCodeException;
|
||||
import com.ljsd.jieling.globals.BIReason;
|
||||
|
@ -17,15 +16,14 @@ import com.ljsd.jieling.logic.fight.result.FightResult;
|
|||
import com.ljsd.jieling.logic.mission.GameEvent;
|
||||
import com.ljsd.jieling.logic.mission.MissionType;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.sun.org.apache.bcel.internal.generic.NEW;
|
||||
import rpc.protocols.CommonProto;
|
||||
import rpc.protocols.MapInfoProto;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import com.ljsd.jieling.util.MonsterUtil;
|
||||
import config.*;
|
||||
import manager.STableManager;
|
||||
import rpc.protocols.CommonProto;
|
||||
import rpc.protocols.MapInfoProto;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import util.CellUtil;
|
||||
import util.MathUtils;
|
||||
import util.TimeUtils;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.ljsd.jieling.logic.arena;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.ljsd.GameApplication;
|
||||
import com.ljsd.fight.ArenaRecord;
|
||||
import com.ljsd.fight.FightType;
|
||||
|
@ -936,8 +935,7 @@ public class ArenaLogic {
|
|||
}
|
||||
arenaEnemyList.add(robotCrossArenaEnemy.build());
|
||||
}else{
|
||||
|
||||
arenaEnemyList.add(getUserCrossArenaEnemy(rankIndex,Integer.valueOf(next.getValue()),list.contains(next.getValue())));
|
||||
arenaEnemyList.add(getUserCrossArenaEnemy(rankIndex,Integer.parseInt(next.getValue()),list.contains(next.getValue())));
|
||||
}
|
||||
});
|
||||
return arenaEnemyList;
|
||||
|
@ -987,21 +985,13 @@ public class ArenaLogic {
|
|||
*/
|
||||
public static List<CommonProto.ArenaEnemy> randomRank(int uid, int myRank,int crossGroup) {
|
||||
//缓存每次匹配结果
|
||||
Set<Integer> hisRank = RedisUtil.getInstence().getObject(
|
||||
RedisUtil.getInstence().getKey(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(uid))
|
||||
, new TypeToken<Set<Integer>>() {}.getType());
|
||||
TreeSet<Integer> matchRank;
|
||||
if (hisRank == null || hisRank.size() == 0) {
|
||||
//获取匹配对手
|
||||
matchRank = getMatchID(myRank==9999?1000:myRank);
|
||||
} else {
|
||||
matchRank = new TreeSet<>(hisRank);
|
||||
}
|
||||
TreeSet<Integer> matchRank = getMatchID(myRank==9999?1000:myRank);
|
||||
|
||||
AbstractRank rankEnum = RankContext.getRankEnum(RankEnum.CROSS_SERVICE_ARENA.getType());
|
||||
List<Integer> ids = new ArrayList<>(4);
|
||||
|
||||
RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(uid), matchRank);
|
||||
RedisUtil.getInstence().expire(RedisUtil.getInstence().getKey(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(uid)),TimeUtils.DAY*2/1000);
|
||||
// RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(uid), matchRank);
|
||||
// RedisUtil.getInstence().expire(RedisUtil.getInstence().getKey(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(uid)),TimeUtils.DAY*2/1000);
|
||||
matchRank.forEach(rank -> {
|
||||
Set<ZSetOperations.TypedTuple<String>> rankByKey = rankEnum.getRankByKey(String.valueOf(crossGroup),rank-1,rank-1);
|
||||
if(rankByKey.iterator().hasNext()){
|
||||
|
|
Loading…
Reference in New Issue