Task 【ID1005460】 【玩法需求】猎妖之路

back_recharge
zhangshanxue 2020-02-13 16:13:21 +08:00
parent 38e9e4d5f9
commit da2943dd9a
2 changed files with 62 additions and 8 deletions

View File

@ -5,26 +5,24 @@ import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.dao.ExpeditionNodeInfo;
import com.ljsd.jieling.logic.dao.SnapFightInfo;
import com.ljsd.jieling.logic.dao.TeamPosHeroInfo;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.expedition.ExpeditionLogic;
import com.ljsd.jieling.logic.fight.DefFightSnapData;
import com.ljsd.jieling.logic.fight.FightUtil;
import com.ljsd.jieling.logic.hero.HeroAttributeEnum;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.Expedition;
import com.ljsd.jieling.protocols.FightInfoProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.util.MessageUtil;
import config.SExpeditionHolyConfig;
import config.SExpeditionSetting;
import manager.STableManager;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
* Description:
@ -91,7 +89,7 @@ public class StartExpeditionBattleRequest extends BaseHandler<Expedition.StartEx
MessageUtil.sendIndicationMessage(iSession, 1, MessageTypeProto.MessageType.EXPEDITION_NOINFO_INDICATION_VALUE, builder.build(), true);
//notify client
CommonProto.FightTeamInfo fightTeamInfo = FightUtil.makePersonFightDataWithDouble(inMem,teamId,user.getExpeditionManager().getHeroHP());
CommonProto.FightTeamInfo fightTeamInfo = getFightTeamInfoWithDouble(inMem,teamId,user.getExpeditionManager().getHeroHP());
SnapFightInfo deffightInfo = nodeInfo.getSnapFightInfo();
CommonProto.FightTeamInfo deffightTeamInfo = FightUtil.makeFightBySnapDataWithDouble(new DefFightSnapData(deffightInfo.getHeroAttribute(),deffightInfo.getHeroSkills(),deffightInfo.getPokenmonSkills(),deffightInfo.getPassiveSkills()),nodeInfo.getBossHP());
@ -100,6 +98,9 @@ public class StartExpeditionBattleRequest extends BaseHandler<Expedition.StartEx
String key = RedisKey.getKey(RedisKey.CHALLENGE_EXPEDITION_INFO, String.valueOf(iSession.getUid()), false);
RedisUtil.getInstence().set(key, fightInfo, -1);
FightInfoProto.FightStartResponse.Builder fightStartResponse = FightInfoProto.FightStartResponse.newBuilder();
fightStartResponse.setFightData(CommonProto.FightData.newBuilder()
.setFightMaxTime(maxTime)
@ -109,4 +110,52 @@ public class StartExpeditionBattleRequest extends BaseHandler<Expedition.StartEx
.build());
MessageUtil.sendMessage(iSession, 1,MessageTypeProto.MessageType.EXPEDITION_START_BATTLE_RESONSE_VALUE, fightStartResponse.build(), true);
}
public CommonProto.FightTeamInfo getFightTeamInfoWithDouble(User user, int teamId, Map<String, Double> attackBloodMap) {
user.getTeamPosManager().setCurTeamPosId(teamId);
List<CommonProto.FightUnitInfo> heroFightInfos = new ArrayList<>();
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId);
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) {
Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId());
if (hero == null) {
continue;
}
Map<Integer, Integer> heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false, teamId);
if(null!=attackBloodMap&&attackBloodMap.containsKey(teamPosHeroInfo.getHeroId())){
heroAttributeMap.put(HeroAttributeEnum.CurHP.getPropertyId(),(int)(attackBloodMap.getOrDefault(teamPosHeroInfo.getHeroId(),1d)*heroAttributeMap.get(HeroAttributeEnum.Hp.getPropertyId())));
}
StringBuilder skillSb = new StringBuilder();
StringBuilder propertySb = new StringBuilder();
String heroSkill = HeroLogic.getInstance().getHeroSkills(user,hero,skillSb).toString();
String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb, hero, heroAttributeMap).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))
.build();
heroFightInfos.add(heroFightInfo);
}
//TOO 添加被动技能
String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, teamId);
ExpeditionManager expeditionManager = user.getExpeditionManager();
Set<SExpeditionHolyConfig> expeditionHolyConfigs = ExpeditionLogic.getFirstRankHoly(expeditionManager);
StringBuilder passiveSkillResult = new StringBuilder();
if(pokenmonPassiveSkills.length()!=0){
passiveSkillResult.append("|");
}
for (SExpeditionHolyConfig config:expeditionHolyConfigs) {
passiveSkillResult.append(String.valueOf(config.getPassiveSkillId())).append("|");
}
String holySkill = passiveSkillResult.length()!=0?passiveSkillResult.substring(0,passiveSkillResult.length()-1):"";
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user,teamId))
.setTeamPassiveList(pokenmonPassiveSkills+holySkill)
.build();
}
}

View File

@ -47,6 +47,7 @@ public class User {
private BloodyInfo bloodyInfo;
private MainLevelManager mainLevelManager;
private ExpeditionManager expeditionManager;
//TODO 新增manager 需要兼容旧的数据 提前判null
//构造函数必须要声明否则从mongodb读出来反编译成类不通过
public User(){
@ -200,6 +201,10 @@ public class User {
}
public ExpeditionManager getExpeditionManager() {
if(null ==expeditionManager){
this.expeditionManager = new ExpeditionManager();
this.expeditionManager.init(id,MongoKey.expeditionManager);
}
return expeditionManager;
}