公会战

back_recharge
lvxinran 2019-08-16 11:13:52 +08:00
parent 07d68f5c69
commit ed50688201
12 changed files with 568 additions and 254 deletions

View File

@ -116,6 +116,8 @@ public class RedisKey {
public static final String FAMILY_FIGHT = "FAMILY_FIGHT" ;
public static final String FAMILY_FIGHT_RANK = "FAMILY_FIGHT_RANK";
public static final String FAMILY_FIGHT_MATCHING_RANK ="FAMILY_FIGHT_MATCHING_RANK";
//公会战进攻获得星数排行榜
public static final String FAMILY_FIGHT_STAR_RANK = "FAMILY_FIGHT_STAR_RANK";
public static final String OPERATE_FAMILY = "OPERATE_FAMILY";
public static final String OPERATE_FAMILY_APPLY = "OPERATE_FAMILY_APPLY";

View File

@ -1,7 +1,7 @@
package com.ljsd.jieling.handler.family;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.logic.family.GuildFightLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.Family;
@ -20,6 +20,6 @@ public class FamilyDefendDetailInfoHandler extends BaseHandler {
byte[] bytes = netData.parseClientProtoNetData();
Family.FamilyDefendDetailViewRequest request = Family.FamilyDefendDetailViewRequest.parseFrom(bytes);
GuildLogic.viewDefendDetailInfo(iSession,request.getPlayerId(), MessageTypeProto.MessageType.FAMILY_VIEW_DEFEND_DETAIL_RESPONSE);
GuildFightLogic.viewDefendDetailInfo(iSession,request.getPlayerId(), MessageTypeProto.MessageType.FAMILY_VIEW_DEFEND_DETAIL_RESPONSE);
}
}

View File

@ -1,10 +1,9 @@
package com.ljsd.jieling.handler.family;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.logic.family.GuildFightLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.Family;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
@ -18,6 +17,6 @@ public class FamilyDefendInfoHandler extends BaseHandler {
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
GuildLogic.viewDefendInfo(iSession,MessageTypeProto.MessageType.FAMILY_VIEW_DEFEND_RESPONSE);
GuildFightLogic.viewDefendInfo(iSession,MessageTypeProto.MessageType.FAMILY_VIEW_DEFEND_RESPONSE);
}
}

View File

@ -0,0 +1,22 @@
package com.ljsd.jieling.handler.family;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.family.GuildFightLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.Family;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
@Component
public class FamilyFightAttackHandler extends BaseHandler<Family.FamilyFightAttackRequest> {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.FAMILY_FIGHT_ATTACK_REQUEST;
}
@Override
public void processWithProto(ISession iSession, Family.FamilyFightAttackRequest proto) throws Exception {
int attackUid = proto.getAttackUid();
GuildFightLogic.familyFightResult(iSession,attackUid, MessageTypeProto.MessageType.FAMILY_FIGHT_ATTACK_RESPONSE);
}
}

View File

@ -1,7 +1,7 @@
package com.ljsd.jieling.handler.family;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.logic.family.GuildFightLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
@ -16,6 +16,6 @@ public class FamilyFightInfoHandler extends BaseHandler {
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
GuildLogic.viewFightInfo(iSession, MessageTypeProto.MessageType.FAMILY_FIGHT_INFO_RESPONSE);
GuildFightLogic.viewFightInfo(iSession, MessageTypeProto.MessageType.FAMILY_FIGHT_INFO_RESPONSE);
}
}

View File

@ -0,0 +1,21 @@
package com.ljsd.jieling.handler.family;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.family.GuildFightLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
@Component
public class FamilyPersonalResultHandler extends BaseHandler {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.FAMILY_PERSONAL_FIGHT_RESULT_REQUEST;
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
GuildFightLogic.personalFightResult(iSession,MessageTypeProto.MessageType.FAMILY_PERSONAL_FIGHT_RESULT_RESPONSE);
}
}

View File

@ -1,7 +1,7 @@
package com.ljsd.jieling.handler.family;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.logic.family.GuildFightLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.Family;
@ -20,6 +20,6 @@ public class FamilyQuickSetDefendHandler extends BaseHandler {
byte[] bytes = netData.parseClientProtoNetData();
Family.FamilyQuickDefendRequest request = Family.FamilyQuickDefendRequest.parseFrom(bytes);
GuildLogic.quickSetDefend(iSession,request.getBuildId(),request.getUid(), MessageTypeProto.MessageType.FAMILY_QUICK_SET_DEFEND_RESPONSE);
GuildFightLogic.quickSetDefend(iSession,request.getBuildId(),request.getUid(), MessageTypeProto.MessageType.FAMILY_QUICK_SET_DEFEND_RESPONSE);
}
}

View File

