玉虚论道战斗rpc调用数据

back_recharge
xuexinpeng 2021-09-25 18:09:00 +08:00
parent 8ec8e3a0df
commit dec1f13d85
9 changed files with 447 additions and 39 deletions

View File

@ -46,7 +46,7 @@ public class CrossYuxululndaoChallengeBeforeTeamHandler extends BaseHandler<Aren
} else {
res.setDefTeamInfo(PlayerLogic.getInstance().getCrossYxldOneTeamInfo(defId, yuxuTeamId));
}
res.setMyTeamInfo(PlayerLogic.getInstance().getCrossYxldOneTeamInfo(myId, yuxuTeamId));
res.setMyTeamInfo(PlayerLogic.getInstance().getCrossYxldMyTeamInfo(user, yuxuTeamId));
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.CrossYuXuLunDaoChallengeBeforeResponse.getNumber(), res.build(), true);
}
}

View File

@ -202,7 +202,7 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler<ArenaInfoProto.
res.setMyScore(loserGetScore);
res.setDefScore(winerGetScore);
//输了 自己减积分 对方加积分
if (myQuery.getCrossYuxulundaoNewScore() >= loserGetScore) {
if (myQuery.getCrossYuxulundaoNewScore()+ loserGetScore >= 0 ) {
myQuery.setCrossYuxulundaoNewScore(myQuery.getCrossYuxulundaoNewScore() + loserGetScore);
myQuery.setCrossYuxulundaoOldScore(myQuery.getCrossYuxulundaoOldScore() + loserGetScore);
rank.incrementRankScore(user.getId(), String.valueOf(crossGroup), loserGetScore);
@ -230,10 +230,10 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler<ArenaInfoProto.
}
res.setMyNewScore(myQuery.getCrossYuxulundaoNewScore());
if (myQuery != null) {
CrossServiceLogic.getInstance().saveBasicPlayerToRedis(user);
CrossServiceLogic.getInstance().update(myQuery);
}
if (defQuery != null) {
CrossServiceLogic.getInstance().saveBasicPlayerToRedis(user);
CrossServiceLogic.getInstance().update(defQuery);
}
int myRank = RedisUtil.getInstence().getZSetreverseRank(RedisKey.CROSS_YUXULUNDAO_RANK, Integer.toString(crossGroup), Integer.toString(user.getId())).intValue();
res.setMyRank(myRank);
@ -255,21 +255,25 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler<ArenaInfoProto.
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);
//ArenaOfUser arenaOfUser = CrossServiceLogic.getInstance().query(defUserUid);
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(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());
arenaRecord.setAttackId(defUserUid); //id
arenaRecord.setLevel(csPlayer.getLevel()); //等级
arenaRecord.setHead(csPlayer.getHead()); //头像
arenaRecord.setUserName(csPlayer.getName()); //名字
arenaRecord.setHeadFrame(csPlayer.getHeadFrame());//头像框
arenaRecord.setPracticeLevel(csPlayer.getPracticeLevel());
int sumForce = 0;
for (int team : defTeamId) {
/*for (int team : defTeamId) {
if (team != 0) {
sumForce += arenaOfUser.getHeroManager().getTotalForceByTeam().getOrDefault(team, 0);
}
}
arenaRecord.setAttackForce(sumForce); //总战斗力
arenaRecord.setAttackForce(sumForce); //总战斗力*/
arenaRecord.setServerName(CrossServiceLogic.getInstance().getServerNameByUId(defUserUid));
for (int i = 0; i < 3; i++) {
//编队为空 判输赢
@ -277,8 +281,8 @@ public class CrossYuxulundaoChallengeHandler extends BaseHandler<ArenaInfoProto.
continue;
}*/
CommonProto.FightTeamInfo fightTeamInfo = FightUtil.makePersonFightData(myUser, myteamId[i], null, null);
//修行等级 区服名称 战斗类行 积分变化情况
CommonProto.FightTeamInfo defteamInfo = FightUtil.makeCrossPersonData(arenaOfUser, defTeamId[i]);
//对手 修行等级 区服名称 战斗类行 积分变化情况
CommonProto.FightTeamInfo defteamInfo = FightUtil.makeCrossPersonData(defUserUid, defTeamId[i],arenaRecord);
FightResult fightResult = GetWorldArenaChallengeRequestHandler.getFightForPVP(myUser.getId(), defUserUid,
fightTeamInfo, defteamInfo, FightUtil.getFightSeed(), true);
int seed = fightResult.getSeed();

View File

@ -266,7 +266,7 @@ public class CrossServiceLogic {
}
private static void update(CSPlayer player) {
public static void update(CSPlayer player) {
RedisUtil.getInstence().setObject(getKey(player.getUserId()),player,EXPIRE);
}
private static String getKey(int uid){
@ -296,7 +296,7 @@ public class CrossServiceLogic {
player.setMaxFore(p.getMaxForce());
CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class);
player.setRpcIp(coreSettings.getIp());
player.setRpcPort(coreSettings.getGmport());
player.setRpcPort(coreSettings.getPort());
return player;
}
/**

View File

@ -3,6 +3,7 @@ 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.config.json.CoreSettings;
import com.ljsd.jieling.core.FunctionIdEnum;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.db.redis.RedisKey;
@ -24,6 +25,7 @@ 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.thrift.idl.CrossArenaManager;
import com.ljsd.jieling.util.ConfigurableApplicationContextManager;
import config.*;
import manager.STableManager;
import org.slf4j.Logger;
@ -283,26 +285,30 @@ public class CrossYuxulundaoLogic {
}
//其他服务器玩家
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(enemyId);
/*ArenaOfUser arenaOfUser = null;
try {
arenaOfUser = CrossServiceLogic.getInstance().query(enemyId);
} catch (Exception e) {
e.printStackTrace();
return null;
}*/
if (csPlayer == null) {
return null;
//throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);;
}
CrossArenaManager crossArenaManager = null;
/*CrossArenaManager crossArenaManager = null;
try {
//本服和其他服
crossArenaManager=PlayerLogic.getCrossArenaManager(csPlayer) ;
CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class);
if(csPlayer.getRpcIp().equals(coreSettings.getIp())&&csPlayer.getRpcPort() == coreSettings.getPort()){
int force1 = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_ONE, false);
int force2 = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_TWO, false);
int force3 = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.CROSS_YU_XU_LUN_DAO_THREE, false);
}else{
}
}catch (Exception e){
}
if(crossArenaManager == null){
return null;
}
}*/
String serverName = CrossServiceLogic.getInstance().getServerNameByUId(enemyId);
CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder()
@ -310,7 +316,7 @@ public class CrossYuxulundaoLogic {
.setLevel(csPlayer.getLevel())
.setName(csPlayer.getName())
.setServername(serverName)
.setTotalForce(crossArenaManager.getTotalForce())
.setTotalForce(csPlayer.getMaxFore()) //.setTotalForce(crossArenaManager.getTotalForce())
.setUserTitle(csPlayer.getUserTitle())
.setUserMount(csPlayer.getUserMount())
.setGender(csPlayer.getSex())
@ -356,7 +362,6 @@ public class CrossYuxulundaoLogic {
CommonProto.FightData fightDataProto2 = CommonProto.FightData.parseFrom(arenaRecord.getYxldFightData2());
CommonProto.FightData fightDataProto3 = CommonProto.FightData.parseFrom(arenaRecord.getYxldFightData3());
List<Integer> result = null;//
String myServerName = CrossServiceLogic.getInstance().getServerNameByUId(uid);
if (arenaRecord.getYxldResult() == null) {
result = new ArrayList<Integer>();
result.add(0);
@ -366,8 +371,13 @@ public class CrossYuxulundaoLogic {
result = Arrays.stream(arenaRecord.getYxldResult()).boxed().collect(Collectors.toList());
}
if(isSend){
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(uid);
CSPlayer defPlayer = CrossServiceLogic.getPlayerByRedis(arenaRecord.getDefUid());
String myServerName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(csPlayer.getServerId());
String defServerName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(defPlayer.getServerId());
return CommonProto.crossYxldPlayerRecordInfo.newBuilder().setTime(arenaRecord.getCreateTime())
.setMyServerName(myServerName==null?"":myServerName)
.setMyServerName(myServerName==null?"":myServerName)//我的服务器名称
.setServerName(defServerName) //对手的服务器名称
.setUid(arenaRecord.getAttackId())
.addAllResult(result)
.setMyScoreChange(arenaRecord.getYxldScoreChange())
@ -387,8 +397,6 @@ public class CrossYuxulundaoLogic {
.setUserName(arenaRecord.getUserName())
.setHeadFrame(arenaRecord.getHeadFrame())
.setPower(arenaRecord.getAttackForce()).setType(arenaRecord.getYxldBattleType()).build();
}
}
}

View File

@ -2,8 +2,10 @@ package com.ljsd.jieling.logic.fight;
import com.googlecode.protobuf.format.JsonFormat;
import com.ljsd.GameApplication;
import com.ljsd.fight.ArenaRecord;
import com.ljsd.fight.CheckFight;
import com.ljsd.fight.DefFightSnapData;
import com.ljsd.jieling.config.json.CoreSettings;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
@ -11,10 +13,12 @@ import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.handler.map.TrailHero;
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
import com.ljsd.jieling.logic.blood.BloodLogic;
import com.ljsd.jieling.logic.dao.Hero;
import com.ljsd.jieling.logic.dao.TeamPosHeroInfo;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.cross.CSPlayer;
import com.ljsd.jieling.logic.dao.gm.ArenaOfHero;
import com.ljsd.jieling.logic.dao.gm.ArenaOfHeroManager;
import com.ljsd.jieling.logic.dao.gm.ArenaOfUser;
@ -24,6 +28,12 @@ import com.ljsd.jieling.logic.fight.robot.RobotInfo;
import com.ljsd.jieling.logic.fight.specialparm.SpecialForTeamBuildEnum;
import com.ljsd.jieling.logic.hero.HeroAttributeEnum;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.thrift.idl.CrossArenaManager;
import com.ljsd.jieling.thrift.idl.PurpleMansionSeal;
import com.ljsd.jieling.thrift.idl.RPCRequestIFace;
import com.ljsd.jieling.thrift.pool.ClientAdapterPo;
import com.ljsd.jieling.util.ConfigurableApplicationContextManager;
import com.ljsd.jieling.util.FightDataUtil;
import com.ljsd.jieling.util.MonsterUtil;
import config.*;
@ -32,10 +42,7 @@ import org.luaj.vm2.LuaValue;
import rpc.protocols.CommonProto;
import util.TimeUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
public class FightUtil {
@ -658,5 +665,98 @@ public class FightUtil {
.setTeamPassiveList("")
.build();
}
public static CommonProto.FightTeamInfo makeCrossPersonData(int uid, int teamId, ArenaRecord arenaRecord)throws Exception{
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(uid);
if(csPlayer==null){
return null;//throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class);
List<CommonProto.FightUnitInfo> heroFightInfos = new ArrayList<>();
if(csPlayer.getRpcIp().equals(coreSettings.getIp()) && csPlayer.getRpcPort()== coreSettings.getPort()){
//本服玩家
User user = UserManager.getUser(uid);
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().getOrDefault(teamId,new ArrayList<>());
arenaRecord.setAttackForce(arenaRecord.getAttackForce()+HeroLogic.getInstance().calTeamTotalForce(user,teamId,false));
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos){
Hero hero = user.getHeroManager().getHeroMap().get(teamPosHeroInfo.getHeroId());
if (hero == null) {
continue;
}
StringBuilder propertySb = new StringBuilder();
String heroSkill = HeroLogic.getInstance().getCrossHeroSkillStr(user,hero).toString();
Map<Integer, Long> attributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false, teamId);
String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb,hero.getTemplateId(),hero.getLevel(user.getHeroManager()),attributeMap).toString();
CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo
.newBuilder()
.setUnitId(Integer.toString(hero.getTemplateId()))
.setUnitSkillIds(heroSkill.substring(0,heroSkill.length()-1))
.setProperty(property.substring(0, property.length()-1))
.setPosition(teamPosHeroInfo.getPosition())
.setStar(hero.getStar())
.setSkinId(hero.getSkin())
.build();
heroFightInfos.add(heroFightInfo);
}
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.addAllPokemonUnitList(HeroLogic.getInstance().getCrossPokemonSkills(user))
.setTeamPassiveList("")
.build();
}else{
//其他服玩家
//rpc 数据调用测试
String ip1 =csPlayer.getRpcIp();
int port1 = csPlayer.getRpcPort();
int uid1 = csPlayer.getUserId();
StringBuilder sb = new StringBuilder();
sb.append("RPCCORE").append("|")
.append(ip1).append("|")
.append(port1).toString();
ClientAdapterPo<RPCRequestIFace.Client> rPCClient1 = null;
rPCClient1 = ClientAdapterPo.getClientAdapterPo(sb.toString());
CrossArenaManager crossArenaManager= rPCClient1.getClient().getHeroManagerInfo(uid1);
if(crossArenaManager == null){
//LOGGER.info("hehhhhhhhhhhh");
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));
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());
if(hero == null){
continue;
}
StringBuilder propertySb = new StringBuilder();
String heroSkill = HeroLogic.getInstance().getCrossHeroSkillStr(seals,hero).toString();
Map<Integer, Long> attributeMap = crossArenaManager.getHeros().get(hero.getId()).getAttributeMapByTeam().get(teamId);
String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb,hero.getTemplateId(),hero.getLevel(),attributeMap).toString();
CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo
.newBuilder()
.setUnitId(Integer.toString(hero.getTemplateId()))
.setUnitSkillIds(heroSkill.substring(0,heroSkill.length()-1))
.setProperty(property.substring(0, property.length()-1))
.setPosition(teamPosHeroInfo.getPosition())
.setStar(hero.getStar())
.setSkinId(hero.getSkin())
.build();
heroFightInfos.add(heroFightInfo);
}
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.addAllPokemonUnitList(HeroLogic.getInstance().getCrossPokemonSkills(crossArenaManager))
.setTeamPassiveList("")
.build();
}
}
}

