yx1.匹配规则的修改

2.战斗回放战力显示
    3.玩家初始化积分
back_recharge
xuexinpeng 2021-10-09 20:24:50 +08:00
parent fd70ebb1c3
commit fef22e4ae3
9 changed files with 109 additions and 37 deletions

View File

@ -1,6 +1,9 @@
package com.ljsd.fight;
import java.util.ArrayList;
import java.util.List;
public class ArenaRecord {
private String id;
@ -42,6 +45,9 @@ public class ArenaRecord {
private byte[] yxldFightData3;
private List<Integer> yxldMyForce= new ArrayList<>(3);//玉虚论道自己三队战力
private List<Integer> yxldDefForce= new ArrayList<>(3);//玉虚论道敌方三队战力
private String serverName;
private int yxldBattleType;// 战斗类行 1进攻成功 2进攻失败 3防守成功 4防守失败
@ -246,4 +252,20 @@ public class ArenaRecord {
public void setYxldResult(int[] yxldResult) {
this.yxldResult = yxldResult;
}
public List<Integer> getYxldMyForce() {
return yxldMyForce;
}
public void setYxldMyForce(List<Integer> yxldMyForce) {
this.yxldMyForce = yxldMyForce;
}
public List<Integer> getYxldDefForce() {
return yxldDefForce;
}
public void setYxldDefForce(List<Integer> yxldDefForce) {
this.yxldDefForce = yxldDefForce;
}
}

View File

@ -355,7 +355,7 @@ public class RedisKey {
public static final String CROSS_RANK_UPDATE_VERSION = "CROSS_RANK_UPDATE_VERSION";
//玉虚论道
public static final String CROSS_YUXULUNDAO_RANK = "CROSS_YUXULUNDAO_RANK";//排行榜信息
public static final String CROSS_YUXULUNDAO_RANK = "CROSS_YUXULUNDAO_RANK";//排行榜信息 废弃
public static final String CROSS_YUXULUNDAO_RANK_PERSON = "CROSS_YUXULUNDAO_RANK_PERSON";//排行榜信息
public static final String CROSS_YUXULUNDAO_ROBOT_INFO = "CROSS_YUXULUNDAO_ROBOT_INFO";//机器人信息
public static final String CROSS_YUXULUNDAO_RECORD = "CROSS_YUXULUNDAO_RECORD";//战斗回放

View File

@ -14,6 +14,7 @@ import rpc.protocols.ArenaInfoProto;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import java.util.Collections;
import java.util.List;
/**
@ -41,7 +42,7 @@ public class CrossYuxulundaoBattleRecordHandler extends BaseHandler<ArenaInfoPro
}
RedisUtil redisUtil = RedisUtil.getInstence();
List<String> list = redisUtil.lGet(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), 0, -1);
Collections.reverse(list);
for (String record : list) {
ArenaRecord arenaRecord = new Gson().fromJson(record, ArenaRecord.class);
CommonProto.crossYxldPlayerRecordInfo info = CrossYuxulundaoLogic.getCrossYxldPlayerRecordInfo(uid, arenaRecord, false);

View File

@ -112,6 +112,13 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler<ArenaInfoProto.
arenaRecord = new ArenaRecord();
arenaRecord.setAttackId(user.getId());
arenaRecord.setDefUid(defUid);
//自己每个队伍的战力
/*teamId.forEach(n->{
arenaRecord.getYxldMyForce().add(HeroLogic.getInstance().calTeamTotalForce(user, n, false));
});*/
for(int team : teamId){
arenaRecord.getYxldMyForce().add(HeroLogic.getInstance().calTeamTotalForce(user, team, false));
}
result = getFightResultByPersonToPerson(user, defUid, yuxuTeamId.stream().mapToInt(Integer::intValue).toArray(), teamId.stream().mapToInt(Integer::intValue).toArray(), arenaRecord, res);
}
long winCount = Arrays.stream(result).boxed().filter(n -> n == 1).count();
@ -141,7 +148,7 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler<ArenaInfoProto.
//失败者获取分数 负数
int loserGetScore = -winerGetScore;
int defScore;//对手分数
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_YUXULUNDAO_RANK.getType());
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_YUXULUNDAO_RANK_PERSON.getType());
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (winCount >= 2) {
//赢了 自己加积分 对方减积分
@ -253,7 +260,7 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler<ArenaInfoProto.
if (defQuery != null) {
CrossServiceLogic.getInstance().update(defQuery);
}
int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue();
int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK_PERSON, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue();
res.setMyRank(myRank);
int privId = STableManager.getConfig(SMServerArenaSetting.class).get(2).getPrivId()[0];
PlayerLogic.getInstance().checkAndUpdate(user, privId, 1);

View File

@ -68,8 +68,13 @@ public class CrossYuxulundaoGetInfoHandler extends BaseHandler<ArenaInfoProto.Cr
if (yuxulundaoTime >= timeControllerOfFunction.getStartTime() && yuxulundaoTime <= timeControllerOfFunction.getEndTime()) {
builder.setIsFirst(false);
} else {
//赛季内第一次登陆请求
//删除上赛季的挑战记录
//第一次玩此系统 初始化本人积分为1000积分
if(yuxulundaoTime == 0){
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2);
csPlayer.setCrossYuxulundaoNewScore(setting.getBasicScore());
csPlayer.setCrossYuxulundaoOldScore(setting.getBasicScore());
}
//赛季内第一次登陆请求,删除上赛季的挑战记录
String key = RedisKey.getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), false);
RedisUtil.getInstence().del(key);
//主线编队复制到第一队伍
@ -136,7 +141,7 @@ public class CrossYuxulundaoGetInfoHandler extends BaseHandler<ArenaInfoProto.Cr
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2);
int privId = setting.getPrivId()[0];
builder.setChangedTimes(user.getPlayerInfoManager().getVipPrivilageValue(privId));
int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue();
int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK_PERSON, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue();
builder.setMyRank(myRank);
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetInfoResponse.getNumber(), builder.build(), true);
}

