From 0bc5d8fb90acf34731536002895ea95f059ddadc Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Fri, 6 Sep 2019 10:59:49 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=AD=82=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/config/SEquipSign.java | 83 ++++++++++++ .../jieling/config/SEquipSignSetting.java | 37 ++++++ .../config/SEquipTalismanaLottery.java | 49 +++++++ .../ljsd/jieling/config/SSpecialConfig.java | 2 + .../com/ljsd/jieling/globals/BIReason.java | 6 + .../jieling/handler/GetPlayerInfoHandler.java | 2 +- .../handler/UseAndPriceItemHandler.java | 11 +- .../handler/{ => equip}/EquipWearHandler.java | 10 +- .../equip/ForceRandSoulEquipHandler.java | 36 ++++++ .../{ => equip}/GetAllEquipHandler.java | 10 +- .../handler/equip/RandSoulEquipHandler.java | 21 +++ .../equip/SoulEquipUnLoadOptHandler.java | 26 ++++ .../handler/equip/SoulEquipWearHandler.java | 24 ++++ .../equip/UpSoulEquipQuiickHandler.java | 82 ++++++++++++ .../ljsd/jieling/logic/dao/EquipManager.java | 35 ++++- .../java/com/ljsd/jieling/logic/dao/Hero.java | 22 ++++ .../com/ljsd/jieling/logic/dao/SoulEquip.java | 36 ++++++ .../ljsd/jieling/logic/hero/HeroLogic.java | 122 +++++++++++++++++- .../ljsd/jieling/logic/item/ItemLogic.java | 103 ++++++++++++++- .../jieling/logic/question/QuestionLogic.java | 3 + .../com/ljsd/jieling/util/CBean2Proto.java | 15 +++ .../java/com/ljsd/jieling/util/ItemUtil.java | 5 +- .../com/ljsd/jieling/util/StringUtil.java | 16 +++ .../java/com/ljsd/jieling/util/UUIDEnum.java | 3 +- 24 files changed, 732 insertions(+), 27 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSign.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSignSetting.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismanaLottery.java rename serverlogic/src/main/java/com/ljsd/jieling/handler/{ => equip}/EquipWearHandler.java (61%) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ForceRandSoulEquipHandler.java rename serverlogic/src/main/java/com/ljsd/jieling/handler/{ => equip}/GetAllEquipHandler.java (64%) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/equip/RandSoulEquipHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/equip/SoulEquipUnLoadOptHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/equip/SoulEquipWearHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/equip/UpSoulEquipQuiickHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SoulEquip.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSign.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSign.java new file mode 100644 index 000000000..01968a587 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSign.java @@ -0,0 +1,83 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.HashMap; +import java.util.Map; + +@Table(name = "EquipSign") +public class SEquipSign implements BaseConfig { + + private int id; + + private int quality; + + private int type; + + private int level; + + private int[][] property; + + private int experience; + + private int resolve; + + public static Map sEquipSignMap; + private static Map equipExpMap = new HashMap<>(); + + @Override + public void init() throws Exception { + sEquipSignMap = STableManager.getConfig(SEquipSign.class); + int sum = 0; + for (Map.Entry entry : sEquipSignMap.entrySet()) { + sum += entry.getValue().getExperience(); + equipExpMap.put(entry.getKey(), sum); + } + } + + + public int getId() { + return id; + } + + public int getQuality() { + return quality; + } + + public int getType() { + return type; + } + + public int getLevel() { + return level; + } + + public int[][] getProperty() { + return property; + } + + public int getExperience() { + return experience; + } + + public int getResolve() { + return resolve; + } + + public static Map getsEquipSignMap() { + return sEquipSignMap; + } + + public static void setsEquipSignMap(Map sEquipSignMap) { + SEquipSign.sEquipSignMap = sEquipSignMap; + } + + public static Map getEquipExpMap() { + return equipExpMap; + } + + public static void setEquipExpMap(Map equipExpMap) { + SEquipSign.equipExpMap = equipExpMap; + } +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSignSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSignSetting.java new file mode 100644 index 000000000..6c79168e3 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSignSetting.java @@ -0,0 +1,37 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.Map; + +@Table(name ="EquipSignSetting") +public class SEquipSignSetting implements BaseConfig { + + private int id; + + private int slotPosition; + + private int[] openRules; + + + @Override + public void init() throws Exception { + + } + + + public int getId() { + return id; + } + + public int getSlotPosition() { + return slotPosition; + } + + public int[] getOpenRules() { + return openRules; + } + + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismanaLottery.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismanaLottery.java new file mode 100644 index 000000000..5f0e11fd6 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipTalismanaLottery.java @@ -0,0 +1,49 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; +import com.ljsd.jieling.util.StringUtil; + +import java.util.HashMap; +import java.util.Map; + +@Table(name = "EquipTalismanaLottery") +public class SEquipTalismanaLottery implements BaseConfig { + + private int id; + + private int[][] drop; + + private int[][] probability; + + private int[] costItem; + + private int[] repeatedlyCost; + + + @Override + public void init() throws Exception { + } + + + public int getId() { + return id; + } + + public int[][] getDrop() { + return drop; + } + + public int[][] getProbability() { + return probability; + } + + public int[] getCostItem() { + return costItem; + } + + public int[] getRepeatedlyCost() { + return repeatedlyCost; + } + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SSpecialConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SSpecialConfig.java index 28f190a68..d5b3dd62d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SSpecialConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SSpecialConfig.java @@ -17,6 +17,8 @@ public class SSpecialConfig implements BaseConfig { private String value; public static final String PHONE_BINDING = "Phone_Binding"; + public static final String MANDATORY_ASTROLOGICAL = "Mandatory_Astrological"; + @Override public void init() throws Exception { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index 109548aea..3a6f553e6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -80,6 +80,9 @@ public interface BIReason { int BIND_PHONE = 49; // 修改手机号 int ENDLESS_REASON_CHANGE = 50;//无尽副本赛季更换 + int RANDOM_SOULEQUIP = 51;//占星 + + //道具消耗原因 1000开头 int ADVENTURE_UPLEVEL_CONSUME = 1000; //秘境升级 int SECRETBOX_CONSUME = 1001; //秘盒抽卡 @@ -141,4 +144,7 @@ public interface BIReason { int ESPECIAL_EQUIP_UP_LEVEL_CONSUME = 1035;//法宝进阶消耗 + + int RANDOM_SOULEQUIP_CONSUME = 1036;//占星 + } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index f09572d87..44782b64e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -117,7 +117,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ goodsTypeDurations.add(CommonProto.GoodsTypeDuration.newBuilder().setGoodsType(sRechargeCommodityConfig.getType()).setEndTime(goodsEndTime).build()); } //问卷状态 - int questState =0; + int questState =-1; if(user.getQuestionManager().getQuestId()!=0){ questState=user.getQuestionManager().getQuestState(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java index 012bc8a52..2278313ba 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/UseAndPriceItemHandler.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Component; import java.util.List; @Component -public class UseAndPriceItemHandler extends BaseHandler { +public class UseAndPriceItemHandler extends BaseHandler { private static final Logger LOGGER = LoggerFactory.getLogger(UseAndPriceItemHandler.class); @@ -22,10 +22,9 @@ public class UseAndPriceItemHandler extends BaseHandler { return MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_REQUEST; } + @Override - public void process(ISession iSession, PacketNetData netData) throws Exception { - PlayerInfoProto.UseAndPriceItemRequest useAndPriceItemRequest - = PlayerInfoProto.UseAndPriceItemRequest.parseFrom(netData.parseClientProtoNetData()); + public void processWithProto(ISession iSession, PlayerInfoProto.UseAndPriceItemRequest useAndPriceItemRequest) throws Exception { int type = useAndPriceItemRequest.getType(); List itemList = useAndPriceItemRequest.getItemsList(); List equipIdsList = useAndPriceItemRequest.getEquipIdsList(); @@ -39,8 +38,10 @@ public class UseAndPriceItemHandler extends BaseHandler { } else if(type==3){ CommonProto.Drop.Builder baseBuilder =ItemLogic.getInstance().decomposeHero(iSession,heroIdsList,null, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE); ItemLogic.sendUseAndPriceItemMessage(iSession, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, baseBuilder); - }else {//分解法宝 + }else if(type==4){//分解法宝 ItemLogic.getInstance().decomposeEspecialEquip(iSession, equipIdsList); + }else if(type==5){//分解魂印 + ItemLogic.getInstance().decomposeSoulEquip(iSession, equipIdsList); } } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/EquipWearHandler.java similarity index 61% rename from serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java rename to serverlogic/src/main/java/com/ljsd/jieling/handler/equip/EquipWearHandler.java index cf4c9a576..2277c109b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/EquipWearHandler.java @@ -1,23 +1,21 @@ -package com.ljsd.jieling.handler; +package com.ljsd.jieling.handler.equip; +import com.ljsd.jieling.handler.BaseHandler; 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{ +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()); + public void processWithProto(ISession iSession, HeroInfoProto.EquipWearRequest equipWearRequest) throws Exception { HeroLogic.getInstance().wearEquipOpt(iSession,equipWearRequest.getHeroId(),equipWearRequest.getEquipIdList(),equipWearRequest.getType()); - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ForceRandSoulEquipHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ForceRandSoulEquipHandler.java new file mode 100644 index 000000000..652abf039 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ForceRandSoulEquipHandler.java @@ -0,0 +1,36 @@ +package com.ljsd.jieling.handler.equip; + +import com.ljsd.jieling.config.SSpecialConfig; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.store.StoreLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.HeroInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.MessageUtil; +import org.springframework.stereotype.Component; + +@Component +public class ForceRandSoulEquipHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.SOUL_FORCE_RAND_EQUIP_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, HeroInfoProto.SoulForceRandRequest proto) throws Exception { + int uid = iSession.getUid(); + User user = UserManager.getUser(uid); + String err = StoreLogic.checkBuyGoodsAndUpdate(user,7,10019,1); + if (!"".equals(err)){ + MessageUtil.sendErrorResponse(iSession,0,MessageTypeProto.MessageType.SOUL_FORCE_RAND_EQUIP_RESPONSE_VALUE,err); + return; + } + int pos= SSpecialConfig.getIntegerValue(SSpecialConfig.MANDATORY_ASTROLOGICAL); + user.getEquipManager().setSoulEquipPool(pos); + HeroInfoProto.SoulForceRandResponse.Builder builder = HeroInfoProto.SoulForceRandResponse.newBuilder(); + builder.setPos(pos); + MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.SOUL_FORCE_RAND_EQUIP_RESPONSE_VALUE,builder.build(),true); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetAllEquipHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/GetAllEquipHandler.java similarity index 64% rename from serverlogic/src/main/java/com/ljsd/jieling/handler/GetAllEquipHandler.java rename to serverlogic/src/main/java/com/ljsd/jieling/handler/equip/GetAllEquipHandler.java index cf07c4efa..ec6659e19 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetAllEquipHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/GetAllEquipHandler.java @@ -1,5 +1,6 @@ -package com.ljsd.jieling.handler; +package com.ljsd.jieling.handler.equip; +import com.ljsd.jieling.handler.BaseHandler; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; @@ -8,17 +9,14 @@ import com.ljsd.jieling.protocols.MessageTypeProto; import org.springframework.stereotype.Component; @Component -public class GetAllEquipHandler extends BaseHandler{ +public class GetAllEquipHandler extends BaseHandler { @Override public MessageTypeProto.MessageType getMessageCode() { return MessageTypeProto.MessageType.GET_ALL_EQUIP_REQUEST; } @Override - public void process(ISession iSession, PacketNetData netData) throws Exception { - byte[] message = netData.parseClientProtoNetData(); - HeroInfoProto.GetAllEquipRequest getAllEquipRequest - = HeroInfoProto.GetAllEquipRequest.parseFrom(message); + public void processWithProto(ISession iSession, HeroInfoProto.GetAllEquipRequest getAllEquipRequest) throws Exception { int index = getAllEquipRequest.getIndex(); int type = getAllEquipRequest.getType(); HeroLogic.getInstance().getAllEquipInfo(iSession,index,type); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/RandSoulEquipHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/RandSoulEquipHandler.java new file mode 100644 index 000000000..78200cb9f --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/RandSoulEquipHandler.java @@ -0,0 +1,21 @@ +package com.ljsd.jieling.handler.equip; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.item.ItemLogic; +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 RandSoulEquipHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.SOUL_RAND_EQUIP_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, HeroInfoProto.SoulRandRequest proto) throws Exception { + ItemLogic.getInstance().soulEquipRand(iSession, proto.getTime()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/SoulEquipUnLoadOptHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/SoulEquipUnLoadOptHandler.java new file mode 100644 index 000000000..60ee53b33 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/SoulEquipUnLoadOptHandler.java @@ -0,0 +1,26 @@ +package com.ljsd.jieling.handler.equip; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.HeroInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class SoulEquipUnLoadOptHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.SOUL_EQUIP_UNLOAD_OPT_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, HeroInfoProto.SoulEquipUnLoadWearRequest equipUnLoadOptRequest) throws Exception { + + List equipIdsList = equipUnLoadOptRequest.getSoulEquipIdsList(); + String heroId = equipUnLoadOptRequest.getHeroId(); + HeroLogic.getInstance().unloadSoulEquipOpt(iSession,heroId,equipIdsList); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/SoulEquipWearHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/SoulEquipWearHandler.java new file mode 100644 index 000000000..d458a97fe --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/SoulEquipWearHandler.java @@ -0,0 +1,24 @@ +package com.ljsd.jieling.handler.equip; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.HeroInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class SoulEquipWearHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.SOUL_EQUIP_WEAR_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, HeroInfoProto.SoulEquipWearRequest equipWearRequest) throws Exception { + List equipIdsList = equipWearRequest.getSoulEquipIdsList(); + HeroLogic.getInstance().wearSoulEquipOpt(iSession,equipWearRequest.getHeroId(),equipIdsList); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/UpSoulEquipQuiickHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/UpSoulEquipQuiickHandler.java new file mode 100644 index 000000000..4fcf9042b --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/UpSoulEquipQuiickHandler.java @@ -0,0 +1,82 @@ +package com.ljsd.jieling.handler.equip; + +import com.ljsd.jieling.config.SEquipSign; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.SoulEquip; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.HeroInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.StringUtil; +import org.springframework.stereotype.Component; + +import java.util.LinkedList; +import java.util.List; + +@Component +public class UpSoulEquipQuiickHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.UP_SOUL_EQUIP_QUICK_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, HeroInfoProto.UpQuickSoulEquipRequest upQuickSoulEquipRequest) throws Exception { + + User user = UserManager.getUser(iSession.getUid()); + SoulEquip soulEquip = user.getEquipManager().getSoulEquipMap().get(upQuickSoulEquipRequest.getEquipId()); + if (null == soulEquip) { + throw new Exception("装备不存在"); + } + int addleve = 1; + SEquipSign sEcfg = SEquipSign.getsEquipSignMap().get(soulEquip.getCfgId()); + if (null == sEcfg ) { + throw new Exception("装备配置不存在" + soulEquip.getCfgId()); + } + SEquipSign nextEcfg = SEquipSign.getsEquipSignMap().get(soulEquip.getCfgId()+addleve); + if ( null == nextEcfg) { + MessageUtil.sendErrorResponse(iSession, 0, MessageTypeProto.MessageType.UP_SOUL_EQUIP_RESPONSE_VALUE, "最高等级"); + return; + } + + List consumIds = new LinkedList<>(); + + int nextNeedExp = SEquipSign.getEquipExpMap().get(nextEcfg.getId()); + + int sumExp = soulEquip.getExp(); + int leve = soulEquip.getLevel(); + for (String equipId : upQuickSoulEquipRequest.getSoulEquipIdsList()) { + SoulEquip equip = user.getEquipManager().getSoulEquipMap().get(equipId); + if (null == equip || !StringUtil.isEmpty(equip.getHeroId())) { + MessageUtil.sendErrorResponse(iSession, 0, MessageTypeProto.MessageType.UP_SOUL_EQUIP_RESPONSE_VALUE, ""); + return; + } + SEquipSign sEquipSign1 = SEquipSign.getsEquipSignMap().get(equip.getCfgId()); + if (null == sEquipSign1) { + throw new Exception("装备配置不存在" + equip.getCfgId()); + } + sumExp += sEquipSign1.getResolve(); + consumIds.add(equipId); + if (sumExp > nextNeedExp) { + leve+=1; + addleve+=1; + SEquipSign nextEcfg1 = SEquipSign.getsEquipSignMap().get(equip.getCfgId()+addleve); + if (null == nextEcfg1) { + break; + } + } + } + consumIds.forEach(id->user.getEquipManager().removeSoulEquip(id)); + soulEquip.setExp(sumExp); + soulEquip.setLevel(leve); + HeroInfoProto.UpSoulEquipResponse.Builder builder = HeroInfoProto.UpSoulEquipResponse.newBuilder(); + builder.setExp(sumExp); + builder.setLeve(leve); + builder.addAllSoulEquipIds(consumIds); + builder.setEquipId(upQuickSoulEquipRequest.getEquipId()); + MessageUtil.sendMessage(iSession,1, MessageTypeProto.MessageType.UP_SOUL_EQUIP_RESPONSE_VALUE,builder.build(),true); + } + +} 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 19d52f535..4b95dbe52 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,15 +17,21 @@ public class EquipManager extends MongoBase { private Map especialEquipMap; + private Map soulEquipMap; + private Equip unDetermined; private Map equipHandBook; + private int soulEquipPool;//占星装备卡池 + public EquipManager() { this.equipHandBook = new HashMap<>(); this.equipMap = new HashMap<>(); this.especialEquipMap = new HashMap<>(); + this.soulEquipMap = new HashMap<>(); + this.soulEquipPool = 1; this.setRootCollection(User._COLLECTION_NAME); } @@ -47,8 +53,8 @@ public class EquipManager extends MongoBase { removeString(getMongoKey()+".especialEquipMap."+equip); especialEquipMap.remove(equip); } - } + public void remove(String equipId){ if (equipMap.containsKey(equipId)){ removeString(getMongoKey()+".equipMap." + equipId); @@ -56,6 +62,18 @@ public class EquipManager extends MongoBase { } } + public void addSoulEquip(SoulEquip soulEquip){ + updateString("soulEquipMap." + soulEquip.getId(), soulEquip); + soulEquipMap.put(soulEquip.getId(), soulEquip); + } + + public void removeSoulEquip(String id){ + if(soulEquipMap.containsKey(id)){ + removeString(getMongoKey()+".soulEquipMap." + id); + soulEquipMap.remove(id); + } + } + public Map getEquipMap() { return equipMap; } @@ -64,6 +82,10 @@ public class EquipManager extends MongoBase { return especialEquipMap; } + public Map getSoulEquipMap() { + return soulEquipMap; + } + public Equip getUnDetermined() { return unDetermined; } @@ -80,6 +102,17 @@ public class EquipManager extends MongoBase { updateString("equipHandBook." + equipId, 0); } + public int getSoulEquipPool() { + if (soulEquipPool==0) + setSoulEquipPool(1); + return soulEquipPool; + } + + public void setSoulEquipPool(int soulEquipPool) { + updateString("soulEquipPool", soulEquipPool); + this.soulEquipPool = soulEquipPool; + } + public Map getEquipHandBook() { return equipHandBook; } 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 36e09b7af..6674bff05 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 @@ -32,6 +32,8 @@ public class Hero extends MongoBase { private Map equipByPositionMap; + private Map soulEquipByPositionMap; + private int breakId; private int starBreakId; @@ -167,6 +169,26 @@ public class Hero extends MongoBase { } } + + public Map getSoulEquipByPositionMap() { + return equipByPositionMap; + } + + public void updateSoulEquipPositionMap(int position,String equipId) throws Exception { + updateString("soulEquipByPositionMap." + position ,equipId); + this.soulEquipByPositionMap.put(position,equipId); + } + + public void removeSoulEquip(int position){ + String value = this.soulEquipByPositionMap.get(position); + if (value!=null){ + removeString(getMongoKey()+".soulEquipByPositionMap." + position); + this.soulEquipByPositionMap.remove(position); + } + } + + + public int getBreakId() { return breakId; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SoulEquip.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SoulEquip.java new file mode 100644 index 000000000..4931ee542 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/SoulEquip.java @@ -0,0 +1,36 @@ +package com.ljsd.jieling.logic.dao; + +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.util.KeyGenUtils; +import com.ljsd.jieling.util.UUIDEnum; + +/** + * 魂印 + */ +public class SoulEquip extends PropertyItem { + + private int exp; + + public SoulEquip(int uid, int equipTid) { + super(); + super.setId(KeyGenUtils.produceIdByModule(UUIDEnum.SOUL_EQUIP, uid)); + super.setEquipId(equipTid); + setLevel(1); + } + public SoulEquip() { + this.setRootCollection(User._COLLECTION_NAME); + } + + public int getExp() { + return exp; + } + + public int getCfgId() { + return getEquipId()*100+getLevel(); + } + + public void setExp(int exp) { + updateString("exp",exp); + this.exp = exp; + } +} 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 18d0c3dca..d06fb9de6 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,6 +8,7 @@ import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.activity.event.HeroUpStarEvent; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.dao.*; @@ -91,7 +92,7 @@ public class HeroLogic { private static final String DIVISION = "#"; /** - * 获取装备、法宝信息 + * 获取装备、法宝信息、魂印 * @param iSession * @param index * @param type @@ -106,12 +107,20 @@ public class HeroLogic { for(Equip equipInfo: equipMap.values()){ equipList.add(CBean2Proto.getEquipProto(equipInfo)); } - }else{ + }else if(type==2){ Map especialEquipMap = user.getEquipManager().getEspecialEquipMap(); for(EspecialEquip especialEquipInfo: especialEquipMap.values()){ equipList.add(CBean2Proto.getEquipProto(especialEquipInfo)); } + }else if(type==3){ + //魂印 + Map stringSoulEquipMap = user.getEquipManager().getSoulEquipMap(); + for(SoulEquip soulEquip: stringSoulEquipMap.values()){ + equipList.add(CBean2Proto.getEquipProto(soulEquip)); + } } + + boolean isSendFinish = false; int endIndex = index + Global.SEND_EQUIP_COUNT; if (index < equipList.size()) { @@ -1350,6 +1359,7 @@ public class HeroLogic { hero.updateEspecial(equipIds.get(0)); } } + // Map heroNotBufferAttribute = calHeroNotBufferAttribute(user, hero); // int force = calForce(heroNotBufferAttribute) + heroNotBufferAttribute.get(HeroAttributeEnum.EquipForce.getPropertyId()); // LOGGER.info("the heroTid={},the force={}",hero.getTemplateId(),force); @@ -1360,6 +1370,114 @@ public class HeroLogic { } + + // 安装魂印 + public void wearSoulEquipOpt(ISession session,String heroId, List equipIds) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + Hero hero = user.getHeroManager().getHeroMap().get(heroId); + + if (hero == null || equipIds.isEmpty()) { + MessageUtil.sendErrorResponse(session, 0, MessageTypeProto.MessageType.SOUL_EQUIP_WEAR_RESPONSE_VALUE, ""); + return; + } + + Map currentType = new HashMap<>(); //pos2type + + for (Map.Entry entry: hero.getSoulEquipByPositionMap().entrySet()) { + + SoulEquip equip = user.getEquipManager().getSoulEquipMap().get(entry.getValue()); + if(null == equip){ + throw new Exception("装备不存在" + entry.getValue()); + } + SEquipSign cfg = SEquipSign.getsEquipSignMap().get(equip.getCfgId()); + if (null == cfg ) { + throw new Exception("装备配置不存在" + equip.getCfgId()); + } + currentType.put(entry.getKey(),cfg.getType()); + } + + + //check same type + //check pos 开启 + //条件不足 放过 + for (HeroInfoProto.SoulEquipPos soulEquipPos : equipIds) { + if(!checkPosAccess(soulEquipPos.getPosition(),user,hero)){ + continue; + } + SoulEquip soulEquip = user.getEquipManager().getSoulEquipMap().get(soulEquipPos.getEquipId()); + if (null == soulEquip) { + throw new Exception("装备不存在" + soulEquipPos.getEquipId()); + } + SEquipSign cfg = SEquipSign.getsEquipSignMap().get(soulEquip.getCfgId()); + if (null == cfg ) { + throw new Exception("装备配置不存在" + soulEquip.getCfgId()); + } + + if(currentType.keySet().contains(soulEquipPos.getPosition())&¤tType.get(soulEquipPos.getEquipId())!=cfg.getType()){ + if(currentType.values().contains(cfg.getType())){ + continue; + } + } + currentType.put(soulEquipPos.getPosition(),cfg.getType()); + } + + for (HeroInfoProto.SoulEquipPos soulEquipPos : equipIds) { + hero.updateSoulEquipPositionMap(soulEquipPos.getPosition(),soulEquipPos.getEquipId()); + } + + //发送成功消息 + MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.SOUL_EQUIP_WEAR_RESPONSE_VALUE,null,true); + + } + + private boolean checkPosAccess(int pos, User user, Hero hero) throws Exception { + + SEquipSignSetting cfg = STableManager.getConfig(SEquipSignSetting.class).get(pos); + if (null == cfg) { + return false; + } + if(user.getPlayerInfoManager().getLevel() equips) throws Exception { + int uid = session.getUid(); + User user = UserManager.getUser(uid); + Hero hero = user.getHeroManager().getHero(heroId); + + if( hero == null || equips.isEmpty()){ + MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.SOUL_EQUIP_UNLOAD_OPT_REQUEST_VALUE,""); + return; + } + List positions = new ArrayList<>(); + for(HeroInfoProto.SoulEquipPos soulEquipPos : equips){ + + SoulEquip soulEquip = user.getEquipManager().getSoulEquipMap().get(soulEquipPos.getEquipId()); + if(null == soulEquip || StringUtil.isEmpty(soulEquip.getHeroId())){ + //未装备 + MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.SOUL_EQUIP_UNLOAD_OPT_REQUEST_VALUE,""); + return; + } + soulEquip.setHeroId(""); + positions.add(soulEquipPos.getPosition()); + } + + for(Integer position : positions){ + hero.removeSoulEquip(position); + } + //发送成功消息 + MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.SOUL_EQUIP_UNLOAD_OPT_REQUEST_VALUE,null,true); + } + + + public void unloadEquipOpt(ISession session,String heroId,List equipIds,int type) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); 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 489c304d2..58fc4c05f 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 @@ -4,6 +4,7 @@ import com.ljsd.jieling.config.*; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.handler.map.MapManager; +import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; @@ -12,10 +13,7 @@ import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.HeroInfoProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.PlayerInfoProto; -import com.ljsd.jieling.util.CBean2Proto; -import com.ljsd.jieling.util.ItemUtil; -import com.ljsd.jieling.util.MessageUtil; -import com.ljsd.jieling.util.StringUtil; +import com.ljsd.jieling.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -208,6 +206,36 @@ public class ItemLogic { sendUseAndPriceItemMessage(iSession, msgId, drop); } + /** + * 分解魂印 + * @param iSession + * @param equipIdsList + */ + public void decomposeSoulEquip(ISession iSession, List equipIdsList) throws Exception { + int msgId = MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE; + int uid = iSession.getUid(); + User user = UserManager.getUser(uid); + EquipManager equipManager = user.getEquipManager(); + StringBuilder reward = new StringBuilder(); + String erroMags = checkSoulEquipResolve(equipIdsList,equipManager); + if (!erroMags.isEmpty()){ + MessageUtil.sendErrorResponse(iSession,0,msgId,erroMags); + return; + } + for (String equipId : equipIdsList) { + SoulEquip soulEquip = equipManager.getSoulEquipMap().get(equipId); + SItem sItem = SItem.getsItemMap().get(soulEquip.getEquipId()); + equipManager.remove(equipId); + if (reward.length() == 0) { + reward = new StringBuilder(sItem.getResolveReward()); + } else { + reward.append("#").append(sItem.getResolveReward()); + } + } + CommonProto.Drop.Builder drop = ItemUtil.drop(user,StringUtil.parseFiledInt(reward.toString()),1,0,BIReason.DECOMPOS_EQUIP_REWARD); + sendUseAndPriceItemMessage(iSession, msgId, drop); + } + private String checkEquipResolve(List equipIdsList,EquipManager equipManager) { if (equipIdsList.size() == 0){ return "无可分解装备"; @@ -228,6 +256,27 @@ public class ItemLogic { return ""; } + private String checkSoulEquipResolve(List equipIdsList,EquipManager equipManager) { + + if (equipIdsList.size() == 0){ + return "无可分解装备"; + } + for (String equipId :equipIdsList){ + SoulEquip equip = equipManager.getSoulEquipMap().get(equipId); + if (equip == null){ + return "无该装备"; + } + if (!StringUtil.isEmpty(equip.getHeroId())){ + return "已穿戴"; + } + SItem sItem = SItem.getsItemMap().get(equip.getEquipId()); + if (sItem.getIfResolve() ==0){ + return "不可分解"; + } + } + return ""; + } + /** * 分解卡牌|进阶消耗 * @param iSession @@ -442,4 +491,50 @@ public class ItemLogic { } } + + /** + * 占星 + * @param session session + * @param time 次数 50一档 + * @throws Exception + */ + public void soulEquipRand(ISession session,int time) throws Exception{ + int uid = session.getUid(); + User user = UserManager.getUser(uid); + int currentPool = user.getEquipManager().getSoulEquipPool(); + + int[][] cost = time == 50 ? new int[1][]:new int[time][]; + int[] droplist = new int[time]; + for (int i = 0; i < time; i++) { + SEquipTalismanaLottery lottery = STableManager.getConfig(SEquipTalismanaLottery.class).get(currentPool); + if (null == lottery) { + throw new Exception("SEquipTalismanaLottery 配置不存在" + currentPool); + } + droplist[i]=(MathUtils.randomFromWeight(lottery.getDrop())); + currentPool = MathUtils.randomFromWeight(lottery.getProbability()); + if(time!=50){ + cost[i] = lottery.getCostItem(); + } + } + + boolean enoughCost = ItemUtil.itemCost(user, cost, BIReason.RANDOM_SOULEQUIP_CONSUME, 0); + if (!enoughCost) { + MessageUtil.sendErrorResponse(session, 0, MessageTypeProto.MessageType.SOUL_RAND_EQUIP_RESPONSE_VALUE, "道具不足"); + return; + } + + user.getEquipManager().setSoulEquipPool(currentPool); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, droplist,1,0,BIReason.RANDOM_SOULEQUIP); + + HeroInfoProto.SoulRandResponse.Builder builder = HeroInfoProto.SoulRandResponse.newBuilder(); + builder.setDrop(drop); + builder.setPos(currentPool); + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.SOUL_RAND_EQUIP_RESPONSE_VALUE, builder.build(), true); + + } + + public static int getSoulCfgIdByEquipId(int equipId,int leve){ + return equipId*100+leve; + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/question/QuestionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/question/QuestionLogic.java index bad7bad7d..0a97ec29b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/question/QuestionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/question/QuestionLogic.java @@ -100,6 +100,9 @@ public class QuestionLogic { user.getQuestionManager().setQuestId(0); user.getQuestionManager().setQuestState(0); ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); + if(null ==sessionByUid){ + return; + } MessageUtil.sendIndicationMessage(sessionByUid, 1, MessageTypeProto.MessageType.PLAYER_BACKCINFO_INDICATION_VALUE, builder, true); } }, new ArrayList<>(OnlineUserManager.sessionMap.keySet()), 120); 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 df5a6fb96..ebecf589e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -71,6 +71,16 @@ public class CBean2Proto { List equipList = new ArrayList<>(); if(equipByPositionMap!=null && !equipByPositionMap.isEmpty()){ equipList.addAll(equipByPositionMap.values()); + } + List soulPoss = new ArrayList<>(); + Map soulEquipMap = hero.getSoulEquipByPositionMap(); + if(soulEquipMap!=null&&!soulEquipMap.isEmpty()){ + for (Map.Entry entry:soulEquipMap.entrySet()){ + CommonProto.SoulPos.Builder builder = CommonProto.SoulPos.newBuilder(); + builder.setEquipId(entry.getValue()); + builder.setPosition(entry.getKey()); + soulPoss.add(builder.build()); + } } return CommonProto.Hero .newBuilder() @@ -84,6 +94,7 @@ public class CBean2Proto { .addAllSkillIdList(hero.getSkillList()) .addAllEquipIdList(equipList) .addEspecialEquip(hero.getEspecialEquip()) + .addAllSoulPos(soulPoss) .build(); } @@ -123,6 +134,10 @@ public class CBean2Proto { EspecialEquip tempEquip =(EspecialEquip)equip; equipProto.setRebuildLevel(tempEquip.getStar()); } + if(equip instanceof SoulEquip){ + equipProto.setRebuildLevel(((SoulEquip) equip).getLevel()); + equipProto.setExp(((SoulEquip) equip).getExp()); + } return equipProto.build(); } 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 6e652f6a7..3911bdf52 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -386,6 +386,7 @@ public class ItemUtil { break; case GlobalItemType.EQUIP: case GlobalItemType.ESPECIAL_EQUIP: + case GlobalItemType.SOUL_MARK: putcountMap(itemId, itemNum, equipMap); break; case GlobalItemType.RANDOM_ITME: @@ -408,7 +409,6 @@ public class ItemUtil { case GlobalItemType.HEAD_FRAME: case GlobalItemType.SecretBox: case GlobalItemType.CHANGE_NAME_CARD: - case GlobalItemType.SOUL_MARK: itemType = GlobalItemType.ITEM; break; case GlobalItemType.RANDOM_ITME: @@ -787,6 +787,9 @@ public class ItemUtil { }else if(itemType==GlobalItemType.ESPECIAL_EQUIP){ EspecialEquip especialEquip = new EspecialEquip(user.getId(),equipId); equipManager.addEspecialEquip(user,especialEquip); + }else if(itemType==GlobalItemType.SOUL_MARK){ + SoulEquip soulEquip = new SoulEquip(user.getId(),equipId); + equipManager.addSoulEquip(soulEquip); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/StringUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/StringUtil.java index 0e1a6f364..2251dedf7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/StringUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/StringUtil.java @@ -1,7 +1,9 @@ package com.ljsd.jieling.util; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @program: server @@ -169,4 +171,18 @@ public class StringUtil { } return sb.toString(); } + + public static Map parsent2ToIntMap(int[][] value) { + Map result = new HashMap<>(); + int length = value.length; + for (int i = 0; i < length; i++) { + int[] item = value[i]; + if (item.length != 2) { + continue; + } + result.put(item[0], item[1]); + } + return result; + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/UUIDEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/util/UUIDEnum.java index cc93da7cc..b8be3a936 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/UUIDEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/UUIDEnum.java @@ -7,7 +7,8 @@ public enum UUIDEnum { ARENARECORD(3), ADVENTUREBOSS(4), GUILDLOG(5), - ESPECIAL_EQUIP(6) + ESPECIAL_EQUIP(6), + SOUL_EQUIP(7)//魂印 ; private int value; From c118c195f412fedaf26e2e81a23a9d32338ca994 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Fri, 6 Sep 2019 14:54:00 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8E=92=E8=A1=8C=E6=A6=9C=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/config/SSpecialConfig.java | 10 +++- .../ljsd/jieling/handler/map/MapLogic.java | 4 +- .../GetMonsterAttackRankHandler.java | 4 +- .../logic/activity/ForceRankActivity.java | 4 +- .../ljsd/jieling/logic/arena/ArenaLogic.java | 60 ++++++++++--------- .../java/com/ljsd/jieling/logic/dao/Hero.java | 1 + .../ljsd/jieling/logic/fight/CombatLogic.java | 18 +++--- .../ljsd/jieling/logic/item/ItemLogic.java | 2 +- 8 files changed, 61 insertions(+), 42 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SSpecialConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SSpecialConfig.java index d5b3dd62d..e82c0f528 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SSpecialConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SSpecialConfig.java @@ -17,8 +17,12 @@ public class SSpecialConfig implements BaseConfig { private String value; public static final String PHONE_BINDING = "Phone_Binding"; - public static final String MANDATORY_ASTROLOGICAL = "Mandatory_Astrological"; - + public static final String MANDATORY_ASTROLOGICAL = "Mandatory_Astrological";//强制占星跳到第四颗星 + public static final String ARENA_RANKINGSHOWNUM = "Arena_RankingShowNum";//竞技场排行榜上榜显示排名 + public static final String TRIAL_RANKINGSHOWNUM = "Trial_RankingShowNum";//试炼副本排行榜上榜显示排名 + public static final String BEASTS_RANKINGSHOWNUM = "Beasts_RankingShowNum";//兽潮来袭排行榜上榜显示排名 + public static final String ADVENTURE_RANKINGSHOWNUM = "Adventure_RankingShowNum";//外敌入侵排行榜上榜显示排名 + public static final String COMBAT_RANKINGSHOWNUM = "Combat_RankingShowNum";//战力排行榜上榜显示排名 @Override public void init() throws Exception { @@ -40,7 +44,7 @@ public class SSpecialConfig implements BaseConfig { public static int getIntegerValue(String key) { String value = enumers.get(key); - if(value==null){ + if (value == null) { return -1; } return Integer.valueOf(value); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 3d7080d42..4148792b1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -2996,7 +2996,9 @@ public class MapLogic { */ public void getTowerRank(ISession session,MessageTypeProto.MessageType messageType) throws Exception { User user = UserManager.getUser(session.getUid()); - Set> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.TOWER_RANK, "", 0, 99); + + int rankEndLine = SSpecialConfig.getIntegerValue(SSpecialConfig.TRIAL_RANKINGSHOWNUM); + Set> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.TOWER_RANK, "", 0, rankEndLine); Iterator> iterator = zsetreverseRangeWithScores.iterator(); MapInfoProto.TowerRankResponse.Builder response = MapInfoProto.TowerRankResponse.newBuilder(); int rank = 1; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/monsterAttack/GetMonsterAttackRankHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/monsterAttack/GetMonsterAttackRankHandler.java index cf0a6b734..1778bf44e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/monsterAttack/GetMonsterAttackRankHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/monsterAttack/GetMonsterAttackRankHandler.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.handler.monsterAttack; +import com.ljsd.jieling.config.SSpecialConfig; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.handler.BaseHandler; @@ -30,7 +31,8 @@ public class GetMonsterAttackRankHandler extends BaseHandler monsterRankInfos = new LinkedList<>(); - Set> rankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.MONSTER_ATTACK_RANK, "", 0, 100); + int rankEndLine = SSpecialConfig.getIntegerValue(SSpecialConfig.BEASTS_RANKINGSHOWNUM); + Set> rankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.MONSTER_ATTACK_RANK, "", 0, rankEndLine-1); for (ZSetOperations.TypedTuple item : rankInfo) { String value = item.getValue(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java index abebec616..3a2585408 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ForceRankActivity.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.activity; import com.ljsd.jieling.config.SActivityRewardConfig; import com.ljsd.jieling.config.SErrorCodeEerverConfig; +import com.ljsd.jieling.config.SSpecialConfig; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; @@ -71,7 +72,8 @@ class ForceRankActivity extends AbstractActivity { } } - Set> rankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.FORCE_RANK, "", 0, maxRank-1); + int rankEndLine = SSpecialConfig.getIntegerValue(SSpecialConfig.COMBAT_RANKINGSHOWNUM); + Set> rankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.FORCE_RANK, "", 0, rankEndLine-1); int rank = 1; int nowTime = (int) (TimeUtils.now() / 1000); for (ZSetOperations.TypedTuple item : rankInfo) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index c9e215ede..ea2af79bb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -437,35 +437,39 @@ public class ArenaLogic { } int start = (page - 1) * 20, end = page * 20 - 1; List arenaRankMemberInfo = new ArrayList<>(20); - Set> arenaRankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.ARENA_RANK,Integer.toString(curSeason), start, end); - for(ZSetOperations.TypedTuple item : arenaRankInfo){ - String value = item.getValue(); - int score =item.getScore().intValue(); - int uid = Integer.parseInt(value); - User user = UserManager.getUser(uid); - int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.TEAM_ARENA_DEFENSE,false); - List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(GlobalsDef.TEAM_ARENA_DEFENSE); - Map heroMap = user.getHeroManager().getHeroMap(); - List heroTids = new ArrayList<>(teamPosHeroInfoList.size()); - for(TeamPosHeroInfo teamPosHeroInfo:teamPosHeroInfoList){ - heroTids.add(heroMap.get(teamPosHeroInfo.getHeroId()).getTemplateId()); + + int rankEndLine = SSpecialConfig.getIntegerValue(SSpecialConfig.ARENA_RANKINGSHOWNUM); + if(end> arenaRankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.ARENA_RANK, Integer.toString(curSeason), start, end); + for (ZSetOperations.TypedTuple item : arenaRankInfo) { + String value = item.getValue(); + int score = item.getScore().intValue(); + int uid = Integer.parseInt(value); + User user = UserManager.getUser(uid); + int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.TEAM_ARENA_DEFENSE, false); + List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(GlobalsDef.TEAM_ARENA_DEFENSE); + Map heroMap = user.getHeroManager().getHeroMap(); + List heroTids = new ArrayList<>(teamPosHeroInfoList.size()); + for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList) { + heroTids.add(heroMap.get(teamPosHeroInfo.getHeroId()).getTemplateId()); + } + CommonProto.Team teamBuild = CommonProto.Team.newBuilder().addAllHeroTid(heroTids).build(); + PlayerManager playerInfoManager = user.getPlayerInfoManager(); + CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder() + .setUid(uid) + .setLevel(playerInfoManager.getLevel()) + .setName(playerInfoManager.getNickName()) + .setScore(score) + .setHead(0) + .setRank(++start) + .setTotalForce(totalForce) + .setHeadFrame(playerInfoManager.getHeadFrame()) + .build(); + arenaRankMemberInfo.add(CommonProto.ArenaEnemy.newBuilder() + .setPersonInfo(personInfoBuild) + .setTeam(teamBuild) + .build()); } - CommonProto.Team teamBuild = CommonProto.Team.newBuilder().addAllHeroTid(heroTids).build(); - PlayerManager playerInfoManager = user.getPlayerInfoManager(); - CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder() - .setUid(uid) - .setLevel(playerInfoManager.getLevel()) - .setName(playerInfoManager.getNickName()) - .setScore(score) - .setHead(0) - .setRank(++start) - .setTotalForce(totalForce) - .setHeadFrame(playerInfoManager.getHeadFrame()) - .build(); - arenaRankMemberInfo.add(CommonProto.ArenaEnemy.newBuilder() - .setPersonInfo(personInfoBuild) - .setTeam(teamBuild) - .build()); } int uid = session.getUid(); int score = RedisUtil.getInstence().getZSetScore(RedisKey.ARENA_RANK,Integer.toString(curSeason), Integer.toString(uid)).intValue(); 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 6674bff05..12a27f721 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 @@ -61,6 +61,7 @@ public class Hero extends MongoBase { this.star = initStar; this.skillList = new ArrayList<>(); this.equipByPositionMap = new HashMap<>(); + this.soulEquipByPositionMap = new HashMap<>(); this.especialEquip = ""; List skillIds = scHero.getSkillListByStar().get(star); if(skillIds!=null && !skillIds.isEmpty()){ 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 5966ac95d..e977b1252 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 @@ -831,13 +831,17 @@ public class CombatLogic { int myuid = session.getUid(); int start = (page - 1) * 20, end = page * 20 - 1; List adventureRankItemInfos = new ArrayList<>(20); - Set> adventureBossRankInfo= RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.ADVENTRUEN_BOSS_RANK,"", start, end); - for(ZSetOperations.TypedTuple item : adventureBossRankInfo){ - String value = item.getValue(); - int score =item.getScore().intValue(); - int uid = Integer.parseInt(value); - User user = UserManager.getUser(uid); - adventureRankItemInfos.add(CBean2Proto.getAdventureRankItemInfo(uid,user,score,++start)); + + int rankEndLine = SSpecialConfig.getIntegerValue(SSpecialConfig.ADVENTURE_RANKINGSHOWNUM); + if(end> adventureBossRankInfo= RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.ADVENTRUEN_BOSS_RANK,"", start, end); + for(ZSetOperations.TypedTuple item : adventureBossRankInfo){ + String value = item.getValue(); + int score =item.getScore().intValue(); + int uid = Integer.parseInt(value); + User user = UserManager.getUser(uid); + adventureRankItemInfos.add(CBean2Proto.getAdventureRankItemInfo(uid,user,score,++start)); + } } int score = RedisUtil.getInstence().getZSetScore(RedisKey.ADVENTRUEN_BOSS_RANK,"", Integer.toString(myuid)).intValue(); 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 29b643ebe..e0980a826 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 @@ -225,7 +225,7 @@ public class ItemLogic { for (String equipId : equipIdsList) { SoulEquip soulEquip = equipManager.getSoulEquipMap().get(equipId); SItem sItem = SItem.getsItemMap().get(soulEquip.getEquipId()); - equipManager.remove(equipId); + equipManager.removeSoulEquip(equipId); if (reward.length() == 0) { reward = new StringBuilder(sItem.getResolveReward()); } else {