View File

@ -42,6 +42,7 @@ import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType;
import com.ljsd.jieling.logic.store.BuyGoodsNewLogic;
import com.ljsd.jieling.logic.store.newRechargeInfo.PushRechargeType;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.thrift.idl.CrossArenaManager;
import com.ljsd.jieling.tools.Utils;
import com.ljsd.jieling.util.CBean2Proto;
import com.ljsd.jieling.util.ItemUtil;
@ -1957,6 +1958,150 @@ public class HeroLogic{
return sb;
}
public StringBuilder getCrossHeroSkillStr(User user, Hero hero){
List<Integer> skillList = new ArrayList<>();
SCHero tempHero = SCHero.getsCHero().get(hero.getTemplateId());
List<Integer> skillListByStar = tempHero.getSkillListByStar(hero.getStar());
if(skillListByStar!=null){
skillList.addAll(skillListByStar);
}
// 大于10星,觉醒技
if (hero.getStar() > HERO_MAX_STAR) {
skillList.addAll(tempHero.getAwakSkills(1, hero.getBreakId()));
skillList.addAll(tempHero.getAwakSkills(2, hero.getStarBreakId()));
} else {
skillList.addAll(tempHero.getPassiveSkills(1, hero.getBreakId()));
skillList.addAll(tempHero.getPassiveSkills(2, hero.getStarBreakId()));
}
//魂印
Map<Integer, Integer> soulEquipByPositionMap = hero.getSoulEquipByPositionMap();
Map<Integer, SEquipConfig> config = STableManager.getConfig(SEquipConfig.class);
soulEquipByPositionMap.values().forEach(e->{
Arrays.stream(config.get(e).getPassiveSkill()).forEach(skillList::add);
});
//法宝技能
int[] equipTalismana = tempHero.getEquipTalismana();
if(equipTalismana.length>=1 &&hero.getStar()>=equipTalismana[0]){
int especialEquipLevel = hero.getEspecialEquipLevel();
int especialEquipId = equipTalismana[1];
Map<Integer,SEquipTalismana> sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId);
sEquipTalismana.forEach((k,v)->{
if(k<=especialEquipLevel&&v.getOpenSkillRules()!=null){
Arrays.stream(v.getOpenSkillRules()).forEach(i->skillList.add(i));
}
});
}
// 紫府神印技能
Collection<PurpleMansionSeal> seals = user.getHeroManager().getPurpleMansionSeal().values();
seals.forEach(v->{
// 使用中神印
if (v.getState() == 1){
// 附身神印
if (v.getType() == 1){
if (v.getSubId().equals(hero.getId())){
getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList);
}
}
// 通用神印
else {
getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList);
}
}
});
StringBuilder sb = new StringBuilder();
coverSkill(skillList);
for(int i=0;i<skillList.size();i++){
Integer skill = skillList.get(i);
if(i<2){
sb.append(skill).append(DIVISION);
continue;
}
SPassiveSkillLogicConfig config1 = SPassiveSkillLogicConfig.getConfig(skill);
if(config1!=null &&config1.getEffectiveRange()==1){
sb.append(skill).append(DIVISION);
}
}
return sb;
}
public StringBuilder getCrossHeroSkillStr(Collection<com.ljsd.jieling.thrift.idl.PurpleMansionSeal> seals, com.ljsd.jieling.thrift.idl.ArenaOfHero hero){
List<Integer> skillList = new ArrayList<>();
SCHero tempHero = SCHero.getsCHero().get(hero.getTemplateId());
List<Integer> skillListByStar = tempHero.getSkillListByStar(hero.getStar());
if(skillListByStar!=null){
skillList.addAll(skillListByStar);
}
// 大于10星,觉醒技
if (hero.getStar() > HERO_MAX_STAR) {
skillList.addAll(tempHero.getAwakSkills(1, hero.getBreakId()));
skillList.addAll(tempHero.getAwakSkills(2, hero.getStarBreakId()));
} else {
skillList.addAll(tempHero.getPassiveSkills(1, hero.getBreakId()));
skillList.addAll(tempHero.getPassiveSkills(2, hero.getStarBreakId()));
}
//魂印
Map<Integer, Integer> soulEquipByPositionMap = hero.getSoulEquipByPositionMap();
Map<Integer, SEquipConfig> config = STableManager.getConfig(SEquipConfig.class);
soulEquipByPositionMap.values().forEach(e->{
Arrays.stream(config.get(e).getPassiveSkill()).forEach(skillList::add);
});
//法宝技能
int[] equipTalismana = tempHero.getEquipTalismana();
if(equipTalismana.length>=1 &&hero.getStar()>=equipTalismana[0]){
int especialEquipLevel = hero.getEspecialEquipLevel();
int especialEquipId = equipTalismana[1];
Map<Integer,SEquipTalismana> sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId);
sEquipTalismana.forEach((k,v)->{
if(k<=especialEquipLevel&&v.getOpenSkillRules()!=null){
Arrays.stream(v.getOpenSkillRules()).forEach(i->skillList.add(i));
}
});
}
// 紫府神印技能
//Collection<PurpleMansionSeal> seals = user.getHeroManager().getPurpleMansionSeal().values();
seals.forEach(v->{
// 使用中神印
if (v.getState() == 1){
// 附身神印
if (v.getType() == 1){
if (v.getSubId().equals(hero.getId())){
getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList);
}
}
// 通用神印
else {
getPurpleMansionSealSkill(v.getSealId(),tempHero,skillList);
}
}
});
StringBuilder sb = new StringBuilder();
coverSkill(skillList);
for(int i=0;i<skillList.size();i++){
Integer skill = skillList.get(i);
if(i<2){
sb.append(skill).append(DIVISION);
continue;
}
SPassiveSkillLogicConfig config1 = SPassiveSkillLogicConfig.getConfig(skill);
if(config1!=null &&config1.getEffectiveRange()==1){
sb.append(skill).append(DIVISION);
}
}
return sb;
}
/**
* 获取紫府神印技能
* @param sealId
@ -2148,6 +2293,61 @@ public class HeroLogic{
return pokemonInfos;
}
public List<CommonProto.FightUnitInfo> getCrossPokemonSkills(CrossArenaManager crossArenaManager){
//todo 灵兽
Map<Integer, com.ljsd.jieling.thrift.idl.Pokemon> pokemons = crossArenaManager.getPokemons();
List<CommonProto.FightUnitInfo> pokemonInfos = new ArrayList<>();
for(Map.Entry<Integer, com.ljsd.jieling.thrift.idl.Pokemon> entry:pokemons.entrySet()){
com.ljsd.jieling.thrift.idl.Pokemon pokemon = entry.getValue();
if(pokemon==null){
continue;
}
SSpiritAnimalSkill sSpiritAnimalSkill = SSpiritAnimalSkill.skillByAnimalAndStar.get(pokemon.getTmpId()).get(pokemon.getStar());
Map<Integer, Integer> map = calOnePokemonAttribute(pokemon.getTmpId(),pokemon.getStar(),pokemon.getLevel());
StringBuilder propertyBuilder = getOnePokemonProperty(map,pokemon.getLevel());
CommonProto.FightUnitInfo info = CommonProto.FightUnitInfo.newBuilder()
.setPosition(entry.getKey())
.setStar(pokemon.getStar())
.setProperty(propertyBuilder.toString())
.setUnitId(String.valueOf(pokemon.getTmpId())).setUnitSkillIds(String.valueOf(sSpiritAnimalSkill.getId())).build();
pokemonInfos.add(info);
}
return pokemonInfos;
}
public List<CommonProto.FightUnitInfo> getCrossPokemonSkills(User user){
//todo 灵兽
// 灵兽
Map<Integer,Pokemon> pokemons = new HashMap<>();
Map<String, Pokemon> pokemonMap = user.getPokemonManager().getPokemonMap();
Map<Integer, String> teamMap = user.getPokemonManager().getPokemonTeamMap();
for (Map.Entry<Integer, String> entry : teamMap.entrySet()) {
// clone 深度复制
Pokemon pokemon = (Pokemon)pokemonMap.get(entry.getValue()).clone();
pokemons.put(entry.getKey(),pokemon);
}
//Map<Integer, Pokemon> pokemons = user.getPokemons();
List<CommonProto.FightUnitInfo> pokemonInfos = new ArrayList<>();
for(Map.Entry<Integer,Pokemon> entry:pokemons.entrySet()){
Pokemon pokemon = entry.getValue();
if(pokemon==null){
continue;
}
SSpiritAnimalSkill sSpiritAnimalSkill = SSpiritAnimalSkill.skillByAnimalAndStar.get(pokemon.getTmpId()).get(pokemon.getStar());
Map<Integer, Integer> map = calOnePokemonAttribute(pokemon.getTmpId(),pokemon.getStar(),pokemon.getLevel());
StringBuilder propertyBuilder = getOnePokemonProperty(map,pokemon.getLevel());
CommonProto.FightUnitInfo info = CommonProto.FightUnitInfo.newBuilder()
.setPosition(entry.getKey())
.setStar(pokemon.getStar())
.setProperty(propertyBuilder.toString())
.setUnitId(String.valueOf(pokemon.getTmpId())).setUnitSkillIds(String.valueOf(sSpiritAnimalSkill.getId())).build();
pokemonInfos.add(info);
}
return pokemonInfos;
}
public String getPokenmonPassiveSkills(User user,int teamId){
//todo 灵兽 目前用不到

View File

@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.player;
import com.ljsd.GameApplication;
import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig;
import com.ljsd.jieling.config.clazzStaticCfg.TaskStaticConfig;
import com.ljsd.jieling.config.json.CoreSettings;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.core.VipPrivilegeType;
import com.ljsd.jieling.dataReport.reportBeans_37.ChatContentType;
@ -881,7 +882,76 @@ public class PlayerLogic {
}
//获取跨服玩家信息
public CommonProto.TeamOneInfo getCrossYxldMyTeamInfo(User user,List<Integer> team) throws Exception{
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(user.getId());
if(csPlayer==null){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
}
//基本信息从redis中拿 剩下的队伍 属性 数据量大的数据rpc调用
String serverName = CrossDeathPathLogic.getInstance().getServerNameByDeathPath(csPlayer.getServerId());
CommonProto.TeamOneInfo.Builder builder = CommonProto.TeamOneInfo.newBuilder()
.setHead(csPlayer.getHead())
.setHeadFrame(csPlayer.getHeadFrame())
.setUserTitle(csPlayer.getUserTitle())
.setLevel(csPlayer.getLevel())
.setName(csPlayer.getName())
.setGuildName("nb guild") //csPlayer.getGuildName()
.setPracticeLevel(csPlayer.getPracticeLevel())
.setUid(user.getId()).setCrossTeamScore(csPlayer.getCrossYuxulundaoNewScore())
.setServerName(serverName);
for(int teamId: team){
CommonProto.TeamOneTeamInfo.Builder teamOneTeamInfo = CommonProto.TeamOneTeamInfo.newBuilder();
List<TeamPosHeroInfo> teamPosHeroInfos =user.getTeamPosManager().getTeamPosForHero().getOrDefault(teamId,new ArrayList<>());
if(teamPosHeroInfos!=null){
for (TeamPosHeroInfo heroInfo:teamPosHeroInfos){
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
Hero hero = heroMap.get(heroInfo.getHeroId());
if(hero == null){
continue;
}
teamOneTeamInfo.addTeam(CommonProto.TeamSimpleInfo.newBuilder()
.setHeroid(hero.getId())
.setHeroTid(hero.getTemplateId())
.setLevel(hero.getLevel(user.getHeroManager()))
.setStar(hero.getStar())
.setPosition(heroInfo.getPosition())
.setSkinId(hero.getSkin())
.build());
}
}
// 灵兽
Map<Integer,Pokemon> pokemons = new HashMap<>();
Map<String, Pokemon> pokemonMap = user.getPokemonManager().getPokemonMap();
Map<Integer, String> teamMap = user.getPokemonManager().getPokemonTeamMap();
for (Map.Entry<Integer, String> entry : teamMap.entrySet()) {
// clone 深度复制
Pokemon pokemon = (Pokemon)pokemonMap.get(entry.getValue()).clone();
pokemon.setTmpId(pokemon.getTmpId());
pokemon.setId(pokemon.getId());
pokemon.setLevel(pokemon.getLevel());
pokemon.setStar(pokemon.getStar());
teamOneTeamInfo.addPokemonInfos(CBean2Proto.getSimpleTeamInfoByPokeMon(pokemon, entry.getKey()));
}
//LOGGER.info("=====================跨服获取阵容:{}",teamId);
Integer integer = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false);
teamOneTeamInfo.setTotalForce(integer);
for(Map.Entry<Integer, PurpleMansionSeal> entry:user.getHeroManager().getPurpleMansionSeal().entrySet()){
PurpleMansionSeal value = entry.getValue();
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
Hero hero = heroMap.get(value.getSubId());
if(value.getState()==0){
continue;
}
teamOneTeamInfo.addSealShow(CommonProto.PurpleSealShowInfo.newBuilder().setType(value.getType()).
setId(value.getSealId()).setHeroTId(hero==null?0:hero.getTemplateId()));
}
//builder.setTeam(teamOneTeamInfo.build());
builder.addCrossTeam(teamOneTeamInfo.build());
}
return builder.build();
}
//获取跨服玩家信息
public CommonProto.TeamOneInfo getCrossYxldOneTeamInfo(int id,List<Integer> team) throws Exception {
CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(id);
@ -901,7 +971,11 @@ public class PlayerLogic {
.setUid(id).setCrossTeamScore(csPlayer.getCrossYuxulundaoNewScore())
.setServerName(serverName);
//rpc调用队伍信息
CoreSettings coreSettings = ConfigurableApplicationContextManager.getBean(CoreSettings.class);
if(csPlayer.getRpcIp().equals(coreSettings.getIp()) && csPlayer.getRpcPort()== coreSettings.getPort()){
User user = UserManager.getUser(id);
return PlayerLogic.getInstance().getCrossYxldMyTeamInfo(user, team);
}
//rpc 数据调用测试
String ip1 =csPlayer.getRpcIp();
int port1 = csPlayer.getRpcPort();

View File

@ -31,8 +31,8 @@ import java.util.function.BiConsumer;
*/
public abstract class AbstractRank implements IRank {
protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractRank.class);
protected String redisKey;
protected int type;
protected String redisKey;
/**
* 获取排行榜数据,包括个人的排名和所有人的信息,获取调用此方法

View File

@ -8,6 +8,7 @@ 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.gm.ArenaOfUser;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.family.CrossDeathPathLogic;
@ -81,10 +82,31 @@ public class CrossYuXuLunDaoRank extends AbstractRank{
.setParam1(query.getHeroManager().getTotalForce())
.setParam2(getParam2(data.getScore()))
.setParam3(getParam3(data.getScore()));
CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(query,everyRankInfo);
//CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(query,everyRankInfo);
CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(Integer.valueOf(data.getValue()),everyRankInfo);
builder.addRanks(everyRank);
}
}
public static CommonProto.UserRank.Builder getCrossOneUserRank(int uid , CommonProto.RankInfo.Builder everyRankInfo){
String serverName = CrossServiceLogic.getInstance().getServerNameByUId(uid);
CSPlayer player = CrossServiceLogic.getPlayerByRedis(uid);
return CommonProto.UserRank.newBuilder()
.setUid(player.getUserId())
.setLevel(player.getLevel())
.setUserName(player.getName())
.setRankInfo(everyRankInfo)
.setForce(player.getMaxFore())
.setSex(player.getSex())
.setHead(player.getHead())
.setGuildName("")
.setHeadFrame(player.getHeadFrame())
.setUserMount(player.getUserMount())
.setUserSkin(player.getSkin())
.setUserTitle(player.getUserTitle())
.setPracticeLevel(player.getPracticeLevel())
.setServerName(serverName)
.setCrossScore(player.getCrossYuxulundaoNewScore());
}
@Override
public void getCrossMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){