Task【ID1006213】【新战斗版本】大闹天宫(猎妖之路功能优化)

back_recharge
zhangshanxue 2020-05-22 05:13:25 +08:00
parent a6767eb7bf
commit 094d64f8ad
16 changed files with 493 additions and 148 deletions

View File

@ -35,7 +35,7 @@ public class CommonStaticConfig extends AbstractClassStaticConfig {
public Map<Integer, List<int[]>> matrixforGroupInfo;
public Map<Integer, Map<Integer,Integer>> type2lay2weight;
public Map<Integer,Map<Integer, Map<Integer,Integer>>> type2lay2weight;
public Map<Integer, Integer> leve2num;//阶段第一层
public Map<Integer, Set<Integer>> leve2ids;//ids
public Map<Integer,Map<Integer,Integer>> type2holy2weight;
@ -204,9 +204,11 @@ public class CommonStaticConfig extends AbstractClassStaticConfig {
int layid = sExpeditionFloorConfig.getId();
int[][] randomNode = sExpeditionFloorConfig.getRandomNode();
for (int[] aRandomNode : randomNode) {
Map<Integer, Integer> orDefault = type2lay2weight.getOrDefault(aRandomNode[0], new HashMap<>());
Map<Integer, Map<Integer, Integer>> orDefault1 = type2lay2weight.getOrDefault(sExpeditionFloorConfig.getFloor(), new HashMap<>());
Map<Integer, Integer> orDefault = orDefault1.getOrDefault(aRandomNode[0], new HashMap<>());
orDefault.put(layid, aRandomNode[1]);
type2lay2weight.put(aRandomNode[0], orDefault);
orDefault1.put(aRandomNode[0], orDefault);
type2lay2weight.put(sExpeditionFloorConfig.getFloor(),orDefault1);
}
leve2num.put(sExpeditionFloorConfig.getFloor(),integer);
@ -340,8 +342,8 @@ public class CommonStaticConfig extends AbstractClassStaticConfig {
return sWorkTechMapByTechIdAndLevelTmp.get(techId).get(level);
}
public Map<Integer, Map<Integer, Integer>> getType2lay2weight() {
return type2lay2weight;
public Map<Integer, Map<Integer, Integer>> getType2lay2weight(int floor) {
return type2lay2weight.getOrDefault(floor,new HashMap<>());
}
public Map<Integer, Integer> getType2holy2weight(int type) {

View File

@ -40,7 +40,7 @@ public class EndConfirmExpeditionBattleRequestHandler extends BaseHandler<Expedi
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.EXPEDITION_END_BATTLE_REQUEST;
return null;
}
@Override
@ -126,12 +126,15 @@ public class EndConfirmExpeditionBattleRequestHandler extends BaseHandler<Expedi
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId);
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) {
Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId());
if (hero == null) {
Hero herotemp = user.getExpeditionManager().getHero(teamPosHeroInfo.getHeroId());
if (hero == null&&herotemp==null) {
continue;
}
user.getExpeditionManager().getHeroHPWithChange().put(hero.getId(), 0d);
ids.add(hero.getId());
}
//出队伍
user.getTeamPosManager().updateTeamPosByTeamId(1001,new LinkedList<>());

View File

@ -101,14 +101,16 @@ public class EndExpeditionBattleRequest extends BaseHandler<Expedition.EndExpedi
}
String holySkill = passiveSkillResult.length()!=0?passiveSkillResult.substring(0,passiveSkillResult.length()-1):"";
CommonProto.FightTeamInfo deffightTeamInfo;
LuaValue getFightData;
if(ExpeditionLogic.isHardNode(nodeInfo.getType())){
int tid = deffightInfo.getUid();
deffightTeamInfo= ExpeditionLogic.getGropFightTeamInfoWithDouble(tid,nodeInfo.getBossHP());
List<CommonProto.FightTeamInfo> gropFightTeamInfoWithDouble = ExpeditionLogic.getGropFightTeamInfoWithDouble(tid, nodeInfo.getBossHP());
getFightData = FightDataUtil.getFinalFightData(fightTeamInfo, gropFightTeamInfoWithDouble);
}else {
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());
getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo);
}
LuaValue getFightData = FightDataUtil.getFinalPlayerFightData(fightTeamInfo, deffightTeamInfo);
LuaValue getOptionData = FightDataUtil.getOptionData("");
int[] checkResult = CheckFight.getInstance().checkFight(seed, maxTime, getFightData, getOptionData, GameFightType.Expediton.getFightType());
@ -140,7 +142,8 @@ public class EndExpeditionBattleRequest extends BaseHandler<Expedition.EndExpedi
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId);
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) {
Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId());
if (hero == null) {
Hero herotemp = user.getExpeditionManager().getHero(teamPosHeroInfo.getHeroId());
if (hero == null&&herotemp==null) {
continue;
}
user.getExpeditionManager().getHeroHPWithChange().put(hero.getId(), 0d);
@ -149,10 +152,18 @@ public class EndExpeditionBattleRequest extends BaseHandler<Expedition.EndExpedi
//出队伍
user.getTeamPosManager().updateTeamPosByTeamId(1001,new LinkedList<>());
//节点血量更新
nodeInfo.getSnapFightInfo().getHeroAttribute().forEach((s, familyHeroInfo) ->
nodeInfo.getBossHP().put(s, (double) remainHp.remove(0) / (double) familyHeroInfo.getAttribute().get(HeroAttributeEnum.CurHP.getPropertyId()))
);
if(ExpeditionLogic.isHardNode(nodeInfo.getType())){
//节点血量更新
nodeInfo.getSnapFightInfo().getHeroAttribute().forEach((s, familyHeroInfo) ->
nodeInfo.getBossHP().put(s, (double) remainHp.remove(0) / (double) familyHeroInfo.getAttribute().get(HeroAttributeEnum.CurHP.getPropertyId()))
);
}else {
//节点血量更新
nodeInfo.getSnapFightInfo().getHeroAttribute().forEach((s, familyHeroInfo) ->
nodeInfo.getBossHP().put(s, (double) remainHp.remove(0) / (double) familyHeroInfo.getAttribute().get(HeroAttributeEnum.CurHP.getPropertyId()))
);
}
//更新节点
Expedition.ExpeditionNodeInfoIndication.Builder builder = Expedition.ExpeditionNodeInfoIndication.newBuilder();
@ -172,8 +183,6 @@ public class EndExpeditionBattleRequest extends BaseHandler<Expedition.EndExpedi
return;
} else {
//节点血量更新
nodeInfo.getSnapFightInfo().getHeroAttribute().forEach((s, familyHeroInfo) ->
nodeInfo.getBossHP().put(s, 0d)
@ -184,9 +193,13 @@ public class EndExpeditionBattleRequest extends BaseHandler<Expedition.EndExpedi
Iterator<TeamPosHeroInfo> iterator = teamPosHeroInfos.iterator();
while (iterator.hasNext()){
TeamPosHeroInfo teamPosHeroInfo = iterator.next();
Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId());
if (hero == null) {
continue;
Hero hero = user.getExpeditionManager().getHero(teamPosHeroInfo.getHeroId());
if (hero==null) {
hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId());
}
if (hero==null) {
continue;
}
Map<Integer, Integer> heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false, teamId);
double remain = remainHp.remove(0);
@ -216,7 +229,13 @@ public class EndExpeditionBattleRequest extends BaseHandler<Expedition.EndExpedi
if (sExpeditionNodeConfig == null) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sExpeditionNodeConfig.getreward(),1,0,BIReason.EXPEDITION_DROP_REWARD);
CommonProto.Drop.Builder drop;
if(sExpeditionNodeConfig.getreward()!=null){
drop = ItemUtil.drop(user, sExpeditionNodeConfig.getreward(),1,0,BIReason.EXPEDITION_DROP_REWARD);
}else {
drop = CommonProto.Drop.newBuilder();
}
//试炼和贪婪节点胜利直接通过
if (ExpeditionLogic.isHardNode(nodeInfo.getType())) {
//updata node
@ -242,7 +261,7 @@ public class EndExpeditionBattleRequest extends BaseHandler<Expedition.EndExpedi
if(hero==null){
throw new ErrorCodeException("试炼节点英雄掉落失败");
}
Hero hero1 = ExpeditionLogic.createHero(i, uid, hero);
Hero hero1 = ExpeditionLogic.createHero(i, uid, hero,false);
drop.addHero(CBean2Proto.getHero(hero1));
}

