跨服名次修改

lvxinran 2021-07-04 01:00:59 +08:00
parent 87111d6365
commit 8b8d24f551
6 changed files with 92 additions and 97 deletions

View File

@ -137,16 +137,18 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
if (proto.getChallengeUid()>1000) {
ArenaOfUser arenaOfUser = CrossServiceLogic.getInstance().query(proto.getChallengeUid());
teamInfo = FightUtil.makeCrossPersonData(arenaOfUser);
arenaEnemys =ArenaLogic.getInstance().getUserCrossArenaEnemy(crossGroup,arenaOfUser,proto.getChallengeRank()).build();
} 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();
// 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();
}
arenaAttack = CommonProto.ArenaEnemy.newBuilder().setPersonInfo(CommonProto.ArenaPersonInfo.newBuilder().setUid(iSession.getUid())).build();
// boolean isRevert = proto.getTotalForce() < force;
int teamId = proto.getTeamId();
@ -175,11 +177,11 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
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 (proto.getChallengeUid() < 1000) {
RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(iSession.getUid()), new HashSet<>());
List<CommonProto.ArenaEnemy> arenaEnemyList = ArenaLogic.randomRank(iSession.getUid(), proto.getChallengeRank(), crossGroup);
if(myRank==-1){
rank.removeOneRankByPiece(String.valueOf(crossGroup),String.valueOf(proto.getChallengeRank()));
@ -192,52 +194,30 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler<WorldProto
}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());
// }
// }else{
// RedisUtil.getInstence().set(RedisKey.WORLD_ARENA_RANK_MY_MATH, String.valueOf(iSession.getUid()), new HashSet<>());
//
// //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());
// }
// 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;
// }
//
// }
//新的匹配信息给前端
CommonProto.ArenaInfo.Builder newArenaBuilder = CommonProto.ArenaInfo.newBuilder();
newArenaBuilder.addAllArenaEnemys(arenaEnemyList);
newArenaBuilder.setScore(newRank);
builder1.setArenaInfo(newArenaBuilder.build());
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GetWorldArenaChallengeResponse.getNumber(), builder1.build(), true);
}
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GetWorldArenaChallengeResponse.getNumber(), builder1.build(), true);
builder.setRank(newRank);
builder.setOldrank(myRank==-1?9999:myRank);

View File

@ -101,10 +101,13 @@ public class GetWorldArenaInfoRequestHandler extends BaseHandler<WorldProto.GetW
builder1.addAllArenaEnemys(arenaEnemyList);
}else{
//拿前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(iSession.getUid(),keys,crossGroup);
TreeSet<Integer> rankInfo = new TreeSet<>();
rankInfo.add(1);
rankInfo.add(2);
rankInfo.add(3);
rankInfo.add(4);
List<CommonProto.ArenaEnemy> arenaEnemyList = ArenaLogic.getInstance().getCrossArenaEnemyList(iSession.getUid(),rankInfo,crossGroup);
builder1.addAllArenaEnemys(arenaEnemyList);
}

View File

@ -1,8 +1,17 @@
package com.ljsd.jieling.handler.player;
import com.ljsd.jieling.db.mongo.AreaManager;
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.GlobleSystemLogic;
import com.ljsd.jieling.logic.dao.CrossArenaEnemy;
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.WorldHelper;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.MessageUtil;
@ -21,23 +30,28 @@ public class GetPlayerOneTeamInfo extends BaseHandler<PlayerInfoProto.GetPlayerO
@Override
public void processWithProto(ISession iSession, PlayerInfoProto.GetPlayerOneTeamInfoRequest proto) throws Exception {
PlayerInfoProto.GetPlayerOneTeamInfoResponse oneTeamInfo = null;
if(proto.getServerId()==0){
//本服其他功能
oneTeamInfo = PlayerLogic.getInstance().getOneTeamInfo( proto.getPlayerId(), proto.getTeamId());
}else{
if(proto.getPlayerId()<1000){
//机器人
CrossArenaEnemy info = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_ARENA_ROBOT_INFO, String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()), String.valueOf(proto.getPlayerId()), CrossArenaEnemy.class);
if(proto.getPlayerId()>1000&&proto.getServerId()!=0&&proto.getServerId()!= AreaManager.areaId){
// WorldProto.GetPlayerOneTeamInfoRequest build = WorldProto.GetPlayerOneTeamInfoRequest.newBuilder().setPlayerId(proto.getPlayerId()).setTeamId(proto.getTeamId()).build();
if(info==null){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
oneTeamInfo = PlayerLogic.getInstance().getOneTeamInfo(info.getEnemyId(),proto.getTeamId());
}else{
//真人
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);
}else {
PlayerInfoProto.GetPlayerOneTeamInfoResponse oneTeamInfo = PlayerLogic.getInstance().getOneTeamInfo( proto.getPlayerId(), proto.getTeamId());
MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.GET_PLAYER_ONE_TEAM_INFO_RESPONSE.getNumber(),oneTeamInfo,true);
}
//跨服天梯
}
MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.GET_PLAYER_ONE_TEAM_INFO_RESPONSE.getNumber(),oneTeamInfo,true);
}
}

View File

