战斗 灵兽修改

back_recharge
lvxinran 2020-10-26 10:05:30 +08:00
parent 3dd49ea868
commit 46fee5ae4e
10 changed files with 138 additions and 48 deletions

View File

@ -247,7 +247,7 @@ public class BehaviorUtil {
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user))
.addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user))
.setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId))
.build();
}
@ -381,7 +381,10 @@ public class BehaviorUtil {
String monsterTeamSkill = MonsterUtil.getMonsterTeamSkillByGroup(groupId);
List<CommonProto.FightTeamInfo> monsterGroupList = new ArrayList<>();
if (monsterByGroup.size() > mosterNum){
CommonProto.FightTeamInfo monsterTeamInfo = CommonProto.FightTeamInfo.newBuilder().addAllFightUnitList(monsterByGroup.get(mosterNum)).setTeamSkillList(monsterTeamSkill).build();
CommonProto.FightTeamInfo monsterTeamInfo = CommonProto.FightTeamInfo.newBuilder()
.addAllFightUnitList(monsterByGroup.get(mosterNum))
// .setTeamSkillList(monsterTeamSkill)
.build();
monsterGroupList.add(monsterTeamInfo);
}
return monsterGroupList;

View File

@ -120,8 +120,8 @@ public class RoomMatchRequestHandler extends BaseHandler{
String heroSkill = HeroLogic.getInstance().getHeroSkills(mine, hero,skillSb ).toString();
userBloodySnpInfo.updateHeroSkill(heroId,heroSkill.substring(0, heroSkill.length() - 1));
}
String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(mine);
userBloodySnpInfo.setPokenmonSkills(pokenmonSkills);
// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(mine);
// userBloodySnpInfo.setPokenmonSkills(pokenmonSkills);
Map<String, FamilyHeroInfo> heroAllAttribute = BloodLogic.getInstance().battleRecord(mine, myteamId,null);
userBloodySnpInfo.setHeroAllAttributes(heroAllAttribute);
int maxHp = 0;

View File

@ -219,9 +219,9 @@ public class Cmd_role_gm extends GmRoleAbstract {
}
nodeInfo.setBossHP(bossHP);
if (self.getPokemonManager().getPokemonMap().size()!=0) {
if (self.getPokemonManager().getPokemonTeamMap().size()!=0) {
//玩家未激活异妖(神器)时,敌人阵容中不会出现异妖;激活异妖后,由敌人数据来源方决定战斗时是否有敌方异妖。
String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user);
// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user);
String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, snapTeamId);
// List<TeamPosForPokenInfo> teamPosForPokenInfos = user.getTeamPosManager().getTeamPosForPoken().get(snapTeamId);
// if (null!=teamPosForPokenInfos) {
@ -231,7 +231,7 @@ public class Cmd_role_gm extends GmRoleAbstract {
// }
// fightInfo.setPokenmonIds(pokens);
// }
fightInfo.setPokenmonSkills(pokenmonSkills);
// fightInfo.setPokenmonSkills(pokenmonSkills);
fightInfo.setPassiveSkills(pokenmonPassiveSkills);
}

View File

@ -126,7 +126,7 @@ public class BloodLogic {
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroDefendFightInfos)
.setTeamSkillList(pokmanSkill)
// .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user))
.setTeamPassiveList(passiveSkill)
.build();
}

View File

@ -690,8 +690,8 @@ public class ChampionshipLogic {
String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero, skillSb).toString();
fightInfo.updateHeroSkill(heroId, heroSkill.substring(0, heroSkill.length() - 1));
}
String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user);
fightInfo.setPokenmonSkills(pokenmonSkills);
// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user);
// fightInfo.setPokenmonSkills(pokenmonSkills);
String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, snapTeamId);
fightInfo.setPassiveSkills(pokenmonPassiveSkills);
memberInfo.setFightInfo(fightInfo);

View File

@ -586,9 +586,9 @@ public class ExpeditionLogic {
if (self.getPokemonManager().getPokemonMap().size()!=0) {
//玩家未激活异妖(神器)时,敌人阵容中不会出现异妖;激活异妖后,由敌人数据来源方决定战斗时是否有敌方异妖。
String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user);
// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user);
String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, snapTeamId);
fightInfo.setPokenmonSkills(pokenmonSkills);
// fightInfo.setPokenmonSkills(pokenmonSkills);
fightInfo.setPassiveSkills(pokenmonPassiveSkills);
}
@ -1042,7 +1042,7 @@ public class ExpeditionLogic {
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user))
.addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user))
.setTeamPassiveList(pokenmonPassiveSkills)
.setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId,user))
.build();

