From cf0b06fa8cdbeb2b01528d0013ff1eab248c4079 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Fri, 23 Aug 2019 09:41:13 +0800 Subject: [PATCH] fix online --- .../jieling/logic/friend/FriendLogic.java | 2 +- .../ljsd/jieling/logic/hero/HeroLogic.java | 47 +++++++++++++++++-- .../com/ljsd/jieling/util/CBean2Proto.java | 2 +- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java index 3c58ade8f..bfbfb9689 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java @@ -448,7 +448,7 @@ public class FriendLogic { User friendUser = UserManager.getUser(friendId); FriendManager friendManager1 = friendUser.getFriendManager(); Map haveRewardMap = friendUser.getFriendManager().getHaveRewardMap(); - if (haveRewardMap.get(uid) != 0) { + if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) { MessageUtil.sendErrorResponse(iSession, 0, msgId, "已经赠送过"); return; } 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 444f3aa5e..0d83b694c 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 @@ -4,9 +4,12 @@ import com.ljsd.GameApplication; import com.ljsd.jieling.chat.logic.ChatLogic; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.core.VipPrivilegeType; +import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.event.HeroUpStarEvent; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.dao.*; @@ -14,6 +17,8 @@ import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.logic.item.ItemLogic; import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; +import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.HeroInfoProto; @@ -914,7 +919,7 @@ public class HeroLogic { public Map calHeroNotBufferAttribute(User user, Hero hero,boolean isForce,int teamId){ Map heroAllAttribute = calHeroAllAttribute(hero,isForce); heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),heroAllAttribute.get(GlobalsDef.HP_TYPE)); - Collection values = hero.getEquipByPositionMap().values(); + EquipManager equipManager = user.getEquipManager(); PokemonManager pokemonManager = user.getPokemonManager(); SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); @@ -938,16 +943,50 @@ public class HeroLogic { } //装备总战力评分 int equipForce=0; - for(String equipId:values){ + boolean needRemove = false; + Iterator> iterator = hero.getEquipByPositionMap().entrySet().iterator(); + while (iterator.hasNext()){ + Map.Entry next = iterator.next(); + String equipId = next.getValue(); Equip equip = equipManager.getEquipMap().get(equipId); + if(equip == null){ + needRemove = true; + continue; + } Map propertyValueByIdMap = equip.getPropertyValueByIdMap(); Map secondValueByIdMap = equip.getSecondValueByIdMap(); - // LOGGER.info("cal equip = {}",equip.getEquipId()); + // LOGGER.info("cal equip = {}",equip.getEquipId()); combinedAttribute(propertyValueByIdMap,heroAllAttribute); combinedAttribute(secondValueByIdMap,heroAllAttribute); SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equip.getEquipId()); equipForce+=sEquipConfig.getScore(); - // LOGGER.info("cal equip = {} end",equip.getEquipId()); + } + if(needRemove){ + AyyncWorker ayyncWorker = new AyyncWorker(user,true) { + @Override + public void work(User user) throws Exception { + Map heroMap = user.getHeroManager().getHeroMap(); + for(Hero heroTmp : heroMap.values()){ + Iterator> iterator = heroTmp.getEquipByPositionMap().entrySet().iterator(); + boolean isUpate = false; + while (iterator.hasNext()){ + Map.Entry next = iterator.next(); + String equipId = next.getValue(); + Equip equip = equipManager.getEquipMap().get(equipId); + if(equip == null){ + iterator.remove(); + isUpate = true; + } + } + if(isUpate){ + heroTmp.setEquipByPositionMap(heroTmp.getEquipByPositionMap()); + } + } + } + }; + ProtocolsManager instance = ProtocolsManager.getInstance(); + HandlerLogicThread handlerThread = instance.handlerThreads[user.getId() % instance.HANDLER_THREAD_NUM]; + handlerThread.addAyyncWorker(ayyncWorker); } //天赋异妖加成 Map ringFireMap = pokemonManager.getRingFireMap(); 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 5309e3e0c..cc63139f5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -274,7 +274,7 @@ public class CBean2Proto { if (giveMap.size() != 0 && giveMap.containsKey(friendId)){ isGrive = giveMap.get(friendId); } - if (haveRewardMap.size() != 0 && giveMap.containsKey(friendId)){ + if (haveRewardMap.size() != 0 && giveMap.containsKey(friendId) && haveRewardMap.containsKey(friendId)){ haveReward = haveRewardMap.get(friendId) ==2?0:haveRewardMap.get(friendId); } }