罗浮争锋匹配逻辑修改

back_recharge
duhui 2023-02-03 14:45:34 +08:00
parent e7e0ce8eb8
commit a2f605cca6
5 changed files with 41 additions and 76 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -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()){