@ -748,7 +748,7 @@ public class ArenaLogic {
public void e2b(){
if(state != BATTLE_STATE){
initRank();
// initRank();
LOGGER.info("罗浮争霸:转到战斗状态,nowstate:{} to BATTLE_STATE",state);
setState(BATTLE_STATE);
}
@ -816,29 +816,33 @@ public class ArenaLogic {
}
//获取跨服信息
public List<CommonProto.ArenaEnemy> getCrossArenaEnemyList(int uid,List<Integer> ids,int groupId){
public List<CommonProto.ArenaEnemy> getCrossArenaEnemyList(int uid,Set<Integer> rankInfo,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);
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_SERVICE_ARENA.getType());
rankInfo.forEach(rankIndex->{
Set<ZSetOperations.TypedTuple<String>> rankByKey = rank.getRankByKey(String.valueOf(groupId),rankIndex-1,rankIndex-1);
ZSetOperations.TypedTuple<String> next = rankByKey.iterator().next();
if(Integer.parseInt(next.getValue())<1000){
CommonProto.ArenaEnemy.Builder robotCrossArenaEnemy = getRobotCrossArenaEnemy(rankIndex, 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));
arenaEnemyList.add(getUserCrossArenaEnemy(groupId,rankIndex,Integer.valueOf(next.getValue())));
}
});
return arenaEnemyList;
}
//获取单个玩家信息(玩家)
public CommonProto.ArenaEnemy getUserCrossArenaEnemy(int crossGroup,int id) {
public CommonProto.ArenaEnemy getUserCrossArenaEnemy(int crossGroup,int rank,int id) {
ArenaOfUser user = null;
CommonProto.ArenaEnemy.Builder userCrossArenaEnemy = null;
try {
user = CrossServiceLogic.getInstance().query(id);
userCrossArenaEnemy = getUserCrossArenaEnemy(crossGroup,user);
userCrossArenaEnemy = getUserCrossArenaEnemy(crossGroup,user,rank);
} catch (UnknownHostException e) {
e.printStackTrace();
return null;
@ -903,7 +907,7 @@ public class ArenaLogic {
ids.add(Integer.parseInt(next.getValue()));
}
});
List<CommonProto.ArenaEnemy> crossArenaEnemyList = ArenaLogic.getInstance().getCrossArenaEnemyList(uid,ids,crossGroup);
List<CommonProto.ArenaEnemy> crossArenaEnemyList = ArenaLogic.getInstance().getCrossArenaEnemyList(uid,matchRank,crossGroup);
return crossArenaEnemyList;
}
public CommonProto.ArenaEnemy.Builder getRobotCrossArenaEnemy(int rank,CrossArenaEnemy enemy){
@ -927,10 +931,8 @@ public class ArenaLogic {
.setWorshipTime(proudTime)
.setTeam(teamBuild);
}
public CommonProto.ArenaEnemy.Builder getUserCrossArenaEnemy(int crossGroup,ArenaOfUser enemy){
AbstractRank rankEnum = RankContext.getRankEnum(RankEnum.CROSS_SERVICE_ARENA.getType());
public CommonProto.ArenaEnemy.Builder getUserCrossArenaEnemy(int crossGroup,ArenaOfUser enemy,int rank){
int enemyId = enemy.getId();
int rank = rankEnum.getRankIndexByKey(String.valueOf(crossGroup), enemyId);
CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder()
.setUid(enemyId)
.setLevel(enemy.getPlayerManager().getLevel())

View File

@ -9,7 +9,6 @@ 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;
@ -29,8 +28,6 @@ import com.ljsd.jieling.util.MonsterUtil;
import config.*;
import manager.STableManager;
import org.luaj.vm2.LuaValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rpc.protocols.CommonProto;
import util.TimeUtils;
@ -582,7 +579,8 @@ public class FightUtil {
}
StringBuilder propertySb = new StringBuilder();
String heroSkill = HeroLogic.getInstance().getCrossHeroSkillStr(arenaOfUser,hero).toString();
String property = HeroLogic.getInstance().getHeroProperty(user,hero,propertySb,isMySelf,teamId).toString();
Map<Integer, Long> attributeMap = arenaOfUser.getHeroManager().getHeros().get(hero.getId()).getAttributeMap();
String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb,hero.getTemplateId(),hero.getLevel(),attributeMap).toString();
CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo
.newBuilder()
.setUnitId(Integer.toString(hero.getTemplateId()))

View File

@ -1553,17 +1553,16 @@ public class HeroLogic{
//法宝技能
int[] equipTalismana = tempHero.getEquipTalismana();
if(equipTalismana.length<1 ||hero.getStar()<equipTalismana[0]){
return skillList;
if(equipTalismana.length>=1 &&hero.getStar()>=equipTalismana[0]){
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));
}
});
}
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();
@ -1591,8 +1590,8 @@ public class HeroLogic{
sb.append(skill).append(DIVISION);
continue;
}
SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill);
if(config!=null &&config.getEffectiveRange()==1){
SPassiveSkillLogicConfig config1 = SPassiveSkillLogicConfig.getConfig(skill);
if(config1!=null &&config1.getEffectiveRange()==1){
sb.append(skill).append(DIVISION);
}
}
@ -1770,10 +1769,9 @@ public class HeroLogic{
public List<CommonProto.FightUnitInfo> getCrossPokemonSkills(ArenaOfUser user){
//todo 灵兽
Map<String, Pokemon> pokemons = user.getPokemons();
Map<Integer, Pokemon> pokemons = user.getPokemons();
List<CommonProto.FightUnitInfo> pokemonInfos = new ArrayList<>();
int
for(Map.Entry<String,Pokemon> entry:pokemons.entrySet()){
for(Map.Entry<Integer,Pokemon> entry:pokemons.entrySet()){
Pokemon pokemon = entry.getValue();
if(pokemon==null){