View File

@ -5,19 +5,24 @@ import com.ljsd.jieling.core.HandlerLogicThread;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.dao.ExpeditionManager;
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.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.Expedition;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.CBean2Proto;
import com.ljsd.jieling.util.MessageUtil;
import config.SExpeditionSetting;
import config.SGlobalSystemConfig;
import manager.STableManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Description:
* Author: zsx
@ -37,27 +42,15 @@ public class GetExpeditionRequestHandler extends BaseHandler<Expedition.GetExped
User user = UserManager.getUser(iSession.getUid());
ExpeditionManager manager = user.getExpeditionManager();
if(leve!=manager.getExpeditionLeve()&&(manager.getExpeditionLeve()!=-1)){
throw new ErrorCodeException("阶段不正确 current"+manager.getExpeditionLeve());
}
SExpeditionSetting sExpeditionSetting = STableManager.getConfig(SExpeditionSetting.class).get(1);
if(sExpeditionSetting == null){
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
int[][] fourthOpenRule = sExpeditionSetting.getFourthOpenRule();
//check 困难模式是否开启
// if(!(manager.getPassTimes()==-1||manager.getPassTimes()>=fourthOpenRule[0][1]||user.getPlayerInfoManager().getMaxForce()>=fourthOpenRule[1][1])){
// throw new ErrorCodeException("阶段不正确 current"+manager.getExpeditionLeve());
// }
Expedition.GetExpeditionResponse.Builder builder = Expedition.GetExpeditionResponse.newBuilder();
if(manager.getExpeditionNodeInfos().size()==0){
manager.setExpeditionLeve(leve);
manager.setLay(1);
@ -70,6 +63,26 @@ public class GetExpeditionRequestHandler extends BaseHandler<Expedition.GetExped
builder.addAllHeroInfo(ExpeditionLogic.getInstance().getAllHeroInfo(user));
builder.addAllNodeInfo(ExpeditionLogic.getInstance().getNodeInfo(user));
builder.addAllEquipIds(ExpeditionLogic.getInstance().getEquipnfo(user));
List<CommonProto.Hero> heroList = new ArrayList<>();
Map<String, Hero> heroMap = user.getExpeditionManager().getHeroMap();
for(Hero hero : heroMap.values()){
heroList.add(CBean2Proto.getHero(hero));
}
builder.addAllHeroList(heroList);
Map<String, PropertyItem> equipMap = user.getExpeditionManager().getEquipMap();
List<CommonProto.Equip> equipList = new ArrayList<>();
for(PropertyItem equipInfo: equipMap.values()){
if(equipInfo instanceof Equip)
equipList.add(CBean2Proto.getEquipProto(equipInfo));
}
builder.addAllEquip(equipList);
List<CommonProto.Equip> soulEquipList = new ArrayList<>();
for(PropertyItem equipInfo: equipMap.values()){
if(equipInfo instanceof Jewel)
soulEquipList.add(CBean2Proto.getEquipProto(equipInfo));
}
builder.addAllEquip(soulEquipList);
}
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.EXPEDITION_GET_EXPEDITION_RESONSE_VALUE, builder.build(), true);
}

