parent
fd70ebb1c3
commit
fef22e4ae3
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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";//战斗回放
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue