diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSign.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSign.java index 01968a587..63692f8eb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSign.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEquipSign.java @@ -5,6 +5,7 @@ import com.ljsd.jieling.logic.Table; import java.util.HashMap; import java.util.Map; +import java.util.TreeSet; @Table(name = "EquipSign") public class SEquipSign implements BaseConfig { @@ -24,15 +25,29 @@ public class SEquipSign implements BaseConfig { private int resolve; public static Map sEquipSignMap; + private static Map> type2List = new HashMap<>(); + 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); + TreeSet treeSet = type2List.getOrDefault(entry.getValue().getType(),new TreeSet<>()); + treeSet.add(entry.getKey()); + if(!treeSet.contains(entry.getValue().getType())){ + type2List.put(entry.getValue().getType(),treeSet); + } + } + + for (TreeSet list:type2List.values()) { + int sum = 0; + for (Integer id : list) { + SEquipSign sign = sEquipSignMap.get(id); + sum += sign.getExperience(); + equipExpMap.put(id, sum); + } } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index dd4233394..f1a271e52 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -161,6 +161,10 @@ public class RedisKey { public static final String BLOODY_RANK = "BLOODY_RANK"; public static String getKey(String type, String key, boolean withoutServerId) { + if(RedisKey.TOKEN.equals(type)||RedisKey.USER_SERVER_INFO.equals(type)){ + return type + RedisKey.Delimiter_colon + key; + } + if (withoutServerId) { return GameApplication.areaId + Delimiter_colon + type + Delimiter_colon + String.valueOf(key); } else { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index 7b7967260..24c69f448 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -970,6 +970,9 @@ public class RedisUtil { if(RedisKey.PLAYER_INFO_CACHE.equals(type)){ return type + RedisKey.Delimiter_colon + key; } + if(RedisKey.TOKEN.equals(type)||RedisKey.USER_SERVER_INFO.equals(type)){ + return type + RedisKey.Delimiter_colon + key; + } return GameApplication.serverId + RedisKey.Delimiter_colon + type + RedisKey.Delimiter_colon + key; } @@ -1037,7 +1040,4 @@ public class RedisUtil { } - - - } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java index a487c8958..6e84b085a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/LoginRequestHandler.java @@ -1,12 +1,15 @@ package com.ljsd.jieling.handler; import com.ljsd.GameApplication; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.handler.map.MapLogic; import com.ljsd.jieling.ktbeans.KTRequestBeans.LoginParamType; import com.ljsd.jieling.ktbeans.KtEventUtils; import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean; import com.ljsd.jieling.ktbeans.*; import com.ljsd.jieling.ktbeans.parmsBean.*; +import com.ljsd.jieling.logic.dao.UserRecentLoginInfo; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.netty.cocdex.PacketNetData; @@ -74,8 +77,6 @@ public class LoginRequestHandler extends BaseHandler nextNeedExp) { + if (sumExp >= nextNeedExp) { leve+=1; addleve+=1; SEquipSign nextEcfg1 = SEquipSign.getsEquipSignMap().get(equip.getCfgId()+addleve); 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 12a27f721..7ace9c8f6 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 @@ -172,7 +172,7 @@ public class Hero extends MongoBase { public Map getSoulEquipByPositionMap() { - return equipByPositionMap; + return soulEquipByPositionMap; } public void updateSoulEquipPositionMap(int position,String equipId) throws Exception { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserRecentLoginInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserRecentLoginInfo.java new file mode 100644 index 000000000..766abac93 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserRecentLoginInfo.java @@ -0,0 +1,51 @@ +package com.ljsd.jieling.logic.dao; + +public class UserRecentLoginInfo { + + private long loginTime; + + private int level; + + private int uid; + + private String name; + + public UserRecentLoginInfo(long loginTime, int level, int uid, String name) { + this.loginTime = loginTime; + this.level = level; + this.uid = uid; + this.name = name; + } + + public long getLoginTime() { + return loginTime; + } + + public void setLoginTime(long loginTime) { + this.loginTime = loginTime; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = 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 2b698c569..be325f38d 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 @@ -1425,7 +1425,7 @@ public class HeroLogic { throw new Exception("装备配置不存在" + soulEquip.getCfgId()); } - if(currentType.keySet().contains(soulEquipPos.getPosition())&¤tType.get(soulEquipPos.getEquipId())!=cfg.getType()){ + if(currentType.keySet().contains(soulEquipPos.getPosition())&¤tType.get(soulEquipPos.getPosition())!=cfg.getType()){ if(currentType.values().contains(cfg.getType())){ continue; } @@ -1433,6 +1433,11 @@ public class HeroLogic { currentType.put(soulEquipPos.getPosition(),cfg.getType()); } + for (HeroInfoProto.SoulEquipPos soulEquipPos : equipIds) { + SoulEquip soulEquip = user.getEquipManager().getSoulEquipMap().get(soulEquipPos.getEquipId()); + soulEquip.setHeroId(heroId); + } + for (HeroInfoProto.SoulEquipPos soulEquipPos : equipIds) { hero.updateSoulEquipPositionMap(soulEquipPos.getPosition(),soulEquipPos.getEquipId()); } @@ -1448,12 +1453,16 @@ public class HeroLogic { if (null == cfg) { return false; } - if(user.getPlayerInfoManager().getLevel() positions = new ArrayList<>(); @@ -1473,7 +1482,7 @@ public class HeroLogic { 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,""); + MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.SOUL_EQUIP_UNLOAD_OPT_RESPONSE_VALUE,""); return; } soulEquip.setHeroId(""); @@ -1484,7 +1493,7 @@ public class HeroLogic { hero.removeSoulEquip(position); } //发送成功消息 - MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.SOUL_EQUIP_UNLOAD_OPT_REQUEST_VALUE,null,true); + MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.SOUL_EQUIP_UNLOAD_OPT_RESPONSE_VALUE,null,true); } 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 e0980a826..a029c456e 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 @@ -505,6 +505,15 @@ public class ItemLogic { int currentPool = user.getEquipManager().getSoulEquipPool(); int[][] cost = time == 50 ? new int[1][]:new int[time][]; + + if(time==50){ + SEquipTalismanaLottery lottery = STableManager.getConfig(SEquipTalismanaLottery.class).get(currentPool); + if (null == lottery) { + throw new Exception("SEquipTalismanaLottery 配置不存在" + currentPool); + } + cost[0]=lottery.getRepeatedlyCost(); + } + int[] droplist = new int[time]; for (int i = 0; i < time; i++) { SEquipTalismanaLottery lottery = STableManager.getConfig(SEquipTalismanaLottery.class).get(currentPool); 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 ebecf589e..83fdbd0a0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -66,8 +66,7 @@ public class CBean2Proto { return itemProto; } - public static CommonProto.Hero getHero(Hero hero) throws Exception { - Map equipByPositionMap = hero.getEquipByPositionMap(); + public static CommonProto.Hero getHero(Hero hero) throws Exception { Map equipByPositionMap = hero.getEquipByPositionMap(); List equipList = new ArrayList<>(); if(equipByPositionMap!=null && !equipByPositionMap.isEmpty()){ equipList.addAll(equipByPositionMap.values()); 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 3911bdf52..04efe72df 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -181,6 +181,7 @@ public class ItemUtil { } else { addItem(user,itemMap,dropBuilder,reason); addEquip(user,equipMap,dropBuilder,reason); + addSoulEquip(user,equipMap,dropBuilder,reason); } addCard(user,cardMap,dropBuilder,reason); return dropBuilder; @@ -735,6 +736,10 @@ public class ItemUtil { StringBuilder reward = new StringBuilder(); List equipList = new CopyOnWriteArrayList<>(); for (Map.Entry entry : equipMap.entrySet()) { + int itemType = SItem.getsItemMap().get(entry.getKey()).getItemType(); + if(itemType!=GlobalItemType.EQUIP){ + continue; + } int count = entry.getValue(); for (int i = 0; i < count; i++) { if (user.getEquipManager().getEquipMap().size() >= gameSetting.getEquipNumlimit()) { @@ -757,6 +762,24 @@ public class ItemUtil { dropBuilder.addAllEquipId(equipList); } + public static void addSoulEquip(User user, Map equipMap, CommonProto.Drop.Builder dropBuilder,int reason) throws Exception { + if (equipMap.isEmpty()) { + return; + } + List equipList = new CopyOnWriteArrayList<>(); + for (Map.Entry entry : equipMap.entrySet()) { + int itemType = SItem.getsItemMap().get(entry.getKey()).getItemType(); + if(itemType!=GlobalItemType.SOUL_MARK){ + continue; + } + int count = entry.getValue(); + for (int i = 0; i < count; i++) { + addEquip(user, entry.getKey(), equipList); + } + } + dropBuilder.addAllSoulEquip(equipList); + } + private static String getLimitReward(Map equipMap) { StringBuilder reward = new StringBuilder(); for (Map.Entry entry :equipMap.entrySet()){ @@ -790,6 +813,7 @@ public class ItemUtil { }else if(itemType==GlobalItemType.SOUL_MARK){ SoulEquip soulEquip = new SoulEquip(user.getId(),equipId); equipManager.addSoulEquip(soulEquip); + equipList.add(CBean2Proto.getEquipProto(soulEquip)); } }