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.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.handler.BaseHandler; import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.dao.ExpeditionNodeInfo; import com.ljsd.jieling.logic.dao.*;
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.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.expedition.ExpeditionLogic; import com.ljsd.jieling.logic.expedition.ExpeditionLogic;
import com.ljsd.jieling.logic.fight.DefFightSnapData; import com.ljsd.jieling.logic.fight.DefFightSnapData;
import com.ljsd.jieling.logic.fight.FightUtil; 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.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.Expedition; import com.ljsd.jieling.protocols.Expedition;
import com.ljsd.jieling.protocols.FightInfoProto; import com.ljsd.jieling.protocols.FightInfoProto;
import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.util.MessageUtil; import com.ljsd.jieling.util.MessageUtil;
import config.SExpeditionHolyConfig;
import config.SExpeditionSetting; import config.SExpeditionSetting;
import manager.STableManager; import manager.STableManager;
import java.util.HashSet; import java.util.*;
import java.util.List;
import java.util.Set;
/** /**
* Description: * 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); MessageUtil.sendIndicationMessage(iSession, 1, MessageTypeProto.MessageType.EXPEDITION_NOINFO_INDICATION_VALUE, builder.build(), true);
//notify client //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(); SnapFightInfo deffightInfo = nodeInfo.getSnapFightInfo();
CommonProto.FightTeamInfo deffightTeamInfo = FightUtil.makeFightBySnapDataWithDouble(new DefFightSnapData(deffightInfo.getHeroAttribute(),deffightInfo.getHeroSkills(),deffightInfo.getPokenmonSkills(),deffightInfo.getPassiveSkills()),nodeInfo.getBossHP()); 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); String key = RedisKey.getKey(RedisKey.CHALLENGE_EXPEDITION_INFO, String.valueOf(iSession.getUid()), false);
RedisUtil.getInstence().set(key, fightInfo, -1); RedisUtil.getInstence().set(key, fightInfo, -1);
FightInfoProto.FightStartResponse.Builder fightStartResponse = FightInfoProto.FightStartResponse.newBuilder(); FightInfoProto.FightStartResponse.Builder fightStartResponse = FightInfoProto.FightStartResponse.newBuilder();
fightStartResponse.setFightData(CommonProto.FightData.newBuilder() fightStartResponse.setFightData(CommonProto.FightData.newBuilder()
.setFightMaxTime(maxTime) .setFightMaxTime(maxTime)
@ -109,4 +110,52 @@ public class StartExpeditionBattleRequest extends BaseHandler<Expedition.StartEx
.build()); .build());
MessageUtil.sendMessage(iSession, 1,MessageTypeProto.MessageType.EXPEDITION_START_BATTLE_RESONSE_VALUE, fightStartResponse.build(), true); 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 BloodyInfo bloodyInfo;
private MainLevelManager mainLevelManager; private MainLevelManager mainLevelManager;
private ExpeditionManager expeditionManager; private ExpeditionManager expeditionManager;
//TODO 新增manager 需要兼容旧的数据 提前判null
//构造函数必须要声明否则从mongodb读出来反编译成类不通过 //构造函数必须要声明否则从mongodb读出来反编译成类不通过
public User(){ public User(){
@ -200,6 +201,10 @@ public class User {
} }
public ExpeditionManager getExpeditionManager() { public ExpeditionManager getExpeditionManager() {
if(null ==expeditionManager){
this.expeditionManager = new ExpeditionManager();
this.expeditionManager.init(id,MongoKey.expeditionManager);
}
return expeditionManager; return expeditionManager;
} }