玉虚论道第一版

back_recharge
xuexinpeng 2021-09-11 21:14:25 +08:00
parent c367fce248
commit d6ffd5e348
28 changed files with 1562 additions and 188 deletions

View File

@ -35,6 +35,23 @@ public class ArenaRecord {
private int headFrame;//头像框
//玉虚论道相关
private byte[] yxldFightData1;
private byte[] yxldFightData2;
private byte[] yxldFightData3;
private String serverName;
private int yxldBattleType;// 战斗类行 1进攻成功 2进攻失败 3防守成功 4防守失败
private int yxldScoreChange;
private int[] yxldResult;//0,1 成功 失败
private int practiceLevel;
public ArenaRecord() {
}
@ -165,4 +182,68 @@ public class ArenaRecord {
public int getHeadFrame() {
return headFrame;
}
public byte[] getYxldFightData1() {
return yxldFightData1;
}
public void setYxldFightData1(byte[] yxldFightData1) {
this.yxldFightData1 = yxldFightData1;
}
public byte[] getYxldFightData2() {
return yxldFightData2;
}
public void setYxldFightData2(byte[] yxldFightData2) {
this.yxldFightData2 = yxldFightData2;
}
public byte[] getYxldFightData3() {
return yxldFightData3;
}
public void setYxldFightData3(byte[] yxldFightData3) {
this.yxldFightData3 = yxldFightData3;
}
public String getServerName() {
return serverName;
}
public void setServerName(String serverName) {
this.serverName = serverName;
}
public int getYxldBattleType() {
return yxldBattleType;
}
public void setYxldBattleType(int yxldBattleType) {
this.yxldBattleType = yxldBattleType;
}
public int getYxldScoreChange() {
return yxldScoreChange;
}
public void setYxldScoreChange(int yxldScoreChange) {
this.yxldScoreChange = yxldScoreChange;
}
public int getPracticeLevel() {
return practiceLevel;
}
public void setPracticeLevel(int practiceLevel) {
this.practiceLevel = practiceLevel;
}
public int[] getYxldResult() {
return yxldResult;
}
public void setYxldResult(int[] yxldResult) {
this.yxldResult = yxldResult;
}
}

View File

@ -24,6 +24,7 @@ public enum FightType {
TowerMap(18),//森罗幻境
TaSuiLingXiao(19),//踏碎凌霄
HardStage(20),//山河社稷图
CrossYuxulundaoFight(21),//玉虚论道
;
private int type;

View File

@ -27,6 +27,8 @@ public class SArenaRobotStaticConfig extends AbstractClassStaticConfig {
for(SArenaRobotConfig sArenaRobotConfig : integerSArenaRobotConfigMap.values()){
List<Integer> heroList = sArenaRobotConfig.getHeroList();
List<Integer> heroList2 = sArenaRobotConfig.getHeroList2();
List<Integer> heroList3= sArenaRobotConfig.getHeroList3();
int heroLevel = sArenaRobotConfig.getRoleLv();
Map<Integer, CommonProto.Hero> heroMap = new HashMap<>();
@ -51,8 +53,55 @@ public class SArenaRobotStaticConfig extends AbstractClassStaticConfig {
heroMap.put(heroTid,heroBuilder.build());
}
sArenaRobotConfig.setHeroMapList(heroMap);
Map<Integer, CommonProto.Hero> heroMap2 = new HashMap<>();
for(Integer heroTid :heroList2){
SCHero scHero = SCHero.getsCHero().get(heroTid);
if(null ==scHero){
throw new IllegalArgumentException("sArenaRobotConfig id "+sArenaRobotConfig.getId()+"机器人英雄模板id找不到 heroTid:"+heroTid);
}
CommonProto.Hero.Builder heroBuilder = CommonProto.Hero.newBuilder();
int star = HeroLogic.getInstance().calRobotStarByLevel(heroTid,heroLevel);
int heroStarBreakId = HeroLogic.getInstance().calRobotStarBreakByLevel(heroTid,heroLevel);
int heroBreakId = HeroLogic.getInstance().calRobotBreakByLevel(heroTid,heroLevel);
heroBuilder.setId(String.valueOf(scHero.getId()));
heroBuilder.setHeroId(scHero.getId());
heroBuilder.setLevel(heroLevel);
heroBuilder.setStar(star);
heroBuilder.setStarBreakId(heroStarBreakId);
heroBuilder.setBreakId(heroBreakId);
heroMap2.put(heroTid,heroBuilder.build());
}
sArenaRobotConfig.setHeroMapList2(heroMap2);
Map<Integer, CommonProto.Hero> heroMap3 = new HashMap<>();
for(Integer heroTid :heroList3){
SCHero scHero = SCHero.getsCHero().get(heroTid);
if(null ==scHero){
throw new IllegalArgumentException("sArenaRobotConfig id "+sArenaRobotConfig.getId()+"机器人英雄模板id找不到 heroTid:"+heroTid);
}
CommonProto.Hero.Builder heroBuilder = CommonProto.Hero.newBuilder();
int star = HeroLogic.getInstance().calRobotStarByLevel(heroTid,heroLevel);
int heroStarBreakId = HeroLogic.getInstance().calRobotStarBreakByLevel(heroTid,heroLevel);
int heroBreakId = HeroLogic.getInstance().calRobotBreakByLevel(heroTid,heroLevel);
heroBuilder.setId(String.valueOf(scHero.getId()));
heroBuilder.setHeroId(scHero.getId());
heroBuilder.setLevel(heroLevel);
heroBuilder.setStar(star);
heroBuilder.setStarBreakId(heroStarBreakId);
heroBuilder.setBreakId(heroBreakId);
heroMap3.put(heroTid,heroBuilder.build());
}
sArenaRobotConfig.setHeroMapList3(heroMap3);
int totleForce = HeroLogic.getInstance().calRobotTotalForce(sArenaRobotConfig);
sArenaRobotConfig.setTotalForce(totleForce);
int totleYxldForce = HeroLogic.getInstance().calRobotYxldTotalForce(sArenaRobotConfig);
sArenaRobotConfig.setYxldTotalForce(totleYxldForce);
LinkedList<Integer> integers = force2robotId.get(totleForce);
if(integers==null){
integers =new LinkedList<>();

View File

@ -66,7 +66,7 @@ public enum FunctionIdEnum {
Pokemon(79,null,MessageTypeProto.MessageType.POKEMON_COMONPENT_LEVELUP_REQUEST_VALUE,MessageTypeProto.MessageType.POKEMON_ADVANCED_REQUEST_VALUE),
World_Arena(82,new WorldArenaFunction()),
HongMeng(86,null),
CrossYuxulundao(87,null),//跨服-玉虚论道
CrossYuxulundao(111,null),//跨服-玉虚论道
WeekGood(9091,null),
;

View File

@ -352,6 +352,8 @@ public class RedisKey {
//玉虚论道
public static final String CROSS_YUXULUNDAO_RANK = "CROSS_YUXULUNDAO_RANK";//排行榜信息
public static final String CROSS_YUXULUNDAO_ROBOT_INFO = "CROSS_YUXULUNDAO_ROBOT_INFO";//机器人信息
public static final String CROSS_YUXULUNDAO_RECORD = "CROSS_YUXULUNDAO_RECORD";//战斗回放
public static Set<String> familyKey = new HashSet<>();
@ -404,6 +406,8 @@ public class RedisKey {
familyKey.add(MATCHED_VERSION);
familyKey.add(SERVER_LEVEL_RANK);
familyKey.add(SERVER_SPLIT_INFO);
familyKey.add(CROSS_YUXULUNDAO_RANK);
familyKey.add(CROSS_YUXULUNDAO_RECORD);

View File

@ -1326,7 +1326,10 @@ public class RedisUtil {
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)) {
RedisKey.WORLD_ARENA_MY_PRON.equals(type)||RedisKey.WORLD_ARENA_RRECORD.equals(type)||
RedisKey.CROSS_YUXULUNDAO_RANK.equals(type)||RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO.equals(type)||
RedisKey.CROSS_YUXULUNDAO_RECORD.equals(type)
) {
return type + RedisKey.Delimiter_colon + key;
}

View File

@ -342,5 +342,6 @@ public interface BIReason {
int QIMENDUNJIA_DRAW = 1103;//奇门遁甲
int QIMENDUNJIA_DRAW_CONSUME = 1104;//奇门遁甲消耗
int CROSS_YUXULUNDAO_DAILYREWARD = 1105;//玉虚论道
}

View File

@ -0,0 +1,52 @@
package com.ljsd.jieling.handler.crossServer;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.MessageUtil;
import org.assertj.core.util.Lists;
import rpc.protocols.ArenaInfoProto;
import rpc.protocols.MessageTypeProto;
import java.util.List;
public class CrossYuxululndaoChallengeBeforeTeamHandler extends BaseHandler<ArenaInfoProto.CrossYuXuLunDaoChallengeBeforeRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeBeforeRequest;
}
@Override
public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoChallengeBeforeRequest request) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
if (user == null) {
return;
}
//ArenaManager arenaManager = user.getArenaManager();
int myId = request.getPlayerId();
int defId = request.getDefId();
//玉虚论道
List<Integer> yuxuTeamId = Lists.newArrayList();
yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE);
yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO);
yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE);
ArenaInfoProto.CrossYuXuLunDaoChallengeBeforeResponse.Builder res = ArenaInfoProto.CrossYuXuLunDaoChallengeBeforeResponse.newBuilder();
if (!CrossYuxulundaoLogic.limitOpen(user)) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeBeforeResponse.getNumber(), res.build(), true);
return;
}
if (defId <= 1000) {
res.setDefTeamInfo(PlayerLogic.getInstance().getCrossOneTeamInfo(defId, null, yuxuTeamId));
} else {
res.setDefTeamInfo(PlayerLogic.getInstance().getCrossYxldOneTeamInfo(defId, yuxuTeamId));
}
res.setMyTeamInfo(PlayerLogic.getInstance().getCrossYxldOneTeamInfo(myId, yuxuTeamId));
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeBeforeResponse.getNumber(), res.build(), true);
}
}

View File

