diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fixEquip.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fixEquip.java new file mode 100644 index 000000000..c2e39f786 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fixEquip.java @@ -0,0 +1,24 @@ +package com.ljsd.jieling.kefu; + +import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.logic.dao.Equip; +import com.ljsd.jieling.logic.dao.root.User; + +import java.util.List; +import java.util.Map; + +public class Cmd_fixEquip extends GmAbstract{ + @Override + public boolean exec(String[] args) throws Exception { + List userList = MongoUtil.getInstence().getMyMongoTemplate().findAll(User.getCollectionName(), User.class); + userList.forEach(user -> { + user.getEquipManager().getEquipMap().values().forEach(equip -> equip.setHeroId("")); + Map equipMap = user.getEquipManager().getEquipMap(); + user.getHeroManager().getHeroMap().values().forEach(hero -> { + Map equipByPositionMap = hero.getEquipByPositionMap(); + equipByPositionMap.values().forEach(equipId -> equipMap.get(equipId).setHeroId(hero.getId())); + }); + }); + return true; + } +} 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 659dd16fc..9cd3d5d5e 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 @@ -835,11 +835,9 @@ public class GuildLogic { return; } MailLogic.getInstance().sendMail(uid,title,content,"",(int) (TimeUtils.now()/1000), Global.MAIL_EFFECTIVE_TIME); - ISession session = OnlineUserManager.getSessionByUid(uid); - if(session!=null){ - Family.FamilyPositionUpdateIndication build = Family.FamilyPositionUpdateIndication.newBuilder().setPostiion(position).build(); - MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.FAMILY_POSITION_UPDATE_INDICAITON_VALUE,build,true); - } + Family.FamilyPositionUpdateIndication build = Family.FamilyPositionUpdateIndication.newBuilder().setPosition(position).setUid(uid).build(); + User userInMem = UserManager.getUserInMem(uid); + sendIndicationToMember(GuilidManager.guildInfoMap.get(userInMem.getPlayerInfoManager().getGuildId()), MessageTypeProto.MessageType.FAMILY_POSITION_UPDATE_INDICAITON,build); } public static void sendFamilyBaseUpdateIndication(GuildInfo guildInfo){ 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 9992e1c33..0947cf6d6 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 @@ -1414,7 +1414,7 @@ public class HeroLogic{ if( null == equip || null == hero ){ return false; } - if(!StringUtil.isEmpty(equip.getHeroId())){ + if(!StringUtil.isEmpty(equip.getHeroId()) && !equip.getHeroId().equals(hero.getId())){ return false; } int equipIdTid = equip.getEquipId(); @@ -1443,11 +1443,18 @@ public class HeroLogic{ Hero hero = user.getHeroManager().getHeroMap().get(heroId); if(type==1){ Map equipInfoTmp = new HashMap<>(6); + EquipManager equipManager = user.getEquipManager(); if(!checkEquipForWear(hero,user.getEquipManager(),equipIds,equipInfoTmp)){ throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR); } + hero.getEquipByPositionMap().forEach((Integer position,String equipId) -> { + if(equipInfoTmp.containsKey(position) && !equipId.equals(equipInfoTmp.get(position))){ + equipManager.getEquipMap().get(equipId).setHeroId(""); + } + }); hero.updateMutliEquipPositionMap(equipInfoTmp); user.getUserMissionManager().onGameEvent(user,GameEvent.WEAR_EQUIP,equipInfoTmp.size()); + equipIds.forEach(equipId->equipManager.getEquipMap().get(equipId).setHeroId(heroId)); }else if(type ==2){ if(equipIds.size()!=1){ throw new ErrorCodeException(ErrorCode.HERO_OPT_ONE); @@ -1611,9 +1618,10 @@ public class HeroLogic{ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } List positions = new ArrayList<>(); + Map equipMap = user.getEquipManager().getEquipMap(); for(String equipId : equipIds){ - Equip equip = user.getEquipManager().getEquipMap().get(equipId); - if(null == equip || !StringUtil.isEmpty(equip.getHeroId())){ + Equip equip = equipMap.get(equipId); + if(null == equip || StringUtil.isEmpty(equip.getHeroId())){ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } int equipIdTid = equip.getEquipId(); @@ -1621,6 +1629,7 @@ public class HeroLogic{ int position = sEquipConfig.getPosition(); positions.add(position); } + equipIds.forEach(equidId->equipMap.get(equidId).setHeroId("")); for(Integer position : positions){ hero.removeEquip(position); 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 4224fb581..425cf10f0 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 @@ -28,6 +28,7 @@ import config.*; import manager.STableManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import util.StringUtil; import java.util.*; @@ -463,6 +464,9 @@ public class WorkShopLogic { costResult = false; break; } + if(!StringUtil.isEmpty(consumeEquip.getHeroId())){ + return "祭品已经被穿戴"; + } SEquipConfig consumeSEquipConfig = STableManager.getConfig(SEquipConfig.class).get(consumeEquip.getEquipId()); if(consumeSEquipConfig.getQuality()!=mainCostQuality[0]){ costResult = false;