diff --git a/fightmanager/src/main/java/com/ljsd/fight/FightType.java b/fightmanager/src/main/java/com/ljsd/fight/FightType.java index a261cfb05..622c723a3 100644 --- a/fightmanager/src/main/java/com/ljsd/fight/FightType.java +++ b/fightmanager/src/main/java/com/ljsd/fight/FightType.java @@ -18,6 +18,9 @@ public enum FightType { EXPEDITION(13), // 远征 GuildChallenge(14), //公会副本 + NewGeneral(15),//新将 + TenDespairArray(16),//十绝阵 + Firend(17),//好友 ; diff --git a/serverlogic/src/main/java/com/ljsd/GmService.java b/serverlogic/src/main/java/com/ljsd/GmService.java index 200223c8c..1c34d6704 100644 --- a/serverlogic/src/main/java/com/ljsd/GmService.java +++ b/serverlogic/src/main/java/com/ljsd/GmService.java @@ -14,6 +14,7 @@ import com.ljsd.jieling.logic.activity.event.UserForceChangeEvent; import com.ljsd.jieling.logic.activity.eventhandler.UserForceUpEventHandler; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.fight.FightRecordLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.thrift.idl.InvalidOperException; import com.ljsd.jieling.thrift.idl.RPCRequestGMIFace; @@ -56,8 +57,6 @@ public class GmService implements RPCRequestGMIFace.Iface { try { String[] parameters = java.util.Arrays.copyOfRange(arg, 1, arg.length); - - if (obj instanceof GmRoleAbstract) { //todo Map rechargeInfoMap = new HashMap<>(); @@ -97,7 +96,7 @@ public class GmService implements RPCRequestGMIFace.Iface { int uid = Integer.parseInt(value); sendIds.add(uid); } - }else{ + } else { String[] ids = parameters[0].split("#"); for (String id : ids) { sendIds.add(Integer.valueOf(id)); @@ -123,6 +122,19 @@ public class GmService implements RPCRequestGMIFace.Iface { } else { LOGGER.info("gm________________________start:"+cmd); obj.exec(parameters); + + // 获取玩家战报系统 + if (cmd.contains("fightrecord")) { + if (cmd.contains("delete")) { + FightRecordLogic.getInstance().delete(); + } else if (cmd.contains("all")){ + String allValue = FightRecordLogic.getInstance().getAll(Integer.parseInt(parameters[2])); + result.setResultMsg(allValue); + } else { + String oneRecord = FightRecordLogic.getInstance().getOneRecord(parameters[0]); + result.setResultMsg(oneRecord); + } + } LOGGER.info("gm________________________end:"+cmd); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java index 57e63ea9f..b4e643811 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java @@ -232,7 +232,7 @@ public class ChatLogic { * 系统消息 * @param multiple 跑马灯次数 0 不显示 */ - public void sendSysChatMessage(String message,int messageType ,int itemId, int type,int startTime, int endTime, int priorityLevel, int multiple) { + public void sendSysChatMessage(String message,int messageType ,String itemId, int type,int startTime, int endTime, int priorityLevel, int multiple) { long messageId = RedisUtil.getInstence().increment(GameApplication.serverId + RedisKey.CHAT_SYS_MSG_ID+ GameApplication.serverId); ChatProto.ChatInfo chatInfo = CBean2Proto.getSysChatInfoBuilder(message,messageType,itemId ,type,startTime,endTime,priorityLevel,multiple,messageId); MessageCache.addSystemMsg(chatInfo,messageId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java index 8622bfd0f..8d76b0beb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/Expedition/StartExpeditionBattleRequest.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.handler.Expedition; +import com.ljsd.fight.FightType; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.exception.ErrorCode; @@ -9,6 +10,7 @@ import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.expedition.ExpeditionLogic; import com.ljsd.fight.DefFightSnapData; +import com.ljsd.jieling.logic.fight.FightRecordLogic; import com.ljsd.jieling.logic.fight.FightUtil; import com.ljsd.jieling.network.session.ISession; import rpc.protocols.CommonProto; @@ -110,12 +112,19 @@ public class StartExpeditionBattleRequest extends BaseHandler0){ CommonProto.Drop.Builder drop = ItemUtil.drop(user, sDailyChallengeConfig.getReward(), 1, 0, 1); builder.setDrop(drop); 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 22dba5acd..dd7215fda 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 @@ -1,8 +1,10 @@ package com.ljsd.jieling.handler.map.behavior; +import com.fasterxml.jackson.core.JsonProcessingException; import com.googlecode.protobuf.format.JsonFormat; import com.ljsd.fight.FightType; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.logic.fight.FightRecordLogic; import com.ljsd.jieling.logic.fight.FightUtil; import com.ljsd.jieling.util.CBean2Proto; import config.MapPointConfig; @@ -186,8 +188,11 @@ public class BehaviorUtil { fightData.setFightSeed(seed); fightData.setFightMaxTime(maxTime); fightData.setFightType(FightType.MapExploreFight.getType()); + fightData.setFightId(FightUtil.getFightId(user.getId(),FightType.MapExploreFight.getType())); fightStartRespons.setFightData(fightData); + // 记录战报 + FightRecordLogic.getInstance().addRecordMap(user,fightData.build()); String key = RedisKey.getKey(RedisKey.FIGHT, Integer.toString(user.getId()), false); Map fightInfo = new HashMap<>(); @@ -334,7 +339,7 @@ public class BehaviorUtil { } } - public static void getLevelDifficultyifficuFightInfo(User user,FightType fightType,int groupId,int teamId, int maxTime,FightInfoProto.FightStartResponse.Builder fightStartRespons,String fightKey) { + public static void getLevelDifficultyifficuFightInfo(User user,FightType fightType,int groupId,int teamId, int maxTime,FightInfoProto.FightStartResponse.Builder fightStartRespons,String fightKey) throws JsonProcessingException { CommonProto.FightData.Builder fightData = CommonProto.FightData.newBuilder(); CommonProto.FightTeamInfo fightTeamInfo = getFightTeamInfo(user, teamId,true); fightData.setHeroFightInfos(fightTeamInfo); @@ -351,8 +356,11 @@ public class BehaviorUtil { fightData.setFightSeed(seed); fightData.setFightType(fightType.getType()); fightData.setFightMaxTime(maxTime); + fightData.setFightId(FightUtil.getFightId(user.getId(),fightType.getType())); fightStartRespons.setFightData(fightData); + // 记录战报 + FightRecordLogic.getInstance().addRecordMap(user,fightData.build()); String key = RedisKey.getKey(fightKey,Integer.toString(user.getId()), false); Map fightInfo = new HashMap<>(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapType/EndlessMap.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapType/EndlessMap.java index 8800ec89f..797810f5d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapType/EndlessMap.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapType/EndlessMap.java @@ -12,6 +12,7 @@ import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.fight.FightDispatcher; +import com.ljsd.jieling.logic.fight.FightRecordLogic; import com.ljsd.jieling.logic.fight.GameFightType; import com.ljsd.jieling.logic.fight.PVEFightEvent; import com.ljsd.jieling.logic.fight.result.FightResult; @@ -279,6 +280,10 @@ public class EndlessMap extends AbstractMap{ fastFightResponseBuilder.setEnventDrop(drop.build()); fastFightResponseBuilder.setResult(resultCode); fastFightResponseBuilder.setFightData(fightResult.getFightData()); + + // 记录战报 + FightRecordLogic.getInstance().addRecordMap(user,fightResult.getFightData()); + //todo 临时粘贴 mapManager.updateEndlessFightCount(1+mapManager.getEndlessMapInfo().getFightCount()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapType/TowerMap.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapType/TowerMap.java index 59e007e1a..2540e8194 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapType/TowerMap.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/mapType/TowerMap.java @@ -16,6 +16,7 @@ import com.ljsd.jieling.logic.dao.TeamPosManager; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.fight.FightDispatcher; +import com.ljsd.jieling.logic.fight.FightRecordLogic; import com.ljsd.jieling.logic.fight.GameFightType; import com.ljsd.jieling.logic.fight.PVEFightEvent; import com.ljsd.jieling.logic.fight.result.FightResult; @@ -498,6 +499,9 @@ public class TowerMap extends AbstractMap { fastFightResponseBuilder.setResult(resultCode); fastFightResponseBuilder.setEssenceValue(trialInfo.getEnergy()); fastFightResponseBuilder.setFightData(fightResult.getFightData()); + + // 记录战报 + FightRecordLogic.getInstance().addRecordMap(user,fightResult.getFightData()); // LOGGER.info("endFight() uid=>{},nextEventId=>{}", uid, nextEventId); MapMissionManager.updateMapMission(user, EventType.fightEvent, groupId, checkResult[1]); ReportUtil.onReportEvent(user,ReportEventEnum.CHALLENGE_PANOPTIC_MIRROR_ENEMY.getType(),trialInfo.getFloor(),resultCode==1?"胜利":"失败"); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/monsterAttack/QuickStartMonsterFighter.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/monsterAttack/QuickStartMonsterFighter.java index c96816304..a96233e71 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/monsterAttack/QuickStartMonsterFighter.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/monsterAttack/QuickStartMonsterFighter.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.handler.monsterAttack; +import com.ljsd.fight.FightType; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.globals.BIReason; @@ -83,8 +84,13 @@ public class QuickStartMonsterFighter extends BaseHandler0){ CommonProto.Drop.Builder drop = ItemUtil.drop(user, sRaceTowerConfig.getFirstReward(), 1, 0, BIReason.SITUATION_CHALLENGE_REWARD); @@ -289,8 +294,16 @@ public class SituationLogic { builder.setSeed(fightSeed); builder.setFightTeamInfo(fightTeamInfo); builder.setMonsterTeamList(monsterfightTeamInfos); - CommonProto.FightData fightData = CommonProto.FightData.newBuilder().setFightType(fightEvent.getFightType().getFightType().getType()).setHeroFightInfos(fightTeamInfo).addAllMonsterList(monsterfightTeamInfos).setFightSeed(fightSeed).setFightMaxTime(fightEvent.getMostTime()).build(); + CommonProto.FightData fightData = CommonProto.FightData.newBuilder() + .setFightType(fightEvent.getFightType().getFightType().getType()) + .setHeroFightInfos(fightTeamInfo) + .addAllMonsterList(monsterfightTeamInfos) + .setFightSeed(fightSeed) + .setFightMaxTime(fightEvent.getMostTime()) + .setFightId(FightUtil.getFightId(fightEvent.getAttackUid(),fightEvent.getFightType())) + .build(); builder.setFightData(fightData); + return builder.build(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LuckyCatActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LuckyCatActivity.java index 887bf3466..454156926 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LuckyCatActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LuckyCatActivity.java @@ -115,7 +115,7 @@ public class LuckyCatActivity extends AbstractActivity { SItem sItem = SItem.getsItemMap().get(temp2[0]); String message = SErrorCodeEerverConfig.getI18NMessage("luck_cat_take_reward_content", new Object[]{nickName, sItem.getName(), temp2[1]}); - ChatLogic.getInstance().sendSysChatMessage(message, Global.LUCKCAT, 0, 0, 0, 0, 0, 0); + ChatLogic.getInstance().sendSysChatMessage(message, Global.LUCKCAT, "0", 0, 0, 0, 0, 0); reportTakeActivityReward(user,reward,missionId); PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index 0d9246e48..4e052e11d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -1,8 +1,7 @@ package com.ljsd.jieling.logic.arena; - - import com.ljsd.fight.ArenaRecord; +import com.ljsd.fight.FightType; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.db.mongo.MongoUtil; @@ -236,8 +235,14 @@ public class ArenaLogic { .setFightSeed(seed) .setHeroFightInfos(fightTeamInfo) .addMonsterList(deffightTeamInfo) + .setFightType(FightType.ArenaFight.getType()) + .setFightId(FightUtil.getFightId(mine.getId(),FightType.ArenaFight.getType())) .build(); builder.setFightData(build); + + // 记录战报 + FightRecordLogic.getInstance().addRecordMap(mine,build); + //数据互换 byte[] snapRecord = build.toByteArray(); arenaRecord.setFightData(snapRecord); @@ -603,7 +608,12 @@ public class ArenaLogic { .setFightSeed(seed) .setHeroFightInfos(fightTeamInfo) .addMonsterList(deffightTeamInfo) + .setFightType(FightType.Firend.getType()) + .setFightId(FightUtil.getFightId(mine.getId(),FightType.Firend.getType())) .build(); + + + ArenaInfoProto.PlayWithSbResponse response = ArenaInfoProto.PlayWithSbResponse.newBuilder().setFightData(build).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.PLAY_WITH_SB_RESPONSE_VALUE,response,true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java index 141cb53db..ebd60f6eb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.family; import com.ljsd.GameApplication; import com.ljsd.common.mogodb.util.BlockingUniqueQueue; +import com.ljsd.fight.FightType; import com.ljsd.jieling.chat.logic.ChatLogic; import com.ljsd.jieling.core.FunctionIdEnum; import com.ljsd.jieling.core.GlobalsDef; @@ -16,9 +17,7 @@ import com.ljsd.jieling.logic.OnlineUserManager; 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.FightDispatcher; -import com.ljsd.jieling.logic.fight.GameFightType; -import com.ljsd.jieling.logic.fight.PVEFightEvent; +import com.ljsd.jieling.logic.fight.*; import com.ljsd.jieling.logic.fight.result.FightResult; import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.mission.GameEvent; @@ -242,7 +241,7 @@ public class DeathPathLogic { String gid = firstGuild.iterator().next().getValue(); GuildInfo guildInfo = GuilidManager.guildInfoMap.get(Integer.parseInt(gid)); String message = SErrorCodeEerverConfig.getI18NMessage("guildwar_content", new Object[]{guildInfo.getName()}); - ChatLogic.getInstance().sendSysChatMessage(message, Global.DEATH_PATH_FIRST, 0, 0, 0, 0, 0, 0); + ChatLogic.getInstance().sendSysChatMessage(message, Global.DEATH_PATH_FIRST, "0", 0, 0, 0, 0, 0); break; default: break; @@ -341,7 +340,13 @@ public class DeathPathLogic { .setFightSeed(fightResult.getSeed()) .setHeroFightInfos(fightResult.getFightTeamInfo()) .addAllMonsterList(fightResult.getMonsterTeamList()) + .setFightType(FightType.TenDespairArray.getType()) + .setFightId(FightUtil.getFightId(uid,FightType.TenDespairArray.getType())) .build(); + + // 记录战报 + FightRecordLogic.getInstance().addRecordMap(user,fightData); + //更新排行榜数据 tasks.offer(new DeathPathTask(uid,guildId,damage,pathId,groupId)); //挑战次数记录 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildChallengeLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildChallengeLogic.java index 79e0cca63..9dd07d723 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildChallengeLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildChallengeLogic.java @@ -15,9 +15,7 @@ import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.GuildCache; import com.ljsd.jieling.logic.dao.root.GuildInfo; import com.ljsd.jieling.logic.dao.root.User; -import com.ljsd.jieling.logic.fight.FightDispatcher; -import com.ljsd.jieling.logic.fight.GameFightType; -import com.ljsd.jieling.logic.fight.PVEFightEvent; +import com.ljsd.jieling.logic.fight.*; import com.ljsd.jieling.logic.fight.result.FightResult; import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.player.PlayerLogic; @@ -338,7 +336,12 @@ public class GuildChallengeLogic { response.setDrop(drop); if(fightData!=null){ + fightData.toBuilder().setFightId(FightUtil.getFightId(uid,fightData.getFightType())); + response.setFightData(fightData); + + // 记录战报 + FightRecordLogic.getInstance().addRecordMap(user,fightData); } response.setKill(kill); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildFightLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildFightLogic.java index 5b24bba55..ca020a1c0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildFightLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildFightLogic.java @@ -524,7 +524,13 @@ public class GuildFightLogic { .setFightSeed(dispatcher.getSeed()) .setHeroFightInfos(dispatcher.getFightTeamInfo()) .addMonsterList(dispatcher.getDefFightTeamInfo()) + .setFightType(FightType.GuildFight.getType()) + .setFightId(FightUtil.getFightId(userAttack.getId(),FightType.GuildFight.getType())) .build(); + + // 记录战报 + FightRecordLogic.getInstance().addRecordMap(userAttack,fightData); + Family.FamilyFightAttackResponse response = Family.FamilyFightAttackResponse.newBuilder().setResult(fightResult[0]).setStarCount(getStar).setData(fightData).build(); userAttack.getUserMissionManager().onGameEvent(userAttack, GameEvent.FAMILY_FIGHT_ATTACK); MessageUtil.sendMessage(session, 1, messageType.getNumber(), response, true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java index 7d8be681a..e480c49a9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/AreFightPro.java @@ -8,6 +8,7 @@ import com.ljsd.fight.ArenaRecord; import com.ljsd.jieling.logic.fight.result.FightResult; import rpc.protocols.CommonProto; import manager.STableManager; +import org.luaj.vm2.ast.Str; public class AreFightPro implements EndFightProcessor { ArenaRecord arenaRecord; @@ -54,12 +55,15 @@ public class AreFightPro implements EndFightProcessor { int warTime = STableManager.getFigureConfig(CommonStaticConfig.class).getsChampionshipSetting().getWarTime(); + CommonProto.FightData build = CommonProto.FightData.newBuilder() .setFightType(9) .setHeroFightInfos(fightResult.getFightTeamInfo()) .addMonsterList(fightResult.getDefFightTeamInfo()) .setFightSeed(fightResult.getSeed()) - .setFightMaxTime(warTime).build(); + .setFightMaxTime(warTime) + .setFightId(fightResult.getFightData().getFightId()) + .build(); arenaRecord.setFightData(build.toByteArray()); RedisUtil.getInstence().putMapEntry(RedisKey.CHAMPION_ARENA_RECORD,"",arenaRecord.getId(),arenaRecord); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightDispatcher.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightDispatcher.java index 9ad6267e1..f4685dd58 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightDispatcher.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightDispatcher.java @@ -14,7 +14,9 @@ public class FightDispatcher { public static FightResult dispatcher(FightEvent fightEvent) throws Exception { + // 获取类型 GameFightType fightType = fightEvent.getFightType(); + // 战斗逻辑 return fightType.getFightEventProcesor().process(fightEvent); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightRecordLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightRecordLogic.java new file mode 100644 index 000000000..6e89677c9 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightRecordLogic.java @@ -0,0 +1,120 @@ +package com.ljsd.jieling.logic.fight; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.googlecode.protobuf.format.JsonFormat; +import com.ljsd.jieling.logic.dao.root.User; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import rpc.protocols.CommonProto; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +public class FightRecordLogic { + //私有构造方法 + private FightRecordLogic (){ + + } + //声明成员变量 + private static FightRecordLogic instance ; + //对外提供接口获取该实例 + public static FightRecordLogic getInstance(){ + if(instance == null){ + synchronized (FightRecordLogic.class){ + //两次判断是否为null + if(instance==null){ + instance = new FightRecordLogic(); + } + } + } + return instance; + } + + private ConcurrentHashMap> recordMap = new ConcurrentHashMap<>(); + + public ConcurrentHashMap> getRecordMap() { + return recordMap; + } + + // 一种类型存储上限 + private static int max = 10; + + public void setRecordMap(ConcurrentHashMap> recordMap) { + this.recordMap = recordMap; + } + + public void addRecordMap(User user, CommonProto.FightData fightData) throws JsonProcessingException { + // 玩家id + int uid = user.getId(); + // 战斗类型 + int multiKey = fightData.getFightType(); + // 获取玩家的战斗数据 + MultiValueMap multiValueMap = recordMap.getOrDefault(uid, new LinkedMultiValueMap()); + // 根据类型获取战斗数据 + List strings = multiValueMap.getOrDefault(multiKey,new ArrayList<>()); + // 类型大于十条删除最早的一条 + if (strings.size() >= max){ + strings.remove(0); + } + // protobuf转字符串 + String str = JsonFormat.printToString(fightData); + strings.add(str); + // 重新赋值 + multiValueMap.put(multiKey,strings); + System.out.println("fightId======================="+fightData.getFightId()); + recordMap.put(uid,multiValueMap); + } + + /** + * 获取一条记录 + * @param fightId 玩家id_服务器id_战斗类型id_时间戳 + * @return + * @throws JsonProcessingException + */ + public String getOneRecord(String fightId){ + String[] split = fightId.split("_"); + // 玩家id + int uid = Integer.parseInt(split[0]); + // 战斗类型,key + int multiKey = Integer.parseInt(split[2]); + // 获取玩家的全部战斗数据 + MultiValueMap valueMap = recordMap.get(uid); + if (valueMap == null){ + return null; + } + // 获取类型数据 + List strings = valueMap.get(multiKey); + if (strings.isEmpty()){ + return null; + } + // 遍历 + for (int i = 0; i < strings.size(); i++) { + String item = strings.get(i); + // 初始化 + CommonProto.FightData.Builder data = CommonProto.FightData.newBuilder(); + try { + // json转protobuf + JsonFormat.merge(item,data); + } catch (JsonFormat.ParseException e) { + e.printStackTrace(); + } + // 找到该战斗id,直接返回 + if (fightId.equals(data.getFightId())){ + // 返回结果 + return item; + } + } + + return null; + } + + public void delete(){ + recordMap.clear(); + } + + public String getAll(int uid){ + MultiValueMap valueMap = recordMap.getOrDefault(uid,new LinkedMultiValueMap<>()); + return valueMap.toString(); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java index 68e6d9fa0..fc639c34f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.logic.fight; import com.googlecode.protobuf.format.JsonFormat; +import com.ljsd.GameApplication; import com.ljsd.fight.CheckFight; import com.ljsd.fight.DefFightSnapData; import com.ljsd.jieling.core.GlobalsDef; @@ -25,6 +26,7 @@ import com.ljsd.jieling.util.MonsterUtil; import config.SArenaRobotConfig; import config.SCHero; import org.luaj.vm2.LuaValue; +import org.luaj.vm2.ast.Str; import util.TimeUtils; import java.util.ArrayList; @@ -117,7 +119,15 @@ public class FightUtil { builder.setSeed(fightSeed); builder.setFightTeamInfo(fightTeamInfo); builder.setMonsterTeamList(monsterfightTeamInfos); - CommonProto.FightData fightData = CommonProto.FightData.newBuilder().setFightType(fightEvent.getFightType().getFightType().getType()).setHeroFightInfos(fightTeamInfo).addAllMonsterList(monsterfightTeamInfos).setFightSeed(fightSeed).setFightMaxTime(fightEvent.getMostTime()).build(); + String fightId = getFightId(fightEvent.getAttackUid(),fightEvent.getFightType()); + CommonProto.FightData fightData = CommonProto.FightData.newBuilder() + .setFightType(fightEvent.getFightType().getFightType().getType()) + .setHeroFightInfos(fightTeamInfo) + .addAllMonsterList(monsterfightTeamInfos) + .setFightSeed(fightSeed) + .setFightMaxTime(fightEvent.getMostTime()) + .setFightId(fightId) + .build(); builder.setFightData(fightData); return builder.build(); } @@ -171,7 +181,15 @@ public class FightUtil { builder.setSeed(fightSeed); builder.setFightTeamInfo(fightTeamInfo); builder.setDefFightTeamInfo(deffightTeamInfo); - CommonProto.FightData fightData = CommonProto.FightData.newBuilder().setFightType(fightEvent.getFightType().getFightType().getType()).setHeroFightInfos(fightTeamInfo).addMonsterList(deffightTeamInfo).setFightSeed(fightSeed).setFightMaxTime(fightEvent.getMostTime()).build(); + String fightId = getFightId(fightEvent.getAttackUid(),fightEvent.getFightType()); + CommonProto.FightData fightData = CommonProto.FightData.newBuilder() + .setFightType(fightEvent.getFightType().getFightType().getType()) + .setHeroFightInfos(fightTeamInfo) + .addMonsterList(deffightTeamInfo) + .setFightSeed(fightSeed) + .setFightMaxTime(fightEvent.getMostTime()) + .setFightId(fightId) + .build(); builder.setFightData(fightData); return builder.build(); } @@ -206,7 +224,15 @@ public class FightUtil { FightResult.Builder fightResult = FightResult.newBuilder(); int[] fightResultInfo = CheckFight.getInstance().checkFight(seed, fightTime, getFightData, getOptionData, fightType.getFightType()); fightResult.setCheckResult(fightResultInfo); - CommonProto.FightData fightData = CommonProto.FightData.newBuilder().setFightType(fightType.getFightType().getType()).setHeroFightInfos(fightTeamInfo).addAllMonsterList(monsterTeamList).setFightSeed(seed).setFightMaxTime(fightTime).build(); + String fightId = getFightId(playerId,fightType); + CommonProto.FightData fightData = CommonProto.FightData.newBuilder() + .setFightType(fightType.getFightType().getType()) + .setHeroFightInfos(fightTeamInfo) + .addAllMonsterList(monsterTeamList) + .setFightSeed(seed) + .setFightMaxTime(fightTime) + .setFightId(fightId) + .build(); fightResult.setFightData(fightData); return fightResult.build(); } @@ -432,5 +458,24 @@ public class FightUtil { } + /** + * 获取战斗唯一id + * @param uid + * @param fightType + * @return + */ + public static String getFightId(int uid,GameFightType fightType){ + return uid + "_" + + GameApplication.serverId + "_" + + fightType.getFightType().getType() + "_" + + System.currentTimeMillis(); + } + + public static String getFightId(int uid,int fightType){ + return uid + "_" + + GameApplication.serverId + "_" + + fightType + "_" + + System.currentTimeMillis(); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/GameFightType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/GameFightType.java index 3ea59c585..12a13bf5d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/GameFightType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/GameFightType.java @@ -48,7 +48,7 @@ public enum GameFightType { CarBossChallenge(FightType.CarBossFight,new DefaultWithoutHandFightHandler(),null), CarPersonChallenge(FightType.CarBossFight,new PVPFightHandler(),null), GuildChallenge(FightType.GuildChallenge,new DefaultWithoutHandFightHandler(),null), - + NewGeneral(FightType.GuildChallenge,new DefaultWithoutHandFightHandler(),null), ; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/result/FightResult.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/result/FightResult.java index 1140acbac..a7ec8ce5c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/result/FightResult.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/result/FightResult.java @@ -1,8 +1,10 @@ package com.ljsd.jieling.logic.fight.result; import rpc.protocols.CommonProto; +import com.googlecode.protobuf.format.JsonFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class FightResult { @@ -14,7 +16,7 @@ public class FightResult { private CommonProto.FightData fightData; List monsterTeamList; - private FightResult(){ + public FightResult(){ } @@ -148,4 +150,38 @@ public class FightResult { public void setId(long id) { this.id = id; } + + @Override + public String toString() { + ArrayList list = new ArrayList<>(); + if (null != monsterTeamList && !monsterTeamList.isEmpty()){ + monsterTeamList.forEach((item)->{ + list.add(JsonFormat.printToString(item.toBuilder().build())); + }); + } + + String fightTeam = null; + if (fightTeamInfo != null){ + fightTeam = JsonFormat.printToString(fightTeamInfo.toBuilder().build()); + } + + String defFightTeam = null; + if (defFightTeamInfo != null){ + defFightTeam = JsonFormat.printToString(defFightTeamInfo.toBuilder().build()); + } + + String fightDataS = null; + if (fightData != null){ + fightDataS = JsonFormat.printToString(fightData.toBuilder().build()); + } + + return "FightResult{" + + "checkResult=" + Arrays.toString(checkResult) + + ", seed=" + seed + + ", fightTeamInfo=" + fightTeam + + ", defFightTeamInfo=" + defFightTeam + + ", fightData=" + fightDataS + + ", monsterTeamList=" + list.toString() + + '}'; + } } 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 4282e5133..0f3e6d10c 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 @@ -1077,10 +1077,10 @@ public class HeroLogic{ // 觉醒飘字 if (targetHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_awaken_hero_content_parm)) { String message = SErrorCodeEerverConfig.getI18NMessage("animal_awaken_broadcast_content", new Object[]{user.getPlayerInfoManager().getNickName(), scHero.getReadingName()}); - ChatLogic.getInstance().sendSysChatMessage(message, Global.DILIGENT, targetHero.getTemplateId(), 0, 0, 0, 0, 0); + ChatLogic.getInstance().sendSysChatMessage(message, Global.DILIGENT, String.valueOf(targetHero.getTemplateId()), 0, 0, 0, 0, 0); } else if (targetHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_rankup_hero_content_parm)) { String message = SErrorCodeEerverConfig.getI18NMessage("lamp_rankup_hero_content", new Object[]{user.getPlayerInfoManager().getNickName(), scHero.getReadingName(), targetHero.getStar()}); - ChatLogic.getInstance().sendSysChatMessage(message, Global.DILIGENT, targetHero.getTemplateId(), 0, 0, 0, 0, 0); + ChatLogic.getInstance().sendSysChatMessage(message, Global.DILIGENT, String.valueOf(targetHero.getTemplateId()), 0, 0, 0, 0, 0); } String consume = StringUtil.parseArrayToString(consumeMaterial); // HERO_STRENGTHEN(13,"hero_strengthen", new CommonEventHandler(),new String[]{"hero_id","old_quality","new_quality","strengthen_type","cost_item_list","cost_hero_list"}), @@ -3279,7 +3279,7 @@ public class HeroLogic{ if(animal.getQuality() >= SSpecialConfig.getIntegerValue(SSpecialConfig.ANIMAL_BROADCAST_QUALITY)) { //策划资质改成星级 String message = SErrorCodeEerverConfig.getI18NMessage("animal_starup_broadcast_content", new Object[]{user.getPlayerInfoManager().getNickName(),animal.getName(),pokemon.getStar()}); if (!message.isEmpty()){ - ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,0,0,0,0,0,0); + ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,"0",0,0,0,0,0); } } MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.POKEMON_ADVANCED_RESPONSE_VALUE,null,true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java index 3d2ec5411..a2bf8ee94 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java @@ -716,7 +716,7 @@ public class ItemLogic { return; } String message = SErrorCodeEerverConfig.getI18NMessage("lamp_rankup_equiptalisman_content", new Object[]{user.getPlayerInfoManager().getNickName(), sItem.getName(), hero.getEspecialEquipLevel()}); - ChatLogic.getInstance().sendSysChatMessage(message, Global.DILIGENT, sItem.getId(), 0, 0, 0, 0, 0); + ChatLogic.getInstance().sendSysChatMessage(message, Global.DILIGENT, sItem.getId()+"#"+hero.getEspecialEquipLevel(), 0, 0, 0, 0, 0); } if (HeroLogic.getInstance().isInTeam(user, heroId, 1)) { Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(session.getUid())); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java index 617e4e0b1..b22f7f8a1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/WorkShopLogic.java @@ -315,7 +315,7 @@ public class WorkShopLogic { String nickName = user.getPlayerInfoManager().getNickName(); String message = SErrorCodeEerverConfig.getI18NMessage("lamp_lottery_equip_content", new Object[]{ nickName, ItemUtil.equipQulityNameMap.get(sEquipConfig.getQuality()),SItem.getsItemMap().get(equip.getEquipId()).getName()}); - ChatLogic.getInstance().sendSysChatMessage(message, Global.LUCKY_LUCK,equip.getEquipId(),0,0,0,0,0); + ChatLogic.getInstance().sendSysChatMessage(message, Global.LUCKY_LUCK,String.valueOf(equip.getEquipId()),0,0,0,0,0); } user.getEquipManager().addEquip(user,equip); dropBuilder.addEquipId(CBean2Proto.getEquipProto(equip)); 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 ab908b9d7..7af63dc10 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -298,7 +298,7 @@ public class CBean2Proto { return chatInfo.build(); } - public static ChatProto.ChatInfo getSysChatInfoBuilder(String message,int messageType,int itemId,int type,int startTime, int endTime, int priorityLevel, int multiple,long messageId) { + public static ChatProto.ChatInfo getSysChatInfoBuilder(String message,int messageType,String itemId,int type,int startTime, int endTime, int priorityLevel, int multiple,long messageId) { ChatProto.ChatInfo.Builder chatInfo = ChatProto.ChatInfo.newBuilder(); chatInfo.setItemId(itemId); chatInfo.setMessageId(messageId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index 3c8f94a76..21f43ee6f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -1198,7 +1198,7 @@ public class ItemUtil { if (item.getQuantity() >= SSpecialConfig.getIntegerValue(msgTem+"_parm")) { String nickName = user.getPlayerInfoManager().getNickName(); String message = SErrorCodeEerverConfig.getI18NMessage(msgTem, new Object[]{nickName, equipQulityNameMap.get(item.getQuantity()), item.getName()}); - ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,equipId,0,0,0,0,0); + ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,String.valueOf(equipId),0,0,0,0,0); } } @@ -1279,7 +1279,7 @@ public class ItemUtil { if (scHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_lottery_content_parm)) { //策划资质改成星级 String message = SErrorCodeEerverConfig.getI18NMessage("lamp_lottery_content", new Object[]{playerInfoManager.getNickName(), scHero.getStar(), scHero.getReadingName()}); if (!message.isEmpty()){ - ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,hero.getTemplateId(),0,0,0,0,0); + ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,String.valueOf(hero.getTemplateId()),0,0,0,0,0); } } user.getUserMissionManager().onGameEvent(user,GameEvent.GET_HERO,heroStar[0],heroStar[1]); @@ -1646,7 +1646,7 @@ public class ItemUtil { if (animal.getQuality() >= SSpecialConfig.getIntegerValue(SSpecialConfig.ANIMAL_BROADCAST_QUALITY)&&reason!=BIReason.COMPOS_HERO_REWARD) { //策划资质改成星级 String message = SErrorCodeEerverConfig.getI18NMessage("animal_get_broadcast_content", new Object[]{user.getPlayerInfoManager().getNickName(), animal.getName()}); if (!message.isEmpty()){ - ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,0,0,0,0,0,0); + ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,"0",0,0,0,0,0); } } } diff --git a/tablemanager/src/main/java/config/SGlobalSystemConfig.java b/tablemanager/src/main/java/config/SGlobalSystemConfig.java index c93afd0cc..65c51c0ad 100644 --- a/tablemanager/src/main/java/config/SGlobalSystemConfig.java +++ b/tablemanager/src/main/java/config/SGlobalSystemConfig.java @@ -12,7 +12,9 @@ import java.util.Map; public class SGlobalSystemConfig implements BaseConfig { private int id; + private String name; + private int[] openRules; private String systemOpen; @@ -70,7 +72,7 @@ public class SGlobalSystemConfig implements BaseConfig { return id; } - public int[] getOpenRules() { + public int[] getOpenRules() { return openRules; }