View File

@ -31,6 +31,7 @@ import manager.STableManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.aggregation.ArrayOperators;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.CommonProto;
import util.StringUtil;
import util.TimeUtils;
@ -79,12 +80,11 @@ public class CrossYuxulundaoLogic {
return;
}
//TODO 删除初始化一些数据
String key1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK, String.valueOf(crossGroup));
String key2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(crossGroup));
//String key1 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK, String.valueOf(crossGroup));
//String key2 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(crossGroup));
String key3 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK_PERSON, String.valueOf(crossGroup));
//String key3 = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(crossGroup));
RedisUtil.getInstence().del(key1, key2,key3);
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_YUXULUNDAO_RANK.getType());
RedisUtil.getInstence().del(key3);
/* AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_YUXULUNDAO_RANK.getType());
int robotIndex = 100;
Random random = new Random();
Map<String, CrossArenaEnemy> robotInfo = new HashMap<>(100);
@ -105,9 +105,8 @@ public class CrossYuxulundaoLogic {
rank.addRank(robotIndex, String.valueOf(crossGroup), config.getMsScroe());
robotInfo.put(String.valueOf(robotIndex), new CrossArenaEnemy(robotIds.get(robotIndex), robotIndex, groupList.get(server), 0, config.getMsScroe(), random.nextBoolean(), PlayerLogic.getInstance().getRandomName2WithOutVerify(), config.getTotalForce(), config.getRoleLv()));
}
RedisUtil.getInstence().putMapEntrys(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(crossGroup), robotInfo);*/
LOGGER.info("跨服玉虚论道初始化结束");
RedisUtil.getInstence().putMapEntrys(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(crossGroup), robotInfo);
}
public void sendReward() {
@ -222,9 +221,29 @@ public class CrossYuxulundaoLogic {
}
arenaManager.setCrossMatchTimes(arenaManager.getCrossMatchTimes() + 1);
} else {
//换一批规则:先找段位内的真人 不够用分段内的机器人凑
List<Integer> arenaRank = new ArrayList<Integer>();
SMServerRankConfig con = robotConfigMap.get(SMServerRankConfig.getIdByScore(myQuery.getCrossYuxulundaoNewScore()));
Set<ZSetOperations.TypedTuple<String>> matchRival= RedisUtil.getInstence().getZsetRangeWithScores(RedisKey.CROSS_YUXULUNDAO_RANK_PERSON,
Integer.toString(crossGroup),con.getScoreLow(),con.getScoreUp());
if(matchRival.size() >0){
if(matchRival.size()<5){
//需要填充机器人
matchRival.forEach(n->{ arenaRank.add(Integer.valueOf(n.getValue()));});
arenaRank.addAll(SArenaRobotConfig.getSArenaRobotConfigsByRangeAndCount(con.getScoreLow(),con.getScoreUp(),5 - matchRival.size()));
}else{
//随机出五个真人
List<String> matchRivalList = new ArrayList<String>();
matchRival.forEach(n->{matchRivalList.add(n.getValue());});
Collections.shuffle(matchRivalList);
matchRivalList.subList(0,5).forEach(n->arenaRank.add(Integer.valueOf(n)));
}
}else{
arenaRank.addAll(SArenaRobotConfig.getSArenaRobotConfigsByRangeAndCount(con.getScoreLow(),con.getScoreUp(),5));
}
//正常从排行榜中匹配
Set<String> arenaRank = new HashSet<String>();
int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue();
//Set<String> arenaRank = new HashSet<String>();
/*int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue();
String rkey = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup));
if (myRank == -1) {
Set<String> arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey, 95, 100);
@ -248,16 +267,16 @@ public class CrossYuxulundaoLogic {
arenaRank.addAll(arenaRank1);
arenaRank.addAll(arenaRank2);
}
}
}*/
arenaRank.forEach(n -> {
if (Integer.valueOf(n) > 1000) {
arenaEnemies.add(new ArenaEnemy(Integer.valueOf(n), 0, 0));
if (n > 1000) {
arenaEnemies.add(new ArenaEnemy(n, 0, 0));
} else {
CrossArenaEnemy mapEntry = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()), n, CrossArenaEnemy.class);
/*CrossArenaEnemy mapEntry = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()), n, CrossArenaEnemy.class);
if (mapEntry != null) {
arenaEnemies.add(new ArenaEnemy(Integer.valueOf(mapEntry.getEnemyId()), 1, 0));
}
}*/
arenaEnemies.add(new ArenaEnemy(n, 1, 0));
}
});
}
@ -374,7 +393,9 @@ public class CrossYuxulundaoLogic {
.setHead(arenaRecord.getHead()).setServerName(arenaRecord.getServerName())
.setUserName(arenaRecord.getUserName())
.setHeadFrame(arenaRecord.getHeadFrame())
.setPower(arenaRecord.getAttackForce()).setType(arenaRecord.getYxldBattleType()).build();
.setPower(arenaRecord.getAttackForce()).setType(arenaRecord.getYxldBattleType())
.addAllYxldMyForce(arenaRecord.getYxldMyForce())
.addAllYxldDefForce(arenaRecord.getYxldDefForce()).build();
}
}
}

