From 17c22912694a9d4d834a7d13daf711d88407e0ba Mon Sep 17 00:00:00 2001 From: duhui Date: Sun, 19 Feb 2023 19:40:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=95=E7=9B=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ljsd/fight/FightType.java | 2 +- gamecommon/src/main/java/util/TimeUtils.java | 34 ++--- .../java/com/ljsd/jieling/tools/Utils.java | 8 ++ .../equip/WearFaxiangEquipHandler.java | 2 +- .../ljsd/jieling/logic/dao/EquipManager.java | 12 +- .../com/ljsd/jieling/logic/dao/Faxiang.java | 10 ++ .../ljsd/jieling/logic/equip/EquipLogic.java | 119 ++++++++++-------- .../jieling/logic/fight/FightRecordLogic.java | 2 +- .../ljsd/jieling/logic/fight/FightUtil.java | 2 +- .../logic/fight/result/FightResult.java | 2 +- .../ljsd/jieling/logic/hero/HeroLogic.java | 9 ++ .../ljsd/jieling/logic/item/ItemLogUtil.java | 1 - .../ljsd/jieling/logic/item/ItemLogic.java | 10 ++ .../jieling/logic/player/PlayerLogic.java | 4 + .../java/com/ljsd/jieling/util/UUIDEnum.java | 2 +- 15 files changed, 127 insertions(+), 92 deletions(-) diff --git a/fightmanager/src/main/java/com/ljsd/fight/FightType.java b/fightmanager/src/main/java/com/ljsd/fight/FightType.java index 95ba419c3..1818d66af 100644 --- a/fightmanager/src/main/java/com/ljsd/fight/FightType.java +++ b/fightmanager/src/main/java/com/ljsd/fight/FightType.java @@ -35,7 +35,7 @@ public enum FightType { TREASURE_TEAM(29),//宝物战斗 ; - private int type; + private final int type; public int getType() { return type; diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index 8e9fc44ad..02fff75cd 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -171,11 +171,7 @@ public class TimeUtils { return false; } - if (_second < 0 || _second > 59) { - return false; - } - - return true; + return _second >= 0 && _second <= 59; } catch (Exception e) { LOGGER.error("isValidDayTime->msg={}", e.getMessage(), e); return false; @@ -197,11 +193,7 @@ public class TimeUtils { return false; } - if (_minute < 0 || _minute > 59) { - return false; - } - - return true; + return _minute >= 0 && _minute <= 59; } catch (Exception e) { LOGGER.error("isValidHhMmTime->msg={}", e.getMessage(), e); return false; @@ -451,9 +443,7 @@ public class TimeUtils { // 设置Monday为一周的开始 st.setFirstDayOfWeek(Calendar.MONDAY); et.setFirstDayOfWeek(Calendar.MONDAY); - if (st.get(Calendar.WEEK_OF_YEAR) == et.get(Calendar.WEEK_OF_YEAR)) { - return true; - } + return st.get(Calendar.WEEK_OF_YEAR) == et.get(Calendar.WEEK_OF_YEAR); } return false; } @@ -560,10 +550,7 @@ public class TimeUtils { * @return */ private static boolean hasSpecTimeBetween(long st, long now, long specTime) { - if (st <= specTime && specTime <= now) { - return true; - } - return false; + return st <= specTime && specTime <= now; } /** @@ -813,10 +800,7 @@ public class TimeUtils { public static boolean isSameWeek7(long src) { long weekStart = getCurWeekdayStartTime(1, 0); long weekEnd = TimeUtils.getCurWeekdayStartTime(1, 0) + TimeUtils.WEEK; - if (src >= weekStart && src <= weekEnd) { - return true; - } - return false; + return src >= weekStart && src <= weekEnd; } /** @@ -1666,16 +1650,12 @@ public class TimeUtils { return true; } else { curWeekdayStartTime = curWeekdayStartTime - WEEK; - if (lastTime < curWeekdayStartTime) { - return true; - } else { - return false; - } + return lastTime < curWeekdayStartTime; } } public static long getNextTimeByDay(long time, int day) { - return time + day * 24 * 60 * 60 * 1000; + return time + (long) day * 24 * 60 * 60 * 1000; } diff --git a/netty/src/main/java/com/ljsd/jieling/tools/Utils.java b/netty/src/main/java/com/ljsd/jieling/tools/Utils.java index 20441f21d..7b1e2cfb4 100644 --- a/netty/src/main/java/com/ljsd/jieling/tools/Utils.java +++ b/netty/src/main/java/com/ljsd/jieling/tools/Utils.java @@ -44,6 +44,14 @@ public class Utils { return b; } + public static boolean isEmptyList(List list){ + return list == null || list.isEmpty(); + } + + public static boolean isEmptyMap(Map map){ + return map == null || map.isEmpty(); + } + /** * MD5 加密 * */ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/WearFaxiangEquipHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/WearFaxiangEquipHandler.java index 56c600a59..5c1d46a67 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/WearFaxiangEquipHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/WearFaxiangEquipHandler.java @@ -14,6 +14,6 @@ public class WearFaxiangEquipHandler extends BaseHandler equipMap; - private Map faxiangMap = new HashMap<>(); - private Set equipBookEnabled = new HashSet<>(); - private Set equipList = new HashSet<>(); + private final Map equipMap; + private final Map faxiangMap = new HashMap<>(); + private final Set equipBookEnabled = new HashSet<>(); + private final Set equipList = new HashSet<>(); // private Equip unDetermined; - private Map equipHandBook; + private final Map equipHandBook; private int soulEquipPool;//占星装备卡池 /** * 家园建筑,装备强化 */ - private Map equipIntensifyMap = new HashMap<>(4); + private final Map equipIntensifyMap = new HashMap<>(4); /** * 家园装备突破 */ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Faxiang.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Faxiang.java index c6cdc516d..3f4ceeaee 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Faxiang.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Faxiang.java @@ -5,6 +5,8 @@ import com.ljsd.jieling.util.UUIDEnum; public class Faxiang { private String id; + + private String bindHeroId; private int itemId; private int strongLv; private int star; @@ -53,4 +55,12 @@ public class Faxiang { this.star = star; } + + public String getBindHeroId() { + return bindHeroId; + } + + public void setBindHeroId(String bindHeroId) { + this.bindHeroId = bindHeroId; + } } 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 117615076..f14cb9951 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 @@ -9,6 +9,7 @@ import com.ljsd.jieling.logic.dao.Hero; 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.tools.Utils; import com.ljsd.jieling.util.CBean2Proto; import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; @@ -21,6 +22,7 @@ import org.slf4j.LoggerFactory; import rpc.protocols.CommonProto; import rpc.protocols.MessageTypeProto; import rpc.protocols.PlayerInfoProto; +import util.StringUtil; import java.util.*; @@ -36,76 +38,89 @@ public class EquipLogic { /** * 穿脱法相装备 */ - public void wearFaxiangEquip(ISession session, String heroID, String faxiangID, int action) throws Exception { + public void wearFaxiangEquip(ISession session, String heroID, List wearID, int action) throws Exception { User user = UserManager.getUser(session.getUid()); Hero hero = user.getHeroManager().getHero(heroID); if (hero == null){ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"英雄不存在:"+heroID); } + if (Utils.isEmptyList(wearID)){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"客户端参数异常"); + } + EquipManager equipManager = user.getEquipManager(); - Faxiang faxiang = equipManager.getFaxiang(faxiangID); - if (faxiang == null){ - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"法相装备不存在:"+faxiangID); - } - Map faxiangMap = SFaxiangConfig.faxiangMap; - SFaxiangConfig faxiangConfig = faxiangMap.get(faxiang.getItemId()); - if (faxiangConfig == null || faxiangConfig.getIsOpen() == 0){ - throw new ErrorCodeException(ErrorCode.CFG_NULL,"法相配置表不存在,或未进入版本:"+faxiang.getItemId()); - } - // 穿戴 + // 穿戴和替换 if (action == 1 || action == 3){ - Set faxiangList = hero.getFaxiangList(); - if (faxiangList.contains(faxiangID)){ - LOGGER.error("法相已装备,hero:{}, faxiang:{}",heroID,faxiangID); - throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR,"法相已装备"); - } - // 检测是否装备同类型的法相 - String removeId = null; - for (String faxiangId : faxiangList) { - Faxiang faxiang1 = equipManager.getFaxiang(faxiangId); - if (faxiang1 == null){ - hero.uninstallFaxiang(faxiangId); - LOGGER.error("法相不存在装备库中,已卸载,uid:{}, hero:{}, faxiang:{}",user.getId(),heroID,faxiangID); - continue; + HashSet removeList = new HashSet<>(); + for (String id : wearID) { + Faxiang faxiang = equipManager.getFaxiang(id); + if (faxiang == null){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"法相装备不存在:"+id); } - SFaxiangConfig faxiangConfig1 = faxiangMap.get(faxiang1.getItemId()); - if (faxiangConfig1 == null){ - hero.uninstallFaxiang(faxiangId); - LOGGER.error("法相不存在配置表中,已卸载,uid:{}, hero:{}, faxiang:{}",user.getId(),heroID,faxiangID); - continue; + SFaxiangConfig faxiangConfig = SFaxiangConfig.faxiangMap.get(faxiang.getItemId()); + if (faxiangConfig == null || faxiangConfig.getIsOpen() == 0){ + throw new ErrorCodeException(ErrorCode.CFG_NULL,"法相配置表不存在,或未进入版本:"+faxiang.getItemId()); } - if (faxiangConfig.getType() == faxiangConfig1.getType()){ - if (action == 3 && removeId == null){ - removeId = faxiang1.getId(); - }else { - throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR,"法相已装备同类型的法相"); + if (!StringUtil.isEmpty(faxiang.getBindHeroId())){ + LOGGER.error("法相已被其他英雄装备,hero:{}, faxiang:{}",faxiang.getBindHeroId(),id); + throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR,"法相已被其他英雄装备"); + } + + // 检测是否装备同类型的法相 + Set heroFaxiangList = hero.getFaxiangList(); + for (String faxiangId : heroFaxiangList) { + Faxiang heroFaxiang = equipManager.getFaxiang(faxiangId); + if (heroFaxiang == null){ + hero.uninstallFaxiang(faxiangId); + LOGGER.error("法相不存在装备库中,已卸载,uid:{}, hero:{}, faxiang:{}",user.getId(),heroID,faxiangId); + continue; + } + SFaxiangConfig heroFaxiangConfig = SFaxiangConfig.faxiangMap.get(heroFaxiang.getItemId()); + if (heroFaxiangConfig == null){ + hero.uninstallFaxiang(faxiangId); + LOGGER.error("法相不存在配置表中,已卸载,uid:{}, hero:{}, faxiang:{}",user.getId(),heroID,faxiangId); + continue; + } + if (faxiangConfig.getType() == heroFaxiangConfig.getType()){ + removeList.add(faxiangId); } } - } - SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); - if (scHero == null){ - throw new ErrorCodeException(ErrorCode.CFG_NULL,"英雄不存在配置表中"); - } - // 职业是否吻合 - if (faxiangConfig.getProfession() != 0 && faxiangConfig.getProfession() != scHero.getProfession()){ - throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR,"英雄职业不符合"); - } - if (faxiangConfig.getJob() != 0 && faxiangConfig.getJob() != scHero.getJob()){ - throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR,"英雄细分职业不符合"); + SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); + if (scHero == null){ + throw new ErrorCodeException(ErrorCode.CFG_NULL,"英雄不存在配置表中"); + } + // 职业是否吻合 + if (faxiangConfig.getProfession() != 0 && faxiangConfig.getProfession() != scHero.getProfession()){ + throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR,"英雄职业不符合"); + } + if (faxiangConfig.getJob() != 0 && faxiangConfig.getJob() != scHero.getJob()){ + throw new ErrorCodeException(ErrorCode.HERO_EQUIP_ERR,"英雄细分职业不符合"); + } } - hero.addFaxiang(faxiangID); - if (removeId != null){ - hero.uninstallFaxiang(removeId); + for (String key : wearID) { + hero.addFaxiang(key); + Faxiang faxiang = equipManager.getFaxiang(key); + faxiang.setBindHeroId(heroID); + equipManager.putFaxiang(faxiang); + } + if (!removeList.isEmpty()){ + for (String key : removeList) { + hero.uninstallFaxiang(key); + Faxiang faxiang = equipManager.getFaxiang(key); + faxiang.setBindHeroId(""); + equipManager.putFaxiang(faxiang); + } } } // 脱下 if (action == 2){ - if (!hero.getFaxiangList().contains(faxiangID)){ - LOGGER.error("法相未装备,hero:{}, faxiang:{}",heroID,faxiangID); - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"法相未装备"); + for (String key : wearID) { + hero.uninstallFaxiang(key); + Faxiang faxiang = equipManager.getFaxiang(key); + faxiang.setBindHeroId(""); + equipManager.putFaxiang(faxiang); } - hero.uninstallFaxiang(faxiangID); } MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.WEAR_FAXIANG_EQUIP_RESPONSE_VALUE, null, true); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightRecordLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightRecordLogic.java index 0f346564e..4b10f0301 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightRecordLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightRecordLogic.java @@ -34,7 +34,7 @@ public class FightRecordLogic { /** * 基于内存的阻塞队列 */ - private static BlockingQueue queue = new LinkedBlockingQueue<>(QUEUE_LENGTH); + private static final BlockingQueue queue = new LinkedBlockingQueue<>(QUEUE_LENGTH); /** * 消息处理 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java index 1e1c8f6b7..8a992ce14 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java @@ -436,7 +436,7 @@ public class FightUtil { StringBuilder skillSb = new StringBuilder(); StringBuilder propertySb = new StringBuilder(); String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero, skillSb).toString(); - heroSkill = heroSkill + moraleSkillBuilder.toString(); + heroSkill = heroSkill + moraleSkillBuilder; String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb, hero.getPropertyId(), hero.getLevel(user.getHeroManager()), heroAttributeMap).toString(); CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo .newBuilder() diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/result/FightResult.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/result/FightResult.java index 893d2cfdf..e0770261f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/result/FightResult.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/result/FightResult.java @@ -193,7 +193,7 @@ public class FightResult { ", fightTeamInfo=" + fightTeam + ", defFightTeamInfo=" + defFightTeam + ", fightData=" + fightDataS + - ", monsterTeamList=" + list.toString() + + ", monsterTeamList=" + list + '}'; } } 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 ab40be9cc..cac201d63 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 @@ -4414,6 +4414,15 @@ public class HeroLogic { returnItemMap.put(integer,1); } } + // 法相 + Set faxiangList = hero.getFaxiangList(); + if (faxiangList != null && !faxiangList.isEmpty()){ + for (String key : faxiangList) { + Faxiang faxiang = user.getEquipManager().getFaxiang(key); + faxiang.setBindHeroId(""); + user.getEquipManager().putFaxiang(faxiang); + } + } } int breakId = hero.getBreakId(); int templateId = hero.getTemplateId(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogUtil.java index 972d459f1..2c9c3a528 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogUtil.java @@ -34,7 +34,6 @@ public class ItemLogUtil { }else{ try { Thread.sleep(100); - return; } catch (InterruptedException e) { e.printStackTrace(); } 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 1c8e1e674..1c9622d6e 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 @@ -578,6 +578,16 @@ public class ItemLogic { baseItemMap.put(integer,1L); } } + // 法相 + Set faxiangList = hero.getFaxiangList(); + if (faxiangList != null && !faxiangList.isEmpty()){ + for (String key : faxiangList) { + Faxiang faxiang = user.getEquipManager().getFaxiang(key); + faxiang.setBindHeroId(""); + user.getEquipManager().putFaxiang(faxiang); + } + } + heroIdReport.add(hero.getTemplateId()); heroLevelReport.add(hero.getOriginalLevel()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index a1fd85da8..70cf1b112 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -1288,6 +1288,10 @@ public class PlayerLogic { for(int equipId : hero.getEquipByHongmengPositionMap(userInMem.getHeroManager()).values()){ builder.addEquip(CBean2Proto.getEquipProto(equipId)); } + for(String key : hero.getFaxiangList()){ + Faxiang faxiang = equipManager.getFaxiang(key); + builder.addEquip(CBean2Proto.getFaxiangEquipProto(faxiang)); + } builder.setForce(HeroLogic.getInstance().calForce(heroNotBufferAttribute)); builder.setHero(CBean2Proto.getHeroByHongMeng(hero,userInMem.getHeroManager())); Map guildSkill = userInMem.getGuildMyInfo().getGuildSkill(); 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 94ce4d14a..78af8a103 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/UUIDEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/UUIDEnum.java @@ -20,7 +20,7 @@ public enum UUIDEnum { Faxiang(17) ; - private int value; + private final int value; UUIDEnum( int value ){ this.value = value; }