@ -0,0 +1,56 @@
package com.ljsd.jieling.handler.crossServer;
import com.google.gson.Gson;
import com.ljsd.fight.ArenaRecord;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.MessageUtil;
import rpc.protocols.ArenaInfoProto;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import java.util.List;
/**
*
*/
public class CrossYuxulundaoBattleRecordHandler extends BaseHandler<ArenaInfoProto.CrossYuXuLunDaoBattleRecordRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.CrossYuXuLunDaoBattleRecordRequest;
}
@Override
public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoBattleRecordRequest request) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
if (user == null) {
return;
}
ArenaInfoProto.CrossYuXuLunDaoBattleRecordResponse.Builder builder = ArenaInfoProto.CrossYuXuLunDaoBattleRecordResponse.newBuilder();
if (!CrossYuxulundaoLogic.limitOpen(user)) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoBattleRecordResponse.getNumber(), builder.build(), true);
return;
}
RedisUtil redisUtil = RedisUtil.getInstence();
//String key = RedisKey.getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), false);
String key = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), false);
List<String> list = redisUtil.lGet(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(uid), 0, -1);
for (String record : list) {
ArenaRecord arenaRecord = new Gson().fromJson(record, ArenaRecord.class);
CommonProto.crossYxldPlayerRecordInfo info = CrossYuxulundaoLogic.getCrossYxldPlayerRecordInfo(arenaRecord);
builder.addRecordData(info);
}
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoBattleRecordResponse.getNumber(), builder.build(), true);
}
}

View File

@ -1,9 +1,51 @@
package com.ljsd.jieling.handler.crossServer;
import com.google.gson.Gson;
import com.ljsd.fight.ArenaRecord;
import com.ljsd.fight.FightType;
import com.ljsd.jieling.core.GlobalsDef;
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.handler.gtw.GetWorldArenaChallengeRequestHandler;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic;
import com.ljsd.jieling.logic.dao.ArenaEnemy;
import com.ljsd.jieling.logic.dao.ArenaManager;
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.FightDispatcher;
import com.ljsd.jieling.logic.fight.FightUtil;
import com.ljsd.jieling.logic.fight.GameFightType;
import com.ljsd.jieling.logic.fight.PVPFightEvent;
import com.ljsd.jieling.logic.fight.result.FightResult;
import com.ljsd.jieling.logic.hero.HeroLogic;
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.session.ISession;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SArenaRobotConfig;
import config.SArenaSetting;
import config.SMServerArenaSetting;
import config.SMServerRankConfig;
import manager.STableManager;
import org.assertj.core.util.Lists;
import rpc.protocols.ArenaInfoProto;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import util.TimeUtils;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class CrossYuxulundaoChallengeHandler extends BaseHandler<ArenaInfoProto.CrossYuXuLunDaoChallengeRequest> {
@ -14,11 +56,299 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler<ArenaInfoProto.
}
@Override
public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoChallengeRequest request) throws Exception{
public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoChallengeRequest request) throws Exception {
User user = UserManager.getUser(session.getUid());
ArenaManager arenaManager = user.getArenaManager();
List<Integer> teamId = request.getTeamIdList();
int defUid = request.getChallengeUid();
int type = request.getChallengeType();
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2);
if (type == 0) {
//免费挑战
int privId = setting.getPrivId()[0];
if (!PlayerLogic.getInstance().checkAndUpdate(user, privId, 1)) {
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
} else if (type == 1) {
//物品消耗挑战
int[] itemCost = setting.getCost();
int[][] comItemCost = new int[1][];
comItemCost[0] = itemCost;
boolean enough = ItemUtil.itemCost(user, comItemCost, BIReason.CROSS_YUXULUNDAO_DAILYREWARD, 0);
if (!enough) {
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
}
List<Integer> yuxuTeamId = Lists.newArrayList();
yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE);
yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO);
yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE);
//找出被挑战者信息
ArenaInfoProto.CrossYuXuLunDaoChallengeResponse.Builder res = ArenaInfoProto.CrossYuXuLunDaoChallengeResponse.newBuilder();
if (!CrossYuxulundaoLogic.limitOpen(user)) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeResponse.getNumber(), res.build(), true);
return;
}
int[] result;
ArenaRecord arenaRecord = null;
if (defUid <= 1000) {
//机器人
result = getFightResultByPersonToRobot(user, defUid, yuxuTeamId.stream().mapToInt(Integer::intValue).toArray(), teamId.stream().mapToInt(Integer::intValue).toArray(), res);
} else {
//真人
arenaRecord = new ArenaRecord();
arenaRecord.setAttackId(user.getId());
arenaRecord.setDefUid(defUid);
result = getFightResultByPersonToPerson(user, defUid, yuxuTeamId.stream().mapToInt(Integer::intValue).toArray(), teamId.stream().mapToInt(Integer::intValue).toArray(), arenaRecord, res);
//主动挑战回放记录
/*Map<String, ArenaRecord> redPackageMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(user.getId()), String.class, ArenaRecord.class);
int index = 1;
if(redPackageMap != null || redPackageMap.size() !=0){
index = redPackageMap.keySet().stream().mapToInt(n->Integer.parseInt(n)).max().getAsInt()+1;
}
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_YUXULUNDAO_RECORD,String.valueOf(user.getId()),String.valueOf(index),arenaRecord);
//被挑战的真人记录
Map<String, ArenaRecord> defUidMap = RedisUtil.getInstence().getMapValues(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(defUid), String.class, ArenaRecord.class);
int indexDefUid = 1;
if(redPackageMap != null || redPackageMap.size() !=0){
indexDefUid = defUidMap.keySet().stream().mapToInt(n->Integer.parseInt(n)).max().getAsInt()+1;
}
RedisUtil.getInstence().putMapEntry(RedisKey.CROSS_YUXULUNDAO_RECORD,String.valueOf(defUid),String.valueOf(indexDefUid),arenaRecord);
*/
}
long winCount = Arrays.stream(result).boxed().filter(n -> n == 1).count();
if (defUid > 1000) {
if (arenaRecord != null) {
if (winCount >= 2) {
//攻击者赢了
arenaRecord.setYxldBattleType(1);
arenaRecord.setYxldScoreChange(+25);
} else {
arenaRecord.setYxldBattleType(2);
arenaRecord.setYxldScoreChange(-25);
}
arenaRecord.setYxldResult(result);
//挑战者记录
RedisUtil redisUtil = RedisUtil.getInstence();
String key2 = RedisKey.getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(user.getId()), false);
long defLenth = redisUtil.lGetListSize(key2);
if (defLenth > 20) {
redisUtil.lPop(key2);
}
arenaRecord.setCreateTime(TimeUtils.nowInt());
//arenaRecord.setUserName();
String defarenaRecordJson = new Gson().toJson(arenaRecord);
redisUtil.lSet(key2, defarenaRecordJson);
if (winCount >= 2) {
//防守方输了了
arenaRecord.setYxldBattleType(4);
arenaRecord.setYxldScoreChange(-25);
} else {
//防守方赢了
arenaRecord.setYxldBattleType(3);
arenaRecord.setYxldScoreChange(+25);
}
//被挑战者记录
arenaRecord.setCreateTime(TimeUtils.nowInt()); // 时间
arenaRecord.setAttackId(user.getId()); //id
arenaRecord.setLevel(user.getPlayerInfoManager().getLevel()); //等级
arenaRecord.setHead(user.getPlayerInfoManager().getHead()); //头像
arenaRecord.setUserName(user.getPlayerInfoManager().getNickName()); //名字
arenaRecord.setHeadFrame(user.getPlayerInfoManager().getHeadFrame());//头像框
arenaRecord.setPracticeLevel(user.getHeroManager().getPracticeLevel());//修行等级
int[] newResult = new int[3];
for (int i = 0; i < result.length; i++) {
newResult[i] = result[i] ^ 1;
}
arenaRecord.setYxldResult(newResult);
int myforce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE, false) + HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO, false) + HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE, false);
arenaRecord.setAttackForce(myforce); //总战斗力
String key = RedisKey.getKey(RedisKey.CROSS_YUXULUNDAO_RECORD, String.valueOf(defUid), false);
long def = redisUtil.lGetListSize(key);
if (def > 20) {
redisUtil.lPop(key);
}
String arenaRecordJson = new Gson().toJson(arenaRecord);
redisUtil.lSet(key, arenaRecordJson);
}
}
List<ArenaEnemy> enemyList = arenaManager.getCrossYuxulundaoEnemies();
enemyList.forEach(n -> res.addArenaEnemys(CrossYuxulundaoLogic.getInstance().getMatchRivalInfo(n.getEnemyId(), 0, 0)));
ArenaOfUser myQuery = CrossServiceLogic.getInstance().query(user.getId());
ArenaOfUser defQuery = CrossServiceLogic.getInstance().query(defUid);
int defScore;//对手分数
AbstractRank rank = RankContext.getRankEnum(RankEnum.CROSS_YUXULUNDAO_RANK.getType());
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (winCount >= 2) {
//赢了 自己加积分 对方减积分
res.setMyScore(25);
res.setDefScore(-25);
myQuery.getPlayerManager().setCrossYuxulundaoNewScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore() + 25);
myQuery.getPlayerManager().setCrossYuxulundaoOldScore(myQuery.getPlayerManager().getCrossYuxulundaoOldScore() + 25);
rank.incrementRankScore(user.getId(), String.valueOf(crossGroup), 25);
if (defUid >= 1000) {
if (defQuery.getPlayerManager().getCrossYuxulundaoNewScore() >= 25) {
defQuery.getPlayerManager().setCrossYuxulundaoNewScore(defQuery.getPlayerManager().getCrossYuxulundaoNewScore() - 25);
rank.incrementRankScore(defUid, String.valueOf(crossGroup), -25);
}
}
} else {
res.setMyScore(-25);
res.setDefScore(25);
//输了 自己减积分 对方加积分
if (myQuery.getPlayerManager().getCrossYuxulundaoNewScore() >= 25) {
myQuery.getPlayerManager().setCrossYuxulundaoNewScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore() - 25);
myQuery.getPlayerManager().setCrossYuxulundaoOldScore(myQuery.getPlayerManager().getCrossYuxulundaoOldScore() - 25);
rank.incrementRankScore(user.getId(), String.valueOf(crossGroup), -25);
}
if (defUid >= 1000) {
defQuery = CrossServiceLogic.getInstance().query(defUid);
defQuery.getPlayerManager().setCrossYuxulundaoNewScore(defQuery.getPlayerManager().getCrossYuxulundaoNewScore() + 25);
rank.incrementRankScore(defUid, String.valueOf(crossGroup), 25);
}
}
int id = SMServerRankConfig.getIdByScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore());
if (myQuery.getPlayerManager().getCrossYxldMaxLevel() < id) {
//首次爬升到该位置发奖励
if (SMServerRankConfig.serverRankConfig.containsKey(id)) {
SMServerRankConfig serverRankConfig = SMServerRankConfig.serverRankConfig.get(id);
CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, serverRankConfig.getFirstReward(), BIReason.CROSS_YUXULUNDAO_DAILYREWARD);
res.addDrop(drop);
myQuery.getPlayerManager().setCrossYxldMaxLevel(id);
}
}
res.setMyNewScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore());
if (myQuery != null) {
CrossServiceLogic.getInstance().update(myQuery);
}
if (defQuery != null) {
CrossServiceLogic.getInstance().update(defQuery);
}
int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue();
res.setMyRank(myRank);
int privId = STableManager.getConfig(SMServerArenaSetting.class).get(2).getPrivId()[0];
int changeTimes = user.getPlayerInfoManager().getVipPrivilageValue(privId);
res.setChangedTimes(changeTimes);
List<Integer> dailyReward = user.getArenaManager().getCrossYuxulundaoDailyRewad();
if (changeTimes == 1 && dailyReward.get(0) == 0) {
dailyReward.set(0, 1);
} else if (changeTimes == 3 && dailyReward.get(1) == 0) {
dailyReward.set(1, 1);
} else if (changeTimes == 5 && dailyReward.get(2) == 0) {
dailyReward.set(2, 1);
}
//改变挑战领取宝箱状态
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeResponse.getNumber(), res.build(), true);
}
public static int[] getFightResultByPersonToPerson(User myUser, int defUserUid, int[] myteamId, int[] defTeamId, ArenaRecord arenaRecord, ArenaInfoProto.CrossYuXuLunDaoChallengeResponse.Builder builder) throws Exception {
int[] result = new int[3];
ArenaOfUser arenaOfUser = CrossServiceLogic.getInstance().query(defUserUid);
arenaRecord.setCreateTime(TimeUtils.nowInt()); // 时间
arenaRecord.setAttackId(arenaOfUser.getId()); //id
arenaRecord.setLevel(arenaOfUser.getPlayerManager().getLevel()); //等级
arenaRecord.setHead(arenaOfUser.getPlayerManager().getHead()); //头像
arenaRecord.setUserName(arenaOfUser.getPlayerManager().getName()); //名字
arenaRecord.setHeadFrame(arenaOfUser.getPlayerManager().getHeadFrame());//头像框
arenaRecord.setPracticeLevel(arenaOfUser.getPlayerManager().getPracticeLevel());
int sumForce = 0;
for (int team : defTeamId) {
if (team != 0) {
sumForce += arenaOfUser.getHeroManager().getTotalForceByTeam().getOrDefault(team, 0);
}
}
arenaRecord.setAttackForce(sumForce); //总战斗力
arenaRecord.setServerName(CrossServiceLogic.getInstance().getServerNameByUId(defUserUid));
for (int i = 0; i < 3; i++) {
//编队为空 判输赢
if (!updateResult(i, myteamId, defTeamId, result)) {
continue;
}
CommonProto.FightTeamInfo fightTeamInfo = FightUtil.makePersonFightData(myUser, myteamId[i], null, null);
//修行等级 区服名称 战斗类行 积分变化情况
CommonProto.FightTeamInfo defteamInfo = FightUtil.makeCrossPersonData(arenaOfUser, defTeamId[i]);
FightResult fightResult = GetWorldArenaChallengeRequestHandler.getFightForPVP(myUser.getId(), defUserUid,
fightTeamInfo, defteamInfo, FightUtil.getFightSeed(), true);
int seed = fightResult.getSeed();
CommonProto.FightData build = CommonProto.FightData.newBuilder()
.setFightMaxTime(SArenaSetting.getSArenaSetting().getMostTime())
.setFightSeed(seed)
.setHeroFightInfos(fightResult.getFightTeamInfo())
.addMonsterList(fightResult.getDefFightTeamInfo())
.setFightType(FightType.CrossYuxulundaoFight.getType())
.setFightId(FightUtil.getFightId(myUser.getId(), FightType.CrossYuxulundaoFight.getType()))
.build();
builder.addFightData(build);
result[i] = (int) fightResult.getCheckResult()[0];
//数据互换
byte[] snapRecord = build.toByteArray();
if (i == 0) {
arenaRecord.setYxldFightData1(snapRecord);
} else if (i == 1) {
arenaRecord.setYxldFightData2(snapRecord);
} else if (i == 2) {
arenaRecord.setYxldFightData3(snapRecord);
}
}
builder.addAllFightResult(Arrays.stream(result).boxed().collect(Collectors.toList()));
return result;
}
public static boolean updateResult(int i, int[] myteamId, int[] defTeamId, int[] result) {
if (myteamId[i] == 0 || defTeamId[i] == 0) {
if (myteamId[i] == 0 && defTeamId[i] == 0) {
result[i] = 0;
}
if (myteamId[i] == 1 && defTeamId[i] == 0) {
result[i] = 1;
}
if (myteamId[i] == 0 && defTeamId[i] == 1) {
result[i] = 0;
}
return false;
}
return true;
}
public int[] getFightResultByPersonToRobot(User myUser, int defUserUid, int[] myteamId, int[] defTeamId, ArenaInfoProto.CrossYuXuLunDaoChallengeResponse.Builder builder) throws Exception {
int[] result = new int[3];//1赢 0输
for (int i = 0; i < 3; i++) {
//编队为空 判输赢
if (!updateResult(i, myteamId, defTeamId, result)) {
continue;
}
PVPFightEvent pvpFightEvent = new PVPFightEvent(myUser.getId(), myteamId[i], SArenaSetting.getSArenaSetting().getMostTime(), "",
GameFightType.CrossYuxulundaoFight, defUserUid, defTeamId[i]);
int myforce = HeroLogic.getInstance().calTeamTotalForce(myUser, GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE, false) + HeroLogic.getInstance().calTeamTotalForce(myUser, GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO, false) + HeroLogic.getInstance().calTeamTotalForce(myUser, GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE, false);
SArenaRobotConfig sArenaRobotConfig = SArenaRobotConfig.getsArenaRobotConfigById(defUserUid);
//战力的先后手
if (sArenaRobotConfig != null && myforce < sArenaRobotConfig.getTotalForce()) {
pvpFightEvent.setRever(true);
}
FightResult fightResult = FightDispatcher.dispatcher(pvpFightEvent);
CommonProto.FightTeamInfo fightTeamInfo = fightResult.getFightTeamInfo();
CommonProto.FightTeamInfo deffightTeamInfo = fightResult.getDefFightTeamInfo();
//设置战斗随机种子
int seed = fightResult.getSeed();
CommonProto.FightData build = CommonProto.FightData.newBuilder()
.setFightMaxTime(SArenaSetting.getSArenaSetting().getMostTime())
.setFightSeed(seed)
.setHeroFightInfos(fightTeamInfo)
.addMonsterList(deffightTeamInfo)
.setFightType(FightType.CrossYuxulundaoFight.getType())
.setFightId(FightUtil.getFightId(myUser.getId(), FightType.ArenaFight.getType()))
.build();
builder.addFightData(build);
result[i] = (int) fightResult.getCheckResult()[0];
//builder.addFightResult((int) fightResult.getCheckResult()[0]);
}
builder.addAllFightResult(Arrays.stream(result).boxed().collect(Collectors.toList()));
return result;
}
}