View File

@ -18,10 +18,7 @@ import config.*;
import manager.STableManager;
import util.StringUtil;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -48,13 +45,10 @@ public class HeroNodeGetInfoRequestHandler extends BaseHandler<Expedition.HeroNo
throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点不存在"));
}
ExpeditionNodeInfo nodeInfo = user.getExpeditionManager().getExpeditionNodeInfos().get(nodeId);
if (!ExpeditionLogic.isBattleNode( nodeInfo.getType())) {
if (nodeInfo.getType() != ExpeditionLogic.NODETYPE_HERO_GET) {
throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点类型不符"+nodeInfo.getType()));
}
if (nodeInfo.getState() != ExpeditionLogic.NODETYPE_HERO_GET) {
throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点状态不正确"+nodeInfo.getState()));
}
//check node
List<Integer> nextNodeId = ExpeditionLogic.getNextNodeId(user.getExpeditionManager().getSortid(),user.getExpeditionManager().getExpeditionNodeInfos().size());
if(!nextNodeId.contains(nodeId)){
@ -75,43 +69,30 @@ public class HeroNodeGetInfoRequestHandler extends BaseHandler<Expedition.HeroNo
int recruitTime = sExpeditionSetting.getRecruitTime();
// int poolId = sExpeditionNodeConfig.getPoolId();
// Set<Integer> tempIdcfgs = ExpeditionLogic.getRandomTid(poolId,recruitTime);
// Set<Integer> cls = new HashSet<>();
// Set<Integer> collect = tempIdcfgs.stream().filter(integer -> {
// SExpeditionRecruitConfig sExpeditionRecruitConfig = STableManager.getConfig(SExpeditionRecruitConfig.class).get(tempId);
// if(sExpeditionRecruitConfig==null){
// return false;
// }
// int heroId = sExpeditionRecruitConfig.getHeroId();
// SCHero scHero = SCHero.getsCHero().get(heroId);
// scHero.getPropertyName();
// }
//
// }).collect(Collectors.toSet());
Map<String, Hero> heroMapTemp = user.getExpeditionManager().getHeroMapTemp();
if(heroMapTemp.size()==0){
SExpeditionRecruitConfig sExpeditionRecruitConfig = STableManager.getConfig(SExpeditionRecruitConfig.class).get(sExpeditionNodeConfig.getPoolId());
if(sExpeditionRecruitConfig!=null) {
int i = sExpeditionRecruitConfig.getHeroId();
//获取最大战力hero
String maxforceHero = user.getPlayerInfoManager().getMaxforceHero();
if (StringUtil.isEmpty(maxforceHero)) {
HeroLogic.getInstance().calTeamTotalForce(user, 1, false);
maxforceHero = user.getPlayerInfoManager().getMaxforceHero();
}
Hero hero = user.getHeroManager().getHeroMap().get(maxforceHero);
if (hero == null) {
throw new ErrorCodeException("试炼节点英雄掉落失败");
}
SExpeditionRecruitConfig sExpeditionRecruitConfig = STableManager.getConfig(SExpeditionRecruitConfig.class).get(0);
if(sExpeditionRecruitConfig!=null) {
int i = sExpeditionRecruitConfig.getgetHero();
//获取最大战力hero
String maxforceHero = user.getPlayerInfoManager().getMaxforceHero();
if (StringUtil.isEmpty(maxforceHero)) {
HeroLogic.getInstance().calTeamTotalForce(user, 1, false);
maxforceHero = user.getPlayerInfoManager().getMaxforceHero();
for (int j = 0; j < recruitTime; j++) {
ExpeditionLogic.createHero(i, uid, hero, true);
}
}
Hero hero = user.getHeroManager().getHeroMap().get(maxforceHero);
if (hero == null) {
throw new ErrorCodeException("试炼节点英雄掉落失败");
}
ExpeditionLogic.createHero(i, uid, hero);
}
for (int i = 0; i <4 ; i++) {
Hero hero = user.getHeroManager().getHeroMap().get(0);
if(hero == null){
throw new ErrorCodeException(ErrorCode.newDefineCode("hero no"));
}
heroMapTemp.forEach((s, hero) -> {
CommonProto.ViewHeroInfo.Builder inner = CommonProto.ViewHeroInfo.newBuilder();
Map<Integer, Integer> heroNotBufferAttribute = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, true, 0);
for(Map.Entry<Integer,Integer> item : heroNotBufferAttribute.entrySet()){
@ -123,10 +104,10 @@ public class HeroNodeGetInfoRequestHandler extends BaseHandler<Expedition.HeroNo
}
inner.setForce(HeroLogic.getInstance().calForce(heroNotBufferAttribute));
inner.setHero(CBean2Proto.getHero(hero));
builder.addViewHeroInfo(inner);
}
});
// nodeInfo.setState(ExpeditionLogic.NODESTATE_HERO);
return builder.build();
}
}

View File

@ -1,23 +0,0 @@
package com.ljsd.jieling.handler.Expedition;
import com.google.protobuf.GeneratedMessage;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.protocols.Expedition;
import com.ljsd.jieling.protocols.MessageTypeProto;
/**
* Description:
* Author: zsx
* CreateDate: 2020/5/18 20:48
*/
public class HeroNodeRequest extends BaseHandler<Expedition.HeroNodeRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return null;
}
@Override
public GeneratedMessage processWithProto(int uid, Expedition.HeroNodeRequest proto) throws Exception {
return Expedition.HeroNodeResponse.newBuilder().build();
}
}