View File

@ -676,7 +676,9 @@ public class FightUtil {
//本服玩家
User user = UserManager.getUser(csPlayer.getUserId());
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().getOrDefault(teamId, new ArrayList<>());
arenaRecord.setAttackForce(arenaRecord.getAttackForce() + HeroLogic.getInstance().calTeamTotalForce(user, teamId, false));
int addforce = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false);
arenaRecord.setAttackForce(arenaRecord.getAttackForce() + addforce);
arenaRecord.getYxldDefForce().add(addforce);
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) {
Hero hero = user.getHeroManager().getHeroMap().get(teamPosHeroInfo.getHeroId());
if (hero == null) {
@ -710,7 +712,9 @@ public class FightUtil {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
List<com.ljsd.jieling.thrift.idl.TeamPosHeroInfo> teamPosHeroInfos = crossArenaManager.getTeams().getOrDefault(teamId, new ArrayList<>());
arenaRecord.setAttackForce(arenaRecord.getAttackForce() + crossArenaManager.getTotalForceByTeam().get(teamId));
int addforcerpc = crossArenaManager.getTotalForceByTeam().get(teamId);
arenaRecord.getYxldDefForce().add(addforcerpc);
arenaRecord.setAttackForce(arenaRecord.getAttackForce() + addforcerpc);
Collection<PurpleMansionSeal> seals = crossArenaManager.getSeals().values();
for (com.ljsd.jieling.thrift.idl.TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) {
com.ljsd.jieling.thrift.idl.ArenaOfHero hero = crossArenaManager.getHeros().get(teamPosHeroInfo.getHeroId());

View File

@ -6,11 +6,9 @@ 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.arena.ArenaLogic;
import com.ljsd.jieling.logic.dao.CrossArenaEnemy;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.cross.CSPlayer;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.family.CrossDeathPathLogic;
import com.ljsd.jieling.logic.hero.HeroLogic;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.CommonProto;
@ -50,7 +48,7 @@ public class CrossYuXuLunDaoPersonRank extends AbstractRank{
@Override
protected void getCrossOptional(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()
/*CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(index)
.setParam1(0)
.setParam2(getParam2(data.getScore()))
@ -69,16 +67,14 @@ public class CrossYuXuLunDaoPersonRank extends AbstractRank{
.setRankInfo(everyRankInfo)
.setServerName(serverName)
.setSex(0).setCrossScore(mapEntry.getEnemyStatus());
builder.addRanks(everyRank);
builder.addRanks(everyRank);*/
}else{
//ArenaOfUser query = CrossServiceLogic.getInstance().query(Integer.valueOf(data.getValue()));
CSPlayer cPlayer = CrossServiceLogic.getPlayerByRedis(Integer.valueOf(data.getValue()));
CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(index)
.setParam1(getParam1(data.getScore()))
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
//CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(query,everyRankInfo);
CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(cPlayer,everyRankInfo);
builder.addRanks(everyRank);
}

View File

@ -4,10 +4,7 @@ import manager.STableManager;
import manager.Table;
import rpc.protocols.CommonProto;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Table(name ="ArenaRobotConfig")
public class SArenaRobotConfig implements BaseConfig {
@ -96,8 +93,23 @@ public class SArenaRobotConfig implements BaseConfig {
}
public static List<SArenaRobotConfig> getSArenaRobotConfigsByPool( int poolId) {
return sArenaRobotConfigByPoolMap.get(poolId);
/**
*
* @param start
* @param end
* @param count
* @return
*/
public static List<Integer> getSArenaRobotConfigsByRangeAndCount( int start,int end,int count) {
List<Integer> robotIdList = new ArrayList<Integer>();
for (SArenaRobotConfig config:sArenaRobotConfigMap.values()) {
if(config.getMsScroe() >= start && config.getMsScroe()<= end ){
robotIdList.add(config.getId());
}
}
Collections.shuffle(robotIdList);
return robotIdList.subList(0,count);
}
public static Map<Integer, SArenaRobotConfig> getsArenaRobotConfigMap() {
@ -243,4 +255,8 @@ public class SArenaRobotConfig implements BaseConfig {
public void setYxldTotalForce3(int yxldTotalForce3) {
this.yxldTotalForce3 = yxldTotalForce3;
}
public static List<SArenaRobotConfig> getSArenaRobotConfigsByPool( int poolId) {
return sArenaRobotConfigByPoolMap.get(poolId);
}
}