View File

@ -0,0 +1,85 @@
package com.ljsd.jieling.handler.crossServer;
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.arena.CrossYuxulundaoLogic;
import com.ljsd.jieling.logic.dao.ArenaManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SMServerArenaSetting;
import config.SMServerRankConfig;
import manager.STableManager;
import rpc.protocols.ArenaInfoProto;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import java.util.Map;
public class CrossYuxulundaoDailyRewardHandler extends BaseHandler<ArenaInfoProto.CrossYuXuLunDaoGetDailyRewardRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardRequest;
}
@Override
public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoGetDailyRewardRequest request) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
if (user == null) {
return;
}
int type = request.getType()-1;
ArenaManager arenaManager = user.getArenaManager();
if (arenaManager == null) {
return;
}
ArenaInfoProto.CrossYuXuLunDaoGetDailyRewardResponse.Builder res = ArenaInfoProto.CrossYuXuLunDaoGetDailyRewardResponse.newBuilder();
if (!CrossYuxulundaoLogic.limitOpen(user)) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.setIsSuccess(false).build(), true);
return;
}
if (arenaManager.getCrossYuxulundaoDailyRewad().get(type) != 1) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.setIsSuccess(false).build(), true);
return;
}
Map<Integer, SMServerRankConfig> robotConfigMap = STableManager.getConfig(SMServerRankConfig.class);
if (!robotConfigMap.containsKey(arenaManager.getCrossYuxulundaoNewLevelId())) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.setIsSuccess(false).build(), true);
return;
}
SMServerRankConfig config = robotConfigMap.get(arenaManager.getCrossYuxulundaoNewLevelId());
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2);
int privId = setting.getPrivId()[0];
if (!user.getArenaManager().getCrossYuxulundaoDailyRewad().contains(type)) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.setIsSuccess(false).build(), true);
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
if (user.getArenaManager().getCrossYuxulundaoDailyRewad().get(type) == 1) {
int[][] itemArr = new int[1][2];
itemArr[0][0] = config.getDailyReward()[type][1];
itemArr[0][1] = config.getDailyReward()[type][2];
CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, itemArr, BIReason.CROSS_YUXULUNDAO_DAILYREWARD);
res.setIsSuccess(true);
res.setDrop(drop);
user.getArenaManager().getCrossYuxulundaoDailyRewad().set(type, 2);
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), res.build(), true);
}
/* if(user.getPlayerInfoManager().getVipPrivilageValue(privId) >= config.getDailyReward()[type][0]){
int[][] itemArr = new int[1][2];
itemArr[0][0] = config.getDailyReward()[type][1];
itemArr[0][1] =config.getDailyReward()[type][2];
CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, itemArr, BIReason.CROSS_YUXULUNDAO_DAILYREWARD);
res.setIsSuccess(true);
res.setDrop(drop);
//MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetDailyRewardResponse.getNumber(), builder.build(), true);
}*/
}
}

View File

@ -1,10 +1,21 @@
package com.ljsd.jieling.handler.crossServer;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic;
import com.ljsd.jieling.logic.dao.ArenaEnemy;
import com.ljsd.jieling.logic.dao.ArenaManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.MessageUtil;
import rpc.protocols.ArenaInfoProto;
import rpc.protocols.MessageTypeProto;
import java.util.List;
/**
* -
*/
public class CrossYuxulundaoEnemyInfoHandler extends BaseHandler<ArenaInfoProto.CrossYuXuLunDaoChangeEnemyInfoRequest> {
@Override
@ -14,12 +25,21 @@ public class CrossYuxulundaoEnemyInfoHandler extends BaseHandler<ArenaInfoProto.
@Override
public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoChangeEnemyInfoRequest request) throws Exception{
int uid = session.getUid();
User user = UserManager.getUser(uid);
if(user == null){
return;
}
ArenaManager arenaManager = user.getArenaManager();
ArenaInfoProto.CrossYuXuLunDaoChangeEnemyInfoResponse.Builder builder = ArenaInfoProto.CrossYuXuLunDaoChangeEnemyInfoResponse.newBuilder();
if(!CrossYuxulundaoLogic.limitOpen(user)){
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChangeEnemyInfoResponse.getNumber(), builder.build(), true);
return;
}
CrossYuxulundaoLogic.getInstance().matchRivals(user);
List<ArenaEnemy> enemyList = arenaManager.getCrossYuxulundaoEnemies();
enemyList.forEach(n->builder.addArenaEnemys(CrossYuxulundaoLogic.getInstance().getMatchRivalInfo(n.getEnemyId(),0,0)));
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChangeEnemyInfoResponse.getNumber(), builder.build(), true);
}
}