View File

@ -0,0 +1,121 @@
package com.ljsd.jieling.handler.Expedition;
import com.google.protobuf.GeneratedMessage;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.OnlineUserManager;
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.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.Expedition;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.util.CBean2Proto;
import com.ljsd.jieling.util.MessageUtil;
import config.SExpeditionNodeConfig;
import manager.STableManager;
import util.StringUtil;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Description:
* Author: zsx
* CreateDate: 2020/5/18 20:48
*/
public class HeroNodeRequestHandler extends BaseHandler<Expedition.HeroNodeRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return null;
}
@Override
public GeneratedMessage processWithProto(int uid, Expedition.HeroNodeRequest proto) throws Exception {
User user = UserManager.getUser(uid);
int nodeId = proto.getNodeId();
String heroId = proto.getHeroId();
if(StringUtil.isEmpty(heroId)){
throw new ErrorCodeException("参数错误");
}
//cfg check
if (!user.getExpeditionManager().getExpeditionNodeInfos().containsKey(nodeId)) {
throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点不存在"));
}
ExpeditionNodeInfo nodeInfo = user.getExpeditionManager().getExpeditionNodeInfos().get(nodeId);
if (nodeInfo.getType() != ExpeditionLogic.NODETYPE_HERO_GET) {
throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点类型不符"+nodeInfo.getType()));
}
// if (nodeInfo.getState() != ExpeditionLogic.NODESTATE_HERO) {
// throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点状态不正确"+nodeInfo.getState()));
// }
//check node
List<Integer> nextNodeId = ExpeditionLogic.getNextNodeId(user.getExpeditionManager().getSortid(),user.getExpeditionManager().getExpeditionNodeInfos().size());
if(!nextNodeId.contains(nodeId)){
throw new ErrorCodeException(ErrorCode.newDefineCode("节点信息错误 节点状态不正确"));
}
ExpeditionManager expeditionManager = user.getExpeditionManager();
if(!expeditionManager.getHeroMapTemp().containsKey(heroId)){
throw new ErrorCodeException("参数错误");
}
//move temp to
Hero hero = expeditionManager.getHeroMapTemp().get(heroId);
expeditionManager.addHero(hero);
Map<String, PropertyItem> equipMapTemp = expeditionManager.getEquipMapTemp();
for (Map.Entry<Integer, String> next : hero.getEquipByPositionMap().entrySet()) {
String equipId = next.getValue();
PropertyItem equip = equipMapTemp.get(equipId);
if (equip == null) {
continue;
}
user.getExpeditionManager().addEquip(user, equip);
}
Set<String> jewelInfo = hero.getJewelInfo();
for (String jewel : jewelInfo) {
PropertyItem propertyItem = user.getEquipManager().getEquipMap().get(jewel);
if (propertyItem == null)
continue;
Jewel j = (Jewel) propertyItem;
user.getExpeditionManager().addEquip(user, j);
}
CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder();
drop.addHero(CBean2Proto.getHero(hero));
//clear temp
user.getExpeditionManager().clearEquipToTemp();
user.getExpeditionManager().clearHeroToTemp();
SExpeditionNodeConfig sExpeditionNodeConfig = STableManager.getConfig(SExpeditionNodeConfig.class).get(nodeInfo.getType());
if (sExpeditionNodeConfig == null) {
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
//updata node
Set<CommonProto.ExpeditionNodeInfo> nodeInfos = ExpeditionLogic.openLay(user,nodeInfo.getLay(),nodeId);
//更新节点
Expedition.ExpeditionNodeInfoIndication.Builder builder = Expedition.ExpeditionNodeInfoIndication.newBuilder();
builder.addAllNodeInfo(nodeInfos);
ISession sessionByUid = OnlineUserManager.getSessionByUid(uid);
MessageUtil.sendIndicationMessage(sessionByUid, 1, MessageTypeProto.MessageType.EXPEDITION_NOINFO_INDICATION_VALUE, builder.build(), true);
return Expedition.HeroNodeResponse.newBuilder().setDrop(drop).build();
}
}

View File

@ -107,7 +107,7 @@ public class StartExpeditionBattleRequest extends BaseHandler<Expedition.StartEx
CommonProto.FightTeamInfo deffightTeamInfo;
if(ExpeditionLogic.isHardNode(nodeInfo.getType())){
int tid = deffightInfo.getUid();
deffightTeamInfo= ExpeditionLogic.getGropFightTeamInfoWithDouble(tid,nodeInfo.getBossHP());
deffightTeamInfo= ExpeditionLogic.getGropFightTeamInfoWithDouble(tid,nodeInfo.getBossHP()).get(0);
}else {
deffightTeamInfo = FightUtil.makeFightBySnapDataWithDouble(new DefFightSnapData(deffightInfo.getHeroAttribute(),deffightInfo.getHeroSkills(),deffightInfo.getPokenmonSkills(),deffightInfo.getPassiveSkills()),nodeInfo.getBossHP());
}

