跨服提交
parent
966351e03c
commit
39bc93bbca
|
@ -325,6 +325,14 @@ public class RedisKey {
|
|||
|
||||
public static final String WORLD_ARENA_RANK_MY_MATH = "WORLD_ARENA_RANK_MY_MATH";//我匹配到的数据
|
||||
|
||||
//机器人膜拜次数
|
||||
public static final String ARENA_PROUD_COUNT_ROBOT = "ARENA_PROUD_COUNT_ROBOT";
|
||||
//玩家膜拜次数
|
||||
public static final String ARENA_PROUD_COUNT = "ARENA_PROUD_COUNT";
|
||||
//我自己的膜拜信息
|
||||
public static final String WORLD_ARENA_MY_PRON = "WORLD_ARENA_MY_PRON";
|
||||
|
||||
public static final String WORLD_ARENA_RRECORD = "WORLD_ARENA_RRECORD";
|
||||
|
||||
public static Set<String> familyKey = new HashSet<>();
|
||||
|
||||
|
|
|
@ -1257,15 +1257,14 @@ public class RedisUtil {
|
|||
|
||||
public String getKey(String type,String key){
|
||||
|
||||
if(RedisKey.PLAYER_INFO_CACHE.equals(type) ||RedisKey.FAMILY_INFO.equals(type)||RedisKey.PIDGIDTEMP.equals(type)||RedisKey.SERVER_WORLDLEVE_INFO.equals(type)|| RedisKey.GUILD_INFO_CACHE.equals(type)||RedisKey.SERVER_SPLIT_INFO.equals(type)||RedisKey.SERVER_SPLIT_MAIL_INFO.equals(type)) {
|
||||
if(RedisKey.PLAYER_INFO_CACHE.equals(type) ||RedisKey.FAMILY_INFO.equals(type)||RedisKey.PIDGIDTEMP.equals(type)||RedisKey.SERVER_WORLDLEVE_INFO.equals(type)|| RedisKey.GUILD_INFO_CACHE.equals(type)||RedisKey.SERVER_SPLIT_INFO.equals(type)||RedisKey.SERVER_SPLIT_MAIL_INFO.equals(type)||RedisKey.CROSS_ARENA_ROBOT_INFO.equals(type)||RedisKey.CROSS_SERVICE_ARENA.equals(type)||RedisKey.WORLD_ARENA_RANK_MY_MATH.equals(type)||RedisKey.WORLD_ARENA_MY_PRON.equals(type)||RedisKey.WORLD_ARENA_RRECORD.equals(type)) {
|
||||
return type + RedisKey.Delimiter_colon + key;
|
||||
}
|
||||
// if(RedisKey.familyKey.contains(type)){
|
||||
// return GameApplication.serverProperties.getAreaId()+ RedisKey.Delimiter_colon+type + RedisKey.Delimiter_colon+key;
|
||||
// }
|
||||
if(RedisKey.TOKEN.equals(type)||RedisKey.USER_SERVER_INFO.equals(type)||
|
||||
RedisKey.CDKEY.equals(type)||RedisKey.ServerArenaJob.equals(type)||
|
||||
RedisKey.CROSS_SERVICE_ARENA.equals(type)){
|
||||
RedisKey.CDKEY.equals(type)||RedisKey.ServerArenaJob.equals(type)){
|
||||
return type + RedisKey.Delimiter_colon + key;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,30 +1,52 @@
|
|||
package com.ljsd.jieling.handler.gtw;
|
||||
|
||||
import com.ljsd.GameLogicService;
|
||||
import com.ljsd.fight.CheckFight;
|
||||
import com.ljsd.fight.FightType;
|
||||
import com.ljsd.jieling.core.FunctionIdEnum;
|
||||
import com.ljsd.jieling.core.HandlerLogicThread;
|
||||
import com.ljsd.jieling.core.VipPrivilegeType;
|
||||
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.globals.BIReason;
|
||||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
import com.ljsd.jieling.logic.GlobalDataManaager;
|
||||
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
||||
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
|
||||
import com.ljsd.jieling.logic.arena.ArenaLogic;
|
||||
import com.ljsd.jieling.logic.arenaworld.ArenaWorldLogic;
|
||||
import com.ljsd.jieling.logic.dao.CrossArenaEnemy;
|
||||
import com.ljsd.jieling.logic.dao.TimeControllerOfFunction;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.gm.ArenaOfUser;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.logic.fight.FightUtil;
|
||||
import com.ljsd.jieling.logic.fight.result.FightResult;
|
||||
import com.ljsd.jieling.logic.player.PlayerLogic;
|
||||
import com.ljsd.jieling.logic.rank.RankContext;
|
||||
import com.ljsd.jieling.logic.rank.RankEnum;
|
||||
import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank;
|
||||
import com.ljsd.jieling.network.server.GlobalidHelper;
|
||||
import com.ljsd.jieling.network.server.WorldHelper;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
import com.ljsd.jieling.util.*;
|
||||
import config.SArenaRobotConfig;
|
||||
import config.SArenaSetting;
|
||||
import config.SGlobalSystemConfig;
|
||||
import config.SMServerArenaSetting;
|
||||
import manager.STableManager;
|
||||
import org.luaj.vm2.LuaValue;
|
||||
import org.springframework.data.redis.core.ZSetOperations;
|
||||
import rpc.protocols.CommonProto;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import rpc.world.WorldProto;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Description: gs 继承basehandler 做消息拦截 包装消息再转发到w
|
||||
* Author: zsx
|
||||
|
@ -39,10 +61,6 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
|
|||
|
||||
@Override
|
||||
public void processWithProto(ISession iSession, WorldProto.GetWorldArenaChallengeRequest proto) throws Exception {
|
||||
GlobalidHelper.WorldInfo worldInfo = GlobalidHelper.getWorldInfo();
|
||||
if (null == worldInfo) {
|
||||
throw new ErrorCodeException("world unavailable or play not open");
|
||||
}
|
||||
|
||||
SGlobalSystemConfig sGlobalSystemConfig = STableManager.getConfig(SGlobalSystemConfig.class).get(FunctionIdEnum.World_Arena.getFunctionType());
|
||||
if (!ArenaWorldLogic.checkOpen(String.valueOf(iSession.getUid()))) {
|
||||
|
@ -70,50 +88,185 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
|
|||
if (!ArenaWorldLogic.checkJoin(String.valueOf(iSession.getUid()))) {
|
||||
throw new ErrorCodeException(ErrorCode.WORLD_LEVELIMIT);
|
||||
}
|
||||
boolean check = PlayerLogic.getInstance().checkAndUpdate(user, VipPrivilegeType.WORLD_ARENA_CHALLENGE_TIMES, 1);
|
||||
if(!check){
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
|
||||
//走特权
|
||||
// if(user.getArenaManager().getWorldFreeChallengeTime()>0){
|
||||
// //free
|
||||
// user.getArenaManager().setWorldFreeChallengeTime(user.getArenaManager().getWorldFreeChallengeTime() -1);
|
||||
// }else {
|
||||
//check costs
|
||||
// int[][] costItems = new int[1][];
|
||||
// costItems[0]=setting.getCost();
|
||||
// boolean enough = ItemUtil.itemCost(user, costItems, BIReason.WORLD_ARENA, 0);
|
||||
// if (!enough) {
|
||||
// throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
|
||||
// }
|
||||
// PlayerLogic.getInstance().checkAndUpdate()
|
||||
// boolean b1 = PlayerLogic.getInstance().checkAndUpdate(user, VipPrivilegeType.SIGN_AGAIN, 1);
|
||||
// if(!b1){
|
||||
// throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
|
||||
// boolean check = PlayerLogic.getInstance().checkAndUpdate(user, VipPrivilegeType.WORLD_ARENA_CHALLENGE_TIMES, 1);
|
||||
// if(!check){
|
||||
// throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
// }
|
||||
// }
|
||||
|
||||
boolean b;
|
||||
if (proto.getSkipFight() == 0) {
|
||||
WorldProto.GetWorldArenaChallengeRequest.Builder builder = WorldProto.GetWorldArenaChallengeRequest.newBuilder()
|
||||
.setChallengeUid(proto.getChallengeUid())
|
||||
.setTeamId(proto.getTeamId())
|
||||
.setChallengeRank(proto.getChallengeRank())
|
||||
.setSkipFight(proto.getSkipFight())
|
||||
.setArenaEnemys(ArenaLogic.getInstance().getUserArenaEnemy(iSession.getUid(), proto.getTeamId()))
|
||||
.setFightTeamInfo(FightUtil.getFightTeamInfo(user, proto.getTeamId()));
|
||||
//转发到world服
|
||||
b = WorldHelper.sendMessageToWord(iSession.getUid(), builder.build());
|
||||
} else {
|
||||
b = WorldHelper.sendMessageToWord(iSession.getUid(), proto);
|
||||
}
|
||||
|
||||
user.getArenaManager().setCostDallyTime(user.getArenaManager().getCostDallyTime()+1);
|
||||
|
||||
if (!b) {
|
||||
throw new ErrorCodeException(ErrorCode.UNKNOWN);
|
||||
//返回数据
|
||||
WorldProto.GetWorldArenaChallengeResponse.Builder builder1 = WorldProto.GetWorldArenaChallengeResponse.newBuilder();
|
||||
|
||||
|
||||
if (proto.getSkipFight() == 1) {
|
||||
builder1.setFightResult(1);
|
||||
int[][] reward = new int[1][];
|
||||
reward[0]=setting.getRespectReward();
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(UserManager.getUser(iSession.getUid()), reward, BIReason.WORLD_PRO_DROP);
|
||||
builder1.setDrop(drop);
|
||||
MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.GetWorldArenaChallengeResponse.getNumber(),builder1.build(),true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//战斗
|
||||
CommonProto.FightTeamInfo teamInfo = null;
|
||||
CommonProto.ArenaEnemy arenaEnemys = null;
|
||||
CommonProto.ArenaEnemy arenaAttack = null;
|
||||
|
||||
int force;
|
||||
//当前分组
|
||||
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
|
||||
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_SERVICE_ARENA.getType());
|
||||
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 newRank = 0;
|
||||
if(rankByKey==null){
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
ZSetOperations.TypedTuple<String> next = rankByKey.iterator().next();
|
||||
String value = next.getValue();
|
||||
double score = next.getScore();
|
||||
if(Integer.parseInt(value)!=proto.getChallengeUid()){
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
|
||||
|
||||
if (proto.getChallengeUid()>1000) {
|
||||
ArenaOfUser arenaOfUser = CrossServiceLogic.getInstance().query(proto.getChallengeUid());
|
||||
teamInfo = FightUtil.makeCrossPersonData(arenaOfUser);
|
||||
} else {
|
||||
//机器人
|
||||
|
||||
CrossArenaEnemy info = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_ARENA_ROBOT_INFO, String.valueOf(crossGroup), String.valueOf(proto.getChallengeUid()), CrossArenaEnemy.class);
|
||||
|
||||
teamInfo = FightUtil.makeRobotFightData(info.getEnemyId());
|
||||
force = SArenaRobotConfig.getsArenaRobotConfigById(info.getEnemyId()).getTotalForce();
|
||||
arenaEnemys =ArenaLogic.getInstance().getRobotCrossArenaEnemy(proto.getChallengeUid(),crossGroup).build();
|
||||
arenaAttack = CommonProto.ArenaEnemy.newBuilder().setPersonInfo(CommonProto.ArenaPersonInfo.newBuilder().setUid(iSession.getUid())).build();
|
||||
}
|
||||
|
||||
// boolean isRevert = proto.getTotalForce() < force;
|
||||
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(), false);
|
||||
builder1.setFightResult((int)fightResult.getCheckResult()[0]);
|
||||
int seed = fightResult.getSeed();
|
||||
CommonProto.FightData build = CommonProto.FightData.newBuilder()
|
||||
.setFightMaxTime(SArenaSetting.getSArenaSetting().getMostTime())
|
||||
.setFightSeed(seed)
|
||||
.setHeroFightInfos(fightResult.getFightTeamInfo())
|
||||
.addMonsterList(fightResult.getDefFightTeamInfo())
|
||||
.build();
|
||||
builder1.setFightData(build);
|
||||
WorldProto.WroldBattleRecord.Builder builder = WorldProto.WroldBattleRecord.newBuilder();
|
||||
builder.setFightData(fightResult.getFightData());
|
||||
builder.setResult((int)fightResult.getCheckResult()[0]);
|
||||
String s = KeyGenUtils.produceIdByModule(UUIDEnum.ARENARECORD, iSession.getUid());
|
||||
builder.setRecordId(s);
|
||||
builder.setAttackTime((int)(System.currentTimeMillis()/1000));
|
||||
//record
|
||||
builder.setRedEnemy(arenaAttack);
|
||||
builder.setBlueEnemy(arenaEnemys);
|
||||
|
||||
int[][] reward = new int[1][];
|
||||
reward[0]=setting.getRespectReward();
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(UserManager.getUser(iSession.getUid()), reward, BIReason.WORLD_PRO_DROP);
|
||||
builder1.setDrop(drop);
|
||||
if (fightResult.getCheckResult()[0] > 0) {
|
||||
//打赢机器人
|
||||
if (proto.getChallengeUid() < 1000) {
|
||||
RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(iSession.getUid()), new HashSet<>());
|
||||
ArenaLogic.randomRank(iSession.getUid(), proto.getChallengeRank(), crossGroup);
|
||||
|
||||
if(myRank==-1){
|
||||
rank.removeOneRankByPiece(String.valueOf(crossGroup),String.valueOf(proto.getChallengeRank()));
|
||||
rank.addRank(iSession.getUid(), String.valueOf(crossGroup), score);
|
||||
newRank = rank.getRankIndexByKey(String.valueOf(crossGroup),iSession.getUid());
|
||||
}else if(rank.getScoreById(iSession.getUid(),String.valueOf(crossGroup))<rank.getScoreById(proto.getChallengeUid(),String.valueOf(crossGroup))){
|
||||
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());
|
||||
}else{
|
||||
newRank = myRank;
|
||||
}
|
||||
}
|
||||
// //交换队伍
|
||||
// Map.Entry<Integer, ArenaEnemy> myRank = ArenaLogic.getKey(integerIntegerHashMap, rpcMessage.getUid());
|
||||
// if (myRank != null) {
|
||||
// builder.setOldrank(myRank.getKey());
|
||||
// if(myRank.getKey()>proto.getChallengeRank()){
|
||||
// arenaInfoBuild.setScore(proto.getChallengeRank());
|
||||
// ArenaEnemy temp = new ArenaEnemy();
|
||||
// temp = myRank.getValue();
|
||||
// integerIntegerHashMap.put(myRank.getKey(), arenaEnemy);
|
||||
// integerIntegerHashMap.put(proto.getChallengeRank(), temp);
|
||||
// arenaInfoBuild.setScore(proto.getChallengeRank());
|
||||
// }else{
|
||||
// arenaInfoBuild.setScore(myRank.getKey());
|
||||
// }
|
||||
// if (arenaEnemy.getEnemyType() == 0) {
|
||||
// //清空匹配
|
||||
// RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(arenaEnemy.getEnemyId()), new HashSet<>());
|
||||
// }
|
||||
// } else {
|
||||
// arenaInfoBuild.setScore(proto.getChallengeRank());
|
||||
// builder.setOldrank(9999);
|
||||
// integerIntegerHashMap.put(proto.getChallengeRank(), new ArenaEnemy(rpcMessage.getUid(), rpcMessage.getServerId(), 1, 0));
|
||||
// }
|
||||
// myRank = ArenaLogic.getKey(integerIntegerHashMap, rpcMessage.getUid());
|
||||
// //处理匹配信息
|
||||
// RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(rpcMessage.getUid()), new HashSet<>());
|
||||
// List<ArenaEnemy> arenaEnemies = ArenaLogic.randomRank(integerIntegerHashMap, rpcMessage.getUid(), myRank == null ? 9999 : myRank.getKey());
|
||||
// //给对手重新匹配信息
|
||||
// if(arenaEnemy.getEnemyType()==1){
|
||||
// RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(proto.getChallengeUid()), new HashSet<>());
|
||||
// ArenaLogic.randomRank(integerIntegerHashMap,proto.getChallengeUid(),proto.getMyCurrentRank());
|
||||
// }
|
||||
//
|
||||
// //notify client
|
||||
// List<String> strings = RedisUtil.getInstence().lGet(RedisKey.WORLD_ARENA_MY_PRON,String.valueOf(rpcMessage.getUid()), 0, -1);
|
||||
// List<CommonProto.ArenaEnemy> arenaEnemyList = ArenaLogic.getInstance().getArenaEnemyList(new LinkedList<>(arenaEnemies),new LinkedList<>(strings));
|
||||
// arenaInfoBuild.addAllArenaEnemys(arenaEnemyList);
|
||||
// builder.setRank(myRank == null ? 9999 : myRank.getKey());
|
||||
// }
|
||||
|
||||
|
||||
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GetWorldArenaChallengeResponse.getNumber(), builder1.build(), true);
|
||||
|
||||
|
||||
}
|
||||
|
||||
builder.setRank(newRank);
|
||||
builder.setOldrank(myRank==-1?9999:myRank);
|
||||
RedisUtil.getInstence().putMapEntry(RedisKey.WORLD_ARENA_RRECORD,Integer.toString(iSession.getUid()), s, builder.build().toByteArray());
|
||||
|
||||
RedisUtil.getInstence().putMapEntry(RedisKey.WORLD_ARENA_RRECORD, Integer.toString(proto.getChallengeUid()), s, builder.build().toByteArray());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static FightResult getFightForPVP(int attachId,int defUid,CommonProto.FightTeamInfo fightTeamInfo, CommonProto.FightTeamInfo deffightTeamInfo,int seed,boolean isRever) throws Exception {
|
||||
LuaValue getFightData ;
|
||||
if(isRever){
|
||||
deffightTeamInfo = CommonProto.FightTeamInfo.newBuilder().mergeFrom(deffightTeamInfo).setFirstCamp(1).build();
|
||||
getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo,true);//对方先手
|
||||
}else {
|
||||
getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo);
|
||||
}
|
||||
LuaValue getOptionData = FightDataUtil.getOptionData(attachId+"");
|
||||
long[] fightResult = CheckFight.getInstance().checkFight(seed, SArenaSetting.getSArenaSetting().getMostTime(), getFightData, getOptionData, FightType.ArenaFight);
|
||||
|
||||
FightResult.Builder builder = FightResult.newBuilder();
|
||||
builder.setCheckResult(fightResult);
|
||||
builder.setSeed(seed);
|
||||
builder.setFightTeamInfo(fightTeamInfo);
|
||||
builder.setDefFightTeamInfo(deffightTeamInfo);
|
||||
CommonProto.FightData fightData = CommonProto.FightData.newBuilder().setFightType(FightType.ArenaFight.getType()).setHeroFightInfos(fightTeamInfo).addMonsterList(deffightTeamInfo).setFightSeed(seed).setFightMaxTime(SArenaSetting.getSArenaSetting().getMostTime()).build();
|
||||
builder.setFightData(fightData);
|
||||
return builder.build();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,10 +26,7 @@ import rpc.protocols.CommonProto;
|
|||
import rpc.protocols.MessageTypeProto;
|
||||
import rpc.world.WorldProto;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -100,13 +97,14 @@ public class GetWorldArenaInfoRequestHandler extends BaseHandler<WorldProto.GetW
|
|||
|
||||
//如果是攻击阶段
|
||||
if(ArenaLogic.getState()==ArenaLogic.BATTLE_STATE){
|
||||
|
||||
List<CommonProto.ArenaEnemy> arenaEnemyList = ArenaLogic.randomRank(iSession.getUid(), score == -1 ? 9999 : (int) score,crossGroup);
|
||||
builder1.addAllArenaEnemys(arenaEnemyList);
|
||||
}else{
|
||||
//拿前4个
|
||||
Set<ZSetOperations.TypedTuple<String>> rankByKey = rank.getRankByKey(String.valueOf(crossGroup), 0, 4);
|
||||
Set<Integer> keys = new HashSet<>(4);
|
||||
Set<ZSetOperations.TypedTuple<String>> rankByKey = rank.getRankByKey(String.valueOf(crossGroup), 0, 3);
|
||||
List<Integer> keys = new ArrayList<>(4);
|
||||
rankByKey.forEach(n->keys.add(Integer.parseInt(n.getValue())));
|
||||
List<CommonProto.ArenaEnemy> arenaEnemyList = ArenaLogic.getInstance().getCrossArenaEnemyList(keys);
|
||||
List<CommonProto.ArenaEnemy> arenaEnemyList = ArenaLogic.getInstance().getCrossArenaEnemyList(iSession.getUid(),keys,crossGroup);
|
||||
builder1.addAllArenaEnemys(arenaEnemyList);
|
||||
|
||||
}
|
||||
|
|
|
@ -2,8 +2,11 @@ package com.ljsd.jieling.handler.gtw;
|
|||
|
||||
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.globals.BIReason;
|
||||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
import com.ljsd.jieling.logic.GlobalDataManaager;
|
||||
import com.ljsd.jieling.logic.arenaworld.ArenaWorldLogic;
|
||||
|
@ -12,9 +15,12 @@ import com.ljsd.jieling.logic.dao.UserManager;
|
|||
import com.ljsd.jieling.network.server.GlobalidHelper;
|
||||
import com.ljsd.jieling.network.server.WorldHelper;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import config.SGlobalSystemConfig;
|
||||
import config.SMServerArenaSetting;
|
||||
import manager.STableManager;
|
||||
import rpc.protocols.CommonProto;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import rpc.world.WorldProto;
|
||||
|
||||
|
@ -27,17 +33,12 @@ public class GetWorldArenaProudRequestHandler extends BaseHandler<WorldProto.Get
|
|||
|
||||
@Override
|
||||
public MessageTypeProto.MessageType getMessageCode() {
|
||||
return null;
|
||||
return MessageTypeProto.MessageType.GetWorldArenaProudRequest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processWithProto(ISession iSession, WorldProto.GetWorldArenaProudRequest proto) throws Exception {
|
||||
|
||||
|
||||
GlobalidHelper.WorldInfo worldInfo = GlobalidHelper.getWorldInfo();
|
||||
if (null == worldInfo){
|
||||
throw new ErrorCodeException("world unavailable or play not open");
|
||||
}
|
||||
SGlobalSystemConfig sGlobalSystemConfig = STableManager.getConfig(SGlobalSystemConfig.class).get(FunctionIdEnum.World_Arena.getFunctionType());
|
||||
if (!HandlerLogicThread.checkOpen(UserManager.getUser(iSession.getUid()),sGlobalSystemConfig)) {
|
||||
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
|
||||
|
@ -54,6 +55,30 @@ public class GetWorldArenaProudRequestHandler extends BaseHandler<WorldProto.Get
|
|||
}else {
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_DEFINE_SELF);
|
||||
}
|
||||
int[][] reward = new int[1][];
|
||||
reward[0] = setting.getBattleWinReward();
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(UserManager.getUser(iSession.getUid()), reward, BIReason.WORLD_CHANGE_DROP);
|
||||
WorldProto.GetWorldArenaProudResponse.Builder builder = WorldProto.GetWorldArenaProudResponse.newBuilder();
|
||||
if(proto.getChallengeUid()<10000){
|
||||
Object get = RedisUtil.getInstence().hget(RedisKey.ARENA_PROUD_COUNT_ROBOT,String.valueOf(proto.getChallengeRank()));
|
||||
int proudTime = get==null?1:Integer.parseInt((String)get)+1;
|
||||
RedisUtil.getInstence().hset(RedisKey.ARENA_PROUD_COUNT_ROBOT,String.valueOf(proto.getChallengeRank()),proudTime);
|
||||
RedisUtil.getInstence().lSet(RedisKey.WORLD_ARENA_MY_PRON+":"+iSession.getUid(),String.valueOf(proto.getChallengeRank()));
|
||||
|
||||
builder.setWorshipTime(proudTime);
|
||||
}else{
|
||||
|
||||
Object get = RedisUtil.getInstence().hget(RedisKey.ARENA_PROUD_COUNT, String.valueOf(proto.getChallengeUid()));
|
||||
|
||||
int proudTime = get==null?1:Integer.parseInt((String)get)+1;
|
||||
RedisUtil.getInstence().hset(RedisKey.ARENA_PROUD_COUNT,String.valueOf(proto.getChallengeUid()),proudTime);
|
||||
RedisUtil.getInstence().lSet(RedisKey.WORLD_ARENA_MY_PRON+":"+iSession.getUid(),String.valueOf(proto.getChallengeUid()));
|
||||
|
||||
builder.setWorshipTime(proudTime);
|
||||
}
|
||||
// builder.setErr()
|
||||
builder.setDrop(drop);
|
||||
MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.GetWorldArenaProudResponse.getNumber(),builder.build(),true);
|
||||
|
||||
// //rank limit
|
||||
// if (!ArenaWorldLogic.checkJoin(String.valueOf(iSession.getUid()))) {
|
||||
|
@ -61,9 +86,5 @@ public class GetWorldArenaProudRequestHandler extends BaseHandler<WorldProto.Get
|
|||
// }
|
||||
|
||||
//转发到world服
|
||||
boolean b = WorldHelper.sendMessageToWord(iSession.getUid(),proto);
|
||||
if(!b){
|
||||
throw new ErrorCodeException(ErrorCode.UNKNOWN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,19 +3,26 @@ package com.ljsd.jieling.handler.gtw;
|
|||
import com.google.protobuf.GeneratedMessage;
|
||||
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;
|
||||
import com.ljsd.jieling.logic.OnlineUserManager;
|
||||
import com.ljsd.jieling.logic.arena.ArenaLogic;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.network.server.GlobalidHelper;
|
||||
import com.ljsd.jieling.network.server.WorldHelper;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import config.SGlobalSystemConfig;
|
||||
import manager.STableManager;
|
||||
import rpc.protocols.MessageTypeProto;
|
||||
import rpc.world.WorldProto;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Description: des
|
||||
* Author: zsx
|
||||
|
@ -24,7 +31,7 @@ import rpc.world.WorldProto;
|
|||
public class GetWorldArenaRecordInfoRequestHandler extends BaseHandler<WorldProto.GetWorldArenaRecordInfoRequest> {
|
||||
@Override
|
||||
public MessageTypeProto.MessageType getMessageCode() {
|
||||
return null;
|
||||
return MessageTypeProto.MessageType.GetWorldArenaRecordInfoRequest;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -35,16 +42,48 @@ public class GetWorldArenaRecordInfoRequestHandler extends BaseHandler<WorldProt
|
|||
throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN);
|
||||
}
|
||||
|
||||
GlobalidHelper.WorldInfo worldInfo = GlobalidHelper.getWorldInfo();
|
||||
if (null == worldInfo){
|
||||
throw new ErrorCodeException("world unavailable or play not open");
|
||||
|
||||
WorldProto.GetWorldArenaRecordInfoResponse.Builder builder = WorldProto.GetWorldArenaRecordInfoResponse.newBuilder();
|
||||
// Integer integer = ArenaLogic.serverSplit.get(String.valueOf(serverId));
|
||||
// HashMap<Integer, ArenaEnemy> integerIntegerHashMap = ArenaLogic.ranInfo.get(integer);
|
||||
//个人信息
|
||||
// Map.Entry<Integer, ArenaEnemy> challRank = ArenaLogic.getKey(integerIntegerHashMap, rpcMessage.getUid());
|
||||
// if (challRank == null) {
|
||||
// return builder.build();
|
||||
// }
|
||||
Map<String, byte[]> result = RedisUtil.getInstence().getMapValues(RedisKey.WORLD_ARENA_RRECORD, Integer.toString(iSession.getUid()), String.class, byte[].class);
|
||||
|
||||
if (result != null && !result.isEmpty()) {
|
||||
List< byte[]> arenaRecordList = new ArrayList<>(result.values());
|
||||
List<WorldProto.WroldBattleRecord> collect = arenaRecordList.stream().map(bytes -> {try {
|
||||
return WorldProto.WroldBattleRecord.parseFrom(bytes);
|
||||
}catch (Exception e){}
|
||||
return null;
|
||||
}).collect(Collectors.toList());
|
||||
collect.sort(Comparator.comparingInt(WorldProto.WroldBattleRecord::getAttackTime));
|
||||
Collections.reverse(collect);
|
||||
int size = arenaRecordList.size();
|
||||
if (size > 15) {
|
||||
String[] removeMapKeys = new String[size - 15];
|
||||
for (int i = 0; i < size - 15; i++) {
|
||||
WorldProto.WroldBattleRecord remove = collect.remove(size-i-1);
|
||||
String removeId = remove.getRecordId();
|
||||
removeMapKeys[i] = (removeId);
|
||||
}
|
||||
RedisUtil.getInstence().removeMapEntrys(RedisKey.WORLD_ARENA_RRECORD, Integer.toString(iSession.getUid()), removeMapKeys);
|
||||
}
|
||||
|
||||
builder.addAllWroldBattleRecord(collect);
|
||||
}
|
||||
|
||||
//转发到world服
|
||||
boolean b = WorldHelper.sendMessageToWord(iSession.getUid(),proto);
|
||||
if(!b){
|
||||
throw new ErrorCodeException(ErrorCode.UNKNOWN);
|
||||
}
|
||||
|
||||
MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.GetWorldArenaRecordInfoResponse.getNumber(),builder.build(),true);
|
||||
|
||||
// //转发到world服
|
||||
// boolean b = WorldHelper.sendMessageToWord(iSession.getUid(),proto);
|
||||
// if(!b){
|
||||
// throw new ErrorCodeException(ErrorCode.UNKNOWN);
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,14 +23,14 @@ public class GetPlayerOneTeamInfo extends BaseHandler<PlayerInfoProto.GetPlayerO
|
|||
|
||||
|
||||
|
||||
if(proto.getServerId()!=0&&proto.getServerId()!= AreaManager.areaId){
|
||||
WorldProto.GetPlayerOneTeamInfoRequest build = WorldProto.GetPlayerOneTeamInfoRequest.newBuilder().setPlayerId(proto.getPlayerId()).setTeamId(proto.getTeamId()).build();
|
||||
if(proto.getPlayerId()>1000&&proto.getServerId()!=0&&proto.getServerId()!= AreaManager.areaId){
|
||||
// WorldProto.GetPlayerOneTeamInfoRequest build = WorldProto.GetPlayerOneTeamInfoRequest.newBuilder().setPlayerId(proto.getPlayerId()).setTeamId(proto.getTeamId()).build();
|
||||
|
||||
PlayerInfoProto.GetPlayerOneTeamInfoResponse rewardResponse = WorldHelper.sendMessageToWorldWithResult(0, build,PlayerInfoProto.GetPlayerOneTeamInfoResponse.class);
|
||||
if(rewardResponse==null){
|
||||
rewardResponse = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().build();
|
||||
}
|
||||
// PlayerInfoProto.GetPlayerOneTeamInfoResponse viewHeroInfoResponse = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().setTeamInfo(rewardResponse.getTeamInfo()).build();
|
||||
PlayerInfoProto.GetPlayerOneTeamInfoResponse rewardResponse = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().build();
|
||||
;
|
||||
|
||||
|
||||
// PlayerInfoProto.GetPlayerOneTeamInfoResponse viewHeroInfoResponse = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().setTeamInfo(rewardResponse.getTeamInfo()).build();
|
||||
|
||||
int resMsgId = MessageTypeProto.MessageType.GET_PLAYER_ONE_TEAM_INFO_RESPONSE_VALUE;
|
||||
MessageUtil.sendMessage(iSession,1,resMsgId,rewardResponse,true);
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
package com.ljsd.jieling.logic.activity.crossService;
|
||||
|
||||
import com.ljsd.GameApplication;
|
||||
import com.ljsd.jieling.core.GlobalsDef;
|
||||
import com.ljsd.jieling.db.mongo.MongoUtil;
|
||||
import com.ljsd.jieling.logic.arena.ArenaLogic;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.gm.ArenaOfUser;
|
||||
import com.ljsd.jieling.logic.dao.gm.CoreOfServerInfo;
|
||||
import com.ljsd.jieling.logic.dao.*;
|
||||
import com.ljsd.jieling.logic.dao.gm.*;
|
||||
import com.ljsd.jieling.logic.dao.root.GuildInfo;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.logic.hero.HeroLogic;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -16,6 +17,7 @@ import org.springframework.data.mongodb.core.query.Query;
|
|||
import org.springframework.data.mongodb.core.query.Update;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Author hj
|
||||
|
@ -44,9 +46,9 @@ public class CrossServiceLogic {
|
|||
}
|
||||
|
||||
public void insert(User user) throws UnknownHostException {
|
||||
ArenaOfUser arenaOfUser = new ArenaOfUser(user);
|
||||
MongoTemplate core = MongoUtil.getCoreMongoTemplate();
|
||||
core.insert(arenaOfUser,"arenaOfUser");
|
||||
// ArenaOfUser arenaOfUser = new ArenaOfUser(user);
|
||||
// MongoTemplate core = MongoUtil.getCoreMongoTemplate();
|
||||
// core.insert(arenaOfUser,"arenaOfUser");
|
||||
}
|
||||
|
||||
public void update(ArenaOfUser arenaOfUser) throws Exception {
|
||||
|
@ -96,12 +98,106 @@ public class CrossServiceLogic {
|
|||
// 更新
|
||||
else {
|
||||
// 获取新的跨服用户信息
|
||||
ArenaOfUser arenaOfUser = new ArenaOfUser(user);
|
||||
ArenaOfUser arenaOfUser = buildArenaOfUser(user);
|
||||
// 计算战力
|
||||
countForce(arenaOfUser);
|
||||
// 更新数据
|
||||
update(arenaOfUser);
|
||||
}
|
||||
}
|
||||
public ArenaOfUser buildArenaOfUser(User user){
|
||||
ArenaOfUser arenaOfUser = new ArenaOfUser();
|
||||
arenaOfUser.setId(user.getId());
|
||||
|
||||
HeroManager heroManager = user.getHeroManager();
|
||||
// 玩家基本信息
|
||||
arenaOfUser.setPlayerManager(buildArenaOfPlayerManager(user));
|
||||
// 英雄
|
||||
arenaOfUser.setHeroManager(buildArenaOfHeroManager(user));
|
||||
// 灵兽
|
||||
Map<String,Pokemon> pokemons = new HashMap<>();
|
||||
Map<String, Pokemon> pokemonMap = user.getPokemonManager().getPokemonMap();
|
||||
Map<Integer, String> teamMap = user.getPokemonManager().getPokemonTeamMap();
|
||||
teamMap.values().forEach(v->{
|
||||
// clone 深度复制
|
||||
Pokemon pokemon = (Pokemon)pokemonMap.get(v).clone();
|
||||
pokemons.put(v,pokemon);
|
||||
});
|
||||
arenaOfUser.setPokemons(pokemons);
|
||||
// 紫府神印
|
||||
arenaOfUser.setSeals(new HashMap<>(heroManager.getPurpleMansionSeal()));
|
||||
// 公会技能
|
||||
arenaOfUser.setGuildSkill(new HashMap<>(user.getGuildMyInfo().getGuildSkill()));
|
||||
return arenaOfUser;
|
||||
}
|
||||
|
||||
private ArenaOfPlayerManager buildArenaOfPlayerManager(User user){
|
||||
ArenaOfPlayerManager arenaOfPlayerManager = new ArenaOfPlayerManager();
|
||||
|
||||
PlayerManager player = user.getPlayerInfoManager();
|
||||
int guildId = player.getGuildId();
|
||||
|
||||
arenaOfPlayerManager.setuId(user.getId());
|
||||
arenaOfPlayerManager.setLevel(player.getLevel());
|
||||
arenaOfPlayerManager.setName(player.getNickName());
|
||||
arenaOfPlayerManager.setHead(player.getHead());
|
||||
arenaOfPlayerManager.setHeadFrame(player.getHeadFrame());
|
||||
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId);
|
||||
arenaOfPlayerManager.setGuildName(guildInfo==null?"":guildInfo.getName());
|
||||
|
||||
arenaOfPlayerManager.setUserTitle(player.getUserTitle());
|
||||
arenaOfPlayerManager.setPracticeLevel(user.getHeroManager().getPracticeLevel());
|
||||
arenaOfPlayerManager.setServerId(GameApplication.serverId);
|
||||
try {
|
||||
arenaOfPlayerManager.setServerName(CrossServiceLogic.getInstance().findServerName(GameApplication.serverId));
|
||||
} catch (UnknownHostException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return arenaOfPlayerManager;
|
||||
}
|
||||
private ArenaOfHeroManager buildArenaOfHeroManager(User user){
|
||||
Map<Integer,List<TeamPosHeroInfo>> teams = new HashMap<>();
|
||||
List<TeamPosHeroInfo> infos =
|
||||
user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,new ArrayList<>());
|
||||
teams.put(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,infos);
|
||||
// 英雄
|
||||
Map<String,ArenaOfHero> heroes = new HashMap<>();
|
||||
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
|
||||
infos.forEach(v->{
|
||||
Hero hero = heroMap.get(v.getHeroId());
|
||||
heroes.put(v.getHeroId(),buildArenaOfHero(user,hero));
|
||||
});
|
||||
// 魂宝灵宝
|
||||
Map<String, PropertyItem> jewels = new HashMap<>();
|
||||
|
||||
Map<String, PropertyItem> equipMap = user.getEquipManager().getEquipMap();
|
||||
heroMap.values().forEach(v-> v.getJewelInfo().forEach(v2->{
|
||||
PropertyItem item = (PropertyItem)equipMap.get(v2).clone();
|
||||
jewels.put(v2,item);
|
||||
}));
|
||||
// 总战力
|
||||
int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,false);
|
||||
ArenaOfHeroManager arenaOfHeroManager = new ArenaOfHeroManager(teams,heroes,jewels,totalForce);
|
||||
return arenaOfHeroManager;
|
||||
}
|
||||
|
||||
private ArenaOfHero buildArenaOfHero(User user,Hero hero){
|
||||
HeroManager heroManager = user.getHeroManager();
|
||||
ArenaOfHero arenaOfHero = new ArenaOfHero();
|
||||
arenaOfHero.setId(hero.getId());
|
||||
arenaOfHero.setTemplateId(hero.getTemplateId());
|
||||
arenaOfHero.setLevel(hero.getLevel(heroManager));
|
||||
arenaOfHero.setStar(hero.getStar());
|
||||
arenaOfHero.setEquipByPositionMap(new HashMap<>(hero.getEquipByHongmengPositionMap(heroManager)));
|
||||
arenaOfHero.setSoulEquipByPositionMap(new HashMap<>(hero.getSoulEquipByPositionMap()));
|
||||
arenaOfHero.setBreakId(hero.getBreakIdByHongMeng(heroManager));
|
||||
arenaOfHero.setStarBreakId(hero.getStarBreakId());
|
||||
arenaOfHero.setCreateTime(hero.getCreateTime());
|
||||
arenaOfHero.setEspecialEquipLevel(hero.getEspecialEquipLevelByHongmeng(heroManager,hero.getId()));
|
||||
arenaOfHero.setJewelInfo(new HashSet<>(hero.getJewelInfo()));
|
||||
arenaOfHero.setCreateTime(hero.getCreateType());
|
||||
arenaOfHero.setChangeId(hero.getChangeId());
|
||||
return arenaOfHero;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.arena;
|
|||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.ljsd.fight.ArenaRecord;
|
||||
import com.ljsd.jieling.config.clazzStaticCfg.SArenaRobotStaticConfig;
|
||||
import com.ljsd.jieling.core.FunctionIdEnum;
|
||||
import com.ljsd.fight.FightType;
|
||||
import com.ljsd.jieling.core.GlobalsDef;
|
||||
|
@ -17,8 +18,10 @@ import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
|
|||
import com.ljsd.jieling.logic.GlobalDataManaager;
|
||||
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
||||
import com.ljsd.jieling.logic.OnlineUserManager;
|
||||
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
|
||||
import com.ljsd.jieling.logic.activity.event.Poster;
|
||||
import com.ljsd.jieling.logic.dao.*;
|
||||
import com.ljsd.jieling.logic.dao.gm.ArenaOfUser;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.logic.fight.*;
|
||||
import com.ljsd.jieling.logic.fight.result.FightResult;
|
||||
|
@ -51,6 +54,7 @@ import util.MathUtils;
|
|||
import util.StringUtil;
|
||||
import util.TimeUtils;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.*;
|
||||
|
||||
public class ArenaLogic {
|
||||
|
@ -73,9 +77,9 @@ public class ArenaLogic {
|
|||
|
||||
|
||||
private static int state = 0;
|
||||
private final static int NORMAL_STATE = 1;
|
||||
private final static int BATTLE_STATE = 2;
|
||||
private final static int RELAX_STATE = 3;
|
||||
public final static int NORMAL_STATE = 1;
|
||||
public final static int BATTLE_STATE = 2;
|
||||
public final static int RELAX_STATE = 3;
|
||||
|
||||
public int getCurSeason() {
|
||||
return curSeason;
|
||||
|
@ -744,6 +748,7 @@ public class ArenaLogic {
|
|||
|
||||
public void e2b(){
|
||||
if(state != BATTLE_STATE){
|
||||
initRank();
|
||||
LOGGER.info("罗浮争霸:转到战斗状态,nowstate:{} to BATTLE_STATE",state);
|
||||
setState(BATTLE_STATE);
|
||||
}
|
||||
|
@ -759,13 +764,27 @@ public class ArenaLogic {
|
|||
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1);
|
||||
if (diff > setting.getBattleTime()[0] && diff <= setting.getBattleTime()[1]) {
|
||||
e2b();
|
||||
}else if (diff > setting.getBattleTime()[1] && diff <= setting.getRestTime()[0]) {
|
||||
}else if (diff > setting.getBattleTime()[1] && diff <= setting.getRestTime()[1]) {
|
||||
b2r();
|
||||
} else if (diff > setting.getRestTime()[1]) {
|
||||
r2e();
|
||||
}
|
||||
|
||||
}
|
||||
static List<Integer> randomCrossRobot(int start, int end, int nums) {
|
||||
List<Integer> robotIds = new LinkedList<>();
|
||||
int index = 0;
|
||||
while (robotIds.size() < nums) {
|
||||
index++;
|
||||
if (index == 10000) {
|
||||
break;
|
||||
}
|
||||
double v = Math.random() * (end - start) + start;
|
||||
int robotId = SArenaRobotStaticConfig.getFloorForce2robotId((int) v);
|
||||
robotIds.add(robotId);
|
||||
}
|
||||
return robotIds;
|
||||
}
|
||||
//初始化机器人信息
|
||||
private void initRank(){
|
||||
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_SERVICE_ARENA.getType());
|
||||
|
@ -781,10 +800,15 @@ public class ArenaLogic {
|
|||
if(v==crossGroup) groupList.add(k);
|
||||
});
|
||||
|
||||
int[] fightArea = STableManager.getConfig(SMServerArenaSetting.class).get(1).getFightArea();
|
||||
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1);
|
||||
int robotNum = setting.getRobotNum();
|
||||
List<Integer> robotIds = randomCrossRobot(fightArea[0], fightArea[1], robotNum);
|
||||
|
||||
while(--robotIndex>0){
|
||||
int server = random.nextInt(groupList.size());
|
||||
rank.addRank(robotIndex,String.valueOf(crossGroup),robotIndex);
|
||||
robotInfo.put(String.valueOf(robotIndex),new CrossArenaEnemy(robotIndex,groupList.get(server),0,0,random.nextBoolean(),PlayerLogic.getInstance().getRandomName2()));
|
||||
rank.addRank(robotIndex,String.valueOf(crossGroup),robotNum-robotIndex);
|
||||
robotInfo.put(String.valueOf(robotIndex),new CrossArenaEnemy(robotIds.get(robotIndex),robotIndex,groupList.get(server),0,0,random.nextBoolean(),PlayerLogic.getInstance().getRandomName2WithOutVerify()));
|
||||
|
||||
}
|
||||
RedisUtil.getInstence().putMapEntrys(RedisKey.CROSS_ARENA_ROBOT_INFO,String.valueOf(crossGroup),robotInfo);
|
||||
|
@ -792,9 +816,43 @@ public class ArenaLogic {
|
|||
}
|
||||
|
||||
//获取跨服信息
|
||||
public List<CommonProto.ArenaEnemy> getCrossArenaEnemyList(Set<Integer> ids){
|
||||
public List<CommonProto.ArenaEnemy> getCrossArenaEnemyList(int uid,List<Integer> ids,int groupId){
|
||||
List<CommonProto.ArenaEnemy> arenaEnemyList = new ArrayList<>();
|
||||
List<String> list = RedisUtil.getInstence().lGet(RedisKey.WORLD_ARENA_MY_PRON, String.valueOf(uid), 0, -1);
|
||||
ids.forEach(id->{
|
||||
if(id<1000){
|
||||
CommonProto.ArenaEnemy.Builder robotCrossArenaEnemy = getRobotCrossArenaEnemy(id, groupId);
|
||||
if(list!=null&&list.size()>0){
|
||||
robotCrossArenaEnemy.setHadProud(list.contains(String.valueOf(robotCrossArenaEnemy.getPersonInfo().getUid())));
|
||||
}
|
||||
arenaEnemyList.add(robotCrossArenaEnemy.build());
|
||||
}else{
|
||||
arenaEnemyList.add(getUserCrossArenaEnemy(groupId,id));
|
||||
}
|
||||
});
|
||||
return arenaEnemyList;
|
||||
}
|
||||
//获取单个玩家信息(玩家)
|
||||
public CommonProto.ArenaEnemy getUserCrossArenaEnemy(int crossGroup,int id) {
|
||||
ArenaOfUser user = null;
|
||||
CommonProto.ArenaEnemy.Builder userCrossArenaEnemy = null;
|
||||
try {
|
||||
user = CrossServiceLogic.getInstance().query(id);
|
||||
userCrossArenaEnemy = getUserCrossArenaEnemy(crossGroup,user);
|
||||
} catch (UnknownHostException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
return userCrossArenaEnemy.build();
|
||||
}
|
||||
//获取单个信息(机器人)
|
||||
|
||||
return null;
|
||||
public CommonProto.ArenaEnemy.Builder getRobotCrossArenaEnemy(int id,int groupId){
|
||||
CrossArenaEnemy info = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_ARENA_ROBOT_INFO, String.valueOf(groupId), String.valueOf(id), CrossArenaEnemy.class);
|
||||
if(info==null){
|
||||
return null;
|
||||
}
|
||||
return getRobotCrossArenaEnemy(id,info);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -819,15 +877,13 @@ public class ArenaLogic {
|
|||
}
|
||||
|
||||
/**
|
||||
* 上层加锁
|
||||
* 随机匹配
|
||||
*/
|
||||
public static List<CrossArenaEnemy> randomRank(HashMap<Integer, CrossArenaEnemy> integerIntegerHashMap, int uid, int myRank) {
|
||||
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());
|
||||
List<CrossArenaEnemy> arenaEnemies = new ArrayList<>();
|
||||
|
||||
TreeSet<Integer> matchRank;
|
||||
if (hisRank == null || hisRank.size() == 0) {
|
||||
//获取匹配对手
|
||||
|
@ -835,19 +891,58 @@ public class ArenaLogic {
|
|||
} else {
|
||||
matchRank = new TreeSet<>(hisRank);
|
||||
}
|
||||
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);
|
||||
|
||||
matchRank.forEach(rank -> {
|
||||
if (!integerIntegerHashMap.containsKey(rank)) {
|
||||
return;
|
||||
Set<ZSetOperations.TypedTuple<String>> rankByKey = rankEnum.getRankByKey(String.valueOf(crossGroup),rank-1,rank-1);
|
||||
ZSetOperations.TypedTuple<String> next = rankByKey.iterator().next();
|
||||
if(next!=null){
|
||||
ids.add(Integer.parseInt(next.getValue()));
|
||||
}
|
||||
CrossArenaEnemy matchInfo = integerIntegerHashMap.get(rank);
|
||||
matchInfo.setRank(rank);
|
||||
arenaEnemies.add(matchInfo);
|
||||
// matchRank.add(rank);
|
||||
});
|
||||
RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(uid), matchRank);
|
||||
return arenaEnemies;
|
||||
List<CommonProto.ArenaEnemy> crossArenaEnemyList = ArenaLogic.getInstance().getCrossArenaEnemyList(uid,ids,crossGroup);
|
||||
return crossArenaEnemyList;
|
||||
}
|
||||
public CommonProto.ArenaEnemy.Builder getRobotCrossArenaEnemy(int rank,CrossArenaEnemy enemy){
|
||||
Object get = RedisUtil.getInstence().hget(RedisKey.ARENA_PROUD_COUNT_ROBOT, String.valueOf(enemy.getEnemyId_UUid()));
|
||||
int proudTime = get==null?1:Integer.parseInt((String)get);
|
||||
|
||||
int enemyId = enemy.getEnemyId();
|
||||
SArenaRobotConfig sArenaRobotConfig = SArenaRobotConfig.getsArenaRobotConfigById(enemyId);
|
||||
CommonProto.Team teamBuild = CommonProto.Team.newBuilder().addAllHeroTid(sArenaRobotConfig.getHeroList()).build();
|
||||
CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder()
|
||||
.setUid(enemy.getEnemyId_UUid())
|
||||
.setLevel(sArenaRobotConfig.getRobotLevel())
|
||||
.setName(enemy.getRandomName()==null?"":enemy.getRandomName())
|
||||
.setScore(sArenaRobotConfig.getRobotScore())
|
||||
.setTotalForce(sArenaRobotConfig.getTotalForce())
|
||||
.setServername(String.valueOf(enemy.getServerID()))
|
||||
.setRank(rank)
|
||||
.build();
|
||||
return CommonProto.ArenaEnemy.newBuilder()
|
||||
.setPersonInfo(personInfoBuild)
|
||||
.setWorshipTime(proudTime)
|
||||
.setTeam(teamBuild);
|
||||
}
|
||||
public CommonProto.ArenaEnemy.Builder getUserCrossArenaEnemy(int crossGroup,ArenaOfUser enemy){
|
||||
AbstractRank rankEnum = RankContext.getRankEnum(RankEnum.CROSS_SERVICE_ARENA.getType());
|
||||
int enemyId = enemy.getId();
|
||||
int rank = rankEnum.getRankIndexByKey(String.valueOf(crossGroup), enemyId);
|
||||
CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder()
|
||||
.setUid(enemyId)
|
||||
.setLevel(enemy.getPlayerManager().getLevel())
|
||||
.setName(enemy.getPlayerManager().getName())
|
||||
.setServername(enemy.getPlayerManager().getServerName())
|
||||
.setTotalForce(enemy.getHeroManager().getTotalForce())
|
||||
.setRank(rank)
|
||||
.build();
|
||||
return CommonProto.ArenaEnemy.newBuilder()
|
||||
.setPersonInfo(personInfoBuild);
|
||||
// .setTeam(teamBuild)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -26,15 +26,15 @@ public class CrossArenaEnemy {
|
|||
this.rank = rank;
|
||||
}
|
||||
|
||||
public CrossArenaEnemy(int enemyId, int serverID, int enemyType, int enemyStatus,boolean gender,String randomName) {
|
||||
public CrossArenaEnemy(int enemyId,int enemyId_UUid, int serverID, int enemyType, int enemyStatus,boolean gender,String randomName) {
|
||||
|
||||
this(enemyId,serverID,enemyType,enemyStatus);
|
||||
this(enemyId,enemyId_UUid,serverID,enemyType,enemyStatus);
|
||||
this.gender=gender;
|
||||
this.randomName = randomName;
|
||||
}
|
||||
public CrossArenaEnemy(int enemyId, int serverID, int enemyType, int enemyStatus) {
|
||||
public CrossArenaEnemy(int enemyId,int enemyId_UUid, int serverID, int enemyType, int enemyStatus) {
|
||||
this.enemyId = enemyId;
|
||||
this.enemyId_UUid=enemyId;
|
||||
this.enemyId_UUid=enemyId_UUid;
|
||||
this.serverID = serverID;
|
||||
this.enemyType = enemyType;
|
||||
this.enemyStatus = enemyStatus;
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
package com.ljsd.jieling.logic.dao.gm;
|
||||
|
||||
import com.ljsd.jieling.logic.dao.Hero;
|
||||
import com.ljsd.jieling.logic.dao.HeroManager;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @Author hj
|
||||
|
@ -22,32 +21,30 @@ public class ArenaOfHero {
|
|||
private int breakId;
|
||||
private int starBreakId;
|
||||
private int createTime;
|
||||
private int lastUpdateEnergyTime;
|
||||
private int speed;
|
||||
private int especialEquipLevel;
|
||||
private int isLock;
|
||||
private int createType;
|
||||
private int changeId;
|
||||
private Set<String> jewelInfo = new HashSet<>();
|
||||
|
||||
public ArenaOfHero(User user, Hero hero) {
|
||||
HeroManager heroManager = user.getHeroManager();
|
||||
this.id = hero.getId();
|
||||
this.templateId = hero.getTemplateId();
|
||||
this.level = hero.getLevel(heroManager);
|
||||
this.star = hero.getStar();
|
||||
this.equipByPositionMap = new HashMap<>(hero.getEquipByHongmengPositionMap(heroManager));
|
||||
this.soulEquipByPositionMap = new HashMap<>(hero.getSoulEquipByPositionMap());
|
||||
this.breakId = hero.getBreakIdByHongMeng(heroManager);
|
||||
this.starBreakId = hero.getStarBreakId();
|
||||
this.createTime = hero.getCreateTime();
|
||||
this.lastUpdateEnergyTime = hero.getLastUpdateEnergyTime();
|
||||
this.speed = hero.getSpeed();
|
||||
this.especialEquipLevel = hero.getEspecialEquipLevelByHongmeng(heroManager,hero.getId());
|
||||
this.isLock = hero.getIsLock();
|
||||
this.createType = hero.getCreateType();
|
||||
this.changeId = hero.getChangeId();
|
||||
this.jewelInfo = new HashSet<>(hero.getJewelInfo());
|
||||
|
||||
public ArenaOfHero(String id, int templateId, int level, int star, Map<Integer, Integer> equipByPositionMap, Map<Integer, Integer> soulEquipByPositionMap, int breakId, int starBreakId, int createTime, int especialEquipLevel, int createType, int changeId, Set<String> jewelInfo) {
|
||||
this.id = id;
|
||||
this.templateId = templateId;
|
||||
this.level = level;
|
||||
this.star = star;
|
||||
this.equipByPositionMap = equipByPositionMap;
|
||||
this.soulEquipByPositionMap = soulEquipByPositionMap;
|
||||
this.breakId = breakId;
|
||||
this.starBreakId = starBreakId;
|
||||
this.createTime = createTime;
|
||||
this.especialEquipLevel = especialEquipLevel;
|
||||
this.createType = createType;
|
||||
this.changeId = changeId;
|
||||
this.jewelInfo = jewelInfo;
|
||||
}
|
||||
|
||||
public ArenaOfHero() {
|
||||
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
|
@ -122,22 +119,6 @@ public class ArenaOfHero {
|
|||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public int getLastUpdateEnergyTime() {
|
||||
return lastUpdateEnergyTime;
|
||||
}
|
||||
|
||||
public void setLastUpdateEnergyTime(int lastUpdateEnergyTime) {
|
||||
this.lastUpdateEnergyTime = lastUpdateEnergyTime;
|
||||
}
|
||||
|
||||
public int getSpeed() {
|
||||
return speed;
|
||||
}
|
||||
|
||||
public void setSpeed(int speed) {
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
public int getEspecialEquipLevel() {
|
||||
return especialEquipLevel;
|
||||
}
|
||||
|
@ -146,22 +127,6 @@ public class ArenaOfHero {
|
|||
this.especialEquipLevel = especialEquipLevel;
|
||||
}
|
||||
|
||||
public int getIsLock() {
|
||||
return isLock;
|
||||
}
|
||||
|
||||
public void setIsLock(int isLock) {
|
||||
this.isLock = isLock;
|
||||
}
|
||||
|
||||
public int getCreateType() {
|
||||
return createType;
|
||||
}
|
||||
|
||||
public void setCreateType(int createType) {
|
||||
this.createType = createType;
|
||||
}
|
||||
|
||||
public int getChangeId() {
|
||||
return changeId;
|
||||
}
|
||||
|
@ -177,4 +142,12 @@ public class ArenaOfHero {
|
|||
public void setJewelInfo(Set<String> jewelInfo) {
|
||||
this.jewelInfo = jewelInfo;
|
||||
}
|
||||
|
||||
public int getCreateType() {
|
||||
return createType;
|
||||
}
|
||||
|
||||
public void setCreateType(int createType) {
|
||||
this.createType = createType;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,28 +29,15 @@ public class ArenaOfHeroManager {
|
|||
|
||||
private int totalForce;
|
||||
|
||||
public ArenaOfHeroManager(User user) {
|
||||
// 阵容信息
|
||||
teams = new HashMap<>();
|
||||
List<TeamPosHeroInfo> infos =
|
||||
user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,new ArrayList<>());
|
||||
teams.put(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,infos);
|
||||
// 英雄
|
||||
heros = new HashMap<>();
|
||||
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
|
||||
infos.forEach(v->{
|
||||
Hero hero = heroMap.get(v.getHeroId());
|
||||
heros.put(v.getHeroId(),new ArenaOfHero(user,hero));
|
||||
});
|
||||
// 魂宝灵宝
|
||||
jewels = new HashMap<>();
|
||||
Map<String, PropertyItem> equipMap = user.getEquipManager().getEquipMap();
|
||||
heroMap.values().forEach(v-> v.getJewelInfo().forEach(v2->{
|
||||
PropertyItem item = (PropertyItem)equipMap.get(v2).clone();
|
||||
jewels.put(v2,item);
|
||||
}));
|
||||
// 总战力
|
||||
totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,false);
|
||||
|
||||
public ArenaOfHeroManager(Map<Integer, List<TeamPosHeroInfo>> teams, Map<String, ArenaOfHero> heros, Map<String, PropertyItem> jewels, int totalForce) {
|
||||
this.teams = teams;
|
||||
this.heros = heros;
|
||||
this.jewels = jewels;
|
||||
this.totalForce = totalForce;
|
||||
}
|
||||
|
||||
public ArenaOfHeroManager() {
|
||||
}
|
||||
|
||||
public Map<Integer, List<TeamPosHeroInfo>> getTeams() {
|
||||
|
|
|
@ -32,25 +32,21 @@ public class ArenaOfPlayerManager {
|
|||
private int serverId;
|
||||
private String serverName;
|
||||
|
||||
public ArenaOfPlayerManager(User user) throws UnknownHostException {
|
||||
PlayerManager player = user.getPlayerInfoManager();
|
||||
int guildId = player.getGuildId();
|
||||
|
||||
this.uId = user.getId();
|
||||
this.level = player.getLevel();
|
||||
this.name = player.getNickName();
|
||||
this.head = player.getHead();
|
||||
this.headFrame = player.getHeadFrame();
|
||||
if (guildId == 0){
|
||||
this.guildName = "";
|
||||
}else {
|
||||
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId);
|
||||
this.guildName = guildInfo.getName();
|
||||
}
|
||||
this.userTitle = player.getUserTitle();
|
||||
this.practiceLevel = user.getHeroManager().getPracticeLevel();
|
||||
this.serverId = GameApplication.serverId;
|
||||
this.serverName = CrossServiceLogic.getInstance().findServerName(serverId);
|
||||
public ArenaOfPlayerManager(int uId, int level, String name, int head, int headFrame, String guildName, int userTitle, int practiceLevel, int serverId, String serverName) {
|
||||
this.uId = uId;
|
||||
this.level = level;
|
||||
this.name = name;
|
||||
this.head = head;
|
||||
this.headFrame = headFrame;
|
||||
this.guildName = guildName;
|
||||
this.userTitle = userTitle;
|
||||
this.practiceLevel = practiceLevel;
|
||||
this.serverId = serverId;
|
||||
this.serverName = serverName;
|
||||
}
|
||||
|
||||
public ArenaOfPlayerManager() {
|
||||
}
|
||||
|
||||
public int getuId() {
|
||||
|
|
|
@ -37,27 +37,17 @@ public class ArenaOfUser {
|
|||
@Field(value = "arenaOfGuildSkill")
|
||||
private Map<Integer,Integer> guildSkill = new HashMap<>(4);
|
||||
|
||||
public ArenaOfUser(User user) throws UnknownHostException {
|
||||
this.id = user.getId();
|
||||
|
||||
HeroManager heroManager = user.getHeroManager();
|
||||
// 玩家基本信息
|
||||
this.playerManager = new ArenaOfPlayerManager(user);
|
||||
// 英雄
|
||||
this.heroManager = new ArenaOfHeroManager(user);
|
||||
// 灵兽
|
||||
pokemons = new HashMap<>();
|
||||
Map<String, Pokemon> pokemonMap = user.getPokemonManager().getPokemonMap();
|
||||
Map<Integer, String> teamMap = user.getPokemonManager().getPokemonTeamMap();
|
||||
teamMap.values().forEach(v->{
|
||||
// clone 深度复制
|
||||
Pokemon pokemon = (Pokemon)pokemonMap.get(v).clone();
|
||||
pokemons.put(v,pokemon);
|
||||
});
|
||||
// 紫府神印
|
||||
seals = new HashMap<>(heroManager.getPurpleMansionSeal());
|
||||
// 公会技能
|
||||
guildSkill = new HashMap<>(user.getGuildMyInfo().getGuildSkill());
|
||||
public ArenaOfUser(int id, ArenaOfPlayerManager playerManager, ArenaOfHeroManager heroManager, Map<String, Pokemon> pokemons, Map<Integer, PurpleMansionSeal> seals, Map<Integer, Integer> guildSkill) {
|
||||
this.id = id;
|
||||
this.playerManager = playerManager;
|
||||
this.heroManager = heroManager;
|
||||
this.pokemons = pokemons;
|
||||
this.seals = seals;
|
||||
this.guildSkill = guildSkill;
|
||||
}
|
||||
|
||||
public ArenaOfUser() {
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
|
@ -107,4 +97,6 @@ public class ArenaOfUser {
|
|||
public void setSeals(Map<Integer, PurpleMansionSeal> seals) {
|
||||
this.seals = seals;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -9,12 +9,15 @@ 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.globals.Global;
|
||||
import com.ljsd.jieling.handler.map.TrailHero;
|
||||
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
|
||||
import com.ljsd.jieling.logic.blood.BloodLogic;
|
||||
import com.ljsd.jieling.logic.dao.Hero;
|
||||
import com.ljsd.jieling.logic.dao.TeamPosHeroInfo;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.gm.ArenaOfHero;
|
||||
import com.ljsd.jieling.logic.dao.gm.ArenaOfUser;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.logic.fight.result.FightResult;
|
||||
import com.ljsd.jieling.logic.fight.robot.RobotInfo;
|
||||
|
@ -569,5 +572,33 @@ public class FightUtil {
|
|||
robotInfo.setPassiveSkill(SRobotSkill.getPassiveSkill(heroTid,property.getSkillPool()-1));
|
||||
return robotInfo;
|
||||
}
|
||||
public static CommonProto.FightTeamInfo makeCrossPersonData(ArenaOfUser arenaOfUser){
|
||||
List<CommonProto.FightUnitInfo> heroFightInfos = new ArrayList<>();
|
||||
List<TeamPosHeroInfo> teamPosHeroInfos = arenaOfUser.getHeroManager().getTeams().get(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE);
|
||||
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) {
|
||||
ArenaOfHero hero = arenaOfUser.getHeroManager().getHeros().get(teamPosHeroInfo.getHeroId());
|
||||
if (hero == null) {
|
||||
continue;
|
||||
}
|
||||
StringBuilder propertySb = new StringBuilder();
|
||||
String heroSkill = HeroLogic.getInstance().getCrossHeroSkillStr(arenaOfUser,hero).toString();
|
||||
String property = HeroLogic.getInstance().getHeroProperty(user,hero,propertySb,isMySelf,teamId).toString();
|
||||
CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo
|
||||
.newBuilder()
|
||||
.setUnitId(Integer.toString(hero.getTemplateId()))
|
||||
.setUnitSkillIds(heroSkill.substring(0,heroSkill.length()-1))
|
||||
.setProperty(property.substring(0, property.length()-1))
|
||||
.setPosition(teamPosHeroInfo.getPosition())
|
||||
.setStar(hero.getStar())
|
||||
.build();
|
||||
heroFightInfos.add(heroFightInfo);
|
||||
}
|
||||
return CommonProto.FightTeamInfo.
|
||||
newBuilder()
|
||||
.addAllFightUnitList(heroFightInfos)
|
||||
.addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user))
|
||||
.setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId))
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@ import com.ljsd.jieling.logic.activity.event.*;
|
|||
import com.ljsd.jieling.logic.activity.eventhandler.HeroFiveStarGetEventHandler;
|
||||
import com.ljsd.jieling.logic.activity.eventhandler.PokemonFiveStarGetEventHandler;
|
||||
import com.ljsd.jieling.logic.dao.*;
|
||||
import com.ljsd.jieling.logic.dao.gm.ArenaOfHero;
|
||||
import com.ljsd.jieling.logic.dao.gm.ArenaOfUser;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.logic.expedition.ExpeditionLogic;
|
||||
import com.ljsd.jieling.logic.fight.CombatLogic;
|
||||
|
@ -1525,6 +1527,79 @@ public class HeroLogic{
|
|||
return skillList;
|
||||
}
|
||||
|
||||
|
||||
public StringBuilder getCrossHeroSkillStr(ArenaOfUser user, ArenaOfHero hero){
|
||||
List<Integer> skillList = new ArrayList<>();
|
||||
SCHero tempHero = SCHero.getsCHero().get(hero.getTemplateId());
|
||||
List<Integer> skillListByStar = tempHero.getSkillListByStar(hero.getStar());
|
||||
if(skillListByStar!=null){
|
||||
skillList.addAll(skillListByStar);
|
||||
}
|
||||
// 大于10星,觉醒技
|
||||
if (hero.getStar() > HERO_MAX_STAR) {
|
||||
skillList.addAll(tempHero.getAwakSkills(1, hero.getBreakId()));
|
||||
skillList.addAll(tempHero.getAwakSkills(2, hero.getStarBreakId()));
|
||||
} else {
|
||||
skillList.addAll(tempHero.getPassiveSkills(1, hero.getBreakId()));
|
||||
skillList.addAll(tempHero.getPassiveSkills(2, hero.getStarBreakId()));
|
||||
}
|
||||
|
||||
//魂印
|
||||
Map<Integer, Integer> soulEquipByPositionMap = hero.getSoulEquipByPositionMap();
|
||||
Map<Integer, SEquipConfig> config = STableManager.getConfig(SEquipConfig.class);
|
||||
soulEquipByPositionMap.values().forEach(e->{
|
||||
Arrays.stream(config.get(e).getPassiveSkill()).forEach(skillList::add);
|
||||
});
|
||||
|
||||
//法宝技能
|
||||
int[] equipTalismana = tempHero.getEquipTalismana();
|
||||
if(equipTalismana.length<1 ||hero.getStar()<equipTalismana[0]){
|
||||
return skillList;
|
||||
}
|
||||
int especialEquipLevel = hero.getEspecialEquipLevel();
|
||||
int especialEquipId = equipTalismana[1];
|
||||
Map<Integer,SEquipTalismana> sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId);
|
||||
sEquipTalismana.forEach((k,v)->{
|
||||
if(k<=especialEquipLevel&&v.getOpenSkillRules()!=null){
|
||||
Arrays.stream(v.getOpenSkillRules()).forEach(i->skillList.add(i));
|
||||
}
|
||||
});
|
||||
|
||||
// 紫府神印技能
|
||||
Collection<PurpleMansionSeal> seals = user.getSeals().values();
|
||||
seals.forEach(v->{
|
||||
// 使用中神印
|
||||
if (v.getState() == 1){
|
||||
// 附身神印
|
||||
if (v.getType() == 1){
|
||||
if (v.getSubId().equals(hero.getId())){
|
||||
getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList);
|
||||
}
|
||||
}
|
||||
// 通用神印
|
||||
else {
|
||||
getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
coverSkill(skillList);
|
||||
for(int i=0;i<skillList.size();i++){
|
||||
Integer skill = skillList.get(i);
|
||||
if(i<2){
|
||||
sb.append(skill).append(DIVISION);
|
||||
continue;
|
||||
}
|
||||
SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill);
|
||||
if(config!=null &&config.getEffectiveRange()==1){
|
||||
sb.append(skill).append(DIVISION);
|
||||
}
|
||||
}
|
||||
|
||||
return sb;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取紫府神印技能
|
||||
* @param sealId
|
||||
|
|
|
@ -118,6 +118,14 @@ public class PlayerLogic {
|
|||
while (checkNameShield(name));
|
||||
return name;
|
||||
}
|
||||
public String getRandomName2WithOutVerify() {
|
||||
String name = "";
|
||||
Map<Integer, String> surnameMap = SRandomName.getSurnameMap();
|
||||
Map<Integer, String> nameMap = SRandomName.getNameMap();
|
||||
|
||||
name = surnameMap.get(MathUtils.random(1, surnameMap.size())) + nameMap.get(MathUtils.random(1, nameMap.size()));
|
||||
return name;
|
||||
}
|
||||
|
||||
public String[] getRandomNameWithPreAndPost() {
|
||||
String name ;
|
||||
|
|
|
@ -45,7 +45,7 @@ public enum RankEnum {
|
|||
SHAN_HE_SHE_JI_STAR_RANK(30,RedisKey.SHAN_HE_SHE_JI_STAR_RANK,ShanHeSheJiTuStarRank::new,false),//山河社稷星星排行榜
|
||||
TA_SUI_LING_XIAO_RANK(31,RedisKey.TA_SUI_LING_XIAO_RANK,TaSuiLingXiaoRank::new,false),
|
||||
|
||||
CROSS_SERVICE_ARENA(32,RedisKey.CROSS_SERVICE_ARENA,ArenaRank::new,true)
|
||||
CROSS_SERVICE_ARENA(32,RedisKey.CROSS_SERVICE_ARENA,CrossArenaRank::new,true)
|
||||
;
|
||||
|
||||
private int type;
|
||||
|
|
|
@ -6,6 +6,7 @@ import com.ljsd.jieling.exception.ErrorCodeException;
|
|||
import com.ljsd.jieling.globals.BIReason;
|
||||
import com.ljsd.jieling.ktbeans.ReportEventEnum;
|
||||
import com.ljsd.jieling.ktbeans.ReportUtil;
|
||||
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
||||
import com.ljsd.jieling.logic.dao.Hero;
|
||||
import com.ljsd.jieling.logic.dao.PlayerManager;
|
||||
import com.ljsd.jieling.logic.dao.TeamPosHeroInfo;
|
||||
|
@ -76,20 +77,10 @@ public class RankLogic {
|
|||
AbstractRank rank = RankContext.getRankEnum(type);
|
||||
if(RankContext.isCrossRank(type)){
|
||||
//跨服
|
||||
int myGroup = GlobalidHelper.getWorldInfo().getMyGroup();
|
||||
|
||||
int protoId = session.getUid();
|
||||
|
||||
if(type==RankEnum.DEATH_PATH_TOTAL_GUILD_RANK.getType()||type== RankEnum.DEATH_PATH_EVERY_GUILD_RANK.getType()){
|
||||
protoId = UserManager.getUser(session.getUid()).getPlayerInfoManager().getGuildId();
|
||||
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
|
||||
if(crossGroup>0){
|
||||
rankResponse = rank.getRank(session.getUid(),String.valueOf(crossGroup),index/20+1, 20);
|
||||
}
|
||||
|
||||
rankResponse = WorldHelper.sendMessageToWorldWithResult(session.getUid(), WorldProto.GetRankRequest.newBuilder().setUid(protoId).setAcitvityId(activityId).setType(type).setCrossId(myGroup).build(), PlayerInfoProto.RankResponse.class);
|
||||
|
||||
if(rankResponse==null){
|
||||
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
|
||||
}
|
||||
|
||||
}else{
|
||||
rankResponse = rank.getRank(session.getUid(),rkey,index/20+1, 20);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
package com.ljsd.jieling.logic.rank.rankImpl;
|
||||
|
||||
import com.ljsd.jieling.db.redis.RedisKey;
|
||||
import com.ljsd.jieling.db.redis.RedisUtil;
|
||||
import com.ljsd.jieling.logic.GlobleSystemLogic;
|
||||
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
|
||||
import com.ljsd.jieling.logic.dao.CrossArenaEnemy;
|
||||
import com.ljsd.jieling.logic.dao.gm.ArenaOfUser;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import org.springframework.data.redis.core.ZSetOperations;
|
||||
import rpc.protocols.CommonProto;
|
||||
import rpc.protocols.PlayerInfoProto;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
/**
|
||||
* @author lvxinran
|
||||
* @date 2021/6/26
|
||||
* @discribe
|
||||
*/
|
||||
public class CrossArenaRank extends AbstractRank {
|
||||
|
||||
public CrossArenaRank(int type, String redisKey) {
|
||||
super(type, redisKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRank(int uid, String rkey, double... data) {
|
||||
String key = RedisUtil.getInstence().getKey(redisKey,rkey);
|
||||
RedisUtil.getInstence().zsetAddOne(key,String.valueOf(uid), getScore(data));
|
||||
}
|
||||
|
||||
@Override
|
||||
public long[] getDataByScore(Double score) {
|
||||
return new long[]{score.intValue()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getScore(double... data) {
|
||||
return data[0];
|
||||
}
|
||||
|
||||
public void removeOneRankByPiece(String rkey,String value){
|
||||
RedisUtil.getInstence().zsetRemoveOne(RedisUtil.getInstence().getKey(redisKey,rkey),value);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void getOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) throws Exception {
|
||||
if(Integer.parseInt(data.getValue())<1000){
|
||||
CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
|
||||
.setRank(index)
|
||||
.setParam1(1000000)
|
||||
.setParam2(getParam2(data.getScore()))
|
||||
.setParam3(getParam3(data.getScore()));
|
||||
CrossArenaEnemy mapEntry = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_ARENA_ROBOT_INFO, String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()), data.getValue(), CrossArenaEnemy.class);
|
||||
if(mapEntry==null){
|
||||
return;
|
||||
}
|
||||
CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder()
|
||||
.setUid(mapEntry.getEnemyId_UUid())
|
||||
.setUserName(mapEntry.getRandomName())
|
||||
.setLevel(100)
|
||||
.setUserSkin(80012)
|
||||
.setRankInfo(everyRankInfo)
|
||||
.setForce(1000000)
|
||||
.setSex(0);
|
||||
builder.addRanks(everyRank);
|
||||
}else{
|
||||
ArenaOfUser query = CrossServiceLogic.getInstance().query(Integer.valueOf(data.getValue()));
|
||||
CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
|
||||
.setRank(index)
|
||||
.setParam1(query.getHeroManager().getTotalForce())
|
||||
.setParam2(getParam2(data.getScore()))
|
||||
.setParam3(getParam3(data.getScore()));
|
||||
CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder()
|
||||
.setUid(query.getId())
|
||||
.setUserName(query.getPlayerManager().getName())
|
||||
.setLevel(query.getPlayerManager().getLevel())
|
||||
.setUserSkin(80012)
|
||||
.setRankInfo(everyRankInfo)
|
||||
.setForce(query.getHeroManager().getTotalForce())
|
||||
.setSex(0);
|
||||
builder.addRanks(everyRank);
|
||||
}
|
||||
}
|
||||
|
||||
protected void getMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){
|
||||
int myRank= RedisUtil.getInstence().getZSetreverseRank(redisKey,rkey,Integer.toString(user.getId())).intValue();
|
||||
Double zSetScore = RedisUtil.getInstence().getZSetScore(redisKey, rkey, Integer.toString(user.getId()));
|
||||
try {
|
||||
ArenaOfUser query = CrossServiceLogic.getInstance().query(user.getId());
|
||||
CommonProto.RankInfo towerRankInfo = CommonProto.RankInfo.newBuilder()
|
||||
.setRank(myRank)
|
||||
.setParam1(query.getHeroManager().getTotalForce())
|
||||
.setParam2(getParam2(zSetScore)).build();
|
||||
allUserResponse.setMyRankInfo(towerRankInfo);
|
||||
} catch (UnknownHostException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue