From d94b80840ee6ae18eed6f8951f0249270bf668e4 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 16 Feb 2023 11:40:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=95=E7=9B=B8=E7=AC=AC2=E7=89=88=E8=A1=A5?= =?UTF-8?q?=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/logic/dao/Hero.java | 1 + .../ljsd/jieling/logic/dao/UserManager.java | 5 +- .../com/ljsd/jieling/logic/dao/vo/HeroVo.java | 56 ++++++++++--------- .../ljsd/jieling/logic/equip/EquipLogic.java | 14 ++++- .../com/ljsd/jieling/logic/help/HelpHero.java | 12 +++- .../ljsd/jieling/logic/hero/HeroLogic.java | 29 +++++++++- .../com/ljsd/jieling/util/CBean2Proto.java | 38 +++++++++++++ .../world/network/server/SessionManager.java | 54 +++++++++--------- 8 files changed, 144 insertions(+), 65 deletions(-) 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 b816195d8..ad4c808f4 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 @@ -617,6 +617,7 @@ public class Hero extends MongoBase implements Comparable,Cloneable { clone.equipByPositionMap = new HashMap<>(clone.equipByPositionMap); clone.soulEquipByPositionMap = new HashMap<>(clone.soulEquipByPositionMap); clone.jewelInfo = new HashSet<>(clone.jewelInfo); + clone.faxiangList = new HashSet<>(clone.faxiangList); clone.godSealByPositionMap = new HashMap<>(clone.godSealByPositionMap); clone.equipStrongMap = new HashMap<>(clone.equipStrongMap); } catch (CloneNotSupportedException e) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index 9839aeae5..00dc660d1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -64,14 +64,13 @@ public class UserManager { //离线清除逻辑 public static void checkOffline(){ try { - long linshitime = 10 * 60 * 1000L; Set collect = userMap.entrySet().stream() .filter(integerUserEntry -> !OnlineUserManager.checkUidOnline(integerUserEntry.getKey())) .map(Map.Entry::getValue).collect(Collectors.toSet()); long now = System.currentTimeMillis(); for (User integerUserEntry : collect) { - Long addTime = userMapPutTime.getOrDefault(integerUserEntry.getId(), linshitime); - if (now - addTime >= linshitime) { + Long addTime = userMapPutTime.getOrDefault(integerUserEntry.getId(), LIVE_TIME); + if (now - addTime >= LIVE_TIME) { userMap.remove(integerUserEntry.getId()); userMapPutTime.remove(integerUserEntry.getId()); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/vo/HeroVo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/vo/HeroVo.java index 46d1e18c0..e8277a131 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/vo/HeroVo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/vo/HeroVo.java @@ -1,12 +1,7 @@ package com.ljsd.jieling.logic.dao.vo; -import com.ljsd.jieling.logic.dao.Hero; -import com.ljsd.jieling.logic.dao.HeroManager; -import com.ljsd.jieling.logic.dao.Jewel; -import com.ljsd.jieling.logic.dao.PurpleMansionSeal; +import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; -import com.ljsd.jieling.thrift.idl.ArenaOfHero; -import com.ljsd.jieling.thrift.idl.CrossArenaManager; import com.ljsd.jieling.util.CBean2Proto; import config.SCHero; @@ -36,35 +31,42 @@ public class HeroVo { private Map faBaoGongMingSkillMap = new HashMap<>(); private Map userMountValidTime = new HashMap<>(); private Map jewelMap = new HashMap<>(); + private Map faxiangMap = new HashMap<>(); - public HeroVo(User user, Hero hero) { + public HeroVo() { + } + + public static HeroVo createHeroVo(User user, Hero hero){ + HeroVo heroVo = new HeroVo(); HeroManager heroManager = user.getHeroManager(); - this.id = hero.getId(); - this.templateId = hero.getTemplateId(); - this.star = hero.getStar(); - this.HMBreakId = hero.getBreakIdByHongMeng(heroManager); - this.starBreakId = hero.getStarBreakId(); - this.HMEspecialEquipLevel = hero.getEspecialEquipLevelByHongmeng(heroManager,hero.getId()); - this.propertyId = hero.getPropertyId(); - this.godSoulLv = hero.getGodSoulLv(); - this.likeLv = heroManager.getTotalLikeLv(); - this.soulEquipByPositionMap = new HashMap<>(hero.getSoulEquipByPositionMap()); - this.godSealByPositionMap = new HashMap<>(hero.getGodSealByPositionMap()); - this.purpleMansionSealMap = new HashMap<>(heroManager.getPurpleMansionSeal()); - this.HMEquipPositionMap = new HashMap<>(hero.getEquipByHongmengPositionMap(heroManager)); - this.faBaoGongMingSkillMap = new HashMap<>(heroManager.getFaBaoGongMingSkillMap()); - this.userMountValidTime = new HashMap<>(user.getPlayerInfoManager().getUserMountValidTime()); - try { - this.jewelMap = new HashMap<>(CBean2Proto.jewelOfLocal(user,hero)); - }catch (Exception e){ - e.printStackTrace(); - } + heroVo.id = hero.getId(); + heroVo.templateId = hero.getTemplateId(); + heroVo.star = hero.getStar(); + heroVo.HMBreakId = hero.getBreakIdByHongMeng(heroManager); + heroVo.starBreakId = hero.getStarBreakId(); + heroVo.HMEspecialEquipLevel = hero.getEspecialEquipLevelByHongmeng(heroManager,hero.getId()); + heroVo.propertyId = hero.getPropertyId(); + heroVo.godSoulLv = hero.getGodSoulLv(); + heroVo.likeLv = heroManager.getTotalLikeLv(); + heroVo.soulEquipByPositionMap = new HashMap<>(hero.getSoulEquipByPositionMap()); + heroVo.godSealByPositionMap = new HashMap<>(hero.getGodSealByPositionMap()); + heroVo.purpleMansionSealMap = new HashMap<>(heroManager.getPurpleMansionSeal()); + heroVo.HMEquipPositionMap = new HashMap<>(hero.getEquipByHongmengPositionMap(heroManager)); + heroVo.faBaoGongMingSkillMap = new HashMap<>(heroManager.getFaBaoGongMingSkillMap()); + heroVo.userMountValidTime = new HashMap<>(user.getPlayerInfoManager().getUserMountValidTime()); + heroVo.jewelMap = new HashMap<>(CBean2Proto.jewelOfLocal(user,hero)); + heroVo.faxiangMap = CBean2Proto.faxiangOfLocal(user,hero); + return heroVo; } public String getId() { return id; } + public Map getFaxiangMap() { + return faxiangMap; + } + public int getGodSoulLv() { return godSoulLv; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java index b0be6a246..98b07fa90 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java @@ -200,7 +200,7 @@ public class EquipLogic { if (!checkCost || !costFaxiang){ throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH,"SFaxiangLevelConfig 升级道具数量不足:"+faxiang.getStrongLv()); } - faxiang.setStrongLv(targetLv); + faxiang.setStar(targetLv); ItemUtil.itemCostLong(user,costMap, BIReason.UP_FAXIANG_EQUIP_LV_COST,0); costFaxiang(user, equipCostStr.toString(), true); } @@ -259,17 +259,25 @@ public class EquipLogic { */ public void getAllFaxiangEquip(ISession iSession, int page) throws Exception { int pageNum = 20; + boolean isFinish = false; User user = UserManager.getUser(iSession.getUid()); ArrayList equips = new ArrayList<>(); Map faxiangMap = user.getEquipManager().getFaxiangMap(); List faxiangList = new ArrayList<>(faxiangMap.values()); + // 开始下标 int start = (page-1) * pageNum; - List pageList = faxiangList.subList(start, pageNum); + // 结束下标 + int end = start + pageNum; + if (end >= faxiangList.size()){ + end = faxiangList.size(); + isFinish = true; + } + List pageList = faxiangList.subList(start, end); for (Faxiang faxiang : pageList) { CommonProto.Equip proto = CBean2Proto.getFaxiangEquipProto(faxiang); equips.add(proto); } - PlayerInfoProto.GetAllFaxiangEquipResponse build = PlayerInfoProto.GetAllFaxiangEquipResponse.newBuilder().addAllEquips(equips).build(); + PlayerInfoProto.GetAllFaxiangEquipResponse build = PlayerInfoProto.GetAllFaxiangEquipResponse.newBuilder().addAllEquips(equips).setIsFinish(isFinish).build(); MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_ALL_EQUIP_RESPONSE_VALUE, build, true); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java index 396b9cb8f..0805825e2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java @@ -1,8 +1,8 @@ package com.ljsd.jieling.logic.help; +import com.ljsd.jieling.logic.dao.Faxiang; import com.ljsd.jieling.logic.dao.Hero; import com.ljsd.jieling.logic.dao.Jewel; -import com.ljsd.jieling.logic.dao.PropertyItem; import java.util.HashMap; import java.util.List; @@ -56,6 +56,8 @@ public class HelpHero { */ private Map homeEquipMap = new HashMap<>(5); + private List faxiangs; + public int getUid() { return uid; } @@ -119,4 +121,12 @@ public class HelpHero { public void setFourTotalTier(int fourTotalTier) { this.fourTotalTier = fourTotalTier; } + + public List getFaxiangs() { + return faxiangs; + } + + public void setFaxiangs(List faxiangs) { + this.faxiangs = faxiangs; + } } 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 2d386fb74..c8ea0b915 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 @@ -2052,7 +2052,7 @@ public class HeroLogic { // 角色初始被动 int[] skillLogicConfig = tempHero.getInitialPassiveSkillLogicConfig(); - if (skillLogicConfig != null && skillLogicConfig.length > 0){ + if (skillLogicConfig != null){ for (int skill : skillLogicConfig) { skillList.add(skill); } @@ -2072,6 +2072,18 @@ public class HeroLogic { Arrays.stream(config.get(e).getPassiveSkill()).forEach(skillList::add); }); + //法相 + Map faxiangMap = heroVo.getFaxiangMap(); + for (Faxiang faxiang : faxiangMap.values()) { + SFaxiangConfig faxiangConfig = SFaxiangConfig.faxiangMap.get(faxiang.getItemId()); + if (faxiangConfig == null){ + continue; + } + for (int i = 0; i < faxiang.getStar(); i++) { + skillList.add(faxiangConfig.getPassiveSkill()[i][0]); + } + } + // 神印套装 Iterator> godSealIterator = godSealByPositionMap.entrySet().iterator(); ArrayList godSealSuiteNumList = new ArrayList<>(); @@ -2243,7 +2255,7 @@ public class HeroLogic { * @return */ public List getHeroSkillList(User user, Hero hero) { - HeroVo heroVo = new HeroVo(user, hero); + HeroVo heroVo = HeroVo.createHeroVo(user, hero); return originGetHeroSkillList(heroVo); } @@ -3045,7 +3057,18 @@ public class HeroLogic { Set faxiangList = hero.getFaxiangList(); for (String id : faxiangList) { Faxiang faxiang = equipManager.getFaxiang(id); - + SFaxiangConfig config = SFaxiangConfig.faxiangMap.get(faxiang.getItemId()); + SFaxiangLevelConfig levelConfig = SFaxiangLevelConfig.poolMap.get(config.getLevelUpPool()).get(faxiang.getStrongLv()); + SFaxiangStarConfig starConfig = SFaxiangStarConfig.poolMap.get(config.getStar()).get(faxiang.getStar()); + int[][] levelPara = levelConfig.getLevelPara(); + int[][] property = new int[levelPara.length][]; + for (int i = 0; i < levelPara.length; i++) { + int[] alone = levelPara[i]; + property[i][0] = alone[0]; + int value = (int)(alone[1] * (starConfig.getStarPara()/10000d+1)); + property[i][1] = value; + } + combinedAttribute(property, heroAllAttribute); } //魂印 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 b1cb626f7..bbe8b549e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -250,6 +250,9 @@ public class CBean2Proto { // 魂宝灵宝 List jewels = new ArrayList<>(); helpHero.getJewels().forEach(item->jewels.add(getEquipProto(item))); + // 法相 + List faxiang = new ArrayList<>(); + helpHero.getFaxiangs().forEach(item->faxiang.add(getFaxiangEquipProto(item))); // 装备详细信息 List equips = new ArrayList<>(); Map equip = helpHero.getHero().getEquipByHongmengPositionMap(otherUser.getHeroManager()); @@ -263,6 +266,7 @@ public class CBean2Proto { .setHero(getHero(helpHero.getHero())) .setState(helpHero.getState()) .addAllJewels(jewels) + .addAllFaxiang(faxiang) .setFourTotal(helpHero.getFourTotalTier()) .addAllEquips(equips) .build(); @@ -294,6 +298,17 @@ public class CBean2Proto { } } + // 法相 + List faxiang = new ArrayList<>(); + Set faxiangList = heroVo.getFaxiangList(); + if (faxiangList != null && faxiangList.size() > 0){ + // 装备列表 + Map faxiangMap = user.getEquipManager().getFaxiangMap(); + for (String id : faxiangList) { + faxiang.add(faxiangMap.get(id)); + } + } + // 结果返回,援助类型不在这里写 HelpHero helpHero = new HelpHero(); helpHero.setUid(user.getId()); @@ -302,6 +317,7 @@ public class CBean2Proto { helpHero.setHero(heroVo); helpHero.setState(0); helpHero.setJewels(jewels); + helpHero.setFaxiangs(faxiang); helpHero.setFourTotalTier(user.getPlayerInfoManager().getFourChallengeTotal()); return helpHero; } @@ -435,6 +451,7 @@ public class CBean2Proto { .addAllSoulPos(soulPoss) .setLockState(hero.getIsLock()) .addAllJewels(hero.getJewelInfo()) + .addAllFaxiang(hero.getFaxiangList()) .setCreatetype(hero.getCreateType()) .setChangeId(hero.getChangeId()) .setSkinId(hero.getSkin()) @@ -1408,4 +1425,25 @@ public class CBean2Proto { } return result; } + + /** + * 本服,获取法相 + * @return + */ + public static Map faxiangOfLocal(User user, Hero hero){ + HashMap result = new HashMap<>(); + try { + Map faxiangMap = user.getEquipManager().getFaxiangMap(); + for (String faxiangId : hero.getFaxiangList()) { + Faxiang faxiang = faxiangMap.get(faxiangId); + if (faxiang == null){ + continue; + } + result.put(faxiangId, faxiang); + } + }catch (Exception e){ + e.printStackTrace(); + } + return result; + } } diff --git a/worldserver/src/main/java/com/world/network/server/SessionManager.java b/worldserver/src/main/java/com/world/network/server/SessionManager.java index 457eec7bf..35197437b 100644 --- a/worldserver/src/main/java/com/world/network/server/SessionManager.java +++ b/worldserver/src/main/java/com/world/network/server/SessionManager.java @@ -1,7 +1,6 @@ package com.world.network.server; import com.google.gson.Gson; - import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.netty.server.IChannel; import com.ljsd.jieling.protocol.INetConnet; @@ -13,7 +12,6 @@ import com.world.network.session.ISession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import rpc.protocols.MessageTypeProto; -import util.NetUtils; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -136,32 +134,32 @@ public class SessionManager implements INetSession, INetReceiveduid={},iSessionId={},HeartBreatNums={},remoteAddress={};not receieve heart breat", - iSession.getUid(), iSession.getId(), iSession.getHeartBreatNums(), remoteAddress); - int heartBreatNums = iSession.getHeartBreatNums(); - heartBreatNums--; - if (heartBreatNums <= 0) { - if (!OnlineServerManager.sessionMap.containsKey(iSession.getUid())) { - iSession.close(); - return; - } - ISession oldSession = OnlineServerManager.sessionMap.get(iSession.getUid()); - if (iSession.getId().equals(oldSession.getId())) { - kickOldUser(iSession.getUid(), "", 000, "LOSE HEART PACKET!!!!", 0); - } - return; - } - iSession.setHeartBreatNums(heartBreatNums); +// //对端口扫描直接关闭 +// if (iSession.getUid() == 0) { +// iSession.close(); +// return; +// } +// String remoteAddress = ""; +// if (!iSession.getChannel().isClosed() && iSession.getChannel().isConnected()) { +// remoteAddress = NetUtils.toAddressString(iSession.getChannel().getRemoteAddress()); +// } +// +// LOGGER.error("readIdea->uid={},iSessionId={},HeartBreatNums={},remoteAddress={};not receieve heart breat", +// iSession.getUid(), iSession.getId(), iSession.getHeartBreatNums(), remoteAddress); +// int heartBreatNums = iSession.getHeartBreatNums(); +// heartBreatNums--; +// if (heartBreatNums <= 0) { +// if (!OnlineServerManager.sessionMap.containsKey(iSession.getUid())) { +// iSession.close(); +// return; +// } +// ISession oldSession = OnlineServerManager.sessionMap.get(iSession.getUid()); +// if (iSession.getId().equals(oldSession.getId())) { +// kickOldUser(iSession.getUid(), "", 000, "LOSE HEART PACKET!!!!", 0); +// } +// return; +// } +// iSession.setHeartBreatNums(heartBreatNums); } public boolean kickOldUser(int uid, String uToken, int errorCode, String errorMsg, long requestTime) {