View File

@ -1,23 +1,141 @@
package com.ljsd.jieling.logic.dao;
import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.util.KeyGenUtils;
import com.ljsd.jieling.util.UUIDEnum;
import java.util.Map;
/**
*
*/
public class ExpeditionItem extends PropertyItem {
public class ExpeditionItem extends MongoBase {
private String itemDbType = "ExpeditionItem";
private String id;
private int equipId;
private int level;
private String heroId;
private Map<Integer, Integer> propertyValueByIdMap; //主属性 key 对应PropertyConfig id
private Map<Integer, Integer> secondValueByIdMap; //副属性
private int createTime;
private int skill;
private int isLocked;
public ExpeditionItem(String id, int equipId, int level, String heroId, Map<Integer, Integer> propertyValueByIdMap, Map<Integer, Integer> secondValueByIdMap, int createTime, int skill, int isLocked) {
this.id = id;
this.equipId = equipId;
this.level = level;
this.heroId = heroId;
this.propertyValueByIdMap = propertyValueByIdMap;
this.secondValueByIdMap = secondValueByIdMap;
this.createTime = createTime;
this.skill = skill;
this.isLocked = isLocked;
}
public ExpeditionItem(int uid, int expeditionTid) {
super();
super.setId(KeyGenUtils.produceIdByModule(UUIDEnum.EXPEDITION, uid));
super.setEquipId(expeditionTid);
this.id =(KeyGenUtils.produceIdByModule(UUIDEnum.EXPEDITION, uid));
this.equipId=(expeditionTid);
}
public ExpeditionItem() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
updateString("id",equipId);
this.id = id;
}
public int getEquipId() {
return equipId;
}
public void setEquipId(int equipId){
updateString("equipId",equipId);
this.equipId = equipId;
}
public int getLevel() {
return level;
}
public void setLevel(int level){
updateString("level",level);
this.level = level;
}
public String getHeroId() {
return heroId;
}
public void setHeroId(String heroId){
updateString("heroId",heroId);
this.heroId = heroId;
}
public Map<Integer, Integer> getPropertyValueByIdMap() {
return propertyValueByIdMap;
}
public Map<Integer, Integer> getSecondValueByIdMap() {
return secondValueByIdMap;
}
public void setPropertyValueByIdMap(Map<Integer, Integer> propertyValueByIdMap) {
updateString("propertyValueByIdMap",propertyValueByIdMap);
this.propertyValueByIdMap = propertyValueByIdMap;
}
public void setSecondValueByIdMap(Map<Integer, Integer> secondValueByIdMap) {
updateString("secondValueByIdMap",secondValueByIdMap);
this.secondValueByIdMap = secondValueByIdMap;
}
public int getCreateTime() {
return createTime;
}
public void setCreateTime(int createTime) {
updateString("createTime", createTime);
this.createTime = createTime;
}
public int getSkill() {
return skill;
}
public void setSkill(int skill) {
updateString("skill", skill);
this.skill = skill;
}
public int getIsLocked() {
return isLocked;
}
public void updateIsLocked(int isLocked) {
updateString("isLocked", isLocked);
this.isLocked = isLocked;
}
}

View File