@ -0,0 +1,14 @@
package com.ljsd.jieling.handler.family;
public class FamilyRound {
public static final int FAMILY_FIGHT_START = 9;
public static final int FAMILY_FIGHT_DEFEND_END = 10;
public static final int FAMILY_FIGHT_MATCHING_END =11;
public static final int FAMILY_FIGHT_ATTACK_END = 12;
public static final int FAMILY_FIGHT_END = 13;
}

View File

@ -0,0 +1,21 @@
package com.ljsd.jieling.handler.family;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.family.GuildFightLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
@Component
public class FamilyRoundInfoHandler extends BaseHandler {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.FAMILY_FIGHT_ROUND_INFO_REQUEST;
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
GuildFightLogic.getFamilyFightRoundInfo(iSession, MessageTypeProto.MessageType.FAMILY_FIGHT_ROUND_INFO_RESPONSE);
}
}

View File

@ -0,0 +1,475 @@
package com.ljsd.jieling.logic.family;
import com.ljsd.jieling.config.SGuildSetting;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.handler.family.FamilyRound;
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.GuildInfo;
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.FightDataUtil;
import com.ljsd.jieling.util.MathUtils;
import com.ljsd.jieling.util.MessageUtil;
import com.ljsd.jieling.util.TimeUtils;
import org.luaj.vm2.LuaValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.ZSetOperations;
import java.util.*;
public class GuildFightLogic {
private static final Logger LOGGER = LoggerFactory.getLogger(GuildFightLogic.class);
/**
*
*/
private static int status;
private static boolean startMatching;
/**
*
*
* @param session
* @param messageType
* @throws Exception
*/
public static void viewDefendInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
int gid = user.getPlayerInfoManager().getGuildId();
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(gid);
Map<Integer, Integer> defendInfo = guildInfo.getDefendInfo();
Family.FamilyDefendViewResponse.Builder response = Family.FamilyDefendViewResponse.newBuilder();
for (Map.Entry<Integer, Integer> entry : defendInfo.entrySet()) {
Family.FamilyDefendInfo.Builder defend = Family.FamilyDefendInfo.newBuilder();
defend.setStarCount(5);
defend.setUid(entry.getKey());
defend.setBuildId(entry.getValue());
defend.setCurForce(HeroLogic.getInstance().calTeamTotalForce(UserManager.getUser(entry.getKey()), 501, false));
response.addInfo(defend);
}
MessageUtil.sendMessage(session, 1, messageType.getNumber(), response.build(), true);
}
/**
*
*
* @param session
* @param uid
* @param messageType
* @throws Exception
*/
public static void viewDefendDetailInfo(ISession session, int uid, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(uid);
int guildId = user.getPlayerInfoManager().getGuildId();
FamilyFightInfo fightInfo = RedisUtil.getInstence().getMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(guildId), String.valueOf(uid), FamilyFightInfo.class);
TeamPosManager teamPosManager = user.getTeamPosManager();
CommonProto.Team.Builder team = CommonProto.Team.newBuilder();
CommonProto.TeamOneTeamInfo.Builder oneInfo = CommonProto.TeamOneTeamInfo.newBuilder();
for(Map.Entry<String, FamilyHeroInfo> entry:fightInfo.getHeroAttribute().entrySet()){
int templateId = entry.getValue().getTempleteId();
team.addHeroTid(templateId);
Map<Integer, Integer> attribute = entry.getValue().getAttribute();
if(status==3){
int remainHp = attribute.get(HeroAttributeEnum.CurHP.getPropertyId())*100/attribute.get(HeroAttributeEnum.Hp.getPropertyId());
LOGGER.info("血量为百分之{}",remainHp);
oneInfo.addRemainHp(remainHp);
}
}
oneInfo.setTeam(team);
oneInfo.setTotalForce(HeroLogic.getInstance().calTeamTotalForce(user, 501, false));
if (teamPosManager.getTeamPosForPoken().get(1) != null && teamPosManager.getTeamPosForPoken().get(1).size() > 0) {
for (TeamPosForPokenInfo posForPokenInfo : teamPosManager.getTeamPosForPoken().get(1)) {
oneInfo.addPokemonInfos(posForPokenInfo.getPokenId());
}
}
Family.FamilyDefendDetailViewResponse.Builder response = Family.FamilyDefendDetailViewResponse.newBuilder();
response.setTeamInfo(oneInfo);
MessageUtil.sendMessage(session, 1, messageType.getNumber(), response.build(), true);
}
/**
*
*
* @param session
* @param messageType
*/
public static void quickSetDefend(ISession session, int buildId, int uid, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(uid);
TeamPosManager teamPosManager = user.getTeamPosManager();
if (teamPosManager.getTeamPosForHero().get(501) == null || teamPosManager.getTeamPosForHero().get(501).size() < 1) {
teamPosManager.updateTeamPosByTeamId(501, teamPosManager.getTeamPosForHero().get(1));
}
if (buildId == 0) {
buildId = 1;
}
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(user.getPlayerInfoManager().getGuildId());
SGuildSetting guildSetting = SGuildSetting.sGuildSetting;
int memberType = GuildLogic.getMemberType(uid, guildInfo.getMembers());
guildInfo.updateDefendInfo(uid, buildId);
Family.FamilyDefendInfo.Builder defend = Family.FamilyDefendInfo.newBuilder();
defend.setBuildId(buildId);
defend.setUid(uid);
defend.setStarCount(guildSetting.getStarNum()[memberType-1]);
defend.setCurForce(HeroLogic.getInstance().calTeamTotalForce(user, 501, false));
GuildLogic.sendIndicationToMember(guildInfo, MessageTypeProto.MessageType.FAMILY_QUICK_SET_DEFEND_INDICATION, defend.build());
MessageUtil.sendMessage(session, 1, messageType.getNumber(), null, true);
}
private static Family.FamilyFightInfo familyFightDetailInfo(int guildId) throws Exception {
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId);
Map<Integer, Integer> defendInfo = guildInfo.getDefendInfo();
Family.FamilyFightInfo.Builder fightInfo = Family.FamilyFightInfo.newBuilder();
fightInfo.setGid(guildId);
for (int i = 0; i < 3; i++) {
Family.FamilyBuildBuffInfo.Builder buffInfo = Family.FamilyBuildBuffInfo.newBuilder();
buffInfo.setBuildId(i + 1);
buffInfo.setBuffId(i + 1);
fightInfo.addBuildBuff(buffInfo);
}
for (Map.Entry<Integer, Integer> entry : defendInfo.entrySet()) {
Family.FamilyFightPlayerInfo.Builder playerInfo = Family.FamilyFightPlayerInfo.newBuilder();
playerInfo.setBuildId(entry.getValue());
playerInfo.setStarCount(5);
PlayerManager playerManager = UserManager.getUser(entry.getKey()).getPlayerInfoManager();
Family.FamilyUserInfo.Builder userInfo = Family.FamilyUserInfo.newBuilder()
.setRoleUid(entry.getKey())
.setUserName(playerManager.getNickName())
.setUserLevel(playerManager.getLevel())
.setPosition(2)
.setSoulForce(HeroLogic.getInstance().calTeamTotalForce(UserManager.getUser(entry.getKey()), 501, false))
.setHead(playerManager.getHead())
.setFrame(playerManager.getHeadFrame())
.setContribute(0);
playerInfo.setUserInfo(userInfo.build());
fightInfo.addUser(playerInfo);
}
return fightInfo.build();
}
/**
*
*
* @param session
* @param messageType
* @throws Exception
*/
public static void viewFightInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
int guildId = user.getPlayerInfoManager().getGuildId();
int enemyId = getEnemyFamily(guildId);
Family.FamilyFightInfoResponse.Builder builder = Family.FamilyFightInfoResponse.newBuilder();
builder.addInfo(familyFightDetailInfo(guildId));
builder.addInfo(familyFightDetailInfo(enemyId));
MessageUtil.sendMessage(session, 1, messageType.getNumber(), builder.build(), true);
}
/**
*
*
* @throws Exception
*/
public static void familyFightMatching() throws Exception {
Set<Integer> guildIds = GuilidManager.guildInfoMap.keySet();
if (guildIds.size() < 1) {
return;
}
RedisUtil redisUtil = RedisUtil.getInstence();
String key = RedisKey.getKey(RedisKey.FAMILY_FIGHT_RANK, "", false);
Set<String> rank = redisUtil.getZset(key, 0, redisUtil.getZsetSize(key));
for (Integer gid : guildIds) {
//匹配处理
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(gid);
if (guildInfo.getDefendInfo() != null && guildInfo.getDefendInfo().size() > 0) {
String matchingKey = RedisKey.getKey(RedisKey.FAMILY_FIGHT_MATCHING_RANK, "", false);
int random = MathUtils.randomInt(30);
if (!rank.contains(gid.toString())) {
redisUtil.zsetAddOne(key, gid.toString(), 100);
redisUtil.zsetAddOne(matchingKey, gid.toString(), 100 + random);
} else {
Double zSetScore = redisUtil.getZSetScore(RedisKey.FAMILY_FIGHT_RANK, "", gid.toString());
redisUtil.zsetAddOne(matchingKey, gid.toString(), zSetScore + random);
}
}
Map<Integer, Integer> defendInfo = guildInfo.getDefendInfo();
if (defendInfo == null || defendInfo.size() < 1) {
continue;
}
//血量记录处理,星级记录处理
SGuildSetting guildSetting = SGuildSetting.sGuildSetting;
for (Map.Entry<Integer, Integer> entry : defendInfo.entrySet()) {
User user = UserManager.getUser(entry.getKey());
int memberType = GuildLogic.getMemberType(entry.getKey(), guildInfo.getMembers());
HeroManager heroManager = user.getHeroManager();
TeamPosManager teamPosManager = user.getTeamPosManager();
List<TeamPosHeroInfo> teamPosHeroInfos = teamPosManager.getTeamPosForHero().get(501);
Iterator<TeamPosHeroInfo> it = teamPosHeroInfos.iterator();
FamilyFightInfo fightInfo = new FamilyFightInfo();
Map<String, FamilyHeroInfo> heroAllAttribute = new HashMap<>();
while (it.hasNext()) {
TeamPosHeroInfo heroInfo = it.next();
Hero hero = heroManager.getHero(heroInfo.getHeroId());
Map<Integer, Integer> heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false, 501);
heroAllAttribute.put(heroInfo.getHeroId(), new FamilyHeroInfo(hero.getTemplateId(), hero.getLevel(), heroAttributeMap));
}
fightInfo.setHeroAttribute(heroAllAttribute);
fightInfo.setStarCount(guildSetting.getStarNum()[memberType-1]);
redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(guildInfo.getId()), String.valueOf(entry.getKey()), fightInfo);
}
}
for (Integer gid : guildIds) {
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(gid);
int enemyFamily = getEnemyFamily(guildInfo.getId());
if (enemyFamily == -1) {
continue;
}
GuildInfo enemyInfo = GuilidManager.guildInfoMap.get(enemyFamily);
Family.EnemyFamily familyInfo = Family.EnemyFamily.newBuilder().setId(enemyInfo.getId()).setLevel(enemyInfo.getLevel()).setName(enemyInfo.getName()).setPictureId(1).build();
GuildLogic.sendIndicationToMember(guildInfo, MessageTypeProto.MessageType.FAMILY_FIGHT_MATCHING_SUCCESS_INDICATION, familyInfo);
}
}
/**
*
*
* @param myFamilyId
* @return
*/
private static int getEnemyFamily(int myFamilyId) {
RedisUtil redisUtil = RedisUtil.getInstence();
Long matchingRank = redisUtil.getZSetreverseRank(RedisKey.FAMILY_FIGHT_MATCHING_RANK, "", String.valueOf(myFamilyId));
int enmeyFamilyId;
long rank;
if (matchingRank % 2 == 1) {
rank = matchingRank;
} else {
rank = matchingRank - 2;
}
Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.FAMILY_FIGHT_MATCHING_RANK, "", rank, rank);
if (zsetreverseRangeWithScores.size() != 1) {
return -1;
} else {
String value = zsetreverseRangeWithScores.iterator().next().getValue();
enmeyFamilyId = Integer.parseInt(value);
}
return enmeyFamilyId;
}
/**
*
*
* @param userAttack
* @param userDefend
*/
public static void familyFightResult(ISession session, int defendUid, MessageTypeProto.MessageType messageType) throws Exception {
User userAttack = UserManager.getUser(session.getUid());
User userDefend = UserManager.getUser(defendUid);
int defendGuildId = userDefend.getPlayerInfoManager().getGuildId();
RedisUtil redisUtil = RedisUtil.getInstence();
FamilyFightInfo defendInfo = redisUtil.getMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(defendGuildId), String.valueOf(userDefend.getId()), FamilyFightInfo.class);
Map<String, FamilyHeroInfo> heroAttribute = defendInfo.getHeroAttribute();
int seed = (int) (System.currentTimeMillis() / 1000);
List<CommonProto.FightUnitInfo> heroDefendFightInfos = new ArrayList<>();
for (Map.Entry<String, FamilyHeroInfo> 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);
for (int i = 0; i < fightResult.length; i++) {
System.out.println(fightResult[i]);
}
int index = 2;
// 战斗之后数据处理
for (Map.Entry<String, FamilyHeroInfo> entry : heroAttribute.entrySet()) {
FamilyHeroInfo value = entry.getValue();
Map<Integer, Integer> attribute = value.getAttribute();
if(fightResult[0]==0) {
attribute.put(HeroAttributeEnum.CurHP.getPropertyId(), fightResult[index]);
}else{
attribute.put(HeroAttributeEnum.CurHP.getPropertyId(), 0);
}
value.setAttribute(attribute);
index++;
}
defendInfo.setHeroAttribute(heroAttribute);
if (fightResult[0] == 0) {
defendInfo.setStarCount(defendInfo.getStarCount() - 1);
}
redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(defendGuildId), String.valueOf(userDefend.getId()), defendInfo);
//获得星数处理
int attackGuildId = userAttack.getPlayerInfoManager().getGuildId();
String attackRankKey = RedisKey.getKey(RedisKey.FAMILY_FIGHT_STAR_RANK, String.valueOf(attackGuildId), false);
Double starCount = redisUtil.getZSetScore(RedisKey.FAMILY_FIGHT_STAR_RANK, String.valueOf(attackGuildId), String.valueOf(userAttack.getId()));
redisUtil.zsetAddOne(attackRankKey,String.valueOf(userAttack.getId()),starCount+1);
Family.FamilyFightAttackResponse response = Family.FamilyFightAttackResponse.newBuilder().setResult(fightResult[0]).setStarCount(1).build();
MessageUtil.sendMessage(session, 1, messageType.getNumber(), response, true);
}
/**
*
*
* @param session
* @param messageType
*/
public static void getFamilyFightRoundInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception {
int startFightTime;
int roundStartTime = 0;
int roundEndTime = 0;
int hour = TimeUtils.getHourOfDay();
//活动开启时间
if (hour < FamilyRound.FAMILY_FIGHT_END) {
startFightTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_START) / 1000);
} else {
startFightTime = (int) ((TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_START) + TimeUtils.DAY) / 1000);
}
//阶段以及时间段
if (hour >= FamilyRound.FAMILY_FIGHT_START && hour < FamilyRound.FAMILY_FIGHT_DEFEND_END) {
roundStartTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_START) / 1000);
roundEndTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_DEFEND_END) / 1000);
} else if (hour >= FamilyRound.FAMILY_FIGHT_DEFEND_END && hour < FamilyRound.FAMILY_FIGHT_MATCHING_END) {
roundStartTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_DEFEND_END) / 1000);
roundEndTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_MATCHING_END) / 1000);
} else if (hour >= FamilyRound.FAMILY_FIGHT_MATCHING_END && hour < FamilyRound.FAMILY_FIGHT_ATTACK_END) {
roundStartTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_MATCHING_END) / 1000);
roundEndTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_ATTACK_END) / 1000);
} else if (hour >= FamilyRound.FAMILY_FIGHT_ATTACK_END && hour < FamilyRound.FAMILY_FIGHT_END) {
roundStartTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_ATTACK_END) / 1000);
roundEndTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_END) / 1000);
}
int enemyFamily = getEnemyFamily(UserManager.getUser(session.getUid()).getPlayerInfoManager().getGuildId());
Family.FamilyFightRoundResponse.Builder response = Family.FamilyFightRoundResponse.newBuilder()
.setType(status)
.setStartTime(startFightTime)
.setRoundStartTime(roundStartTime)
.setRoundEndTime(roundEndTime)
.setJoinType(1);
if (enemyFamily != -1) {
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(enemyFamily);
Family.EnemyFamily familyInfo = Family.EnemyFamily.newBuilder().setId(guildInfo.getId()).setLevel(guildInfo.getLevel()).setName(guildInfo.getName()).setPictureId(1).build();
response.setEnemy(familyInfo);
}
MessageUtil.sendMessage(session, 1, messageType.getNumber(), response.build(), true);
}
/**
*
*
* @throws Exception
*/
public static void familyFightStatus() throws Exception {
if (status == 2 && startMatching) {
familyFightMatching();
startMatching = false;
}
int hour = TimeUtils.getHourOfDay();
if (status == 0 && hour == FamilyRound.FAMILY_FIGHT_START) {
LOGGER.info("阶段变为布防");
status = 1;
} else if (status == 1 && hour == FamilyRound.FAMILY_FIGHT_DEFEND_END) {
status = 2;
LOGGER.info("阶段变为匹配");
startMatching = true;
} else if (status == 2 && hour == FamilyRound.FAMILY_FIGHT_MATCHING_END) {
status = 3;
LOGGER.info("阶段变为进攻");
} else if (status == 3 && hour == FamilyRound.FAMILY_FIGHT_ATTACK_END) {
status = 4;
LOGGER.info("阶段变为结算");
} else if (status == 4 && hour == FamilyRound.FAMILY_FIGHT_END) {
status = 0;
LOGGER.info("阶段变为等待");
} else if (hour > FamilyRound.FAMILY_FIGHT_END || hour < FamilyRound.FAMILY_FIGHT_START) {
status = 0;
removeMatchingInfo();
}
}
/**
*
*/
private static void removeMatchingInfo(){
RedisUtil redisUtil = RedisUtil.getInstence();
String key = RedisKey.getKey(RedisKey.FAMILY_FIGHT_MATCHING_RANK,"",false);
redisUtil.removeZSetRangeByRank(key,0,redisUtil.getZsetSize(key));
}
/**
*
*/
public void accountFamilyFightResult() {
}
/**
*
* @param session
* @param messageType
* @throws Exception
*/
public static void personalFightResult(ISession session, MessageTypeProto.MessageType messageType) throws Exception {
int guildId = UserManager.getUser(session.getUid()).getPlayerInfoManager().getGuildId();
Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.FAMILY_FIGHT_STAR_RANK, String.valueOf(guildId), 0, 20);
Iterator<ZSetOperations.TypedTuple<String>> it = zsetreverseRangeWithScores.iterator();
int rank = 1;
Family.PersonalFightResultResponse.Builder response = Family.PersonalFightResultResponse.newBuilder();
while (it.hasNext()){
ZSetOperations.TypedTuple<String> personal = it.next();
int uid = Integer.parseInt(personal.getValue());
PlayerManager playerInfoManager = UserManager.getUser(uid).getPlayerInfoManager();
Family.PersonalFightResult.Builder fightResult = Family.PersonalFightResult.newBuilder()
.setRank(rank)
.setAttackCount(2)
.setUid(uid)
.setHead(1)
.setHeadFrame(playerInfoManager.getHeadFrame())
.setPosition(1)
.setName(playerInfoManager.getNickName())
.setStarCount(personal.getScore().intValue());
response.addResult(fightResult.build());
rank++;
}
MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true);
}
}

