diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SMonsterConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SMonsterConfig.java index 6040c2727..a3eb8c9c1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SMonsterConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SMonsterConfig.java @@ -13,7 +13,7 @@ import java.util.concurrent.ConcurrentHashMap; @Table(name ="MonsterConfig") public class SMonsterConfig implements BaseConfig { private static Map sMonsterConfigMap; - private static Map monsterMap; + private static Map monsterMap; private int id; private int monsterId; @@ -56,14 +56,14 @@ public class SMonsterConfig implements BaseConfig { return sMonsterConfigMap; } - public static Map getMonsterMap() { + public static Map getMonsterMap() { return monsterMap; } @Override public void init() throws Exception { sMonsterConfigMap = STableManager.getConfig(SMonsterConfig.class); - Map monsterMapVo = new ConcurrentHashMap<>(); + Map monsterMapVo = new ConcurrentHashMap<>(); for (Map.Entry entry :sMonsterConfigMap.entrySet()){ SMonsterConfig sMonsterConfig = entry.getValue(); if (!monsterMapVo.containsKey(sMonsterConfig.getId())){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 5d29c6e66..b87a4275a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -21,9 +21,28 @@ public class RedisKey { public static final String FIGHT = "FIGHT"; /** - * 战斗种子 + * 战斗缓存 + * sub_key */ - public static final String FIGHT_SEED = "FIGHT_SEED"; + public static final String FIGHT_HEROES = "HEROES"; + + /** + * 战斗缓存 + * sub_key + */ + public static final String FIGHT_MONSTERS = "MONSTERS"; + + /** + * 战斗缓存 + * sub_key + */ + public static final String FIGHT_SEED = "SEED"; + + /** + * 战斗缓存 + * sub_key + */ + public static final String FIGHT_GROUPID = "GROUPID"; /** * 过期事件 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/FightEndRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/FightEndRequestHandler.java index 54040292d..45bc05379 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/FightEndRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/FightEndRequestHandler.java @@ -19,6 +19,7 @@ public class FightEndRequestHandler extends BaseHandler { byte[] message = netData.parseClientProtoNetData(); FightInfoProto.FightEndRequest fightEndRequest = FightInfoProto.FightEndRequest.parseFrom(message); int monsterGroupId = fightEndRequest.getMonsterGroupId(); - MapLogic.getInstance().endFight(iSession, monsterGroupId, MessageTypeProto.MessageType.FIGHT_END_RESPONSE, monsterGroupId); + String frames = fightEndRequest.getFrames(); + MapLogic.getInstance().endFight(iSession, frames, MessageTypeProto.MessageType.FIGHT_END_RESPONSE); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 47d851f25..99928aec8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -620,30 +620,21 @@ public class MapLogic { } - public void endFight(ISession session, int result, MessageTypeProto.MessageType messageType, int monsterGroupId) throws Exception { + public void endFight(ISession session, String frames, MessageTypeProto.MessageType messageType) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); -// String key = RedisKey.getKey(RedisKey.FIGHT, user.getId() , false); -// String value = (String) RedisUtil.getInstence().get(key); -// if (value == null || value.isEmpty()) { -// LOGGER.info("endFight() uid=>{} not start fight", uid); -// MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); -// return; -// } - - List pokemonSkill = new ArrayList<>(); - List heroList = new ArrayList<>(); - List monsterIdList = new ArrayList<>(); - - String key = RedisKey.getKey(RedisKey.FIGHT_SEED, user.getId() , false); - int seed = (Integer) RedisUtil.getInstence().getAndDelete(key); - - String optionData = "14#1#0|132#2#3|152#2#5|178#3#2|219#2#4|260#3#1|287#2#2|312#3#5|467#1#1"; - LuaValue getFightData = FightDataUtil.getFinalFightData(heroList,pokemonSkill,monsterIdList); - LuaValue getOptionData = FightDataUtil.getOptionData(optionData); - int[] checkResult = CheckFight.getInstance().checkFight(seed, getFightData, getOptionData); - + String key = RedisKey.getKey(RedisKey.FIGHT, user.getId() , false); + Map valueMap = RedisUtil.getInstence().hmget(key); + if (valueMap == null || valueMap.isEmpty()) { + LOGGER.info("endFight() uid=>{} not start fight", uid); + MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); + return; + } + int seed = (int)valueMap.get(RedisKey.FIGHT_SEED); + int monsterGroupId = (int)valueMap.get(RedisKey.FIGHT_GROUPID); + CommonProto.FightTeamInfo fightTeamInfo = (CommonProto.FightTeamInfo)valueMap.get(RedisKey.FIGHT_HEROES); + List monsterTeamList = (List)valueMap.get(RedisKey.FIGHT_MONSTERS); SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(monsterGroupId); if (sMonsterGroup == null) { @@ -651,11 +642,12 @@ public class MapLogic { MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), ""); return; } - int teamId = user.getMapManager().getTeamId(); -// List pokemonSkill = HeroLogic.getInstance().getPokenmonSkills(user, teamId); - // TODO from redis -// List heroFightInfos = user.getMapManager().getHeroFightInfos(); -// List monserIds = + + frames = "14#1#0|132#2#3|152#2#5|178#3#2|219#2#4|260#3#1|287#2#2|312#3#5|467#1#1"; + LuaValue getFightData = FightDataUtil.getFinalFightData(fightTeamInfo,monsterTeamList); + LuaValue getOptionData = FightDataUtil.getOptionData(frames); + int[] checkResult = CheckFight.getInstance().checkFight(seed, getFightData, getOptionData); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1, 1); FightInfoProto.FightEndResponse fightEndResponse = FightInfoProto.FightEndResponse diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java index f522e3caa..731d987b1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java @@ -12,6 +12,7 @@ import com.ljsd.jieling.handler.mission.CheckMissionReturn; import com.ljsd.jieling.handler.mission.Mission; import com.ljsd.jieling.handler.mission.MissionLogic; import com.ljsd.jieling.logic.dao.Hero; +import com.ljsd.jieling.logic.dao.TeamPosHeroInfo; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.protocols.CommonProto; @@ -76,39 +77,56 @@ public class BehaviorUtil { */ public static void getFightInfo(User user, int groupId, MapInfoProto.EventUpdateResponse.Builder eventUpdateResponse) throws Exception { MapManager mapManager = user.getMapManager(); - String key = RedisKey.getKey(RedisKey.FIGHT, user.getId(), false); - RedisUtil.getInstence().set(key, Integer.toString(groupId), RedisKey.EXPIRE_TIME); - String seed_key = RedisKey.getKey(RedisKey.FIGHT_SEED, user.getId(), false); - RedisUtil.getInstence().set(seed_key, Integer.toString((int)(System.currentTimeMillis()/1000)), RedisKey.EXPIRE_TIME); - - Set heroes = mapManager.getHeroes(); - List heroFightInfos = new ArrayList<>(heroes.size()); - for (String heroId : heroes) { - Hero hero = user.getHeroManager().getHero(heroId); + int teamId = mapManager.getTeamId(); + List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); + List heroFightInfos = new ArrayList<>(); + for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) { + Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId()); if (hero == null || hero.getCurHp() == 0) { continue; } - float attack = HeroLogic.getInstance().calHeroAttribute(hero, GlobalsDef.ATTACK_TYPE); - float physicalDefence = HeroLogic.getInstance().calHeroAttribute(hero, GlobalsDef.PHYSICAL_DEFENCE_TYPE); - float magicDefence = HeroLogic.getInstance().calHeroAttribute(hero, GlobalsDef.MAGIC_DEFENCE_TYPE); - float hp = hero.getCurHp(); - float speed = HeroLogic.getInstance().calHeroAttribute(hero, GlobalsDef.SPEED_TYPE); - CommonProto.Hero heroProto = CBean2Proto.getHero(hero); - CommonProto.HeroFightInfo heroFightInfo = CommonProto.HeroFightInfo + StringBuilder skillSb = new StringBuilder(); + StringBuilder propertySb = new StringBuilder(); + CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo .newBuilder() - .setAttack(attack) - .setPhysicalDefence(physicalDefence) - .setMagicDefence(magicDefence) - .setHp(hp) - .setSpeed(speed) - .setHero(heroProto) + .setUnitId(Integer.toString(hero.getTemplateId())) + .setUnitSkillIds(HeroLogic.getInstance().getHeroSkills(hero,skillSb).toString()) + .setProperty(HeroLogic.getInstance().getHeroProperty(user,hero,propertySb).toString()) .build(); heroFightInfos.add(heroFightInfo); } - eventUpdateResponse.addAllHeroFightInfos(heroFightInfos); - List monsterByGroup = MonsterUtil.getMonsterByGroup(groupId); - eventUpdateResponse.addAllMonsterList(monsterByGroup); + CommonProto.FightTeamInfo fightTeamInfo = CommonProto.FightTeamInfo. + newBuilder() + .addAllFightUnitList(heroFightInfos) + .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user,teamId)) + .build(); + eventUpdateResponse.setHeroFightInfos(fightTeamInfo); + + //monster + List monsterByGroup = MonsterUtil.getMonsterByGroup(groupId); + String monsterTeamSkill = MonsterUtil.getMonsterTeamSkillByGroup(groupId); + List monsterGroupList = new ArrayList<>(); + CommonProto.FightTeamInfo monsterTeamInfo = CommonProto.FightTeamInfo + .newBuilder() + .addAllFightUnitList(monsterByGroup) + .setTeamSkillList(monsterTeamSkill) + .build(); + monsterGroupList.add(monsterTeamInfo); + eventUpdateResponse.addAllMonsterList(monsterGroupList); + + //设置战斗随机种子 + int seed = (int)(System.currentTimeMillis()/1000); + eventUpdateResponse.setFightSeed(seed); + + String key = RedisKey.getKey(RedisKey.FIGHT, user.getId(), false); + Map fightInfo = new HashMap<>(); + fightInfo.put(RedisKey.FIGHT_HEROES,fightTeamInfo); + fightInfo.put(RedisKey.FIGHT_MONSTERS,monsterGroupList); + fightInfo.put(RedisKey.FIGHT_SEED,seed); + fightInfo.put(RedisKey.FIGHT_GROUPID,groupId); + RedisUtil.getInstence().hmset(key, fightInfo, RedisKey.EXPIRE_TIME); + } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 811e0f115..3797d24c7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -650,25 +650,44 @@ public class HeroLogic { for(TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList){ String heroId = teamPosHeroInfo.getHeroId(); Hero hero = heroMap.get(heroId); - Map heroAttributeMap = calHeroFinalAttribute(user, hero); StringBuilder sb = new StringBuilder(hero.getTemplateId()).append(DIVISION); - for (Integer skillId : hero.getSkillList()) { - sb.append(skillId).append(DIVISION); - } - for(Integer templatePropetyId:transTemplate){ - Integer propertyValue = heroAttributeMap.get(templatePropetyId); - if(propertyValue == null){ - propertyValue =0; - } - sb.append(propertyValue).append(DIVISION); - } + getHeroSkills(hero,sb); + getHeroProperty(user,hero,sb); result.add(sb.toString()); } return result; } - public List getPokenmonSkills(User user,int teamId){ - List pokenSkillResult = new ArrayList<>(3); + public StringBuilder getHeroSkills(Hero hero, StringBuilder sb){ + for (Integer skillId : hero.getSkillList()) { + sb.append(skillId).append(DIVISION); + } + return sb; + } + + public StringBuilder getHeroProperty(User user, Hero hero, StringBuilder sb){ + Map heroAttributeMap = calHeroFinalAttribute(user, hero); + sb.append(hero.getLevel()).append(DIVISION); + for(Integer templatePropetyId:transTemplate){ + Integer propertyValue = heroAttributeMap.get(templatePropetyId); + if(propertyValue == null){ + propertyValue =0; + } + sb.append(propertyValue).append(DIVISION); + } + return sb; + } + + + public String getOneHeroFightInfo(User user, Hero hero){ + StringBuilder sb = new StringBuilder(hero.getTemplateId()).append(DIVISION); + getHeroSkills(hero,sb); + getHeroProperty(user,hero,sb); + return sb.toString(); + } + + public String getPokenmonSkills(User user,int teamId){ + StringBuilder pokenSkillResult = new StringBuilder(); List teamPosForPokenInfos = user.getTeamPosManager().getTeamPosForPoken().get(teamId); Map pokemonMap = user.getPokemonManager().getPokemonMap(); Collections.sort(teamPosForPokenInfos); @@ -676,9 +695,9 @@ public class HeroLogic { int pokemonId = teamPosForPokenInfo.getPokenId(); Pokemon pokemon = pokemonMap.get(pokemonId); SDifferDemonsStageConfig sDifferDemonsStageConfig = SDifferDemonsStageConfig.getsDifferDemonsStageConfigMap(pokemonId*100 + pokemon.getAllStage()); - pokenSkillResult.add(sDifferDemonsStageConfig.getSkillId()); + pokenSkillResult.append(sDifferDemonsStageConfig.getSkillId()).append("#"); } - return pokenSkillResult; + return pokenSkillResult.toString(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index 864b62d17..96c5b702e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -8,6 +8,7 @@ import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.protocols.CommonProto; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; @@ -138,41 +139,48 @@ public class CBean2Proto { .addAllPokemoncomonpent(pokemoncomonpentList) .build(); } - public static CommonProto.Monster getMonster(SMonsterConfig sMonsterConfig) { - List monsterPropertyList = new CopyOnWriteArrayList<>(); - List monsterSkillList = new CopyOnWriteArrayList<>(); //火风水地光暗 + + public static CommonProto.FightUnitInfo getMonster(SMonsterConfig sMonsterConfig) { + StringBuilder monsterPropertyList = new StringBuilder(); + StringBuilder monsterSkillList = new StringBuilder(); //火风水地光暗 int[] damageBonusFactor = sMonsterConfig.getDamageBonusFactor(); int[] damageReduceFactor = sMonsterConfig.getDamageReduceFactor(); - monsterPropertyList.add(sMonsterConfig.getLevel()); //等级 - monsterPropertyList.add(sMonsterConfig.getHp()); //生命 - monsterPropertyList.add(0); //最大生命 - monsterPropertyList.add(sMonsterConfig.getAttack());//攻击力 - monsterPropertyList.add(sMonsterConfig.getPhysicalDefence()); //护甲 - monsterPropertyList.add(sMonsterConfig.getMagicDefence()); //魔抗 - monsterPropertyList.add(sMonsterConfig.getSpeed()); //速度 - monsterPropertyList.add(0); //伤害加成系数 - monsterPropertyList.add(0); //伤害减免系数 - monsterPropertyList.add((int)(sMonsterConfig.getHit() * 10000)); //命中率 - monsterPropertyList.add((int)(sMonsterConfig.getDodge() * 10000)); //闪避率 - monsterPropertyList.add((int)(sMonsterConfig.getCritDamageFactor() * 10000)); //暴击伤害系数 - monsterPropertyList.add(-1); //治疗加成系数 - monsterPropertyList.add(damageBonusFactor[0]); //火系伤害加成系数 - monsterPropertyList.add(damageReduceFactor[0]); //火系伤害减免系数 - monsterPropertyList.add(damageBonusFactor[2]); //冰系伤害加成系数 - monsterPropertyList.add(damageReduceFactor[2]); //冰系伤害减免系数 - monsterPropertyList.add(damageBonusFactor[4]); //雷系伤害加成系数 - monsterPropertyList.add(damageReduceFactor[4]); //雷系伤害减免系数 - monsterPropertyList.add(damageBonusFactor[1]); //风系伤害加成系数 - monsterPropertyList.add(damageReduceFactor[1]); //风系伤害减免系数 - monsterPropertyList.add(damageBonusFactor[3]); //地系伤害加成系数 - monsterPropertyList.add(damageReduceFactor[3]); //地系伤害减免系数 - monsterPropertyList.add(damageBonusFactor[5]); //暗系伤害加成系数 - monsterPropertyList.add(damageReduceFactor[5]); //暗系伤害减免系数 + monsterPropertyList.append(sMonsterConfig.getLevel()).append("#"); //等级 + monsterPropertyList.append(sMonsterConfig.getHp()).append("#"); //生命 + monsterPropertyList.append(sMonsterConfig.getHp()).append("#"); //最大生命 + monsterPropertyList.append(sMonsterConfig.getAttack()).append("#");//攻击力 + monsterPropertyList.append(sMonsterConfig.getPhysicalDefence()).append("#"); //护甲 + monsterPropertyList.append(sMonsterConfig.getMagicDefence()).append("#"); //魔抗 + monsterPropertyList.append(sMonsterConfig.getSpeed()).append("#"); //速度 + monsterPropertyList.append(0).append("#"); //伤害加成系数 + monsterPropertyList.append(0).append("#"); //伤害减免系数 + monsterPropertyList.append((int)(sMonsterConfig.getHit() * 10000)).append("#"); //命中率 + monsterPropertyList.append((int)(sMonsterConfig.getDodge() * 10000)).append("#"); //闪避率 + monsterPropertyList.append((int)(sMonsterConfig.getCritDamageFactor() * 10000)).append("#"); //暴击伤害系数 + monsterPropertyList.append(-1).append("#"); //治疗加成系数 + monsterPropertyList.append(damageBonusFactor[0]).append("#"); //火系伤害加成系数 + monsterPropertyList.append(damageReduceFactor[0]).append("#"); //火系伤害减免系数 + monsterPropertyList.append(damageBonusFactor[1]).append("#"); //冰系伤害加成系数 + monsterPropertyList.append(damageReduceFactor[1]).append("#"); //冰系伤害减免系数 + monsterPropertyList.append(damageBonusFactor[2]).append("#"); //雷系伤害加成系数 + monsterPropertyList.append(damageReduceFactor[2]).append("#"); //雷系伤害减免系数 + monsterPropertyList.append(damageBonusFactor[3]).append("#"); //风系伤害加成系数 + monsterPropertyList.append(damageReduceFactor[3]).append("#"); //风系伤害减免系数 + monsterPropertyList.append(damageBonusFactor[4]).append("#"); //地系伤害加成系数 + monsterPropertyList.append(damageReduceFactor[4]).append("#"); //地系伤害减免系数 + monsterPropertyList.append(damageBonusFactor[5]).append("#"); //暗系伤害加成系数 + monsterPropertyList.append(damageReduceFactor[5]); //暗系伤害减免系数 - CommonProto.Monster.Builder monsterBuilder = CommonProto.Monster.newBuilder(); - monsterBuilder.addAllMonsterProperty(monsterPropertyList); - monsterBuilder.addAllMonsterSkill(monsterSkillList); - monsterBuilder.setMonsterId(String.valueOf(sMonsterConfig.getId())); + if (sMonsterConfig.getSkillList()!=null){ + for (Integer i : sMonsterConfig.getSkillList()){ + monsterSkillList.append(i); + } + } + + CommonProto.FightUnitInfo.Builder monsterBuilder = CommonProto.FightUnitInfo.newBuilder(); + monsterBuilder.setProperty(monsterPropertyList.toString()); + monsterBuilder.setUnitSkillIds(monsterSkillList.toString()); + monsterBuilder.setUnitId(String.valueOf(sMonsterConfig.getId())); return monsterBuilder.build(); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java index 0e69cf840..5e791411d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -4,6 +4,7 @@ import com.ljsd.jieling.config.*; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.protocols.CommonProto; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; @@ -34,16 +35,16 @@ public class FightDataUtil { return tableA; } - public static LuaValue getFinalFightData(List heroList, List pokemonSkill, List monsterIdList) { + public static LuaValue getFinalFightData(CommonProto.FightTeamInfo heroTeam, List monsterTeamList) { LuaValue LuaTable = new LuaTable(); - LuaTable.set("playerData", getPlayerData(heroList, pokemonSkill)); - LuaTable.set("enemyData", getEnemyData(monsterIdList)); + LuaTable.set("playerData", getPlayerData(heroTeam)); + LuaTable.set("enemyData", getEnemyData(monsterTeamList)); return LuaTable; } - public static LuaValue getEnemyData(List enemyDataList) { + public static LuaValue getEnemyData(List enemyDataList) { LuaValue enemyData = new LuaTable(); for (int i = 0; i < enemyDataList.size(); i++) { enemyData.rawset(i + 1, getMonsterFightUnit(enemyDataList.get(i))); @@ -51,22 +52,34 @@ public class FightDataUtil { return enemyData; } - private static LuaValue getMonsterFightUnit(String id) { + private static LuaValue getMonsterFightUnit(CommonProto.FightTeamInfo data) { - SMonsterConfig sMonster = SMonsterConfig.getsMonsterConfigMap().get(Integer.parseInt(id)); + LuaValue enemyData = new LuaTable(); + for (int i = 0; i < data.getFightUnitListCount(); i++) { - LuaValue unitData = new LuaTable(); - unitData.set("roleId", sMonster.getId()); - unitData.set("professionId", sMonster.getProfession()); - unitData.set("camp", 1); - unitData.set("type", sMonster.getType()); - unitData.set("quality", sMonster.getQuality()); + CommonProto.FightUnitInfo unitInfo = data.getFightUnitList(i); - unitData.set("skill", getSkill(Integer.toString(sMonster.getSkillList()[0]))); - unitData.set("superSkill", new LuaTable()); - unitData.set("passivity", new LuaTable()); - unitData.set("property", getMonsterProperty(sMonster)); - return unitData; + String[] unitSkill = data.getTeamSkillList().trim().split("#"); + + SMonsterConfig sMonster = SMonsterConfig.getsMonsterConfigMap().get(Integer.parseInt(unitInfo.getUnitId())); + + LuaValue unitData = new LuaTable(); + unitData.set("roleId", sMonster.getId()); + unitData.set("professionId", sMonster.getProfession()); + unitData.set("camp", 1); + unitData.set("type", sMonster.getType()); + unitData.set("quality", sMonster.getQuality()); + + unitData.set("skill", getSkill(unitSkill[0])); + unitData.set("superSkill", getSkill(unitSkill[1])); + unitData.set("passivity", new LuaTable()); + unitData.set("property", getMonsterProperty(sMonster)); + + enemyData.rawset(i+1, unitData); + } + enemyData.rawset("teamSkill", getTeamSkill(data.getTeamSkillList().trim())); + + return enemyData; } /** @@ -139,28 +152,31 @@ public class FightDataUtil { return playerDataMap; } - public static LuaValue getPlayerData(List heroList, List pokemonSkill) { + public static LuaValue getPlayerData(CommonProto.FightTeamInfo heroTeam) { LuaValue playerData = new LuaTable(); - for (int i = 1; i <= heroList.size(); i++) { - playerData.rawset(i, getHeroFightUnit(heroList.get(i - 1))); + for (int i = 1; i <= heroTeam.getFightUnitListCount(); i++) { + playerData.rawset(i, getHeroFightUnit(heroTeam.getFightUnitList(i - 1))); } - playerData.rawset("teamSkill", getTeamSkill(pokemonSkill)); + playerData.rawset("teamSkill", getTeamSkill(heroTeam.getTeamSkillList())); return playerData; } - private static LuaValue getTeamSkill(List pokemonSkill) { + private static LuaValue getTeamSkill(String pokemonSkill) { LuaValue teamSkill = new LuaTable(); - for (int i = 0; i < pokemonSkill.size(); i++) { + String[] skills = pokemonSkill.trim().split("#"); + for (int i = 0; i < skills.length; i++) { - teamSkill.rawset(i + 1, getSkill(Integer.toString(pokemonSkill.get(i)))); + teamSkill.rawset(i + 1, getSkill(skills[i])); } return teamSkill; } - private static LuaValue getHeroFightUnit(String data) { - String[] dataList = data.split("#"); - SCHero hero = SCHero.getsCHero().get(dataList[0]); + private static LuaValue getHeroFightUnit(CommonProto.FightUnitInfo data) { + String unitId = data.getUnitId(); + String[] skillIds = data.getUnitSkillIds().trim().split("#"); + String property = data.getProperty(); + SCHero hero = SCHero.getsCHero().get(Integer.parseInt(unitId)); LuaValue unitData = new LuaTable(); unitData.set("roleId", hero.getId()); unitData.set("professionId", hero.getProfession()); @@ -168,17 +184,18 @@ public class FightDataUtil { unitData.set("type", 1); unitData.set("quality", 1); - unitData.set("skill", getSkill(dataList[1])); - unitData.set("superSkill", getSkill(dataList[2])); + unitData.set("skill", getSkill(skillIds[0])); + unitData.set("superSkill", getSkill(skillIds[1])); unitData.set("passivity", getTestSkill(false)); - unitData.set("property", getProperty(dataList)); + unitData.set("property", getProperty(property)); return unitData; } - private static LuaValue getProperty(String[] dataList) { + private static LuaValue getProperty(String dataList) { + String[] propertyArr = dataList.trim().split("#"); LuaValue property = new LuaTable(); - for (int i = 3; i <= dataList.length - 1; i++) { - property.rawset(i, LuaValue.valueOf(propertyHero[i])); + for (int i = 3; i <= propertyArr.length - 1; i++) { + property.rawset(i, LuaValue.valueOf(propertyArr[i])); } return property; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java index d71416dab..30bd83f9e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MonsterUtil.java @@ -11,11 +11,11 @@ import java.util.concurrent.CopyOnWriteArrayList; public class MonsterUtil { - public static List getMonsterByGroup(int groupId){ + public static List getMonsterByGroup(int groupId){ SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(groupId); int[][] groupIds = sMonsterGroup.getContents(); - List monsterList = new CopyOnWriteArrayList<>(); - Map monsterMap = SMonsterConfig.getMonsterMap(); + List monsterList = new CopyOnWriteArrayList<>(); + Map monsterMap = SMonsterConfig.getMonsterMap(); for (int[] monsterIds : groupIds){ for (int monsterId: monsterIds){ monsterList.add(monsterMap.get(monsterId)); @@ -24,13 +24,17 @@ public class MonsterUtil { return monsterList; } - public static List getMonsterSkillById(int monsterId){ - CommonProto.Monster monster = SMonsterConfig.getMonsterMap().get(monsterId); - return monster.getMonsterSkillList(); + public static String getMonsterSkillById(int monsterId){ + CommonProto.FightUnitInfo monster = SMonsterConfig.getMonsterMap().get(monsterId); + return monster.getUnitSkillIds(); } - public static List getMonsterPropertyById(int monsterId){ - CommonProto.Monster monster = SMonsterConfig.getMonsterMap().get(monsterId); - return monster.getMonsterPropertyList(); + public static String getMonsterPropertyById(int monsterId){ + CommonProto.FightUnitInfo monster = SMonsterConfig.getMonsterMap().get(monsterId); + return monster.getProperty(); + } + + public static String getMonsterTeamSkillByGroup(int groupId) { + return SMonsterGroup.getsMonsterGroupMap().get(groupId).getSkill(); } }