View File

@ -1,16 +1,32 @@
package com.ljsd.jieling.handler.crossServer;
import com.ljsd.jieling.core.FunctionIdEnum;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
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.CrossYuxulundaoLogic;
import com.ljsd.jieling.logic.dao.ArenaEnemy;
import com.ljsd.jieling.logic.dao.ArenaManager;
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.network.session.ISession;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SMServerArenaSetting;
import config.SMServerRankConfig;
import manager.STableManager;
import rpc.protocols.ArenaInfoProto;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import java.util.List;
/**
*
*/
@ -22,34 +38,88 @@ public class CrossYuxulundaoGetInfoHandler extends BaseHandler<ArenaInfoProto.Cr
}
@Override
public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoGetInfoRequest request) throws Exception{
public void processWithProto(ISession session, ArenaInfoProto.CrossYuXuLunDaoGetInfoRequest request) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
if(user == null){
if (user == null) {
return;
}
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (crossGroup == -1) {
return;
}
ArenaManager arenaManager = user.getArenaManager();
ArenaInfoProto.CrossYuXuLunDaoGetInfoResponse.Builder builder = ArenaInfoProto.CrossYuXuLunDaoGetInfoResponse.newBuilder();
long yuxulundaoTime = user.getPlayerInfoManager().getCrossYuxulundaoFirst();
TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.CrossYuxulundao);
if(null ==timeControllerOfFunction){
ArenaOfUser myQuery = CrossServiceLogic.getInstance().query(user.getId());
if(myQuery == null){
CrossServiceLogic.getInstance().dispose(user);
myQuery=CrossServiceLogic.getInstance().query(user.getId());
}
if (!CrossYuxulundaoLogic.limitOpen(user)) {
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetInfoResponse.getNumber(), builder.build(), true);
return;
}
if(yuxulundaoTime >= timeControllerOfFunction.getStartTime() && yuxulundaoTime <= timeControllerOfFunction.getEndTime()){
long yuxulundaoTime = arenaManager.getCrossYuxulundaoFirst();
TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.CrossYuxulundao);
if (null == timeControllerOfFunction) {
return;
}
if (yuxulundaoTime >= timeControllerOfFunction.getStartTime() && yuxulundaoTime <= timeControllerOfFunction.getEndTime()) {
builder.setIsFirst(false);
}else {
//CrossYuxulundaoLogic.getInstance().matchRivals(user);
} else {
//赛季内第一次登陆请求
builder.setIsFirst(true);
user.getPlayerInfoManager().setCrossYuxulundaoFirst(System.currentTimeMillis());
//TODO 重置段位发奖
CrossYuxulundaoLogic.getInstance().resetSeason(user);
arenaManager.setCrossYuxulundaoFirst(System.currentTimeMillis());
//重置段位发奖
int id = SMServerRankConfig.getIdByScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore());
if (SMServerRankConfig.serverRankConfig.containsKey(id)) {
SMServerRankConfig serverRankConfig = SMServerRankConfig.serverRankConfig.get(id);
int resetId = serverRankConfig.getResetRankID();
for (int i = resetId; i <= id; i++) {
CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, serverRankConfig.getFirstReward(), BIReason.CROSS_YUXULUNDAO_DAILYREWARD);
builder.addDrop(drop);
}
myQuery.getPlayerManager().setCrossYuxulundaoNewScore(SMServerRankConfig.serverRankConfig.get(resetId).getScoreLow());
}
arenaManager.setCrossMatchTimes(0);
CrossYuxulundaoLogic.getInstance().matchRivals(user);
}
List<ArenaEnemy> enemyList = arenaManager.getCrossYuxulundaoEnemies();
if (enemyList != null && enemyList.size() > 0) {
enemyList.forEach(n -> builder.addArenaEnemys(CrossYuxulundaoLogic.getInstance().getMatchRivalInfo(n.getEnemyId(), 0, 0)));
}
if (myQuery != null) {
int oldScore = myQuery.getPlayerManager().getCrossYuxulundaoOldScore();
int newScore = myQuery.getPlayerManager().getCrossYuxulundaoNewScore();
//被打后是否加分了
int id = SMServerRankConfig.getIdByScore(newScore);
if (myQuery.getPlayerManager().getCrossYxldMaxLevel() < id) {
//首次爬升到该位置发奖励
int oldLevel = SMServerRankConfig.getIdByScore(oldScore);
for(int i=oldLevel+1;i<=id;i++){
if (SMServerRankConfig.serverRankConfig.containsKey(i)) {
SMServerRankConfig serverRankConfig = SMServerRankConfig.serverRankConfig.get(i);
CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, serverRankConfig.getFirstReward(), BIReason.CROSS_YUXULUNDAO_DAILYREWARD);
builder.addUpdrop(drop);
}
}
myQuery.getPlayerManager().setCrossYxldMaxLevel(id);
}
builder.setOldMyscore(oldScore);
builder.setNewMyscore(newScore);
if (oldScore != newScore) {
myQuery.getPlayerManager().setCrossYuxulundaoOldScore(newScore);
}
}
//builder.setFreeTimes(5);
builder.addAllDailyRewardState(arenaManager.getCrossYuxulundaoDailyRewad());
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();
builder.setMyRank(myRank);
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetInfoResponse.getNumber(), builder.build(), true);
}
}

View File

@ -0,0 +1,60 @@
package com.ljsd.jieling.handler.crossServer;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.MessageUtil;
import org.assertj.core.util.Lists;
import rpc.protocols.ArenaInfoProto;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
import java.util.List;
/**
*
*/
public class CrossYuxulundaoTeamInfoHandler extends BaseHandler<PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.GetPlayerCrossYxldOneTeamInfoRequest;
}
@Override
public void processWithProto(ISession session, PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoRequest request) throws Exception{
int uid = session.getUid();
User user = UserManager.getUser(uid);
if(user == null){
return;
}
PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.Builder playerTeamInfo = null;
int playerId = request.getPlayerId();
int serverId = request.getServerId();
//玉虚论道
if(!CrossYuxulundaoLogic.limitOpen(user)){
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoGetInfoResponse.getNumber(), PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder().build(), true);
return;
}
List<Integer> yuxuTeamId = Lists.newArrayList();
yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE);
yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO);
yuxuTeamId.add(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE);
if(playerId <= 1000){
//机器人
//res = PlayerLogic.getInstance().getCrossOneTeamInfo(playerId,null,yuxuTeamId);
playerTeamInfo = PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder().setTeamInfo(PlayerLogic.getInstance().getCrossOneTeamInfo(playerId,null,yuxuTeamId));
}else{
//真人.
playerTeamInfo = PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder()
.setTeamInfo(PlayerLogic.getInstance().getCrossYxldOneTeamInfo(playerId,yuxuTeamId));
}
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GetPlayerCrossYxldOneTeamInfoResponse.getNumber(),playerTeamInfo.build(),true);
}
}

View File

@ -166,6 +166,16 @@ public class CrossServiceLogic {
List<TeamPosHeroInfo> firstTeam = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.FORMATION_NORMAL,new ArrayList<>());
teams.put(GlobalsDef.FORMATION_NORMAL,firstTeam);
set.addAll(firstTeam);
//玉虚论道编队
List<TeamPosHeroInfo> yxldOne = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE,new ArrayList<>());
teams.put(GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE,yxldOne);
set.addAll(yxldOne);
List<TeamPosHeroInfo> yxldTwo = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO,new ArrayList<>());
teams.put(GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO,yxldTwo);
set.addAll(yxldTwo);
List<TeamPosHeroInfo> yxldTree = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE,new ArrayList<>());
teams.put(GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE,yxldTree);
set.addAll(yxldTree);
// 英雄
Map<String,ArenaOfHero> heroes = new HashMap<>();
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();

View File