View File

@ -352,8 +352,8 @@ public class GuildFightLogic {
String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero,skillSb ).toString();
fightInfo.updateHeroSkill(heroId,heroSkill.substring(0, heroSkill.length() - 1));
}
String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user);
fightInfo.setPokenmonSkills(pokenmonSkills);
// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user);
// fightInfo.setPokenmonSkills(pokenmonSkills);
String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, 501);
fightInfo.setPassiveSkills(pokenmonPassiveSkills);
redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(guildInfo.getId()), String.valueOf(entry.getKey()), fightInfo);

View File

@ -297,7 +297,7 @@ public class FightUtil {
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user))
.addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user))
.setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId))
.setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId,user))
.build();
@ -334,7 +334,7 @@ public class FightUtil {
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user))
.addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user))
.setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId))
.setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId,user))
.build();
@ -376,7 +376,7 @@ public class FightUtil {
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user))
.addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user))
.setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId))
.build();
}
@ -422,7 +422,7 @@ public class FightUtil {
return CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getRobotPokenmonSkills(sArenaRobotConfig))
// .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user))
.setTeamPassiveList(HeroLogic.getInstance().getRobotPokenmonPassiveSkills(sArenaRobotConfig))
.build();

View File

@ -64,6 +64,8 @@ public class HeroLogic{
public static List<Integer> transTemplate = new ArrayList<>();
public static List<Integer> equipSkillPositionTemaplge = new ArrayList<>(6);
private static Map<Integer,List<Integer>> transTemplateByHeroPropertyName = new HashMap<>();
private static List<Integer> pokemonTemplate = new ArrayList<>();
static {
transTemplate.add(HeroAttributeEnum.CurHP.getPropertyId()); // 生命
transTemplate.add(HeroAttributeEnum.Hp.getPropertyId()); // 最大生命
@ -117,6 +119,22 @@ public class HeroLogic{
equipSkillPositionTemaplge.add(4);
equipSkillPositionTemaplge.add(5);
equipSkillPositionTemaplge.add(6);
pokemonTemplate.add(HeroAttributeEnum.CurHP.getPropertyId()); // 生命
pokemonTemplate.add(HeroAttributeEnum.Hp.getPropertyId()); // 最大生命
pokemonTemplate.add(HeroAttributeEnum.Attack.getPropertyId()); // 攻击力
pokemonTemplate.add(HeroAttributeEnum.PhysicalDefence.getPropertyId());// 护甲
pokemonTemplate.add(HeroAttributeEnum.MagicDefence.getPropertyId()); // 魔抗
pokemonTemplate.add(HeroAttributeEnum.Speed.getPropertyId()); // 速度
pokemonTemplate.add(HeroAttributeEnum.DamageBocusFactor.getPropertyId()); // 伤害加成系数
pokemonTemplate.add(HeroAttributeEnum.DamageReduceFactor.getPropertyId()); // 伤害减免系数
pokemonTemplate.add(HeroAttributeEnum.Hit.getPropertyId()); // 命中率
pokemonTemplate.add(HeroAttributeEnum.Dodge.getPropertyId()); // 闪避率
pokemonTemplate.add(HeroAttributeEnum.CritFactor.getPropertyId()); // 暴击率
pokemonTemplate.add(HeroAttributeEnum.CritDamageFactor.getPropertyId()); // 暴击伤害系数
pokemonTemplate.add(HeroAttributeEnum.AntiCritDamageFactor.getPropertyId()); // 抗暴率
pokemonTemplate.add(HeroAttributeEnum.TreatFacter.getPropertyId()); // 治疗加成系数
pokemonTemplate.add(HeroAttributeEnum.CureFacter.getPropertyId()); // 受治疗
}
private static final String VERTICAL = "|";
private static final String DIVISION = "#";
@ -1320,25 +1338,40 @@ public class HeroLogic{
return sb;
}
public String getPokenmonSkills(User user){
StringBuilder pokenSkillResult = new StringBuilder();
public List<CommonProto.FightUnitInfo> getPokemonSkills(User user){
//todo 灵兽
Map<Integer, String> pokemonTeamMap = user.getPokemonManager().getPokemonTeamMap();
int[] blockUnlockLevel = SSpiritAnimalSetting.sSpiritAnimalSetting.getBlockUnlockLevel();
PokemonManager pokemonManager = user.getPokemonManager();
for(int i = 0;i<blockUnlockLevel.length;i++){
if(pokemonTeamMap.containsKey(i+1)){
String s = pokemonTeamMap.get(i + 1);
Pokemon pokemon = pokemonManager.getPokemonMap().get(s);
if(pokemon!=null){
SSpiritAnimalSkill sSpiritAnimalSkill = SSpiritAnimalSkill.skillByAnimalAndStar.get(pokemon.getTmpId()).get(pokemon.getStar());
pokenSkillResult.append(pokenSkillResult.length()==0?sSpiritAnimalSkill.getId():"#"+sSpiritAnimalSkill.getId());
}
}else{
pokenSkillResult.append(pokenSkillResult.length()==0?0:"#"+0);
// for(int i = 0;i<blockUnlockLevel.length;i++){
// if(pokemonTeamMap.containsKey(i+1)){
// String s = pokemonTeamMap.get(i + 1);
// Pokemon pokemon = pokemonManager.getPokemonMap().get(s);
// if(pokemon!=null){
// SSpiritAnimalSkill sSpiritAnimalSkill = SSpiritAnimalSkill.skillByAnimalAndStar.get(pokemon.getTmpId()).get(pokemon.getStar());
// pokenSkillResult.append(pokenSkillResult.length()==0?sSpiritAnimalSkill.getId():"#"+sSpiritAnimalSkill.getId());
// }
// }else{
// pokenSkillResult.append(pokenSkillResult.length()==0?0:"#"+0);
// }
// }
List<CommonProto.FightUnitInfo> pokemonInfos = new ArrayList<>();
for(Map.Entry<Integer,String> entry:pokemonTeamMap.entrySet()){
Pokemon pokemon = pokemonManager.getPokemonMap().get(entry.getValue());
if(pokemon==null){
continue;
}
SSpiritAnimalSkill sSpiritAnimalSkill = SSpiritAnimalSkill.skillByAnimalAndStar.get(pokemon.getTmpId()).get(pokemon.getStar());
Map<Integer, Integer> map = calOnePokemonAttribute(pokemonManager, entry.getValue());
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 pokenSkillResult.toString();
return pokemonInfos;
}
public String getPokenmonPassiveSkills(User user,int teamId){
@ -1402,9 +1435,8 @@ public class HeroLogic{
PokemonManager pokemonManager = user.getPokemonManager();
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
int profession = scHero.getProfession();
int heroNum = user.getTeamPosManager().getTeamPosForHero().get(teamId).size();
int[][] pokemonAttr = calPokenmonAttribute(pokemonManager);
int[][] pokemonAttr = calPokemonAttribute(pokemonManager);
for(int i = 0 ; i <pokemonAttr.length;i++){
pokemonAttr[i][1] = pokemonAttr[i][1]/heroNum;
}
@ -2226,7 +2258,7 @@ public class HeroLogic{
return result;
}
public int[][] calPokenmonAttribute(PokemonManager pokemonManager){
private int[][] calPokemonAttribute(PokemonManager pokemonManager){
Map<Integer,Integer> pokemonAttributeMap = new HashMap<>();
Map<Integer, String> pokemonTeamMap = pokemonManager.getPokemonTeamMap();
for(Map.Entry<Integer,String> entry:pokemonTeamMap.entrySet()){
@ -2256,6 +2288,60 @@ public class HeroLogic{
return resultArray;
}
/**
*
* @param pokemonManager
* @return
*/
private Map<Integer,Integer> calOnePokemonAttribute(PokemonManager pokemonManager,String pokemonId){
Map<Integer,Integer> pokemonAttributeMap = new HashMap<>();
Pokemon pokemon = pokemonManager.getPokemonMap().get(pokemonId);
Map<Integer,Integer> oneAttrMap = new HashMap<>();
SSpiritAnimal animal = STableManager.getConfig(SSpiritAnimal.class).get(pokemon.getTmpId());
oneAttrMap.put(GlobalsDef.HP_TYPE,(int)animal.getHp());
oneAttrMap.put(GlobalsDef.ATTACK_TYPE,(int)animal.getAttack());
oneAttrMap.put(GlobalsDef.PHYSICAL_DEFENCE_TYPE,(int)animal.getPhysicalDefence());
oneAttrMap.put(GlobalsDef.MAGIC_DEFENCE_TYPE,(int)animal.getMagicDefence());
//等级增量
SSpiritAnimalLevel levelConfig = SSpiritAnimalLevel.configByQualityAndLevel.get(animal.getQuality()).get(pokemon.getLevel());
int[][] characterLevelPara = levelConfig.getCharacterLevelPara();
for(int[] para:characterLevelPara){
oneAttrMap.put(para[0],oneAttrMap.getOrDefault(para[0],0)+para[1]);
}
//星级增量
SSpiritAnimalStar starConfig = SSpiritAnimalStar.configByQualityAndStar.get(animal.getQuality()).get(pokemon.getStar());
int starPara = starConfig.getStarPara();
for(int key:oneAttrMap.keySet()){
pokemonAttributeMap.put(key,pokemonAttributeMap.getOrDefault(key,0)+(int)(oneAttrMap.getOrDefault(key,0)*(1+starPara/10000d)));
}
return pokemonAttributeMap;
}
/**
*
* @param propertyMap
* @param level
* @return
*/
private StringBuilder getOnePokemonProperty(Map<Integer,Integer> propertyMap,int level){
StringBuilder builder = new StringBuilder();
builder.append(level);
for(int propId:pokemonTemplate){
builder.append("#");
// Hit(53),
// CureFacter(57),
// TreatFacter(58), 这三个默认要给前端传1
if(propId==HeroAttributeEnum.Hit.getPropertyId()||propId==HeroAttributeEnum.CureFacter.getPropertyId()||propId==HeroAttributeEnum.TreatFacter.getPropertyId()){
builder.append(propertyMap.getOrDefault(propId,1));
}else{
builder.append(propertyMap.getOrDefault(propId,0));
}
}
return builder;
}
//todo 灵兽
public int calAllPokenmonForce(User user){
// Map<Integer,Integer> pokemonAttributeMap = new HashMap<>();

View File

@ -113,7 +113,8 @@ public class FightDataUtil {
enemyData.rawset(i+1, unitData);
}
enemyData.set("monsterList", getTeamSkill(data.getTeamSkillList().trim(),1));
//todo 灵兽技能
enemyData.set("monsterList", getPokemonSkill(data.getPokemonUnitListList(),1));
enemyData.set("teamPassive", new LuaTable());
return enemyData;
@ -193,7 +194,8 @@ public class FightDataUtil {
playerData.set("teamSkill","");
playerData.set("teamPassive", getTeamPassive(heroTeam.getTeamPassiveList()));
playerData.set("outData",heroTeam.getSpecialPassive());
playerData.set("monsterList", getTeamSkill(heroTeam.getTeamSkillList(),0));
//todo 灵兽技能
playerData.set("monsterList", getPokemonSkill(heroTeam.getPokemonUnitListList(),0));
playerData.set("firstCamp",first?1:0);
return playerData;
}
@ -236,23 +238,22 @@ public class FightDataUtil {
}
//组装灵兽技能数据 camp=0 自己 1 对方
private static LuaValue getTeamSkill(String pokemonSkill,int camp) {
private static LuaValue getPokemonSkill(List<CommonProto.FightUnitInfo> pokemonUnitList, int camp) {
LuaValue teamSkill = new LuaTable();
if (StringUtil.isEmpty(pokemonSkill)){
if (pokemonUnitList.isEmpty()){
return teamSkill;
}
String[] skills = pokemonSkill.trim().split("#");
for (int i = 0; i < skills.length; i++) {
String skillAndPos = skills[i];
if(skillAndPos.equals("0")){
for (int i = 0; i < pokemonUnitList.size(); i++) {
String skillId = pokemonUnitList.get(i).getUnitSkillIds();
if(skillId.equals("0")){
continue;
}
SSpiritAnimalSkill sSpiritAnimalSkill = STableManager.getConfig(SSpiritAnimalSkill.class).get(Integer.valueOf(skillAndPos));
SSpiritAnimalSkill sSpiritAnimalSkill = STableManager.getConfig(SSpiritAnimalSkill.class).get(Integer.valueOf(skillId));
LuaValue monster = new LuaTable();
monster.set("id",sSpiritAnimalSkill.getSpiritAnimalMatch());
monster.set("star",sSpiritAnimalSkill.getStarMatch());
monster.set("camp",camp);
monster.set("position",i+1);
monster.set("position",pokemonUnitList.get(i).getPosition());
LuaValue skill= new LuaTable();
int[] skillIDList = sSpiritAnimalSkill.getSkillIDList();
for(int j = 0 ; j <skillIDList.length;j++){
@ -276,8 +277,8 @@ public class FightDataUtil {
skill.rawset(j+1,oneSkill);
}
monster.rawset("skill",skill);
monster.set("property",getProperty(pokemonUnitList.get(i).getProperty()));
monster.set("skill",skill);
// String[] skillAndPosItem = skillAndPos.split("#");
// if (Integer.parseInt(skillAndPosItem[1])>0){
// teamSkill.rawset(i + 1, getSkill(skillAndPosItem[1],skillAndPosItem[0]));