diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ItemManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ItemManager.java index 8fee7500e..f96d79eae 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ItemManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/ItemManager.java @@ -3,13 +3,52 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; import com.ljsd.jieling.logic.dao.root.User; +import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; public class ItemManager extends MongoBase { private Map itemMap = new ConcurrentHashMap<>(); + ///兼容线上数据,计算统计装备(为了做白金装备图鉴,需要初始化统计一次用户身上所有装备)true:已经计算过了 false:未计算 + private boolean isAbsEquip; + + public boolean getIsAbsEquip() { + return isAbsEquip; + } + public void setAbsEquip(boolean absEquip) { + isAbsEquip = absEquip; + updateString("isAbsEquip", isAbsEquip); + } + + private Map equipBookMap = new HashMap<>(); + + public Map getEquipBookMap() { + return equipBookMap; + } + public void setEquipBookMap(int equipId,long addNum) { + long _num=addNum; + if (this.equipBookMap.containsKey(equipId)){ + _num+=this.equipBookMap.get(equipId); + } + this.equipBookMap.put(equipId,_num); + updateString("equipBookMap." + equipId, _num); + } + private Set equipBookEnabled = new HashSet<>(); + + public Set getEquipBookEnabled() { + return equipBookEnabled; + } + + public void addEquipBookEnabled(int bookId) { + this.equipBookEnabled.add(bookId); + updateString("equipBookEnabled", equipBookEnabled); + } + + public ItemManager() { this.setRootCollection(User._COLLECTION_NAME); 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 9043adabe..4281f62fa 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 @@ -2273,7 +2273,9 @@ public class HeroLogic{ if (!bookEnabled.isEmpty()){ Map config = STableManager.getConfig(SSpiritAnimalBook.class); for(int bootId:bookEnabled){ - int[][] activePara = config.get(bootId).getActivePara(); + SSpiritAnimalBook animalBook=config.get(bootId); + if (animalBook==null)continue; + int[][] activePara = animalBook.getActivePara(); combinedAttribute(activePara,heroAllAttribute); } } @@ -2317,6 +2319,9 @@ public class HeroLogic{ //魂印图鉴加成 Set equipBookEnabled = equipManager.getEquipBookEnabled(); bonuses(equipBookEnabled,heroAllAttribute); + //白金装备加成 + Set whiteBookEnabled = user.getItemManager().getEquipBookEnabled(); + bonuses(whiteBookEnabled,heroAllAttribute); //英雄皮肤加成 记得判断皮肤过期 int skin = hero.getSkin(); if(skin!=0){ @@ -3888,9 +3893,33 @@ public class HeroLogic{ for (int enabled:user.getEquipManager().getEquipBookEnabled()){ builder.addAllBookEnabled(enabled); } + //添加白金装备羁绊 + for (Integer enabled : user.getItemManager().getEquipBookEnabled()) { + builder.addAllBookEnabled(enabled); + } + for (Integer equip:equipManager.getEquipList()) { builder.addEquipGot(equip); - + } + if (!user.getItemManager().getIsAbsEquip()) { + for (Map.Entry equipEntry : user.getItemManager().getItemMap().entrySet()) { + if (SItem.getsItemMap().get(equipEntry.getKey()).getItemType()==3) { + user.getItemManager().setEquipBookMap(equipEntry.getValue().getItemId(),equipEntry.getValue().getItemNum()); + } + } + for (Map.Entry stringHeroEntry : user.getHeroManager().getHeroMap().entrySet()) { + for (Map.Entry entry : stringHeroEntry.getValue().getEquipByPositionMap().entrySet()) { + user.getItemManager().setEquipBookMap(entry.getValue(),1); + } + } + user.getItemManager().setAbsEquip(true); + } + for (Map.Entry entry : user.getItemManager().getEquipBookMap().entrySet()) { + CommonProto.EquipBookInfo equipBook=CommonProto.EquipBookInfo.newBuilder() + .setEquipId(entry.getKey()) + .setNum(entry.getValue().intValue()) + .build(); + builder.addEquipList(equipBook); } MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.GET_ALL_PROPERTY_INFO_RESPONSE_VALUE,builder.build(),true); } @@ -3911,7 +3940,7 @@ public class HeroLogic{ if(user.getPlayerInfoManager().getLevel() sendToFront = new CopyOnWriteArrayList<>(); //超过上限不能直接获得 Map extraItem = new HashMap<>(itemMap.size()); - + ListchangeEquipList=null; for (Map.Entry entry : itemMap.entrySet()) { SItem sItem = SItem.getsItemMap().get (entry.getKey()); if (sItem.getItemBaseType()==6){ equipManager.addEquipList(entry.getKey()); } + if (sItem.getItemType()==3){ + if (changeEquipList==null) { + changeEquipList=new ArrayList<>(); + } + itemManager.setEquipBookMap(entry.getKey(),entry.getValue()); + changeEquipList.add(entry.getKey()); + } long itemNumlimit = sItem.getItemNumlimit(); long itemNum = entry.getValue().intValue(); if(itemNum <= 0){ @@ -680,6 +688,9 @@ public class ItemUtil { //日志记录 ItemLogic.getInstance().addItemLog(new ItemLog(user.getId(),0,user.getPlayerInfoManager().getLevel(),String.valueOf(TimeUtils.now()),reason,sItem.getId(),itemNum,item.getItemNum())); } + //发送装备图鉴修改推送 + SendEquipBookIndication(user.getId(),itemManager,changeEquipList); + for(Map.Entry entry:extraItem.entrySet()){ itemProtoList.add(CBean2Proto.getItem(itemManager.getItemMap().get(entry.getKey()),entry.getValue())); } @@ -720,12 +731,19 @@ public class ItemUtil { List sendToFront = new CopyOnWriteArrayList<>(); //超过上限不能直接获得 Map extraItem = new HashMap<>(itemMap.size()); - + ListchangeEquipList=null; for (Map.Entry entry : itemMap.entrySet()) { SItem sItem = SItem.getsItemMap().get (entry.getKey()); if (sItem.getItemBaseType()==6){ equipManager.addEquipList(entry.getKey()); } + if (sItem.getItemType()==3){ + if (changeEquipList==null) { + changeEquipList=new ArrayList<>(); + } + itemManager.setEquipBookMap(entry.getKey(),entry.getValue()); + changeEquipList.add(entry.getKey()); + } long itemNumlimit = sItem.getItemNumlimit(); long itemNum = entry.getValue().intValue(); @@ -803,6 +821,10 @@ public class ItemUtil { //日志记录 ItemLogic.getInstance().addItemLog(new ItemLog(user.getId(),0,user.getPlayerInfoManager().getLevel(),String.valueOf(TimeUtils.now()),reason,sItem.getId(),itemNum,item.getItemNum())); } + + //发送装备图鉴修改推送 + SendEquipBookIndication(user.getId(),itemManager,changeEquipList); + for(Map.Entry entry:extraItem.entrySet()){ itemProtoList.add(CBean2Proto.getItem(itemManager.getItemMap().get(entry.getKey()),entry.getValue())); } @@ -826,8 +848,25 @@ public class ItemUtil { return 1; } - - + ///发送装备图鉴修改推送 + private static void SendEquipBookIndication(int _uid,ItemManager _itemManage, List_equipList){ + if (_equipList==null||_equipList.isEmpty())return; + ListequipList=new ArrayList<>(); + for (Integer integer : _equipList) { + if (_itemManage.getEquipBookMap().containsKey(integer)) { + CommonProto.EquipBookInfo equipInfo=CommonProto.EquipBookInfo.newBuilder() + .setEquipId(integer) + .setNum(_itemManage.getEquipBookMap().get(integer).intValue()) + .build(); + equipList.add(equipInfo); + } + } + HeroInfoProto.EquipBookIndication build=HeroInfoProto.EquipBookIndication.newBuilder() + .addAllChangeEquipList(equipList) + .build(); + ISession sessionByUid = OnlineUserManager.getSessionByUid(_uid); + MessageUtil.sendIndicationMessage(sessionByUid,1, MessageTypeProto.MessageType.EQUIP_BOOK_INDICATION_VALUE,build,true); + } /** * 玩家升级 //zsx 保留 TODO 由事件分发到 playlogic 去处理 diff --git a/tablemanager/src/main/java/config/SSpiritAnimalBook.java b/tablemanager/src/main/java/config/SSpiritAnimalBook.java index 8e07ab9ee..a3a9fca76 100644 --- a/tablemanager/src/main/java/config/SSpiritAnimalBook.java +++ b/tablemanager/src/main/java/config/SSpiritAnimalBook.java @@ -10,7 +10,7 @@ public class SSpiritAnimalBook implements BaseConfig { private int id; - private int[] teamers; + private int[][] teamers; private int[][] activePara; @@ -33,7 +33,7 @@ public class SSpiritAnimalBook implements BaseConfig { return id; } - public int[] getTeamers() { + public int[][] getTeamers() { return teamers; }