@ -173,6 +173,19 @@ public class ExpeditionManager extends MongoBase {
heroMap.put(hero.getId(), hero);
}
public void addHeroToTemp(Hero hero) throws Exception {
//绑定关系
hero.init(this.getRootId(),getMongoKey() + ".heroMapTemp." + hero.getId());
updateString("heroMapTemp." + hero.getId(), hero);
heroMapTemp.put(hero.getId(), hero);
}
public void clearHeroToTemp() throws Exception {
heroMapTemp.clear();
updateString("heroMapTemp" , heroMapTemp);
}
public Hero getHero(String heroId) {
return heroMap.get(heroId);
}
@ -187,11 +200,27 @@ public class ExpeditionManager extends MongoBase {
equip.init(this.getRootId(),getMongoKey() + ".equipMap." + equip.getId());
updateString("equipMap." + equip.getId(), equip);
equipMap.put(equip.getId(),equip);
// addEquipHandBook(equip.getEquipId());
// user.getUserMissionManager().onGameEvent(user, GameEvent.GET_EQUIP,equip.getEquipId());
Poster.getPoster().dispatchEvent(new EquipEvent(user.getId(),equip.getEquipId()));
}
public void clearEquipToTemp() throws Exception {
updateString("equipMapTemp" , equipMapTemp);
equipMapTemp.clear();
}
public void addEquipToTemp(User user, PropertyItem equip) throws Exception {
equip.init(this.getRootId(),getMongoKey() + ".equipMapTemp." + equip.getId());
updateString("equipMapTemp." + equip.getId(), equip);
equipMapTemp.put(equip.getId(),equip);
}
public Map<String, Hero> getHeroMapTemp() {
return heroMapTemp;
}
public Map<String, PropertyItem> getEquipMapTemp() {
return equipMapTemp;
}
public Map<String, PropertyItem> getEquipMap() {
return equipMap;

View File

@ -58,8 +58,8 @@ public class Hero extends MongoBase {
this.setRootCollection(User._COLLECTION_NAME);
this.id = KeyGenUtils.produceIdByModule(UUIDEnum.HERO, uid);
this.templateId = heroTid;
this.level = hero.level;
this.star = initStar;
this.level = initStar;
this.star =hero.getStar() ;
this.soulEquipByPositionMap = hero.soulEquipByPositionMap;
this.breakId = hero.breakId;
this.starBreakId = hero.starBreakId;
@ -142,7 +142,7 @@ public class Hero extends MongoBase {
}
public Map<Integer, String> getEquipByPositionMap() {
return equipByPositionMap;
return equipByPositionMap==null?new HashMap<>():equipByPositionMap;
}
public void setEquipByPositionMap(Map<Integer, String> equipByPositionMap) throws Exception {
@ -170,7 +170,7 @@ public class Hero extends MongoBase {
public Map<Integer, Integer> getSoulEquipByPositionMap() {
return soulEquipByPositionMap;
return soulEquipByPositionMap==null?new HashMap<>():soulEquipByPositionMap;
}
public void updateSoulEquipPositionMap(int position,int equipId) {

View File

@ -6,7 +6,7 @@ import java.util.List;
import java.util.Map;
public class SnapFightInfo {
private Map<String, FamilyHeroInfo> heroAttribute;
private Map<String, FamilyHeroInfo> heroAttribute = new HashMap<>();
private int uid;
private int force;
private Map<String, String> heroSkills = new HashMap<>();

View File

@ -1,9 +1,6 @@
package com.ljsd.jieling.logic.expedition;
import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig;
import com.ljsd.jieling.config.clazzStaticCfg.PlayStaticConfig;
import com.ljsd.jieling.config.clazzStaticCfg.SArenaRobotStaticConfig;
import com.ljsd.jieling.config.clazzStaticCfg.WorldBossTreasureStaticConfig;
import com.ljsd.jieling.config.clazzStaticCfg.*;
import com.ljsd.jieling.core.FunctionIdEnum;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.core.HandlerLogicThread;
@ -12,6 +9,7 @@ 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.handler.map.behavior.BehaviorUtil;
import com.ljsd.jieling.logic.GlobalDataManaager;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.blood.BloodLogic;
@ -38,6 +36,7 @@ import util.StringUtil;
import util.TimeUtils;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
@ -53,7 +52,7 @@ public class ExpeditionLogic {
public static final int NODESTATE_NOT_GET = 2;//2未领取圣物
public static final int NODESTATE_PASS = 3;//已完成
public static final int NODESTATE_OVER_PASS = 4;//已完成
public static final int NODESTATE_HERO = 5;//招募节点
public static final int NODETYPE_ADVANCE = 1;//精英节点
public static final int NODETYPE_BOSS = 2;//首领节点
@ -97,19 +96,33 @@ public class ExpeditionLogic {
manager.clearPropertyItems();
manager.getHeroHPWithChange().clear();
manager.setCurrentTime(openTimeOfFuntionCacheByType.getTimes());
manager.clearHeroToTemp();
manager.clearEquipToTemp();
//TODO
// checkAndResetTreasure(user);
SGlobalSystemConfig sGlobalSystemConfig = STableManager.getConfig(SGlobalSystemConfig.class).get(FunctionIdEnum.Expedition.getFunctionType());
Expedition.ExpeditionResetIndication.Builder builder = Expedition.ExpeditionResetIndication.newBuilder();
SExpeditionSetting sExpeditionSetting = STableManager.getConfig(SExpeditionSetting.class).get(1);
if(sExpeditionSetting == null){
throw new ErrorCodeException(ErrorCode.CFG_NULL);
}
Expedition.GetExpeditionResponse.Builder builder = Expedition.GetExpeditionResponse.newBuilder();
if(manager.getExpeditionNodeInfos().size()==0){
manager.setExpeditionLeve(1);
manager.setLay(1);
manager.setSortid(0);
}
if (HandlerLogicThread.checkOpen(user,sGlobalSystemConfig)) {
builder.addAllRewardids(manager.getRewardBox());
builder.addAllLay(manager.getRewardBox());
builder.addAllHeroInfo(ExpeditionLogic.getInstance().getAllHeroInfo(user));
builder.addAllNodeInfo(ExpeditionLogic.getInstance().getNodeInfo(user));
builder.addAllEquipIds(ExpeditionLogic.getInstance().getEquipnfo(user));
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
//猎妖添加的英雄
Set<String> collect= heroMap.values().stream().filter(hero -> hero.getCreateType() == 1).map(Hero::getId).collect(Collectors.toSet());
builder.addAllRemovesHeroIds(collect);
builder.addAllHeroList(new ArrayList<>());
builder.addAllEquip(new ArrayList<>());
builder.addAllEquip(new ArrayList<>());
}
MessageUtil.sendIndicationMessage(OnlineUserManager.getSessionByUid(user.getId()), 1, MessageTypeProto.MessageType.ExpeditionResetIndication.getNumber(), builder.build(), true);
// reSetNode(user);
@ -138,7 +151,6 @@ public class ExpeditionLogic {
String mailReward = ItemUtil.getMailReward(itemArrs);
int nowTime = (int) (TimeUtils.now() / 1000);
//TODO title content 走配置
String title = SErrorCodeEerverConfig.getI18NMessage("expedition_title");
String content = SErrorCodeEerverConfig.getI18NMessage("expedition_txt",new Object[]{user.getExpeditionManager().getLay()-1});
MailLogic.getInstance().sendMail(user.getId(), title, content, mailReward, nowTime, Global.MAIL_EFFECTIVE_TIME);
@ -194,18 +206,21 @@ public class ExpeditionLogic {
public Set<CommonProto.ExpeditionSimpleHeroInfo> getAllHeroInfo(User user, Set<String> set) {
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
Map<String, Hero> heroMapTemp = user.getExpeditionManager().getHeroMap();
//生成新英雄的血量信息
Map<String, Double> heroHP = user.getExpeditionManager().getHeroHPWithChange();
for (Map.Entry<String, Hero> entry : heroMap.entrySet()) {
if (!heroHP.keySet().contains(entry.getKey())) {
if (!heroHP.keySet().contains(entry.getKey())&&!heroMapTemp.keySet().contains(entry.getKey())) {
heroHP.put(entry.getKey(), 1d);
}
}
//移除已经删除的hero
Set<String> removeId = heroHP.keySet().stream().filter(k -> {
if(!heroMap.keySet().contains(k))
return true;
return heroMap.get(k).getLevel()<20;
if(heroMap.keySet().contains(k))
return heroMap.get(k).getLevel()<20;
if(heroMapTemp.keySet().contains(k))
return heroMapTemp.get(k).getLevel()<20;
return !heroMap.keySet().contains(k) && !heroMapTemp.keySet().contains(k);
}).collect(Collectors.toSet());
removeId.forEach(heroHP::remove);
Set<CommonProto.ExpeditionSimpleHeroInfo> heroInfoSet = new HashSet<>();
@ -336,7 +351,7 @@ public class ExpeditionLogic {
int orDefault = STableManager.getFigureConfig(CommonStaticConfig.class).leve2num.getOrDefault(leve-1, 0)-1;//节点
Map<Integer,Set<Integer>> map = new HashMap<>();
for (Map.Entry<Integer, Map<Integer,Integer>> integerMapMap :STableManager.getFigureConfig(CommonStaticConfig.class).getType2lay2weight().entrySet()){
for (Map.Entry<Integer, Map<Integer,Integer>> integerMapMap :STableManager.getFigureConfig(CommonStaticConfig.class).getType2lay2weight(leve).entrySet()){
int type = integerMapMap.getKey();
int lay = ranndomFromWeight(integerMapMap.getValue());
Set<Integer> value = map.getOrDefault(lay,new HashSet<>());
@ -578,11 +593,26 @@ public class ExpeditionLogic {
}
//grop config
int i = sExpeditionRecruitConfig.getHeroId();
SnapFightInfo fightInfo = new SnapFightInfo();
fightInfo.setUid(i);
int force = MonsterUtil.getMonsterForce(new int[]{i});
Map<String, Double> bossHP = new HashMap<>();
Map<String, FamilyHeroInfo> heroAllAttribute = new HashMap<>();
SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(i);
int[][] groupIds = sMonsterGroup.getContents();
int[] monsterIds = groupIds[0];
for (int monsterId : monsterIds) {
if(monsterId!=0){
bossHP.put(Integer.toString(monsterId), 1d);
heroAllAttribute.put(Integer.toString(monsterId), new FamilyHeroInfo());
}
}
fightInfo.setHeroAttribute(heroAllAttribute);
fightInfo.setForce(force);
nodeInfo.setBossHP(bossHP);
fightInfo.setPokenmonSkills("");
@ -779,8 +809,8 @@ public class ExpeditionLogic {
}
public static Hero createHero(int tempid,int uid,Hero hero)throws Exception{
int star = hero.getStar();
public static Hero createHero(int tempid,int uid,Hero hero,boolean isTemp)throws Exception{
int star = hero.getLevel();
User user = UserManager.getUser(uid);
SExpeditionSetting sExpeditionSetting = STableManager.getConfig(SExpeditionSetting.class).get(1);
if (sExpeditionSetting == null) {
@ -790,7 +820,9 @@ public class ExpeditionLogic {
int min = sExpeditionSetting.getMatchForceRange()[0];
int max= sExpeditionSetting.getMatchForceRange()[1];
int finalstar = (int) (star * ((min / 10000f) + ((float) (Math.random() *(max - min))/10000f)));
if(finalstar<=20){
finalstar=50;
}
//random tempid
Hero newHero = new Hero(uid,tempid,finalstar,hero);
@ -802,7 +834,12 @@ public class ExpeditionLogic {
continue;
}
Equip newequip = new Equip(uid, equip.getEquipId());
user.getExpeditionManager().addEquip(user, newequip);
if(isTemp){
user.getExpeditionManager().addEquipToTemp(user, newequip);
}else {
user.getExpeditionManager().addEquip(user, newequip);
}
newHero.updateEquipPositionMap(next.getKey(), newequip.getId());
}
@ -814,10 +851,19 @@ public class ExpeditionLogic {
continue;
Jewel j = (Jewel) propertyItem;
Jewel newequip = new Jewel(user.getId(), j.getEquipId());
user.getExpeditionManager().addEquip(user, newequip);
if(isTemp){
user.getExpeditionManager().addEquipToTemp(user, newequip);
}else {
user.getExpeditionManager().addEquip(user, newequip);
}
newHero.addJewel(newequip.getId());
}
user.getExpeditionManager().addHero(newHero);
if(isTemp){
user.getExpeditionManager().addHeroToTemp(newHero);
}else {
user.getExpeditionManager().addHero(newHero);
}
return newHero;
}
@ -868,12 +914,12 @@ public class ExpeditionLogic {
}
public static CommonProto.FightTeamInfo getGropFightTeamInfoWithDouble(int gropid, Map<String, Double> attackBloodMap) {
public static List<CommonProto.FightTeamInfo> getGropFightTeamInfoWithDouble(int gropid, Map<String, Double> attackBloodMap) {
Map<Integer,List<Double>> hps = new HashMap<>();
hps.put(0,new LinkedList<>(attackBloodMap.values()));
Map<Integer, List<CommonProto.FightUnitInfo>> monsterByGroupWithDouble = MonsterUtil.getMonsterByGroupWithDouble(gropid, hps);
String monsterTeamSkill = MonsterUtil.getMonsterTeamSkillByGroup(gropid);
return CommonProto.FightTeamInfo.newBuilder().addAllFightUnitList(monsterByGroupWithDouble.get(0)).setTeamSkillList(monsterTeamSkill).build();
List<CommonProto.FightTeamInfo> fightTeamInfos = BehaviorUtil.getFightTeamInfos(gropid, monsterByGroupWithDouble, Global.MONSTER_1);
return fightTeamInfos;
}

View File

@ -755,7 +755,12 @@ public class CombatLogic {
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId);
List<Integer> passiveTeamskillEffect = new ArrayList<>();
for(TeamPosHeroInfo teamPosHeroInfo :teamPosHeroInfos){
Hero hero = heroMap.get(teamPosHeroInfo.getHeroId());
Hero hero;
if(teamId==GlobalsDef.EXPEDITION_TEAM&&user.getExpeditionManager().getHeroMap().containsKey(teamPosHeroInfo.getHeroId())){
hero = user.getExpeditionManager().getHeroMap().get(teamPosHeroInfo.getHeroId());
}else {
hero = heroMap.get(teamPosHeroInfo.getHeroId());
}
List<Integer> heroSkillListTmp = HeroLogic.getInstance().getHeroSkillList(user, hero);
heroSkillListTmp.forEach(skill->{
SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill);
@ -801,6 +806,10 @@ public class CombatLogic {
//找出上场的Id
List<Integer> heroFind = new ArrayList<>(teamPosHeroInfos.size());
for(TeamPosHeroInfo key :teamPosHeroInfos){
if(teamId==GlobalsDef.EXPEDITION_TEAM&&user.getExpeditionManager().getHeroMap().containsKey(key.getHeroId())){
heroFind.add(user.getExpeditionManager().getHeroMap().get(key.getHeroId()).getTemplateId());
continue;
}
heroFind.add(heroMap.get(key.getHeroId()).getTemplateId());
}

View File

@ -468,7 +468,21 @@ public class HeroLogic{
User user = UserManager.getUser(iSession.getUid());
HeroManager heroManager = user.getHeroManager();
Set<Integer> set = new HashSet<>();
heroIds.forEach(heroId->set.add(heroManager.getHero(heroId.getHeroId()).getTemplateId()));
if(teamId==GlobalsDef.EXPEDITION_TEAM){
heroIds.forEach(heroId->{
if(heroManager.getHeroMap().containsKey(heroId.getHeroId())){
set.add(heroManager.getHero(heroId.getHeroId()).getTemplateId());
}
if(user.getExpeditionManager().getHeroMap().containsKey(heroId.getHeroId())){
set.add(user.getExpeditionManager().getHero(heroId.getHeroId()).getTemplateId());
}
});
}else {
heroIds.forEach(heroId->set.add(heroManager.getHero(heroId.getHeroId()).getTemplateId()));
}
if(set.size()!=heroIds.size()){
throw new ErrorCodeException(ErrorCode.NO_USE_SAME_HERO);
}
@ -537,10 +551,18 @@ public class HeroLogic{
Set<String> cacheHeroIds = new HashSet<>();
for(CommonProto.TeamHeroInfo teamHeroInfo: heroIds){
String heroId = teamHeroInfo.getHeroId();
if(user.getHeroManager().getHero(heroId) == null) {
// 卡牌不存在
return "card not exists";
if(teamId==GlobalsDef.EXPEDITION_TEAM){
if(user.getHeroManager().getHero(heroId) == null&&!user.getExpeditionManager().getHeroMap().containsKey(heroId)) {
// 卡牌不存在
return "card not exists";
}
}else {
if(user.getHeroManager().getHero(heroId) == null) {
// 卡牌不存在
return "card not exists";
}
}
// 卡牌重复 卡牌已上阵
if(cacheHeroIds.contains(heroId)){
return "card repeated";
@ -974,7 +996,10 @@ public class HeroLogic{
public List<Integer> getHeroSkillList(User user,Hero hero){
List<Integer> skillList = new ArrayList<>();
SCHero tempHero = SCHero.getsCHero().get(hero.getTemplateId());
skillList.addAll(tempHero.getSkillListByStar(hero.getStar()));
List<Integer> skillListByStar = tempHero.getSkillListByStar(hero.getStar());
if(skillListByStar!=null){
skillList.addAll(skillListByStar);
}
skillList.addAll( tempHero.getPassiveSkills(1,hero.getBreakId()));
skillList.addAll( tempHero.getPassiveSkills(2,hero.getStarBreakId()));

View File

@ -42,6 +42,8 @@ public class SGlobalSystemConfig implements BaseConfig {
private int isIDdSame;
private int guideId;
public static Map<Integer, List<Integer>> idsByType;
@Override
public void init() throws Exception {