diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipConfig.java index 1e183679b..63eca4f09 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipConfig.java @@ -36,7 +36,7 @@ public class SEquipConfig implements BaseConfig { sEquipConfigByIdMap = STableManager.getConfig(SEquipConfig.class); } - public static SEquipConfig getsEquipConfigByI(int equipTid) { + public static SEquipConfig getsEquipConfigById(int equipTid) { return sEquipConfigByIdMap.get(equipTid); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipUnLoadOptHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipUnLoadOptHandler.java new file mode 100644 index 000000000..091f1bc2f --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipUnLoadOptHandler.java @@ -0,0 +1,25 @@ +package com.ljsd.jieling.handler; + +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.HeroInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class EquipUnLoadOptHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.EQUIP_UNLOAD_OPT_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + HeroInfoProto.EquipUnLoadOptRequest equipUnLoadOptRequest = HeroInfoProto.EquipUnLoadOptRequest.parseFrom(netData.parseClientProtoNetData()); + int type = equipUnLoadOptRequest.getType(); + String equipId = equipUnLoadOptRequest.getEquipId(); + String heroId = equipUnLoadOptRequest.getHeroId(); + HeroLogic.getInstance().unloadEquipOpt(iSession,type,heroId,equipId); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java new file mode 100644 index 000000000..a493bdc38 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java @@ -0,0 +1,23 @@ +package com.ljsd.jieling.handler; + +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.HeroInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class EquipWearHandler extends BaseHandler{ + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.EQUIP_WEAR_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + HeroInfoProto.EquipWearRequest equipWearRequest = HeroInfoProto.EquipWearRequest.parseFrom(netData.parseClientProtoNetData()); + HeroLogic.getInstance().wearEquipOpt(iSession,equipWearRequest.getHeroId(),equipWearRequest.getEquipId()); + + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java index b0afe8203..cefb8a5cb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java @@ -21,6 +21,8 @@ public class Equip extends MongoBase { private int star; + private String heroId; + private Map propertyValueByIdMap; //主属性 key 对应PropertyConfig id private Map secondValueByIdMap; //副属性 @@ -38,7 +40,7 @@ public class Equip extends MongoBase { this.id = KeyGenUtils.produceIdByModule(UUIDEnum.EQUIP,uid); this.equipId = equipTid; this.propertyValueByIdMap = new HashMap<>(); - SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigByI(equipTid); + SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equipTid); int properTyId = sEquipConfig.getPropertyMin()[0]; int properMinNum = sEquipConfig.getPropertyMin()[1]; int properMaxNum = sEquipConfig.getPropertyMax()[1]; @@ -103,4 +105,13 @@ public class Equip extends MongoBase { updateString("star",star); this.star = star; } + + public String getHeroId() { + return heroId; + } + + public void setHeroId(String heroId) throws Exception { + updateString("heroId",heroId); + this.heroId = heroId; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/EquipManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/EquipManager.java index ad1bbe6ff..58935fef0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/EquipManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/EquipManager.java @@ -17,4 +17,8 @@ public class EquipManager extends MongoBase { removeString("equipMap." + equipId); equipMap.remove(equipId); } + + public Map getEquipMap() { + return equipMap; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java index d137da698..b2bba96b3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java @@ -9,7 +9,9 @@ import com.ljsd.jieling.util.KeyGenUtils; import com.ljsd.jieling.util.UUIDEnum; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class Hero extends MongoBase { private String id; @@ -23,7 +25,7 @@ public class Hero extends MongoBase { private List skillList; - private List equipList; + private Map equipByPositionMap; private int breakId; @@ -42,7 +44,7 @@ public class Hero extends MongoBase { this.level = 1; this.star = scHero.getStar(); this.skillList = new ArrayList<>(); - this.equipList = new ArrayList<>(); + this.equipByPositionMap = new HashMap<>(); List skillIds = scHero.getSkillListByStar().get(star); if(skillIds!=null && skillIds.isEmpty()){ this.skillList.addAll(skillIds); @@ -116,12 +118,23 @@ public class Hero extends MongoBase { this.skillList = skillList; } - public void setEquipList(List equipList) { - this.equipList = equipList; + public Map getEquipByPositionMap() { + return equipByPositionMap; } - public List getEquipList() { - return equipList; + public void setEquipByPositionMap(Map equipByPositionMap) throws Exception { + updateString("breakId",breakId); + this.equipByPositionMap = equipByPositionMap; + } + + public void updateEquipPositionMap(int position,String equipId) throws Exception { + updateString("breakId." + position ,breakId); + this.equipByPositionMap.put(position,equipId); + } + + public void removeEquip(int position){ + removeString("breakId." + position); + this.equipByPositionMap.remove(position); } public int getBreakId() { 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 d14ce1072..b7a9522ad 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 @@ -8,10 +8,7 @@ import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.HeroInfoProto; import com.ljsd.jieling.protocols.MessageTypeProto; -import com.ljsd.jieling.util.CBean2Proto; -import com.ljsd.jieling.util.ItemUtil; -import com.ljsd.jieling.util.MathUtils; -import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -415,5 +412,59 @@ public class HeroLogic { + // equip TODO 装备会导致英雄属性发生变化 + public void wearEquipOpt(ISession session,String heroId,String equipId) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + Hero hero = user.getHeroManager().getHero(heroId); + Equip equip = user.getEquipManager().getEquipMap().get(equipId); + if( null == equip || null == hero ){ + return; + } + if(!StringUtil.isEmpty(equip.getHeroId())){ + return; + } + int equipIdTid = equip.getEquipId(); + SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equipIdTid); + int position = sEquipConfig.getPosition(); + Map equipByPositionMap = hero.getEquipByPositionMap(); + if( equipByPositionMap!=null && equipByPositionMap.get(position)!= null){ + return; + } + + hero.updateEquipPositionMap(position,equipId); + + //发送成功消息 + MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.EQUIP_WEAR_REQUEST_VALUE,null,true); + + + } + + public void unloadEquipOpt(ISession session,int type,String heroId,String equipId) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + Equip equip = user.getEquipManager().getEquipMap().get(equipId); + Hero hero = user.getHeroManager().getHero(heroId); + if( hero == null|| null == equip || !StringUtil.isEmpty(equip.getHeroId()) ){ + return; + } + int equipIdTid = equip.getEquipId(); + SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equipIdTid); + int position = sEquipConfig.getPosition(); + + if(type == 1){ + equip.setHeroId(""); + hero.removeEquip(position); + } + if(type == 2){ + hero.setEquipByPositionMap(new HashMap<>()); + } + + //发送成功消息 + MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.EQUIP_UNLOAD_OPT_RESPONSE_VALUE,null,true); + } + + + } 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 8b73f2d58..2d0f4060b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -41,7 +41,7 @@ public class CBean2Proto { .setLevel(hero.getLevel()) .setStar(hero.getStar()) .addAllSkillIdList(hero.getSkillList()) - .addAllEquipIdList(getHeroEquip(hero.getEquipList())) + // .addAllEquipIdList(getHeroEquip(hero.getEquipList())) .build(); return heroProto; }