diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java b/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java index 8a7e3f88f..6efa2a0d1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java @@ -2,7 +2,6 @@ package com.ljsd.jieling.core; import com.ljsd.GameApplication; import com.ljsd.jieling.db.mongo.MongoUtil; -import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.exception.ErrorUtil; import com.ljsd.jieling.handler.BaseHandler; @@ -11,7 +10,6 @@ import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.MainLevelManager; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; -import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISession; @@ -19,7 +17,6 @@ import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.util.AyyncWorker; import com.ljsd.jieling.util.MessageUtil; import config.SChallengeConfig; -import config.SErrorCodeEerverConfig; import config.SGlobalSystemConfig; import config.SMainLevelConfig; import manager.STableManager; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java index 43497b9aa..051c8a081 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java @@ -173,7 +173,7 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { MailLogic.getInstance().sendMail(user.getId(), title, content, mailReward, nowTime, Global.MAIL_EFFECTIVE_TIME); } - private void getAllMissRewards(User user, ISession session, List itemAttrs) throws Exception { + public void getAllMissRewards(User user, ISession session, List itemAttrs) throws Exception { List misssIds = new LinkedList<>(); List cfgs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); if (null == cfgs) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java index 0d5bb4a09..f8bd890a6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java @@ -69,28 +69,11 @@ public class TreasureActivity extends AbstractActivity { private void takeTreasureReward(ISession session, User user, int activityId, int missionId) throws Exception { int rewardResponseValue = MessageTypeProto.MessageType.TAKE_ACTIVITY_REWARD_RESPONSE_VALUE; ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId); - PlayerManager playerInfoManager = user.getPlayerInfoManager(); - int changeState = ActivityType.HAD_TAKED; - int hadBuyTreasure = playerInfoManager.getHadBuyTreasure(); - if (hadBuyTreasure == 1) { - changeState = ActivityType.FINISH_TAKED; - } + int changeState = getChangerState(user); List dropList = new ArrayList<>(2); - Set missionIds = new HashSet<>(); +// Set missionIds = new HashSet<>(); if(missionId==-1){ - for(int i = 1 ; i<=user.getPlayerInfoManager().getTreasureLevel();i++){ - Map progressInfoMap = activityMission.getActivityProgressInfoMap(); - int state =progressInfoMap.get(i).getState(); - if(state==changeState||state==ActivityType.FINISH_TAKED) { - continue; - } - missionIds.add(i); - dropByState(dropList,state,changeState,i); - ActivityProgressInfo progressInfo = new ActivityProgressInfo(0,changeState); - activityMission.updateProgressInfo(i, progressInfo); - - } - + getAllTreasureRewards(user,activityMission,changeState,dropList); }else{ int state = activityMission.getActivityProgressInfoMap().get(missionId).getState(); if(state==changeState||state==ActivityType.FINISH_TAKED){ @@ -99,7 +82,7 @@ public class TreasureActivity extends AbstractActivity { dropByState(dropList,state,changeState,missionId); ActivityProgressInfo progressInfo = new ActivityProgressInfo(0,changeState); activityMission.updateProgressInfo(missionId, progressInfo); - missionIds.add(missionId); +// missionIds.add(missionId); } // sendActivityProgress(session,activityMission,missionIds); @@ -205,4 +188,31 @@ public class TreasureActivity extends AbstractActivity { } } + + private int getChangerState(User user){ + PlayerManager playerInfoManager = user.getPlayerInfoManager(); + int changeState = ActivityType.HAD_TAKED; + int hadBuyTreasure = playerInfoManager.getHadBuyTreasure(); + if (hadBuyTreasure == 1) { + changeState = ActivityType.FINISH_TAKED; + } + return changeState; + } + private void getAllTreasureRewards(User user,ActivityMission activityMission,int changeState,List dropList){ + for(int i = 1 ; i<=user.getPlayerInfoManager().getTreasureLevel();i++){ + Map progressInfoMap = activityMission.getActivityProgressInfoMap(); + int state =progressInfoMap.get(i).getState(); + if(state==changeState||state==ActivityType.FINISH_TAKED) { + continue; + } + dropByState(dropList,state,changeState,i); + ActivityProgressInfo progressInfo = new ActivityProgressInfo(0,changeState); + activityMission.updateProgressInfo(i, progressInfo); + + } + } + @Override + public void getAllMissRewards(User user, ISession session, List itemAttrs){ + getAllTreasureRewards(user, user.getActivityManager().getActivityMissionMap().get(id), getChangerState(user), itemAttrs); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java index 1ffee5a8b..c1076808d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java @@ -151,7 +151,18 @@ public class GuildLogic { Collection guildInfos = GuilidManager.recommandGuild(user); Family.FamilyRecommandResponse.Builder builder = Family.FamilyRecommandResponse.newBuilder(); Map applyGuildInfos = GuilidManager.getApplyGuildInfos(uid, 1); + int now =(int)(System.currentTimeMillis()/1000); + if(applyGuildInfos.size()>0){ + for(Map.Entry applyEntry:applyGuildInfos.entrySet()){ + GuildApply guildApply = applyEntry.getValue(); + if(now - guildApply.getCreateTime() > SGuildSetting.sGuildSetting.getApplyReserve()){ + GuilidManager.removeOneApplyGuildInfos(guildApply.getGuildId(),guildApply.getId()); + continue; + } + } + } for(GuildInfo guildInfo : guildInfos){ + builder.addFamilyRecomandInfo(Family.FamilyRecomandInfo.newBuilder(). setFamilyBaseInfo(CBean2Proto.getFamilyBaseInfo(guildInfo)) .setIsApply(applyGuildInfos.containsKey(guildInfo.getId())?1:0) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index 979521f11..d46630988 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -258,10 +258,10 @@ public class CombatLogic { } } int[] randomRewardMin = targetMainLevelConfig.getRandomRewardMin(); - ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,BIReason.ADVENTURE_BASE_REWARD); int timesTemp =times; while (timesTemp-->0){ - ItemUtil.combineReward(user,targetMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + ItemUtil.combineReward(user,targetMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap,BIReason.ADVENTURE_RANDOM_REWARDD); } ItemUtil.drop(user,baseBuilder,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,BIReason.ADVENTURE_BASE_REWARD); ItemUtil.drop(user,randomBuilder,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap,BIReason.ADVENTURE_RANDOM_REWARDD); @@ -900,10 +900,10 @@ public class CombatLogic { Integer times = fightStateInfoItem.getValue(); SMainLevelConfig sMainLevelConfig = SMainLevelConfig.config.get(fightId); int[] randomRewardMin = sMainLevelConfig.getRandomRewardMin(); - ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,BIReason.ADVENTURE_BASE_REWARD); int timesTemp =times; while (!viewBaseReward&×Temp-->0){ - ItemUtil.combineReward(user,sMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + ItemUtil.combineReward(user,sMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap,BIReason.ADVENTURE_RANDOM_REWARDD); } takeTimes+=times; } @@ -918,10 +918,10 @@ public class CombatLogic { if(maxTimes>0){ times = times > maxTimes?maxTimes:times; int[] randomRewardMin = targetMainLevelConfig.getRandomRewardMin(); - ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + ItemUtil.combineReward(user,randomRewardMin, times,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,BIReason.ADVENTURE_BASE_REWARD); int timesTemp =times; while (!viewBaseReward&×Temp-->0){ - ItemUtil.combineReward(user,targetMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap); + ItemUtil.combineReward(user,targetMainLevelConfig.getRandomReward(), 1f,randomItemMap,randomCardMap,randomEquipMap,randomRandomMap,BIReason.ADVENTURE_RANDOM_REWARDD); } lastTimeTakes=times; } 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 baf2411a2..99cff84e7 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 @@ -329,7 +329,7 @@ public class ItemLogic { } } - ItemUtil.combineReward(user, StringUtil.parseFiledInt(reward.toString()),1,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap); + ItemUtil.combineReward(user, StringUtil.parseFiledInt(reward.toString()),1,baseItemMap,baseCardMap,baseEquipMap,baseRandomMap,-1); int reson = BIReason.DECOMPOS_HERO_REWARD; if(null!=filterItem){ 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 9ce76e16b..28c5f13d1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -257,8 +257,27 @@ public class ItemUtil { - public static void combineReward(User user,int[] dropGroupIds,float dropRatio, Map itemMap, Map cardMap, Map equipMap, Map randomMap){ + public static void combineReward(User user,int[] dropGroupIds,float dropRatio, Map itemMap, Map cardMap, Map equipMap, Map randomMap,int reason){ combineRewardDropGroup(user, dropGroupIds, dropRatio, itemMap, cardMap, equipMap, randomMap); + ItemManager itemManager = user.getItemManager(); + for(Map.Entry item : itemMap.entrySet()){ + Integer itemId = item.getKey(); + Integer value = item.getValue(); + SItem sItem = SItem.getsItemMap().get(itemId); + int itemNums = privilegeAdd(user, 1, sItem.getItemType(), value); + Item hadItem = itemManager.getItem(itemId); + int hadNums = 0; + if(hadItem !=null){ + hadNums = hadItem.getItemNum(); + } + if(hadNumssItem.getItemNumlimit()){ + itemMap.put(itemId,sItem.getItemNumlimit() - hadNums); + }else{ + itemMap.put(itemId,itemNums); + } + } + } } public static void combineReward(int[][] itemArr, Map itemMap, Map cardMap, Map equipMap, Map randomMap){ @@ -485,7 +504,6 @@ public class ItemUtil { if(itemNum <= 0){ continue; } - itemNum=privilegeAdd(user,reason,sItem.getItemType(),itemNum); if (itemNum >= sItem.getItemNumlimit()){ itemNum = sItem.getItemNumlimit(); } @@ -493,6 +511,9 @@ public class ItemUtil { if (item == null) { item = itemManager.newItem(entry.getKey(), itemNum); } else { + if(item.getItemNum()>= sItem.getItemNumlimit()){ + continue; + } if (item.getItemNum() + entry.getValue() >= sItem.getItemNumlimit()){ itemNum = sItem.getItemNumlimit() -item.getItemNum(); item.setItemNum(sItem.getItemNumlimit()); @@ -1373,36 +1394,60 @@ public class ItemUtil { public static boolean checkCardAndEquipLimit( User user ,int[][] itemArr) { SGameSetting gameSetting = STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting(); - for (int[] ints : itemArr) { - int itemId = ints[0]; - SItem sItem = SItem.getsItemMap().get(itemId); - int itemType = getItemType(sItem); - if (itemType == GlobalItemType.CARD) { - int hasHeroNum = user.getHeroManager().getHeroMap().size(); - if (hasHeroNum >= gameSetting.getHeroNumlimit()){ - return true; - } - } else if (itemType == GlobalItemType.EQUIP) { - EquipManager equipManager = user.getEquipManager(); - int hasEquipNum = equipManager.getEquipMap().size(); - if (hasEquipNum >= gameSetting.getEquipNumlimit()){ - return true; - } - }else if(itemType == GlobalItemType.SOUL_MARK){ - int limit = SSpecialConfig.getIntegerValue(SSpecialConfig.EQUIPSIGN_LIMIT); - if (user.getEquipManager().getSoulEquipMap().size() >=limit){ - return true; - } - }else if(itemType == GlobalItemType.ESPECIAL_EQUIP){ - int limit = SSpecialConfig.getIntegerValue(SSpecialConfig.EquipTalismana_limit); - if (user.getEquipManager().getEspecialEquipMap().size() >=limit){ - return true; - } + Map itemTypeMap = getItemTypeMap(itemArr); + for (Map.Entry entry : itemTypeMap.entrySet()) { + switch (entry.getKey()){ + case GlobalItemType.CARD: + int hasHeroNum = user.getHeroManager().getHeroMap().size(); + if (hasHeroNum+entry.getValue() >= gameSetting.getHeroNumlimit()){ + return true; + } + break; + case GlobalItemType.EQUIP: + EquipManager equipManager = user.getEquipManager(); + int hasEquipNum = equipManager.getEquipMap().size(); + if (hasEquipNum +entry.getValue()>= gameSetting.getEquipNumlimit()){ + return true; + } + break; + case GlobalItemType.SOUL_MARK: + int soulLimit = SSpecialConfig.getIntegerValue(SSpecialConfig.EQUIPSIGN_LIMIT); + if (user.getEquipManager().getSoulEquipMap().size()+entry.getValue()>=soulLimit){ + return true; + } + break; + case GlobalItemType.ESPECIAL_EQUIP: + int especialLimit = SSpecialConfig.getIntegerValue(SSpecialConfig.EquipTalismana_limit); + if (user.getEquipManager().getEspecialEquipMap().size()+entry.getValue() >=especialLimit){ + return true; + } + break; + default: + break; } } return false; } + /** + * 获取物品种类map + * @param itemArr + * @return + */ + public static Map getItemTypeMap(int[][] itemArr){ + Map itemTypeMap = new HashMap<>(); + for (int[] ints : itemArr) { + int itemId = ints[0]; + SItem sItem = SItem.getsItemMap().get(itemId); + int itemType = getItemType(sItem); + if(itemTypeMap.containsKey(itemType)){ + itemTypeMap.put(itemType,itemTypeMap.get(itemType)+ints[1]); + }else{ + itemTypeMap.put(itemType,ints[1]); + } + } + return itemTypeMap; + } //特权加成收益计算 public static int privilegeAdd(User user,int reason,int itemType,int sourceNum){