diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyFightInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyFightInfo.java index 7c83afd2e..22d1aa479 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyFightInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyFightInfo.java @@ -3,13 +3,13 @@ package com.ljsd.jieling.logic.dao; import java.util.Map; public class FamilyFightInfo { - private Map> heroAttribute; + private Map heroAttribute; private int uid; private int familyId; private int buildId; private int starCount; - public Map> getHeroAttribute() { + public Map getHeroAttribute() { return heroAttribute; } @@ -29,7 +29,7 @@ public class FamilyFightInfo { return starCount; } - public void setHeroAttribute(Map> heroAttribute) { + public void setHeroAttribute(Map heroAttribute) { this.heroAttribute = heroAttribute; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyHeroInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyHeroInfo.java new file mode 100644 index 000000000..1700f1bc4 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyHeroInfo.java @@ -0,0 +1,43 @@ +package com.ljsd.jieling.logic.dao; + +import java.util.Map; + +public class FamilyHeroInfo { + + private int templeteId; + private int level; + private Map attribute; + + public int getTempleteId() { + return templeteId; + } + + public int getLevel() { + return level; + } + + public Map getAttribute() { + return attribute; + } + + public void setTempleteId(int templeteId) { + this.templeteId = templeteId; + } + + public void setLevel(int level) { + this.level = level; + } + + public void setAttribute(Map attribute) { + this.attribute = attribute; + } + + public FamilyHeroInfo(int templeteId, int level, Map attribute) { + this.templeteId = templeteId; + this.level = level; + this.attribute = attribute; + } + + public FamilyHeroInfo() { + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java index aa2493611..96eac117a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java @@ -36,6 +36,8 @@ public class GuildInfo extends MongoBase { private Map defendInfo; + private Map fightResult; + public GuildInfo() { setRootCollection(_COLLECTION_NAME); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java index b36527bb8..fa3599549 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java @@ -8,18 +8,22 @@ import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.handler.map.MapManager; +import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.GuildApply; import com.ljsd.jieling.logic.dao.root.GuildInfo; import com.ljsd.jieling.logic.dao.root.GuildLog; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.fight.CheckFight; +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.Family; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.util.*; +import org.luaj.vm2.LuaValue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -840,6 +844,11 @@ public class GuildLogic { } } } + + /** + * 公会战计入缓存 + * @throws Exception + */ public static void familyFightMatching() throws Exception { Set guildIds= GuilidManager.guildInfoMap.keySet(); if(guildIds.size()<1){ @@ -857,19 +866,62 @@ public class GuildLogic { TeamPosManager teamPosManager = user.getTeamPosManager(); List teamPosHeroInfos = teamPosManager.getTeamPosForHero().get(501); Iterator it = teamPosHeroInfos.iterator(); - FamilyFightInfo fightInfo = new FamilyFightInfo(); - Map> heroAllAttribute = new HashMap<>(); + FamilyFightInfo fightInfo = new FamilyFightInfo(); + Map heroAllAttribute = new HashMap<>(); while (it.hasNext()){ TeamPosHeroInfo heroInfo = it.next(); - heroManager.getHero(heroInfo.getHeroId()); - Map heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, heroManager.getHero(heroInfo.getHeroId()), false,501); - heroAllAttribute.put(heroInfo.getHeroId(),heroAttributeMap); + Hero hero = heroManager.getHero(heroInfo.getHeroId()); + Map heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false,501); + heroAllAttribute.put(heroInfo.getHeroId(),new FamilyHeroInfo(hero.getTemplateId(),hero.getLevel(),heroAttributeMap)); } fightInfo.setHeroAttribute(heroAllAttribute); RedisUtil.getInstence().putMapEntry(RedisKey.FAMILY_FIGHT,String.valueOf(guildInfo.getId()),String.valueOf(entry.getKey()),fightInfo); } } } + public void familyFightResult(User userAttack,User userDefend){ + int defendGuildId =userDefend.getPlayerInfoManager().getGuildId(); + FamilyFightInfo defendInfo = RedisUtil.getInstence().getMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(defendGuildId), String.valueOf(userDefend.getId()), FamilyFightInfo.class); + Map heroAttribute = defendInfo.getHeroAttribute(); + int seed = (int)(System.currentTimeMillis()/1000); + List heroDefendFightInfos = new ArrayList<>(); + for (Map.Entry entry : heroAttribute.entrySet()) { + Hero hero = userDefend.getHeroManager().getHero(entry.getKey()); + if (hero == null) { + continue; + } + StringBuilder skillSb = new StringBuilder(); + StringBuilder propertySb = new StringBuilder(); + String heroSkill = HeroLogic.getInstance().getHeroSkills(userDefend,hero,skillSb).toString(); + String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb,hero,entry.getValue().getAttribute()).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(); + heroDefendFightInfos.add(heroFightInfo); + } + CommonProto.FightTeamInfo fightDefendTeamInfo = CommonProto.FightTeamInfo. + newBuilder() + .addAllFightUnitList(heroDefendFightInfos) + .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(userDefend,1)) + .build(); + CommonProto.FightTeamInfo fightAttackTeamInfo = BehaviorUtil.getFightTeamInfo(userAttack, 502, true); + LuaValue getFightData = FightDataUtil.getFinalPlayerFightData(fightAttackTeamInfo, fightDefendTeamInfo); + LuaValue getOptionData = FightDataUtil.getOptionData(""); + int[] fightResult = CheckFight.getInstance().checkFight(seed,1000,getFightData,getOptionData); + int index = 2; +// 战斗之后数据处理 + for (Map.Entry entry : heroAttribute.entrySet()) { + FamilyHeroInfo value = entry.getValue(); + Map attribute = value.getAttribute(); + attribute.put(HeroAttributeEnum.CurHP.getPropertyId(),fightResult[index]); + value.setAttribute(attribute); + RedisUtil.getInstence().putMapEntry(RedisKey.FAMILY_FIGHT,String.valueOf(defendGuildId),String.valueOf(userDefend.getId()),attribute); + index++; + } + } } 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 2ba57d596..59b69aef0 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 @@ -829,7 +829,9 @@ public class HeroLogic { }else { heroAttributeMap=calHeroFinalAttributeWhenInMap(user, hero,false,teamId); } - + return getHeroPropertyBuilder(sb,hero,heroAttributeMap); + } + public StringBuilder getHeroPropertyBuilder(StringBuilder sb,Hero hero,Map heroAttributeMap){ sb.append(hero.getLevel()).append(DIVISION); SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); List templatePropetyIds = transTemplateByHeroPropertyName.get(scHero.getPropertyName());