View File

@ -10,6 +10,7 @@ import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.family.FamilyRound;
import com.ljsd.jieling.handler.map.MapManager;
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
import com.ljsd.jieling.logic.OnlineUserManager;
@ -66,7 +67,6 @@ public class GuildLogic {
for(Set<Integer> members : guildInfo.getMembers().values()){
for(int uidOfMember : members){
User userMember = UserManager.getUser(uidOfMember);
userMember.getGuildMyInfo().move(System.currentTimeMillis());
builder.addFamilyWalkIndicaiton(CBean2Proto.getFamilyWalkIndicaiton(userMember));
}
}
@ -104,8 +104,6 @@ public class GuildLogic {
.setFamilyWalkIndicaiton(CBean2Proto.getFamilyWalkIndicaiton(user))
.build();
MessageUtil.sendMessage(session,1,msgId,build,true);
familyFightMatching();
}
public static String checkForCreateGuild( User user,String familyName,String announce) throws Exception {
@ -232,7 +230,6 @@ public class GuildLogic {
addGuildLog(guildInfo.getId(),GuildDef.Log.JOIN,user.getPlayerInfoManager().getNickName());
Family.FamilyJoinIndicaion build = Family.FamilyJoinIndicaion.newBuilder().setFamilyBaseInfo(CBean2Proto.getFamilyBaseInfo(guildInfo)).setFamilyUserInfo(CBean2Proto.getFamilyUserInfo(user, GlobalsDef.MEMBER)).build();
Family.FamilyJoinResponse response = Family.FamilyJoinResponse.newBuilder().setFamilyJoinIndicaion(build).build();
MessageUtil.sendMessage(session,1,msgId,response,true);
}
@ -402,8 +399,6 @@ public class GuildLogic {
targetUser.getPlayerInfoManager().setGuildId(guildInfo.getId());
GuilidManager.removeMineApplyGuildInfos(guildInfo.getId(),applyId);
GuilidManager.removeOneApplyGuildInfos(guildInfo.getId(),applyId);
Family.FamilyWalkIndicaiton familyWalkIndicaiton = CBean2Proto.getFamilyWalkIndicaiton(targetUser);
sendIndicationToMember(guildInfo, MessageTypeProto.MessageType.FAMILY_WALK_INDICATION,familyWalkIndicaiton);
}catch (Exception e){
LOGGER.error("the exception={}",e);
}finally {
@ -707,21 +702,16 @@ public class GuildLogic {
return;
}
GuildMyInfo guildMyInfo = user.getGuildMyInfo();
user.getGuildMyInfo().move(System.currentTimeMillis());
LOGGER.info("old ={},path={}",guildMyInfo.getCurPos(),path);
LOGGER.info("cur ={},path={}",guildMyInfo.getCurPos(),path);
boolean continuous = CellUtil.isContinuous(guildMyInfo.getCurPos(),path);
if(!continuous){
MessageUtil.sendErrorResponse(session,0,msgId,"路线有误");
return;
}
user.getGuildMyInfo().move(path);
LOGGER.info("cur ={},path={}",guildMyInfo.getCurPos(),path);
Family.FamilyWalkIndicaiton familyWalkIndicaiton = CBean2Proto.getFamilyWalkIndicaiton(user);
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId);
sendIndicationToMember(guildInfo, MessageTypeProto.MessageType.FAMILY_WALK_INDICATION,familyWalkIndicaiton);
MessageUtil.sendMessage(session,1,msgId,null,true);
}
public static void updateMyPos(User user) {
@ -778,90 +768,13 @@ public class GuildLogic {
}
}
}
/**
*
* @param session
* @param messageType
* @throws Exception
*/
public static void viewDefendInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
int gid = user.getPlayerInfoManager().getGuildId();
GuildInfo guildInfo =GuilidManager.guildInfoMap.get(gid);
Map<Integer, Integer> defendInfo = guildInfo.getDefendInfo();
Family.FamilyDefendViewResponse.Builder response = Family.FamilyDefendViewResponse.newBuilder();
for(Map.Entry<Integer, Integer> entry:defendInfo.entrySet()){
Family.FamilyDefendInfo.Builder defend = Family.FamilyDefendInfo.newBuilder();
defend.setStarCount(5);
defend.setUid(entry.getKey());
defend.setBuildId(entry.getValue());
defend.setCurForce(HeroLogic.getInstance().calTeamTotalForce(UserManager.getUser(entry.getKey()),501,false));
response.addInfo(defend);
}
MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true);
}
/**
*
* @param session
* @param uid
* @param messageType
* @throws Exception
*/
public static void viewDefendDetailInfo(ISession session,int uid,MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(uid);
TeamPosManager teamPosManager = user.getTeamPosManager();
CommonProto.Team.Builder team = CommonProto.Team.newBuilder();
for (TeamPosHeroInfo heroInfo:teamPosManager.getTeamPosForHero().get(501)) {
int templateId = user.getHeroManager().getHero(heroInfo.getHeroId()).getTemplateId();
team.addHeroTid(templateId);
}
CommonProto.TeamOneTeamInfo.Builder oneInfo = CommonProto.TeamOneTeamInfo.newBuilder()
.setTeam(team);
oneInfo.setTotalForce(HeroLogic.getInstance().calTeamTotalForce(user,501,false));
if(teamPosManager.getTeamPosForPoken().get(1)!=null&&teamPosManager.getTeamPosForPoken().get(1).size()>0){
for(TeamPosForPokenInfo posForPokenInfo:teamPosManager.getTeamPosForPoken().get(1)){
oneInfo.addPokemonInfos(posForPokenInfo.getPokenId());
}
}
Family.FamilyDefendDetailViewResponse.Builder response = Family.FamilyDefendDetailViewResponse.newBuilder();
response.setTeamInfo(oneInfo);
MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true);
}
/**
*
* @param session
* @param messageType
*/
public static void quickSetDefend(ISession session,int buildId,int uid, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(uid);
TeamPosManager teamPosManager = user.getTeamPosManager();
if(teamPosManager.getTeamPosForHero().get(501)==null||teamPosManager.getTeamPosForHero().get(501).size()<1){
teamPosManager.updateTeamPosByTeamId(501,teamPosManager.getTeamPosForHero().get(1));
}
if(buildId==0){
buildId = 1;
}
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(user.getPlayerInfoManager().getGuildId());
guildInfo.updateDefendInfo(uid,buildId);
Family.FamilyDefendInfo.Builder defend = Family.FamilyDefendInfo.newBuilder();
defend.setBuildId(buildId);
defend.setUid(uid);
defend.setStarCount(5);
defend.setCurForce(HeroLogic.getInstance().calTeamTotalForce(user,501,false));
sendIndicationToMember(guildInfo,MessageTypeProto.MessageType.FAMILY_QUICK_SET_DEFEND_INDICATION,defend.build());
MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true);
}
/**
* 线indication
* @param guildInfo
* @param messageType
* @param generatedMessage
*/
private static void sendIndicationToMember(GuildInfo guildInfo, MessageTypeProto.MessageType messageType, GeneratedMessage generatedMessage){
public static void sendIndicationToMember(GuildInfo guildInfo, MessageTypeProto.MessageType messageType, GeneratedMessage generatedMessage){
Map<Integer, Set<Integer>> members = guildInfo.getMembers();
for(Set<Integer> items : members.values()){
for(Integer sendUid : items){
@ -872,159 +785,4 @@ public class GuildLogic {
}
}
}
private static Family.FamilyFightInfo familyFightDetailInfo(int guildId) throws Exception {
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId);
Map<Integer, Integer> defendInfo = guildInfo.getDefendInfo();
Family.FamilyFightInfo.Builder fightInfo = Family.FamilyFightInfo.newBuilder();
fightInfo.setGid(guildId);
for(int i = 0 ; i <3 ;i ++){
Family.FamilyBuildBuffInfo.Builder buffInfo = Family.FamilyBuildBuffInfo.newBuilder();
buffInfo.setBuildId(i+1);
buffInfo.setBuffId(i+1);
fightInfo.addBuildBuff(buffInfo);
}
for(Map.Entry<Integer, Integer> entry:defendInfo.entrySet()){
Family.FamilyFightPlayerInfo.Builder playerInfo = Family.FamilyFightPlayerInfo.newBuilder();
playerInfo.setBuildId(entry.getValue());
playerInfo.setStarCount(5);
PlayerManager playerManager = UserManager.getUser(entry.getKey()).getPlayerInfoManager();
Family.FamilyUserInfo.Builder userInfo =Family.FamilyUserInfo.newBuilder()
.setRoleUid(entry.getKey())
.setUserName(playerManager.getNickName())
.setUserLevel(playerManager.getLevel())
.setPosition(2)
.setSoulForce(HeroLogic.getInstance().calTeamTotalForce(UserManager.getUser(entry.getKey()),501,false))
.setHead(playerManager.getHead())
.setFrame(playerManager.getHeadFrame())
.setContribute(0);
playerInfo.setUserInfo(userInfo.build());
fightInfo.addUser(playerInfo);
}
return fightInfo.build();
}
/**
*
* @param session
* @param messageType
* @throws Exception
*/
public static void viewFightInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception {
User user = UserManager.getUser(session.getUid());
int guildId = user.getPlayerInfoManager().getGuildId();
int enemyId = 13;
if(guildId==13){
enemyId = 14;
}
Family.FamilyFightInfoResponse.Builder builder = Family.FamilyFightInfoResponse.newBuilder();
builder.addInfo(familyFightDetailInfo(guildId));
builder.addInfo(familyFightDetailInfo(enemyId));
MessageUtil.sendMessage(session,1,messageType.getNumber(),builder.build(),true);
}
/**
*
* @throws Exception
*/
public static void familyFightMatching() throws Exception {
Set<Integer> guildIds= GuilidManager.guildInfoMap.keySet();
if(guildIds.size()<1){
return;
}
RedisUtil redisUtil = RedisUtil.getInstence();
Set<String> rank = redisUtil.getZset(RedisKey.FAMILY_FIGHT_RANK, 0, redisUtil.getZsetSize(RedisKey.FAMILY_FIGHT_RANK));
for(Integer gid:guildIds){
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(gid);
if(guildInfo.getDefendInfo()!=null&&guildInfo.getDefendInfo().size()>0) {
if (!rank.contains(gid.toString())) {
String key = RedisKey.getKey(RedisKey.FAMILY_FIGHT_MATCHING_RANK, gid.toString(), false);
redisUtil.zsetAddOne(key, gid.toString(), 100);
} else {
Double zSetScore = redisUtil.getZSetScore(RedisKey.FAMILY_FIGHT_RANK, "", gid.toString());
redisUtil.zsetAddOne(RedisKey.FAMILY_FIGHT_MATCHING_RANK, gid.toString(), zSetScore);
}
}
Map<Integer, Integer> defendInfo = guildInfo.getDefendInfo();
if(defendInfo==null||defendInfo.size()<1){
continue;
}
for(Map.Entry<Integer,Integer> entry:defendInfo.entrySet()){
User user = UserManager.getUser(entry.getKey());
HeroManager heroManager = user.getHeroManager();
TeamPosManager teamPosManager = user.getTeamPosManager();
List<TeamPosHeroInfo> teamPosHeroInfos = teamPosManager.getTeamPosForHero().get(501);
Iterator<TeamPosHeroInfo> it = teamPosHeroInfos.iterator();
FamilyFightInfo fightInfo = new FamilyFightInfo();
Map<String ,FamilyHeroInfo> heroAllAttribute = new HashMap<>();
while (it.hasNext()){
TeamPosHeroInfo heroInfo = it.next();
Hero hero = heroManager.getHero(heroInfo.getHeroId());
Map<Integer, Integer> heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false,501);
heroAllAttribute.put(heroInfo.getHeroId(),new FamilyHeroInfo(hero.getTemplateId(),hero.getLevel(),heroAttributeMap));
}
fightInfo.setHeroAttribute(heroAllAttribute);
redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT,String.valueOf(guildInfo.getId()),String.valueOf(entry.getKey()),fightInfo);
}
}
// redisUtil.getZset(key,0, redisUtil.getZsetSize(RedisKey.FAMILY_FIGHT_RANK));
}
/**
*
* @param userAttack
* @param userDefend
*/
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<String, FamilyHeroInfo> heroAttribute = defendInfo.getHeroAttribute();
int seed = (int)(System.currentTimeMillis()/1000);
List<CommonProto.FightUnitInfo> heroDefendFightInfos = new ArrayList<>();
for (Map.Entry<String, FamilyHeroInfo> 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<String, FamilyHeroInfo> entry : heroAttribute.entrySet()) {
FamilyHeroInfo value = entry.getValue();
Map<Integer, Integer> attribute = value.getAttribute();
attribute.put(HeroAttributeEnum.CurHP.getPropertyId(),fightResult[index]);
value.setAttribute(attribute);
index++;
}
defendInfo.setHeroAttribute(heroAttribute);
if(fightResult[0]==0){
defendInfo.setStarCount(defendInfo.getStarCount()-1);
}
RedisUtil.getInstence().putMapEntry(RedisKey.FAMILY_FIGHT,String.valueOf(defendGuildId),String.valueOf(userDefend.getId()),defendInfo);
}
public void accountFamilyFightResult(){
}
}

View File

@ -14,6 +14,7 @@ import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.arena.ArenaLogic;
import com.ljsd.jieling.logic.family.GuildFightLogic;
import com.ljsd.jieling.logic.fight.CheckFight;
import com.ljsd.jieling.logic.fight.CombatLogic;
import com.ljsd.jieling.logic.store.StoreLogic;
@ -49,6 +50,7 @@ public class MinuteTask extends Thread {
fiveMinuteOnlineSend();
CheckFight.getInstance().luaHotFix();
MongoUtil.getInstence().lastUpdate();
GuildFightLogic.familyFightStatus();
LOGGER.info("MinuteTask end...");
} catch (Exception e) {
LOGGER.error("e",e);