From b37c3146c91a4cbc73167ee7debade2579a3b87b Mon Sep 17 00:00:00 2001 From: lvxinran Date: Sun, 5 Jan 2020 00:09:45 +0800 Subject: [PATCH 1/9] =?UTF-8?q?gradle=E9=85=8D=E7=BD=AE=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- globalidserver/build.gradle | 2 +- worldserver/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/globalidserver/build.gradle b/globalidserver/build.gradle index 589d16f92..320573bd3 100644 --- a/globalidserver/build.gradle +++ b/globalidserver/build.gradle @@ -17,7 +17,7 @@ jar { baseName = 'globalserver' version = '1.0.0' manifest { - attributes 'Main-Class': 'com.global.GlobalServerApplivation' + attributes 'Main-Class': 'com.global.GlobalServerApplication' } } dependencies { diff --git a/worldserver/build.gradle b/worldserver/build.gradle index e118d0fba..1365ab9af 100644 --- a/worldserver/build.gradle +++ b/worldserver/build.gradle @@ -17,7 +17,7 @@ jar { baseName = 'worldserver' version = '1.0.0' manifest { - attributes 'Main-Class': 'com.global.GlobalServerApplivation' + attributes 'Main-Class': 'com.WorldServerApplication' } } dependencies { From de1cc036eefb84c085df0332c45de0c81d2fed6b Mon Sep 17 00:00:00 2001 From: lvxinran Date: Wed, 30 Dec 2020 17:57:54 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E5=85=AC=E4=BC=9A=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E9=95=BF=E6=8C=89=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../family/GuildSkillLevelUpHandler.java | 2 +- .../ljsd/jieling/logic/dao/GuildMyInfo.java | 6 +- .../ljsd/jieling/logic/family/GuildLogic.java | 59 +++++++++++++++---- 3 files changed, 50 insertions(+), 17 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/GuildSkillLevelUpHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/GuildSkillLevelUpHandler.java index abccc2408..9cf65fd9d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/GuildSkillLevelUpHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/GuildSkillLevelUpHandler.java @@ -22,6 +22,6 @@ public class GuildSkillLevelUpHandler extends BaseHandler skillInfo= user.getGuildMyInfo().getGuildSkill(); + Map> typeMap = SGuildTechnology.technologyMap.get(type); + if(skillInfo.getOrDefault(type, 0)!=beforeLevel||afterLevel>600) + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); int size = typeMap.size(); - int[][] consume; - if(!skillInfo.containsKey(type)){ - consume = typeMap.get(1).get(0).getConsume(); - }else{ - int level = skillInfo.get(type); - consume = typeMap.get(level%size+1).get(level/size).getConsume(); - if(typeMap.get(level%size+1).get(level/size+1)==null){ - throw new ErrorCodeException(ErrorCode.HERO_LEVE_MAX); + + + Map consumeMap = new HashMap<>(2); + int baseLevel = beforeLevel / size;//100->16 + int nextIndex = beforeLevel % size;//100->4 + + int afterBaseLevel =afterLevel / size; + int afterNextIndex = afterLevel % size; +// if(){ +// }else{ +// int level = skillInfo.get(type); +// consume = typeMap.get(level%size+1).get(level/size).getConsume(); +// if(typeMap.get(level%size+1).get(level/size+1)==null){ +// throw new ErrorCodeException(ErrorCode.HERO_LEVE_MAX); +// } +// } + while(baseLevel Date: Thu, 31 Dec 2020 10:03:05 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E6=88=98=E6=96=97=E9=87=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0job=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ljsd/jieling/util/FightDataUtil.java | 1 + tablemanager/src/main/java/config/SCHero.java | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) 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 c4241250d..d5326d78d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -335,6 +335,7 @@ public class FightDataUtil { unitData.set("passivity", getPassivity(skillIds)); unitData.set("property", getProperty(property)); unitData.set("skinId",data.getSkinId()); + unitData.set("job",hero.getJob()); return unitData; } diff --git a/tablemanager/src/main/java/config/SCHero.java b/tablemanager/src/main/java/config/SCHero.java index d4e1fe738..c10f06832 100644 --- a/tablemanager/src/main/java/config/SCHero.java +++ b/tablemanager/src/main/java/config/SCHero.java @@ -69,6 +69,8 @@ public class SCHero implements BaseConfig{ private static Map piecesMap; + private int job; + public static class ConsumeMaterialInfo{ private int groupID; @@ -169,7 +171,7 @@ public class SCHero implements BaseConfig{ // 大于10星为 觉醒技能 int[][] awakens = scHero.getAwaken(); Map>> awakSkillMapTmp = new HashMap<>(); - if (awakens != null && awakens.length > 0) { + if (awakens != null && awakens.length > 0&&awakens[0].length>0) { awakSkillMapTmp.put(1, new TreeMap<>()); awakSkillMapTmp.put(2, new TreeMap<>()); for (int[] openSkillRule : awakens) { @@ -337,4 +339,8 @@ public class SCHero implements BaseConfig{ public int[][] getAwaken() { return awaken; } + + public int getJob() { + return job; + } } From 5332a072b9ef0a13f41ab7ab435719417554b63e Mon Sep 17 00:00:00 2001 From: lvxinran Date: Thu, 31 Dec 2020 11:35:27 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=81=EF=BC=81=EF=BC=81=EF=BC=81=EF=BC=81?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/world/db/mongo/WorldMongoConfig.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/worldserver/src/main/java/com/world/db/mongo/WorldMongoConfig.java b/worldserver/src/main/java/com/world/db/mongo/WorldMongoConfig.java index 3dce357b0..96e0cdb91 100644 --- a/worldserver/src/main/java/com/world/db/mongo/WorldMongoConfig.java +++ b/worldserver/src/main/java/com/world/db/mongo/WorldMongoConfig.java @@ -19,14 +19,14 @@ public class WorldMongoConfig { // 注入配置实体 - private MongoSettingsProperties mongoSettingsProperties; - @Bean - @ConfigurationProperties( - prefix = "mongodb.options") - MongoSettingsProperties mongoSettingsProperties() { - mongoSettingsProperties =new MongoSettingsProperties(); - return mongoSettingsProperties; - } +// private MongoSettingsProperties mongoSettingsProperties; +// @Bean +// @ConfigurationProperties( +// prefix = "mongodb.options") +// MongoSettingsProperties mongoSettingsProperties() { +// mongoSettingsProperties =new MongoSettingsProperties(); +// return mongoSettingsProperties; +// } @Value("${spring.data.mongodbcore.uri}") private String MONGO_CORE_URI; From fc05c6a1cb977a0d4418cd9bf8bca672e8c6e6dc Mon Sep 17 00:00:00 2001 From: duhui Date: Fri, 8 Jan 2021 10:14:53 +0800 Subject: [PATCH 5/9] =?UTF-8?q?1.6=E7=89=88=E6=9C=AC=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E5=88=9D=E7=89=88=EF=BC=8C=E5=BE=85=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisUtil.java | 13 ++-- .../com/ljsd/jieling/exception/ErrorCode.java | 2 + .../ljsd/jieling/handler/map/MapLogic.java | 24 ++++++++ .../handler/map/mapType/EndlessMap.java | 3 +- .../missingRoom/MissingRoomLockHandler.java | 25 ++++++++ .../MissingRoomRefreshHandler.java | 1 + .../missingRoom/MissingRoomSendHandler.java | 3 +- .../jieling/logic/dao/UserMissionManager.java | 60 +++++++++++++++---- .../jieling/logic/mission/MissionLoigc.java | 55 ++++++++++++++++- .../mission/main/AbstractMissionType.java | 15 +++++ .../mission/main/MissingRoomMissionType.java | 29 ++++++++- tablemanager/src/main/java/config/SItem.java | 18 ++++++ 12 files changed, 224 insertions(+), 24 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomLockHandler.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index 1fc872363..23a525ea0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -145,13 +145,14 @@ public class RedisUtil { String oldName = key[i]; // 新名字 String newName = oldName+"BACK:"+System.currentTimeMillis(); - // 重命名 - if(get(oldName)==null){ - continue; + // key是否存在 + boolean aBoolean = hasKey(oldName); + if (aBoolean){ + // 重命名 + redisTemplate.rename(oldName,newName); + // 设置过期时间 + expire(newName,60*60*24-60); } - redisTemplate.rename(oldName,newName); - // 设置过期时间 - expire(newName,60*60*24-60); } } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java index c26643aa8..f177f1480 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java @@ -167,6 +167,8 @@ public enum ErrorCode implements IErrorCode { BAG_FULL(135,"背包内存储空间不足,无法领取附件"), + LOCK_FILL(138,"锁定数量已满,无法刷新"), + ; private static final Set CodeSet = new HashSet<>(); 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 0fe28b982..724bee5d0 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 @@ -2810,6 +2810,28 @@ public class MapLogic { this.endlessSeason = season; } + /** + * 清理无尽副本道具 + * @param session + * @throws Exception + */ + public void clearEndLessDrop(int uid) throws Exception { + User user = UserManager.getUser(uid); + // 根据功能类型获取需要清理的道具列表 + List itemList = SItem.getItemMapByRecycle().get(FunctionIdEnum.Endless.getFunctionType()); + if (!itemList.isEmpty()){ + for (SItem item:itemList){ + // 获取玩家背包道具并消耗 + Item item1 = user.getItemManager().getItem(item.getId()); + if(item1!=null){ + int[][] cost= new int[1][]; + cost[0] = new int[]{item1.getItemId(),item1.getItemNum()}; + ItemUtil.itemCost(user,cost,BIReason.ENDLESS_REASON_CHANGE,0); + } + } + } + } + /** * 无尽副本设置当前mapId * @param endlessMapId @@ -2908,6 +2930,8 @@ public class MapLogic { for(Map.Entry entry:onlineUserMap.entrySet()){ endLessClear(entry.getValue()); + // 清理无尽副本道具 + clearEndLessDrop(entry.getValue().getUid()); } updateEndlessSeason(0); } 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 6ebba7f22..659da8265 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 @@ -73,7 +73,8 @@ public class EndlessMap extends AbstractMap{ mapManager.endlessWalkCellSave(new HashSet<>()); mapManager.endlessMapInfoSave(new HashMap<>()); //清除当前副本信息 - + // 清理无尽副本道具 + MapLogic.getInstance().clearEndLessDrop(uid); //新创建地图 mapManager.setCurMapType(type); // enterNewMap(user,4001,GlobalsDef.ENDLESS_TEAM,mapEnterResponse); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomLockHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomLockHandler.java new file mode 100644 index 000000000..bb0283c04 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomLockHandler.java @@ -0,0 +1,25 @@ +package com.ljsd.jieling.handler.missingRoom; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.mission.MissionLoigc; +import com.ljsd.jieling.network.session.ISession; +import org.springframework.stereotype.Component; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; + +/** + * 天宫探险上锁 + * @author hj + */ +@Component +public class MissingRoomLockHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.MISSING_ROOM_LOCK_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, PlayerInfoProto.MissingRoomLockRequest proto) throws Exception { + MissionLoigc.missiongRoomLock(iSession,proto.getMissionId(),proto.getLock(),MessageTypeProto.MessageType.MISSING_ROOM_LOCK_RESPONSE); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java index 5232be0f3..538f584dc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.List; /** + * 天宫寻宝刷新 * @author lvxinran * @date 2019/12/12 * @discribe diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomSendHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomSendHandler.java index ed6a93fbc..e9b9e4b9b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomSendHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomSendHandler.java @@ -8,8 +8,9 @@ import rpc.protocols.PlayerInfoProto; import org.springframework.stereotype.Component; /** + * 天宫寻宝探险 * @author lvxinran - * @date 2019/12/12 + * @date 2019/12/12MISSING_ROOM_HERO_SEND_REQUEST * @discribe */ @Component diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index b72a5d44f..f078c191d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -196,16 +196,24 @@ public class UserMissionManager extends MongoBase { updateString("achievementMap",achievementMap); break; - case MISSING_ROOM_REFRESH: + case MISSING_ROOM_REFRESH://天宫寻宝 Map mustAppear = new HashMap<>(); List mustMissions = new ArrayList<>(); + List lockMissions = new ArrayList<>(); if((int)parm[0]==1){ //删除已经领取奖励的 missingRoomMissionType.getFinishMissionIds().removeIf(value->missingRoomMissionType.getAllMissingTime().get(value)==-1); missingRoomMissionType.getAllMissingTime().values().removeIf(value->value==-1); - boolean result; + + // 任务全部锁定 + Set lockMissionIds = missingRoomMissionType.getLockMissionIds(); + if (lockMissionIds.size() >= 6){ + throw new ErrorCodeException(ErrorCode.LOCK_FILL); + } + + // 读表 SMazeTreasureSetting sMazeTreasureSetting = SMazeTreasureSetting.sMazeTreasureSetting; - result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); + boolean result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); if(!result){ result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getRefreshItem()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); if(!result){ @@ -222,22 +230,45 @@ public class UserMissionManager extends MongoBase { missingRoomMissionType.privilegeRefresh(user,sMazeTreasureSetting.getHighDailyPrivilege(),mustAppear); //豪华特权 missingRoomMissionType.privilegeRefresh(user,sMazeTreasureSetting.getLuxuryDailyPrivilege(),mustAppear); - int[][] refreshHighTypeNum = sMazeTreasureSetting.getRefreshHighTypeNum(); - for(int[] refresh:refreshHighTypeNum){ - if(missingRoomMissionType.getRefreshTotalCount()==0||missingRoomMissionType.getRefreshTotalCount()%refresh[0]!=0){ - continue; - }else{ - mustAppear.put(refresh[1],mustAppear.get(refresh[1])==null?1:(mustAppear.get(refresh[1])+1)); - } - } + //非免费抽取次数必出 + missingRoomMissionType.notFreeRefreshMust(user,sMazeTreasureSetting.getRefreshHighTypeNum(),mustAppear); + // 刷新次数+1 missingRoomMissionType.setRefreshTotalCount(missingRoomMissionType.getRefreshTotalCount()+1); } + + Set doingMissionIds = missingRoomMissionType.getDoingMissionIds(); + doingMissionIds.forEach((doing)->{ + if (lockMissionIds.contains(doing)){ + lockMissions.add(doing); + } + }); + missingRoomMissionType.getDoingMissionIds().clear(); }else{ for(int firstTask:SMazeTreasureSetting.sMazeTreasureSetting.getFirstRefresh()){ mustMissions.add(firstTask); } } + + // 更新最大长度限制6条 + if (lockMissions.size() + mustAppear.size() > 6){ + // 锁定的不能动,获取特权任务数量 + int num = 6 - lockMissions.size(); + // 特权的key + Set keys = mustAppear.keySet(); + // 正序的set + Set sortSet = new TreeSet(Comparator.naturalOrder()); + // 赋值 + sortSet.addAll(keys); + // 遍历,如果数量满足,停止,不满足则删除等级小的任务 + for (Integer ints:sortSet){ + if (mustAppear.size() == num){ + break; + } + mustAppear.remove(ints); + } + } + if(!mustAppear.isEmpty()){ for(Map.Entry entry:mustAppear.entrySet()){ List sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(entry.getKey()); @@ -265,7 +296,7 @@ public class UserMissionManager extends MongoBase { // missingRoomMission.add(refreshWeight); // } //根据品质来随机 - int[] qualityArray = MathUtils.randomForWeight(qualityRate, 6 - mustMissions.size()); + int[] qualityArray = MathUtils.randomForWeight(qualityRate, 6 - (mustMissions.size() + lockMissions.size())); Map qualityNum = new HashMap<>(); for(int quality:qualityArray){ qualityNum.put(quality,qualityNum.getOrDefault(quality,0)+1); @@ -285,9 +316,14 @@ public class UserMissionManager extends MongoBase { missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+id); } } + // 必须任务 for(int mission:mustMissions){ missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission); } + // 上锁任务 + for(int mission:lockMissions){ + missingRoomMissionType.addDoingMission(mission); + } updateString("missingRoomMissionType",missingRoomMissionType); break; default:{ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java index 604ec2534..54e99a3e7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java @@ -333,15 +333,28 @@ public class MissionLoigc { missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(missionId).setState(state).setType(vipmissionType).setProgress(progrss).build()); } } + + /** + * 获取天宫寻宝任务列表 + * @param user + * @param missionList + */ public static void getMissingRoomMission(User user ,List missionList){ UserMissionManager userMissionManager = user.getUserMissionManager(); MissingRoomMissionType missingRoomMissionType = userMissionManager.getMissingRoomMissionType(); + // 正在做任务 for(Integer missionId:missingRoomMissionType.getDoingMissionIds()){ CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder(); - info.setMissionId(missionId).setState(0) - .setType(GameMisionType.MISSINGROOMMISSION.getType()); + + info.setMissionId(missionId).setState(0).setType(GameMisionType.MISSINGROOMMISSION.getType()); + // 是否上锁 + Set lockMissionIds = missingRoomMissionType.getLockMissionIds(); + if (lockMissionIds.contains(missionId)){ + info.setLock(1); + } missionList.add(info.build()); } + // 完成的任务 for(Integer missionId:missingRoomMissionType.getFinishMissionIds()){ CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder(); int missingTime = missingRoomMissionType.getMissingTime(missionId); @@ -886,6 +899,44 @@ public class MissionLoigc { user.getUserMissionManager().updateString("missingRoomMissionType",missingRoomMissionType); MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); } + + /** + * 天宫探险加锁 + * @param session + * @param missionId + * @param operation + * @param messageType + * @throws Exception + */ + public static void missiongRoomLock(ISession session,int missionId,int operation, MessageTypeProto.MessageType messageType) throws Exception{ + User user = UserManager.getUser(session.getUid()); + // 获取天宫探险任务 + MissingRoomMissionType missingRoomMissionType = user.getUserMissionManager().getMissingRoomMissionType(); + // 不是待做任务,不能操作 + Set doingMissionIds = missingRoomMissionType.getDoingMissionIds(); + if(!doingMissionIds.contains(missionId)){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + + Set lockMissionIds = missingRoomMissionType.getLockMissionIds(); + // 上锁 + if (operation == 1){ + if (lockMissionIds.contains(missionId)) { + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + missingRoomMissionType.addLockMissionId(missionId); + // 解锁 + }else { + if (!lockMissionIds.contains(missionId)) { + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + missingRoomMissionType.getLockMissionIds().removeIf(value->value==missionId); + } + // 更新数据库 + user.getUserMissionManager().updateString("missingRoomMissionType",missingRoomMissionType); + MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); + } + public static boolean checkMainLevel(User user,int levelId){ if(!SMainLevelConfig.config.containsKey(levelId)){ return false; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java index 5bf136d2a..951f7924e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java @@ -16,6 +16,9 @@ public abstract class AbstractMissionType { //可领取的任务,在可控范围内,使用map存储,利于查找 private Set finishMissionIds = Sets.newConcurrentHashSet(); + // 上锁的任务,不可刷新 + private Set lockMissionIds = Sets.newConcurrentHashSet(); + //已领取的任务,在可控范围内,使用map存储,利于查找 private BitSet rewardedMissionIds = new BitSet(1024); @@ -64,4 +67,16 @@ public abstract class AbstractMissionType { public BitSet getRewardedMissionIds() { return rewardedMissionIds; } + + public Set getLockMissionIds() { + return lockMissionIds; + } + + public void setLockMissionIds(Set lockMissionIds) { + this.lockMissionIds = lockMissionIds; + } + + public void addLockMissionId(int missionId) { + lockMissionIds.add(missionId); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java index dfae9d226..4fad7c8d9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java @@ -152,14 +152,22 @@ public class MissingRoomMissionType extends AbstractMissionType{ if(!itemCost){ throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); } + + getLockMissionIds().removeIf(value->value==missionId); getDoingMissionIds().remove(missionId); getFinishMissionIds().add(missionId); missingTime.put(missionId, (int)(TimeUtils.now()/1000)+sMazeTreasure.getWasteTime()); heroesInfo.put(missionId,heroes); } - + /** + * 特权刷新 + * @param user 用户信息 + * @param privilege 特权类型 + * @param mustAppear 必出 + */ public void privilegeRefresh(User user,int[][] privilege,Map mustAppear){ + // 是否包含特权,包含奖励【1】 if(user.getPlayerInfoManager().checkFunctionIsAllowed(privilege[0][0])&&privilege.length>1){ int especialCount = user.getPlayerInfoManager().getVipPrivilageValue(privilege[0][0]); for(int i = 1; i< privilege.length; i++){ @@ -169,8 +177,25 @@ public class MissingRoomMissionType extends AbstractMissionType{ } user.getPlayerInfoManager().updateVipPrivilage(privilege[0][0],1); } - } + + /** + * 非免费刷新必出 + * @param user + * @param refreshHighTypeNum + * @param mustAppear + */ + public void notFreeRefreshMust(User user, int[][] refreshHighTypeNum,Map mustAppear){ + int refreshTotalCount = user.getUserMissionManager().getMissingRoomMissionType().getRefreshTotalCount(); + for(int[] refresh:refreshHighTypeNum){ + if(refreshTotalCount==0||refreshTotalCount%refresh[0]!=0){ + continue; + }else{ + mustAppear.put(refresh[1],mustAppear.get(refresh[1])==null?1:(mustAppear.get(refresh[1])+1)); + } + } + } + public Map getAllMissingTime(){ return missingTime; } diff --git a/tablemanager/src/main/java/config/SItem.java b/tablemanager/src/main/java/config/SItem.java index 4e3313a76..bd17a2343 100644 --- a/tablemanager/src/main/java/config/SItem.java +++ b/tablemanager/src/main/java/config/SItem.java @@ -4,11 +4,15 @@ package config; import manager.STableManager; import manager.Table; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Map; @Table(name = "ItemConfig") public class SItem implements BaseConfig { public static Map sItemMap; + public static Map> itemMapByRecycle; private int id; private boolean backpackOrNot; //是否进背包 private int itemType; @@ -25,12 +29,18 @@ public class SItem implements BaseConfig { private String resolveReward; private int itemNumlimit; private int[][] extraReward; + private int recycle; private String name; @Override public void init() throws Exception { sItemMap = STableManager.getConfig(SItem.class); + Map> map = new HashMap<>(); + sItemMap.forEach((k,v)->{ + map.computeIfAbsent(v.getRecycle(),n->new ArrayList<>()).add(v); + }); + itemMapByRecycle = map; } public int getId() { @@ -41,6 +51,10 @@ public class SItem implements BaseConfig { return sItemMap; } + public static Map> getItemMapByRecycle() { + return itemMapByRecycle; + } + public boolean isBackpackOrNot() { return backpackOrNot; } @@ -104,4 +118,8 @@ public class SItem implements BaseConfig { public int[][] getExtraReward() { return extraReward; } + + public int getRecycle() { + return recycle; + } } From f8af824fcd76e8971536b7e7072d40296f450115 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 31 Dec 2020 16:36:45 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E6=97=A0=E5=B0=BD=E5=89=AF=E6=9C=AC?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=AD=EF=BC=8Cbug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/handler/map/MapLogic.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) 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 724bee5d0..04bfaee70 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 @@ -2819,15 +2819,16 @@ public class MapLogic { User user = UserManager.getUser(uid); // 根据功能类型获取需要清理的道具列表 List itemList = SItem.getItemMapByRecycle().get(FunctionIdEnum.Endless.getFunctionType()); - if (!itemList.isEmpty()){ - for (SItem item:itemList){ - // 获取玩家背包道具并消耗 - Item item1 = user.getItemManager().getItem(item.getId()); - if(item1!=null){ - int[][] cost= new int[1][]; - cost[0] = new int[]{item1.getItemId(),item1.getItemNum()}; - ItemUtil.itemCost(user,cost,BIReason.ENDLESS_REASON_CHANGE,0); - } + if (itemList == null || itemList.isEmpty()){ + return; + } + for (SItem item:itemList){ + // 获取玩家背包道具并消耗 + Item item1 = user.getItemManager().getItem(item.getId()); + if(item1!=null){ + int[][] cost= new int[1][]; + cost[0] = new int[]{item1.getItemId(),item1.getItemNum()}; + ItemUtil.itemCost(user,cost,BIReason.ENDLESS_REASON_CHANGE,0); } } } From 541fb455fc0819e3a835f3619fb42da65aaf8c1d Mon Sep 17 00:00:00 2001 From: duhui Date: Wed, 8 Jan 2020 00:04:51 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E6=97=A0=E5=B0=BD=E5=89=AF=E6=9C=AC?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E6=97=A5=E5=BF=97=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ljsd/jieling/handler/map/MapLogic.java | 1 + 1 file changed, 1 insertion(+) 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 04bfaee70..9e6154e8f 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 @@ -2829,6 +2829,7 @@ public class MapLogic { int[][] cost= new int[1][]; cost[0] = new int[]{item1.getItemId(),item1.getItemNum()}; ItemUtil.itemCost(user,cost,BIReason.ENDLESS_REASON_CHANGE,0); + LOGGER.info("======================清理无尽副本道具,玩家:{},道具id:{},道具数量{}",uid,item1.getItemId(),item1.getItemNum()); } } } From f5c70afcb2ae85cdd61ff2fb3a584df86c8d6a87 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Mon, 4 Jan 2021 10:10:15 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A3=AE=E7=BD=97?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E9=98=B5=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/handler/map/MapLogic.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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 9e6154e8f..5b2e11156 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 @@ -3227,8 +3227,26 @@ public class MapLogic { trailHero.setSkinTime(skinTime); heroInfo.put(id,trailHero); } + + MapInfoProto.TrialHeroInfoSaveResponse.Builder response = MapInfoProto.TrialHeroInfoSaveResponse.newBuilder(); + for(Map.Entry entry:heroInfo.entrySet()){ + TrailHero trailHero = entry.getValue(); + int remainHp = trailHero.getProperty().get(HeroAttributeEnum.CurHP.getPropertyId()); + int maxHp = trailHero.getProperty().get(HeroAttributeEnum.Hp.getPropertyId()); + //判断血量万分比,如果小于0.01%返回0.01% + int calHp = remainHp>0? (int) (remainHp * 10000D / maxHp > 0 ? remainHp * 10000D / maxHp : 1) :0; + MapInfoProto.TrialHeroInfo info = MapInfoProto.TrialHeroInfo.newBuilder().setHeroId(entry.getKey()) + .setTmpId(trailHero.getTmpId()) + .setHeroHp(calHp) + .setStar(trailHero.getStar()) + .setLevel(trailHero.getLevel()) + .setSkinId(trailHero.getSkinId()) + .build(); + response.addHeroes(info); + } + mapManager.updateTrailHeroInfo(heroInfo); - MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); + MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); } /** From f82b25d3928ed12e2ffe1447b7b51495d0642db3 Mon Sep 17 00:00:00 2001 From: duhui Date: Mon, 4 Jan 2021 11:44:58 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E6=97=A0=E5=B0=BD=E5=89=AF=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E8=B0=83=E8=AF=95=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ljsd/jieling/handler/map/MapLogic.java | 2 +- .../java/com/ljsd/jieling/handler/map/mapType/EndlessMap.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) 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 5b2e11156..ebafa955a 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 @@ -2829,7 +2829,7 @@ public class MapLogic { int[][] cost= new int[1][]; cost[0] = new int[]{item1.getItemId(),item1.getItemNum()}; ItemUtil.itemCost(user,cost,BIReason.ENDLESS_REASON_CHANGE,0); - LOGGER.info("======================清理无尽副本道具,玩家:{},道具id:{},道具数量{}",uid,item1.getItemId(),item1.getItemNum()); + System.out.println("======================清理无尽副本道具,玩家:{ " + uid + " },道具id:{ " + item1.getItemId() + " }"); } } } 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 659da8265..e76631484 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 @@ -65,6 +65,7 @@ public class EndlessMap extends AbstractMap{ } EndlessMapInfo endlessMapInfo = mapManager.getEndlessMapInfo(); //是否是新的周期 + System.out.println("======================无尽副本,周期验证;用户:{ " + endlessMapInfo.getSeason() + " },内存:{ " + MapLogic.endlessSeason + " }"); if(endlessMapInfo.getSeason()!=MapLogic.endlessSeason){ TimeControllerOfFunction openTimeOfFuntionCacheByType = GlobalDataManaager.getInstance().getOpenTimeOfFuntionCacheByType(FunctionIdEnum.Endless); // StoreLogic.initOnsStoereWithTime(user, SEndlessMapConfig.sEndlessMapConfigMap.get(4001).getMapStoreId(),openTimeOfFuntionCacheByType.getStartTime(),openTimeOfFuntionCacheByType.getEndTime());