@ -1,30 +1,43 @@
package com.ljsd.jieling.logic.arena;
import com.ljsd.GameApplication;
import com.ljsd.fight.ArenaRecord;
import com.ljsd.jieling.chat.logic.ChatLogic;
import com.ljsd.jieling.core.FunctionIdEnum;
import com.ljsd.jieling.core.GlobalsDef;
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.logic.GlobalDataManaager;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.dao.CrossArenaEnemy;
import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.TimeControllerOfFunction;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.gm.ArenaOfUser;
import com.ljsd.jieling.logic.family.CrossDeathPathLogic;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.mail.MailLogic;
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 config.SArenaRobotConfig;
import config.SMServerArenaSetting;
import config.SMServerRankConfig;
import config.SMServerRankReward;
import manager.STableManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.aggregation.ArrayOperators;
import rpc.protocols.CommonProto;
import util.StringUtil;
import util.TimeUtils;
import java.net.UnknownHostException;
import java.util.*;
import java.util.stream.Collectors;
import com.ljsd.jieling.logic.dao.root.User;
/**
@ -53,12 +66,9 @@ public class CrossYuxulundaoLogic {
private int season;//0:挑战阶段 1:结算阶段
//初始化机器人信息
private void initRank() {
public void initRank() {
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (crossGroup == -1) {
return;
}
@ -68,7 +78,10 @@ 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 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());
int robotIndex = 100;
Random random = new Random();
@ -89,52 +102,32 @@ public class CrossYuxulundaoLogic {
rank.addRank(robotIndex, String.valueOf(crossGroup), 100 - robotIndex);
SArenaRobotConfig config = SArenaRobotConfig.getsArenaRobotConfigById(robotIds.get(robotIndex));
robotInfo.put(String.valueOf(robotIndex), new CrossArenaEnemy(robotIds.get(robotIndex), robotIndex, groupList.get(server), 0, 0, random.nextBoolean(), PlayerLogic.getInstance().getRandomName2WithOutVerify(), config.getTotalForce(), config.getRoleLv()));
}
LOGGER.info("跨服玉虚论道初始化结束");
RedisUtil.getInstence().putMapEntrys(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(crossGroup), robotInfo);
}
private void checkState() {
long now = System.currentTimeMillis();
TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.CrossYuxulundao);
if (null == timeControllerOfFunction) {
public void sendReward() {
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (crossGroup == -1) {
return;
}
long diff = (System.currentTimeMillis() - timeControllerOfFunction.getStartTime()) / 1000;
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(2);
if (diff >= setting.getBattleTime()[0] && diff <= setting.getBattleTime()[1]) {
} else if (diff > setting.getBattleTime()[1] && diff <= setting.getRestTime()[1]) {
} else if (diff > setting.getRestTime()[1]) {
String rkey = RedisUtil.getInstence().getKey(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup));
Set<String> arenaRank = RedisUtil.getInstence().getReverseZset(rkey, 0, 1);
List<Integer> arenaRankfilt = arenaRank.stream().mapToInt(n -> Integer.parseInt(n)).filter(n -> n > 1000).boxed().collect(Collectors.toList());
for (int i = 0; i < arenaRankfilt.size(); i++) {
SMServerRankReward config = SMServerRankReward.getIdByScore(i + 1);
try {
MailLogic.getInstance().sendMail(arenaRankfilt.get(0), "玉虚论道排名奖励", "恭喜您在本次玉虚论道荣获" + (i + 1) + "名,请及时领取附件中的排名奖励!",
StringUtil.parseArrayToString(config.getSeasonReward()), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
//TODO 跑马灯
//ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,String.valueOf(equipId),0,0,0,0,0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//0-1-2 准备阶段 -活动挑战阶段 - 发奖阶段
private void readying() {
if (state != BATTLE_STATE) {
LOGGER.info("玉虚论道:准备阶段,nowstate:{} to BATTLE_STATE", state);
initRank();
setState(BATTLE_STATE);
}
}
private void chanllege() {
}
private void sendReward() {
}
public int getSeason() {
@ -163,44 +156,114 @@ public class CrossYuxulundaoLogic {
}
public void setMatchRivals(User user) {
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (crossGroup == -1) {
return;
}
Set<Integer> robotIds = new HashSet<>(5);
PlayerManager player = user.getPlayerInfoManager();
ArenaManager arenaManager = user.getArenaManager();
int curLevel = arenaManager.getCrossYuxulundaoNewLevelId();//当前段位
List<ArenaEnemy> arenaEnemies = new ArrayList<>(); //得存储
Map<Integer, SMServerRankConfig> robotConfigMap = STableManager.getConfig(SMServerRankConfig.class);
if (!robotConfigMap.containsKey(curLevel)) {
return;
}
int[] timePool = robotConfigMap.get(curLevel).getFitRobotPool();
if (arenaManager.getCrossMatchTimes() < timePool[0]) {
//匹配机器人
List<SArenaRobotConfig> robotConfig = STableManager.getConfig(SArenaRobotConfig.class).values().stream().filter(n -> n.getPoolId() == timePool[1]).collect(Collectors.toList());
Collections.shuffle(robotConfig);
robotConfig.subList(0, robotIds.size()).forEach(n -> robotIds.add(n.getId()));
for (int robot : robotIds) {
arenaEnemies.add(new ArenaEnemy(robot, 1, 0));
}
arenaManager.setCrossMatchTimes(arenaManager.getCrossMatchTimes() + 1);
arenaManager.setArenaEnemies(arenaEnemies);
} else {
//TODO 次数超过后怎么匹配真人 真人不足怎么办 匹配真人的规则
}
}
/**
*
*/
public void matchRivals(User user){
Set<Integer> robotIds = new HashSet<>(5);
PlayerManager player = user.getPlayerInfoManager();
int curLevel = player.getCrossYuxulundaoNewLevelId();//当前段位
if(curLevel < 7){
//什么段位以下全是机器人
player.getCrossYuxulundaoNewLevelId();
int poolId =0;
List<SArenaRobotConfig> robotConfig = STableManager.getConfig(SArenaRobotConfig.class).values().stream().filter(n->n.getPoolId() == poolId).collect(Collectors.toList());
robotConfig.subList(0,robotIds.size()).forEach(n->robotIds.add(n.getId()));
}else {
//正常按排行榜算
public void matchRivals(User user) throws Exception {
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (crossGroup == -1) {
return;
}
Set<Integer> robotIds = new HashSet<>(5);
ArenaManager arenaManager = user.getArenaManager();
ArenaOfUser myQuery = CrossServiceLogic.getInstance().query(user.getId());
int curId = SMServerRankConfig.getIdByScore(myQuery.getPlayerManager().getCrossYuxulundaoNewScore());
List<ArenaEnemy> arenaEnemies = new ArrayList<>(); //得存储
Map<Integer, SMServerRankConfig> robotConfigMap = STableManager.getConfig(SMServerRankConfig.class);
if (!robotConfigMap.containsKey(curId)) {
return;
}
int[] timePool = robotConfigMap.get(curId).getFitRobotPool();
if (arenaManager.getCrossMatchTimes() < timePool[0]) {
//匹配机器人
List<SArenaRobotConfig> robotConfig = STableManager.getConfig(SArenaRobotConfig.class).values().stream().filter(n -> n.getPoolId() == timePool[1]).collect(Collectors.toList());
Collections.shuffle(robotConfig);
robotConfig.subList(0, 5).forEach(n -> robotIds.add(n.getId()));
for (int robot : robotIds) {
arenaEnemies.add(new ArenaEnemy(robot, 1, 0));
}
arenaManager.setCrossMatchTimes(arenaManager.getCrossMatchTimes() + 1);
} else {
//正常从排行榜中匹配
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);
arenaRank.addAll(arenaRank1);
} else {
if (myRank < 4) {
//score =3
if (myRank - 1 > 0) {
Set<String> arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey, 0, myRank - 2);
arenaRank.addAll(arenaRank1);
Set<String> arenaRank2 = RedisUtil.getInstence().getReverseZset(rkey, myRank, myRank + (5 - myRank));
arenaRank.addAll(arenaRank2);
} else if (myRank - 1 == 0) {
Set<String> arenaRank2 = RedisUtil.getInstence().getReverseZset(rkey, 1, 6);
arenaRank.addAll(arenaRank2);
}
} else {
//比他低的三个 比他高的两个
Set<String> arenaRank1 = RedisUtil.getInstence().getReverseZset(rkey, myRank - 3, myRank - 1);
Set<String> arenaRank2 = RedisUtil.getInstence().getReverseZset(rkey, myRank, myRank + 3);
arenaRank.addAll(arenaRank1);
arenaRank.addAll(arenaRank2);
}
}
arenaRank.forEach(n -> {
if (Integer.valueOf(n) > 1000) {
arenaEnemies.add(new ArenaEnemy(Integer.valueOf(n), 0, 0));
} else {
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));
}
}
});
}
arenaManager.setCrossYuxulundaoEnemies(arenaEnemies);
}
/**
*
*/
public static CommonProto.ArenaPersonInfo getMatchRivalInfo(int enemyId, int rank, int score) throws Exception {
public static CommonProto.ArenaPersonInfo getMatchRivalInfo(int enemyId, int rank, int score) {
Map<Integer, SArenaRobotConfig> robotConfigMap = STableManager.getConfig(SArenaRobotConfig.class);
if (robotConfigMap.containsKey(enemyId)) {
SArenaRobotConfig sArenaRobotConfig = robotConfigMap.get(enemyId);
@ -210,37 +273,91 @@ public class CrossYuxulundaoLogic {
.setName(sArenaRobotConfig.getRobotName())
.setHead(0)
.setRank(rank)
.setTotalForce(sArenaRobotConfig.getTotalForce()) //三个队伍的总战力 TODO
.setTotalForce(sArenaRobotConfig.getYxldTotalForce()) //三个队伍的总战力
.setHeadFrame(0)
.setScore(score)
.build();
return personInfoBuild;
}
User user = UserManager.getUser(enemyId, true);
if (null == user) {
//其他服务器玩家
ArenaOfUser arenaOfUser = null;
try {
arenaOfUser = CrossServiceLogic.getInstance().query(enemyId);
} catch (Exception e) {
e.printStackTrace();
return null;
}
int totalForceOne = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE, false);
int totalForceTwo = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO, false);
int totalForceThree = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE, false);
PlayerManager playerInfoManager = user.getPlayerInfoManager();
if (arenaOfUser == null) {
return null;
}
String serverName = CrossServiceLogic.getInstance().getServerNameByUId(enemyId);
CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder()
.setUid(enemyId)
.setLevel(playerInfoManager.getLevel())
.setName(playerInfoManager.getNickName())
.setHead(playerInfoManager.getHead())
.setLevel(arenaOfUser.getPlayerManager().getLevel())
.setName(arenaOfUser.getPlayerManager().getName())
.setServername(serverName)
.setTotalForce(arenaOfUser.getHeroManager().getTotalForce())
.setUserTitle(arenaOfUser.getPlayerManager().getUserTitle())
.setUserMount(arenaOfUser.getPlayerManager().getUserMount())
.setGender(arenaOfUser.getPlayerManager().getGender())
.setUserSkin(arenaOfUser.getPlayerManager().getSkin())
.setPracticeLevel(arenaOfUser.getPlayerManager().getPracticeLevel())
.setScore(arenaOfUser.getPlayerManager().getCrossYuxulundaoNewScore())
.setRank(rank)
.setTotalForce(totalForceOne + totalForceTwo + totalForceThree)
.setHeadFrame(playerInfoManager.getHeadFrame())
.setScore(score)
.setUserMount(playerInfoManager.getUserMount())
.setUserSkin(playerInfoManager.getUserSkin())
.setUserTitle(playerInfoManager.getUserTitle())
.setGender(playerInfoManager.getSex())
.setPracticeLevel(user.getHeroManager().getPracticeLevel())
.build();
return personInfoBuild;
}
public static boolean limitOpen(User user) throws Exception {
//等级 开服多少周 跨服分组
return true;
/*int level = user.getPlayerInfoManager().getLevel();
if(level<40){
throw new ErrorCodeException(ErrorCode.UNKNOWN);
return false;
}
long lastOrUnderHour = TimeUtils.getLastOrUnderHour(GameApplication.serverConfig.getCacheOpenTime(), 1, 0, 0, true);
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1);
if(setting==null){
//throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
lastOrUnderHour+=TimeUtils.WEEK*(setting.getOpenWeek()-1);
if(TimeUtils.now()<lastOrUnderHour){
//未开启
throw new ErrorCodeException(ErrorCode.UNKNOWN);
return false;
}
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (crossGroup == -1) {
throw new ErrorCodeException(ErrorCode.UNKNOWN);
return false;
}
return false;*/
}
public static CommonProto.crossYxldPlayerRecordInfo getCrossYxldPlayerRecordInfo(ArenaRecord arenaRecord) throws Exception {
CommonProto.FightData fightDataProto1 = CommonProto.FightData.parseFrom(arenaRecord.getYxldFightData1());
CommonProto.FightData fightDataProto2 = CommonProto.FightData.parseFrom(arenaRecord.getYxldFightData2());
CommonProto.FightData fightDataProto3 = CommonProto.FightData.parseFrom(arenaRecord.getYxldFightData3());
List<Integer> result = null;//
if (arenaRecord.getYxldResult() == null) {
result = new ArrayList<Integer>();
result.add(0);
result.add(0);
result.add(0);
}else{
result = Arrays.stream(arenaRecord.getYxldResult()).boxed().collect(Collectors.toList());
}
return CommonProto.crossYxldPlayerRecordInfo.newBuilder().setTime(arenaRecord.getCreateTime())
.setUid(arenaRecord.getAttackId())
.addAllResult(result)
.setMyScoreChange(arenaRecord.getYxldScoreChange())
.setLevel(arenaRecord.getLevel())
.setHead(arenaRecord.getHead())
.setUserName(arenaRecord.getUserName())
.setHeadFrame(arenaRecord.getHeadFrame()).setFightData1(fightDataProto1).setFightData2(fightDataProto2).setFightData3(fightDataProto3)
.setPower(arenaRecord.getAttackForce()).setType(arenaRecord.getYxldBattleType()).build();
}
}

