diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index d8cdfafdc..cfa609cf9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -750,12 +750,7 @@ public class PlayerLogic { MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); } public boolean check(User user, int privilageTypeId, int checkNum){ - return priviliageCheck(user,privilageTypeId,checkNum,false); - } - public boolean checkAndUpdate(User user, int privilageTypeId, int updateNum){ - return priviliageCheck(user,privilageTypeId,updateNum,true); - } - private boolean priviliageCheck(User user, int privilageTypeId, int checkNum,boolean isUpdate){ +// return priviliageCheck(user,privilageTypeId,checkNum,false); Map vipInfo = user.getPlayerInfoManager().getVipInfo(); if(privilageTypeId == 0){ return true; @@ -783,13 +778,79 @@ public class PlayerLogic { if((info.getCount()+checkNum>mCount)|| (info.getEffectTime()!=0&&TimeUtils.now()/1000>info.getEffectTime())){ continue; } - if (isUpdate){ - user.getPlayerInfoManager().updateVipPrivilage(privilageId, checkNum); - } return true; } return false; } + public boolean checkAndUpdate(User user, int privilageTypeId, int updateNum){ +// return priviliageCheck(user,privilageTypeId,updateNum,true); + Map vipInfo = user.getPlayerInfoManager().getVipInfo(); + if(privilageTypeId == 0){ + return true; + } + List sPrivilegeTypeConfigs = SPrivilegeTypeConfig.privilegeByType.get(privilageTypeId); + List typePrivileges = new ArrayList<>(); + for(SPrivilegeTypeConfig config:sPrivilegeTypeConfigs){ + if(!vipInfo.containsKey(config.getId())){ + continue; + } + typePrivileges.add(config.getId()); + } + if(typePrivileges.isEmpty()){ + return false; + } + for(Integer privilageId:typePrivileges){ + VipInfo info = vipInfo.get(privilageId); + if(info.getEffectTime()!=0&&TimeUtils.now()/1000>info.getEffectTime()){ + continue; + } + int mCount = getMaxCountByPrivilege(user,privilageId); + if(mCount==-1){ + return true; + } + if((info.getCount()+updateNum>mCount)|| (info.getEffectTime()!=0&&TimeUtils.now()/1000>info.getEffectTime())){ + continue; + } + user.getPlayerInfoManager().updateVipPrivilage(privilageId, updateNum); + return true; + } + return false; + } +// private boolean priviliageCheck(User user, int privilageTypeId, int checkNum,boolean isUpdate){ +// Map vipInfo = user.getPlayerInfoManager().getVipInfo(); +// if(privilageTypeId == 0){ +// return true; +// } +// List sPrivilegeTypeConfigs = SPrivilegeTypeConfig.privilegeByType.get(privilageTypeId); +// List typePrivileges = new ArrayList<>(); +// for(SPrivilegeTypeConfig config:sPrivilegeTypeConfigs){ +// if(!vipInfo.containsKey(config.getId())){ +// continue; +// } +// typePrivileges.add(config.getId()); +// } +// if(typePrivileges.isEmpty()){ +// return false; +// } +// for(Integer privilageId:typePrivileges){ +// VipInfo info = vipInfo.get(privilageId); +// if(info.getEffectTime()!=0&&TimeUtils.now()/1000>info.getEffectTime()){ +// continue; +// } +// int mCount = getMaxCountByPrivilege(user,privilageId); +// if(mCount==-1){ +// return true; +// } +// if((info.getCount()+checkNum>mCount)|| (info.getEffectTime()!=0&&TimeUtils.now()/1000>info.getEffectTime())){ +// continue; +// } +// if (isUpdate){ +// user.getPlayerInfoManager().updateVipPrivilage(privilageId, checkNum); +// } +// return true; +// } +// return false; +// } private int getMaxCountByPrivilege(User user,int privilegeId){ SPrivilegeTypeConfig sPrivilegeTypeConfig = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(privilegeId); Map> conditionMap = SPrivilegeTypeConfig.conditionMap.get(sPrivilegeTypeConfig.getUnlockType()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/MainLevelRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/MainLevelRank.java index b03f9e1fb..901e2ef61 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/MainLevelRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/MainLevelRank.java @@ -27,8 +27,8 @@ public class MainLevelRank extends AbstractRank { return new int[]{i%10_000_000}; } -// @Override -// protected PlayerInfoProto.RankResponse.Builder getAllUserResponse(Set> zsetreverseRangeWithScores, int start) throws Exception { + @Override + protected PlayerInfoProto.RankResponse.Builder getAllUserResponse(Set> zsetreverseRangeWithScores, int start) throws Exception { // PlayerInfoProto.RankResponse.Builder allUserResponse = super.getAllUserResponse(zsetreverseRangeWithScores, start); // List ranksBuilderList = allUserResponse.getRanksList(); // if(ranksBuilderList.size()<2){ @@ -53,7 +53,8 @@ public class MainLevelRank extends AbstractRank { // PlayerInfoProto.RankResponse.Builder response = PlayerInfoProto.RankResponse.newBuilder(); // response.setMyRankInfo(allUserResponse.getMyRankInfo()).addAllRanks(buildersCopy); // return response; -// } + return super.getAllUserResponse(zsetreverseRangeWithScores,start); + } @Override public Set> getRankByKey(String rkey,int start, int end) {