View File

@ -29,6 +29,18 @@ public class ArenaManager extends MongoBase {
private List<ArenaEnemy> arenaEnemies;
private List<Integer> hadTakeReward;
private List<ArenaEnemy> crossYuxulundaoEnemies;
//跨服 玉虚论道
private long crossYuxulundaoFirst; //是否当前赛季第一次请求
private int crossYuxulundaoOldScore = 1;
private int crossYuxulundaoNewScore = 1;
private int crossYuxulundaoOldLevelId = 1;
private int crossYuxulundaoNewLevelId = 1;
private int crossMatchTimes;//换一匹对手次数
private List<Integer> crossYuxulundaoDailyRewad = new ArrayList<>(Arrays.asList(0,0,0)); //日常奖励状态
public void updateChallenge(int fightResult){
if(fightResult == 1){
successNums ++;
@ -134,4 +146,76 @@ public class ArenaManager extends MongoBase {
updateString("costDallyTime",costDallyTime);
this.costDallyTime = costDallyTime;
}
public List<ArenaEnemy> getCrossYuxulundaoEnemies() {
return crossYuxulundaoEnemies;
}
public void setCrossYuxulundaoEnemies(List<ArenaEnemy> crossYuxulundaoEnemies) {
updateString("crossYuxulundaoEnemies",crossYuxulundaoEnemies);
this.crossYuxulundaoEnemies = crossYuxulundaoEnemies;
}
public long getCrossYuxulundaoFirst() {
return crossYuxulundaoFirst;
}
public void setCrossYuxulundaoFirst(long crossYuxulundaoFirst) {
this.crossYuxulundaoFirst = crossYuxulundaoFirst;
updateString("crossYuxulundaoFirst",crossYuxulundaoFirst);
}
public int getCrossYuxulundaoOldScore() {
return crossYuxulundaoOldScore;
}
public void setCrossYuxulundaoOldScore(int crossYuxulundaoOldScore) {
this.crossYuxulundaoOldScore = crossYuxulundaoOldScore;
updateString("crossYuxulundaoOldScore",crossYuxulundaoOldScore);
}
public int getCrossYuxulundaoNewScore() {
return crossYuxulundaoNewScore;
}
public void setCrossYuxulundaoNewScore(int crossYuxulundaoNewScore) {
this.crossYuxulundaoNewScore = crossYuxulundaoNewScore;
updateString("crossYuxulundaoNewScore",crossYuxulundaoNewScore);
}
public int getCrossYuxulundaoOldLevelId() {
return crossYuxulundaoOldLevelId;
}
public void setCrossYuxulundaoOldLevelId(int crossYuxulundaoOldLevelId) {
this.crossYuxulundaoOldLevelId = crossYuxulundaoOldLevelId;
updateString("crossYuxulundaoOldLevelId",crossYuxulundaoOldLevelId);
}
public int getCrossYuxulundaoNewLevelId() {
return crossYuxulundaoNewLevelId;
}
public void setCrossYuxulundaoNewLevelId(int crossYuxulundaoNewLevelId) {
this.crossYuxulundaoNewLevelId = crossYuxulundaoNewLevelId;
updateString("crossYuxulundaoNewLevelId",crossYuxulundaoNewLevelId);
}
public int getCrossMatchTimes() {
return crossMatchTimes;
}
public void setCrossMatchTimes(int crossMatchTimes) {
this.crossMatchTimes = crossMatchTimes;
updateString("crossMatchTimes",crossMatchTimes);
}
public List<Integer> getCrossYuxulundaoDailyRewad() {
return crossYuxulundaoDailyRewad;
}
public void setCrossYuxulundaoDailyRewad(List<Integer> crossYuxulundaoDailyRewad) {
this.crossYuxulundaoDailyRewad = crossYuxulundaoDailyRewad;
updateString("crossYuxulundaoDailyRewad",crossYuxulundaoDailyRewad);
}
}

View File

@ -167,14 +167,6 @@ public class PlayerManager extends MongoBase {
//是否拿到渠道服和猕猴桃 预约首发邮件;
private boolean isGetOrderMail;
//跨服 玉虚论道
private long crossYuxulundaoFirst; //是否当前赛季第一次请求
private int crossYuxulundaoOldScore;
private int crossYuxulundaoNewScore;
private int crossYuxulundaoOldLevelId;
private int crossYuxulundaoNewLevelId;
public PlayerManager(){
this.setRootCollection(User._COLLECTION_NAME);
}
@ -1141,48 +1133,5 @@ public class PlayerManager extends MongoBase {
updateString("isGetOrderMail",isGetOrderMail);
}
public long getCrossYuxulundaoFirst() {
return crossYuxulundaoFirst;
}
public void setCrossYuxulundaoFirst(long crossYuxulundaoFirst) {
this.crossYuxulundaoFirst = crossYuxulundaoFirst;
updateString("crossYuxulundaoFirst",crossYuxulundaoFirst);
}
public int getCrossYuxulundaoOldScore() {
return crossYuxulundaoOldScore;
}
public void setCrossYuxulundaoOldScore(int crossYuxulundaoOldScore) {
this.crossYuxulundaoOldScore = crossYuxulundaoOldScore;
updateString("crossYuxulundaoOldScore",crossYuxulundaoOldScore);
}
public int getCrossYuxulundaoNewScore() {
return crossYuxulundaoNewScore;
}
public void setCrossYuxulundaoNewScore(int crossYuxulundaoNewScore) {
this.crossYuxulundaoNewScore = crossYuxulundaoNewScore;
updateString("crossYuxulundaoNewScore",crossYuxulundaoNewScore);
}
public int getCrossYuxulundaoOldLevelId() {
return crossYuxulundaoOldLevelId;
}
public void setCrossYuxulundaoOldLevelId(int crossYuxulundaoOldLevelId) {
this.crossYuxulundaoOldLevelId = crossYuxulundaoOldLevelId;
updateString("crossYuxulundaoOldLevelId",crossYuxulundaoOldLevelId);
}
public int getCrossYuxulundaoNewLevelId() {
return crossYuxulundaoNewLevelId;
}
public void setCrossYuxulundaoNewLevelId(int crossYuxulundaoNewLevelId) {
this.crossYuxulundaoNewLevelId = crossYuxulundaoNewLevelId;
updateString("crossYuxulundaoNewLevelId",crossYuxulundaoNewLevelId);
}
}

View File

@ -25,6 +25,15 @@ public class ArenaOfPlayerManager {
private int maxFore;
//跨服玉虚论道 分数 等级
private int crossYuxulundaoOldScore = 0;
private int crossYuxulundaoNewScore = 0;
private int crossYuxulundaoOldLevelId = 1;
private int crossYuxulundaoNewLevelId = 1;
private int crossYxldMaxLevel; //历史达到的最高等级
//private int crossMatchTimes;//换一匹对手次数
public ArenaOfPlayerManager(int uId, int level, String name, int head, int headFrame, int guildId, String guildName, int userTitle, int userMount, int practiceLevel, int serverId, String serverName, int gender, int skin, int maxFore) {
this.uId = uId;
this.level = level;
@ -165,4 +174,44 @@ public class ArenaOfPlayerManager {
public void setMaxFore(int maxFore) {
this.maxFore = maxFore;
}
public int getCrossYuxulundaoOldScore() {
return crossYuxulundaoOldScore;
}
public void setCrossYuxulundaoOldScore(int crossYuxulundaoOldScore) {
this.crossYuxulundaoOldScore = crossYuxulundaoOldScore;
}
public int getCrossYuxulundaoNewScore() {
return crossYuxulundaoNewScore;
}
public void setCrossYuxulundaoNewScore(int crossYuxulundaoNewScore) {
this.crossYuxulundaoNewScore = crossYuxulundaoNewScore;
}
public int getCrossYuxulundaoOldLevelId() {
return crossYuxulundaoOldLevelId;
}
public void setCrossYuxulundaoOldLevelId(int crossYuxulundaoOldLevelId) {
this.crossYuxulundaoOldLevelId = crossYuxulundaoOldLevelId;
}
public int getCrossYuxulundaoNewLevelId() {
return crossYuxulundaoNewLevelId;
}
public void setCrossYuxulundaoNewLevelId(int crossYuxulundaoNewLevelId) {
this.crossYuxulundaoNewLevelId = crossYuxulundaoNewLevelId;
}
public int getCrossYxldMaxLevel() {
return crossYxldMaxLevel;
}
public void setCrossYxldMaxLevel(int crossYxldMaxLevel) {
this.crossYxldMaxLevel = crossYxldMaxLevel;
}
}

View File

@ -49,7 +49,9 @@ public enum GameFightType {
CarPersonChallenge(FightType.CarBossFight,new PVPFightHandler(),null),
GuildChallenge(FightType.GuildChallenge,new DefaultWithoutHandFightHandler(),null),
NewGeneral(FightType.GuildChallenge,new DefaultWithoutHandFightHandler(),null),
TowerMap(FightType.TowerMap,new DefaultWithoutHandFightHandler(),null)
TowerMap(FightType.TowerMap,new DefaultWithoutHandFightHandler(),null),
CrossYuxulundaoFight(FightType.CrossYuxulundaoFight,new PVPFightHandler(),null)
;

View File

@ -1189,6 +1189,10 @@ public class HeroLogic{
if (teamId == GlobalsDef.WORLD_TEAM_ARENA_DEFENSE) {
CrossServiceLogic.getInstance().dispose(user);
}
//跨服 玉虚论道
if (teamId == GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE||teamId == GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO||teamId == GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE) {
CrossServiceLogic.getInstance().dispose(user);
}
user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_IN_TEAM,heroIds.size());
MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.TEAM_POS_SAVE_RESPONSE_VALUE,null,true);
}
@ -3022,7 +3026,6 @@ public class HeroLogic{
return totalForce;
}
public int calRobotTotalForce( SArenaRobotConfig sArenaRobotConfig){
int totalForce =0;
List<Integer> heroList = sArenaRobotConfig.getHeroList();
@ -3036,6 +3039,31 @@ public class HeroLogic{
}
return totalForce;
}
public int calRobotYxldTotalForce( SArenaRobotConfig sArenaRobotConfig){
int totalForce =0;
List<Integer> heroList = sArenaRobotConfig.getHeroList();
List<Integer> heroList2 = sArenaRobotConfig.getHeroList2();
List<Integer> heroList3 = sArenaRobotConfig.getHeroList3();
int[] differDemonsId = sArenaRobotConfig.getDifferDemonsId();
int differDemonsLv = sArenaRobotConfig.getDifferDemonsLv();
int heroLevel = sArenaRobotConfig.getRoleLv();
for(Integer heroTid :heroList){
SCHero scHero = SCHero.getsCHero().get(heroTid);
Map<Integer, Long> robotHeroAttribute = calRobotHeroAttribute(scHero, heroLevel, 0, differDemonsId, differDemonsLv,true);
totalForce+=calForce(robotHeroAttribute);
}
for(Integer heroTid :heroList2){
SCHero scHero = SCHero.getsCHero().get(heroTid);
Map<Integer, Long> robotHeroAttribute = calRobotHeroAttribute(scHero, heroLevel, 0, differDemonsId, differDemonsLv,true);
totalForce+=calForce(robotHeroAttribute);
}
for(Integer heroTid :heroList3){
SCHero scHero = SCHero.getsCHero().get(heroTid);
Map<Integer, Long> robotHeroAttribute = calRobotHeroAttribute(scHero, heroLevel, 0, differDemonsId, differDemonsLv,true);
totalForce+=calForce(robotHeroAttribute);
}
return totalForce;
}
public void calPercent(int[][] otherAttriMap,Map<Integer,Long> heroAttributeMap){
for(int[] item : otherAttriMap){

View File

@ -658,24 +658,75 @@ public class PlayerLogic {
}
//跨服三队伍
public PlayerInfoProto.GetPlayerOneTeamInfoResponse getCrossOneTeamInfo( int id,CrossArenaEnemy info,List<Integer> crossTeamId) throws Exception {
public CommonProto.TeamOneInfo getCrossOneTeamInfo( int id,CrossArenaEnemy info,List<Integer> crossTeamId) throws Exception {
if(id==0){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
SArenaRobotConfig sArenaRobotConfig = SArenaRobotConfig.getsArenaRobotConfigById(id);
CommonProto.TeamOneInfo.Builder oneInfo;
CommonProto.TeamOneInfo.Builder oneInfo = null;
if(sArenaRobotConfig!=null){
oneInfo = getRobotOneInfo(sArenaRobotConfig,info);
oneInfo = getYuxuRobotOneInfo(sArenaRobotConfig,info,crossTeamId);
}else{
oneInfo = getUserTeamOneInfo(id, crossTeamId);
/*oneInfo = getUserTeamOneInfo(id, crossTeamId);
if(UserManager.getUser(id).getFriendManager().getMyApplyFriends().contains(id)){
oneInfo.setIsApplyed(1);
}
}*/
}
PlayerInfoProto.GetPlayerOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().setTeamInfo(oneInfo);
return playerTeamInfo.build();
//PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder().setTeamInfo(oneInfo);
return oneInfo.build();
}
//玉虚论道
private CommonProto.TeamOneInfo.Builder getYuxuRobotOneInfo(SArenaRobotConfig sArenaRobotConfig,CrossArenaEnemy info,List<Integer> crossTeamId){
CommonProto.TeamOneInfo.Builder oneInfo=getYuxuRobotTeamInfo(sArenaRobotConfig,crossTeamId);
if(info!=null){
oneInfo.setName(info.getRandomName());
}
return oneInfo;
}
public CommonProto.TeamOneInfo.Builder getYuxuRobotTeamInfo(SArenaRobotConfig sArenaRobotConfig,List<Integer> crossTeamId){
CommonProto.TeamOneInfo.Builder oneInfo = CommonProto.TeamOneInfo.newBuilder()
.setLevel(sArenaRobotConfig.getRobotLevel())
.setName(sArenaRobotConfig.getRobotName())
.setUid(sArenaRobotConfig.getId()).setCrossTeamScore(sArenaRobotConfig.getMsScroe()).setServerName("S10");
//CommonProto.TeamOneTeamInfo.Builder teamInfo = CommonProto.TeamOneTeamInfo.newBuilder();
if(sArenaRobotConfig.getDifferDemonsId()!=null){
// for(int pokenId:sArenaRobotConfig.getDifferDemonsId()){
// teamInfo.addPokemonInfos(null);
// }
}
//玉虚论道三队伍
for(int id :crossTeamId){
int position = 1;
CommonProto.TeamOneTeamInfo.Builder teamInfo = CommonProto.TeamOneTeamInfo.newBuilder();
if(id ==GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE){
for(Map.Entry<Integer,CommonProto.Hero> item : sArenaRobotConfig.getHeroMapList().entrySet()){
Integer heroTid = item.getKey();
Integer heroStar = item.getValue().getStar();
teamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder().setHeroid(String.valueOf(heroTid)).setHeroTid(heroTid).setLevel(sArenaRobotConfig.getRoleLv()).setStar(heroStar).setPosition(position++).build());
}
}else if(id ==GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO){
for(Map.Entry<Integer,CommonProto.Hero> item : sArenaRobotConfig.getHeroMapList2().entrySet()){
Integer heroTid = item.getKey();
Integer heroStar = item.getValue().getStar();
teamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder().setHeroid(String.valueOf(heroTid)).setHeroTid(heroTid).setLevel(sArenaRobotConfig.getRoleLv()).setStar(heroStar).setPosition(position++).build());
}
}else if(id ==GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE){
for(Map.Entry<Integer,CommonProto.Hero> item : sArenaRobotConfig.getHeroMapList3().entrySet()){
Integer heroTid = item.getKey();
Integer heroStar = item.getValue().getStar();
teamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder().setHeroid(String.valueOf(heroTid)).setHeroTid(heroTid).setLevel(sArenaRobotConfig.getRoleLv()).setStar(heroStar).setPosition(position++).build());
}
}
teamInfo.setTotalForce(sArenaRobotConfig.getTotalForce());
oneInfo.addCrossTeam(teamInfo);
}
//oneInfo.setTeam(teamInfo);
return oneInfo;
}
//跨服三队伍
public CommonProto.TeamOneInfo.Builder getUserTeamOneInfo(int uid,List<Integer> crossTeamId) throws Exception {
@ -780,6 +831,51 @@ public class PlayerLogic {
PlayerInfoProto.GetPlayerOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerOneTeamInfoResponse.newBuilder().setTeamInfo(builder.build());
return playerTeamInfo.build();
}
//获取跨服玩家信息
public CommonProto.TeamOneInfo getCrossYxldOneTeamInfo(int id,List<Integer> team) throws Exception {
ArenaOfUser query = CrossServiceLogic.getInstance().query(id);
if(query==null){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
CommonProto.TeamOneInfo.Builder builder = CommonProto.TeamOneInfo.newBuilder()
.setHead(query.getPlayerManager().getHead())
.setHeadFrame(query.getPlayerManager().getHeadFrame())
.setUserTitle(query.getPlayerManager().getUserTitle())
.setLevel(query.getPlayerManager().getLevel())
.setName(query.getPlayerManager().getName())
.setGuildName(query.getPlayerManager().getGuildName())
.setPracticeLevel(query.getPlayerManager().getPracticeLevel())
.setUid(id).setCrossTeamScore(query.getPlayerManager().getCrossYuxulundaoNewScore());
for(int teamId: team){
CommonProto.TeamOneTeamInfo.Builder teamOneTeamInfo = CommonProto.TeamOneTeamInfo.newBuilder();
List<TeamPosHeroInfo> teamPosHeroInfos = query.getHeroManager().getTeams().get(teamId);
if(teamPosHeroInfos!=null){
for (TeamPosHeroInfo heroInfo:teamPosHeroInfos) {
ArenaOfHero hero = query.getHeroManager().getHeros().get(heroInfo.getHeroId());
teamOneTeamInfo.addTeam(CBean2Proto.getCrossSimpleHero(hero,heroInfo.getPosition()));
}
}
for(Map.Entry<Integer,Pokemon> entry:query.getPokemons().entrySet()){
teamOneTeamInfo.addPokemonInfos(CBean2Proto.getSimpleTeamInfoByPokeMon(entry.getValue(), entry.getKey()));
}
LOGGER.info("=====================跨服获取阵容:{}",teamId);
Integer integer = query.getHeroManager().getTotalForceByTeam().getOrDefault(teamId,0);
teamOneTeamInfo.setTotalForce(integer);
for(Map.Entry<Integer, PurpleMansionSeal> entry:query.getSeals().entrySet()){
PurpleMansionSeal value = entry.getValue();
ArenaOfHero arenaOfHero = query.getHeroManager().getHeros().get(value.getSubId());
if(value.getState()==0){
continue;
}
teamOneTeamInfo.addSealShow(CommonProto.PurpleSealShowInfo.newBuilder().setType(value.getType()).setId(value.getSealId()).setHeroTId(arenaOfHero==null?0:arenaOfHero.getTemplateId()));
}
//builder.setTeam(teamOneTeamInfo.build());
builder.addCrossTeam(teamOneTeamInfo.build());
}
//PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.Builder playerTeamInfo = PlayerInfoProto.GetPlayerCrossYxldOneTeamInfoResponse.newBuilder().setTeamInfo(builder.build());
return builder.build();
}
public PlayerInfoProto.GetPlayerOneTeamInfoResponse getCrossOneTeamInfo(int id,List<Integer> crossTeamId) throws Exception {
ArenaOfUser query = CrossServiceLogic.getInstance().query(id);

View File

@ -283,7 +283,7 @@ public abstract class AbstractRank implements IRank {
.setForce(query.getPlayerManager().getMaxFore())
.setSex(query.getPlayerManager().getGender())
.setHead(query.getPlayerManager().getHead())
.setGuildName(mapEntry.getName())
.setGuildName("xuexinpeng")
.setHeadFrame(query.getPlayerManager().getHeadFrame())
.setUserMount(query.getPlayerManager().getUserMount())
.setUserSkin(query.getPlayerManager().getSkin())

View File

@ -1,9 +1,24 @@
package com.ljsd.jieling.logic.rank.rankImpl;
import com.ljsd.jieling.core.GlobalsDef;
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.arena.ArenaLogic;
import com.ljsd.jieling.logic.dao.CrossArenaEnemy;
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.family.CrossDeathPathLogic;
import com.ljsd.jieling.logic.hero.HeroLogic;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto;
import util.TimeUtils;
import java.util.Set;
/**
*
*/
@ -25,9 +40,87 @@ public class CrossYuXuLunDaoRank extends AbstractRank{
@Override
public double getScore(double... data) {
return data[0]+ TimeUtils.getDoubleTime();
return data[0];
}
/**
*
*/
public void addOrUpdateRank(int uid,String rkey,double... data){
String key = RedisKey.getKey(redisKey,rkey,false);
//decr
RedisUtil.getInstence().zsetAddOne(key,String.valueOf(uid), getScore(data));
}
@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()
.setRank(index)
.setParam1(0)
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
CrossArenaEnemy mapEntry = RedisUtil.getInstence().getMapEntry(RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO, String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup()), data.getValue(), CrossArenaEnemy.class);
if(mapEntry==null){
return;
}
String serverName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(mapEntry.getServerID());
everyRankInfo.setParam1(mapEntry.getTotalForce());
CommonProto.UserRank.Builder everyRank = CommonProto.UserRank.newBuilder()
.setUid(mapEntry.getEnemyId_UUid())
.setUserName(mapEntry.getRandomName())
.setLevel(mapEntry.getLevel()==0?100:mapEntry.getLevel())
.setUserSkin(80012)
.setRankInfo(everyRankInfo)
.setServerName(serverName)
.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 = getCrossOneUserRank(query,everyRankInfo);
builder.addRanks(everyRank);
}
}
@Override
public void getCrossMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){
String crossGroup = String.valueOf(GlobleSystemLogic.getInstence().getCrossGroup());
int myRank= RedisUtil.getInstence().getZSetreverseRank(redisKey, crossGroup,Integer.toString(user.getId()),false).intValue();
Double zSetScore = RedisUtil.getInstence().getZSetScore(redisKey, crossGroup, Integer.toString(user.getId()),false);
int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,false);
CommonProto.RankInfo towerRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(myRank)
.setParam1(totalForce)
.setParam2(getParam2(zSetScore))
.build();
allUserResponse.setMyRankInfo(towerRankInfo);
}
@Override
public PlayerInfoProto.RankResponse getCrossRank(int uid, String rkey, int page, int rankEndLine) throws Exception {
if(rankEndLine==-1){
rankEndLine = 100;
}
User user = UserManager.getUser(uid);
if (page == 0) {
page = 1;
}
int start = (page - 1) * rankEndLine, end = page * rankEndLine - 1;
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
Set<ZSetOperations.TypedTuple<String>> scores =
RedisUtil.getInstence().getZsetreverseRangeWithScores(redisKey, String.valueOf(crossGroup), start, end, false);
if(start % rankEndLine == 0){
start++;
}
PlayerInfoProto.RankResponse.Builder allUserResponse = getCrossAllUserResponse(scores,start);
//当前用户信息
getCrossMyInfo(user,rkey,allUserResponse);
return allUserResponse.build();
}
}

View File

@ -20,6 +20,7 @@ import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.event.MinuteTaskEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.arena.ArenaLogic;
import com.ljsd.jieling.logic.arena.CrossYuxulundaoLogic;
import com.ljsd.jieling.logic.dao.GuildMyInfo;
import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.UserManager;
@ -102,12 +103,13 @@ public class MinuteTask extends Thread {
e.printStackTrace();
LOGGER.error("Exception::=>{}",e.toString());
}
// try {
// fiveMinuteOnlineSend();
// }catch (Exception e){
// e.printStackTrace();
// LOGGER.error("Exception::=>{}",e.toString());
// }
try {
//周日23.50执行
everySundaySpecialClockTask();
}catch (Exception e){
e.printStackTrace();
LOGGER.error("Exception::=>{}",e.toString());
}
try {
CheckFight.getInstance().luaHotFix();
MongoUtil.getInstence().lastUpdate();
@ -115,6 +117,8 @@ public class MinuteTask extends Thread {
QuestionLogic.getInstence().checkQuestion();
MailLogic.getInstance().checkReadyToMail();
CrossDeathPathLogic.getInstance().sendChangeIndicationByCross();
//TODO
//CrossYuxulundaoLogic.getInstance().initRank();
}catch (Exception e){
e.printStackTrace();
LOGGER.error("Exception::=>{}",e.toString());
@ -159,7 +163,6 @@ public class MinuteTask extends Thread {
e.printStackTrace();
LOGGER.error("Exception::=>{}",e.toString());
}
LOGGER.info("MinuteTask end...");
} catch (Exception e) {
LOGGER.error("e",e);
@ -200,6 +203,9 @@ public class MinuteTask extends Thread {
try {
GlobleSystemLogic.getInstence().calCulRank();
ArenaLogic.getInstance().sendReward(GlobalsDef.ARENA_DAILY_REWARD);
if(calendar.get(Calendar.DAY_OF_WEEK)==1){
CrossYuxulundaoLogic.getInstance().initRank();//玉虚论道重置
}
Map<Integer, GuildInfo> guildInfoMap = GuilidManager.guildInfoMap;
for(Map.Entry<Integer,GuildInfo> guildInfoEntry:guildInfoMap.entrySet()){
RedisUtil.getInstence().del(RedisKey.getKey(RedisKey.GUILD_RED_PACKAGE_RANK,String.valueOf(guildInfoEntry.getKey()),false));
@ -273,6 +279,20 @@ public class MinuteTask extends Thread {
}
}
//每周日23.50执行
public void everySundaySpecialClockTask() throws Exception {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if(w == 1 &&hour == 23 && minute ==50){
LOGGER.info("everySundaySpecialClockTask yuxulundao send reward start ...");
//玉虚论道23.50分执行
CrossYuxulundaoLogic.getInstance().sendReward();
LOGGER.info("everySundaySpecialClockTask yuxulundao send reward end ...");
}
}

View File

@ -21,8 +21,16 @@ public class SArenaRobotConfig implements BaseConfig {
private int[] roleId;
private int[] roleId2;
private int[] roleId3;
private List<Integer> heroList;
private List<Integer> heroList2;
private List<Integer> heroList3;
private int roleLv;
private int[] differDemonsId;
@ -33,6 +41,8 @@ public class SArenaRobotConfig implements BaseConfig {
private int totalForce;
private int yxldTotalForce;
private int breakId;
private int starBreakId;
@ -41,10 +51,16 @@ public class SArenaRobotConfig implements BaseConfig {
private Map<Integer, CommonProto.Hero> heroMapList;
private Map<Integer, CommonProto.Hero> heroMapList2;
private Map<Integer, CommonProto.Hero> heroMapList3;
private static Map<Integer, List<SArenaRobotConfig>> sArenaRobotConfigByPoolMap;
private static Map<Integer, SArenaRobotConfig> sArenaRobotConfigMap;
private int msScroe;
@Override
public void init() throws Exception {
@ -60,7 +76,21 @@ public class SArenaRobotConfig implements BaseConfig {
for(int heroId : roleId){
heroListTmp.add(heroId);
}
//玉虚论道第二个队伍
int[] roleId2 = sArenaRobotConfig.getRoleId2();
List<Integer> heroListTmp2 = new ArrayList<>(roleId.length);
for(int heroId : roleId2){
heroListTmp2.add(heroId);
}
//第三个队伍
int[] roleId3 = sArenaRobotConfig.getRoleId2();
List<Integer> heroListTmp3 = new ArrayList<>(roleId.length);
for(int heroId : roleId3){
heroListTmp3.add(heroId);
}
sArenaRobotConfig.setHeroList(heroListTmp);
sArenaRobotConfig.setHeroList2(heroListTmp2);
sArenaRobotConfig.setHeroList3(heroListTmp3);
result.get(poolId).add(sArenaRobotConfig);
}
sArenaRobotConfigByPoolMap = result;
@ -96,7 +126,15 @@ public class SArenaRobotConfig implements BaseConfig {
return roleId;
}
public int getRoleLv() {
public int[] getRoleId2() {
return roleId2;
}
public int[] getRoleId3() {
return roleId3;
}
public int getRoleLv() {
return roleLv;
}
@ -139,4 +177,48 @@ public class SArenaRobotConfig implements BaseConfig {
public void setHeroMapList(Map<Integer, CommonProto.Hero> heroMapList) {
this.heroMapList = heroMapList;
}
public Map<Integer, CommonProto.Hero> getHeroMapList2() {
return heroMapList2;
}
public void setHeroMapList2(Map<Integer, CommonProto.Hero> heroMapList2) {
this.heroMapList2 = heroMapList2;
}
public Map<Integer, CommonProto.Hero> getHeroMapList3() {
return heroMapList3;
}
public void setHeroMapList3(Map<Integer, CommonProto.Hero> heroMapList3) {
this.heroMapList3 = heroMapList3;
}
public List<Integer> getHeroList2() {
return heroList2;
}
public void setHeroList2(List<Integer> heroList2) {
this.heroList2 = heroList2;
}
public List<Integer> getHeroList3() {
return heroList3;
}
public void setHeroList3(List<Integer> heroList3) {
this.heroList3 = heroList3;
}
public int getMsScroe() {
return msScroe;
}
public int getYxldTotalForce() {
return yxldTotalForce;
}
public void setYxldTotalForce(int yxldTotalForce) {
this.yxldTotalForce = yxldTotalForce;
}
}

View File

@ -44,6 +44,8 @@ public class SMServerArenaSetting implements BaseConfig {
private int worldLevLimit;
private int[] privId;
private int treasureOpen;
@Override
public void init() throws Exception {
@ -122,4 +124,12 @@ public class SMServerArenaSetting implements BaseConfig {
public int getWorldLevLimit() {
return worldLevLimit;
}
public int[] getPrivId() {
return privId;
}
public int getTreasureOpen() {
return treasureOpen;
}
}

View File

@ -24,12 +24,26 @@ public class SMServerRankConfig implements BaseConfig {
private int scoreUp;
private int resetRankID;
private int[] fitRobotPool;
public static Map<Integer, SMServerRankConfig> serverRankConfig;
@Override
public void init() throws Exception {
serverRankConfig = STableManager.getConfig(SMServerRankConfig.class);
}
public static int getIdByScore(int score){
for(Map.Entry<Integer, SMServerRankConfig> keyVal :serverRankConfig.entrySet()){
if(score>=keyVal.getValue().getScoreLow()&&score<=keyVal.getValue().getScoreUp()){
return keyVal.getKey();
}
}
return 0;
}
public int getId() {
return id;
@ -63,5 +77,13 @@ public class SMServerRankConfig implements BaseConfig {
return scoreUp;
}
public int getResetRankID() {
return resetRankID;
}
public int[] getFitRobotPool() {
return fitRobotPool;
}
}