From 7f7223ee10ae6396a3e790fc7771eeec6e9699c0 Mon Sep 17 00:00:00 2001 From: duhui Date: Fri, 18 Jun 2021 16:58:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=A8=E6=9C=8D,=E7=8E=A9=E5=AE=B6=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=92=8C=E6=8E=92=E8=A1=8C=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisKey.java | 1 + .../com/ljsd/jieling/db/redis/RedisUtil.java | 3 +- .../crossService/CrossServiceLogic.java | 107 +++++++++ .../com/ljsd/jieling/logic/dao/Equip.java | 7 +- .../java/com/ljsd/jieling/logic/dao/Hero.java | 22 +- .../com/ljsd/jieling/logic/dao/Pokemon.java | 12 +- .../ljsd/jieling/logic/dao/PropertyItem.java | 18 +- .../jieling/logic/dao/gm/ArenaOfHero.java | 180 ++++++++++++++++ .../logic/dao/gm/ArenaOfHeroManager.java | 87 ++++++++ .../jieling/logic/dao/gm/ArenaOfPlayer.java | 83 ------- .../logic/dao/gm/ArenaOfPlayerManager.java | 135 ++++++++++++ .../jieling/logic/dao/gm/ArenaOfUser.java | 104 ++++++++- .../logic/dao/gm/CoreOfServerInfo.java | 203 ++++++++++++++++++ .../ljsd/jieling/logic/hero/HeroLogic.java | 110 +++++----- .../com/ljsd/jieling/logic/rank/RankEnum.java | 4 +- 15 files changed, 917 insertions(+), 159 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfHero.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfHeroManager.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayer.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayerManager.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/CoreOfServerInfo.java 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 eb0a9db36..8004ccaf5 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 @@ -320,6 +320,7 @@ public class RedisKey { public static final String SERVER_SPLIT_INFO = "SERVER_SPLIT_INFO"; + public static final String CROSS_SERVICE_ARENA = "CROSS_SERVICE_ARENA"; public static Set familyKey = new HashSet<>(); 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 3fedc0ef1..b06d503be 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 @@ -1246,7 +1246,8 @@ public class RedisUtil { // return GameApplication.serverProperties.getAreaId()+ RedisKey.Delimiter_colon+type + RedisKey.Delimiter_colon+key; // } if(RedisKey.TOKEN.equals(type)||RedisKey.USER_SERVER_INFO.equals(type)|| - RedisKey.CDKEY.equals(type)||RedisKey.ServerArenaJob.equals(type)){ + RedisKey.CDKEY.equals(type)||RedisKey.ServerArenaJob.equals(type)|| + RedisKey.CROSS_SERVICE_ARENA.equals(type)){ return type + RedisKey.Delimiter_colon + key; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java new file mode 100644 index 000000000..746b8edd3 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java @@ -0,0 +1,107 @@ +package com.ljsd.jieling.logic.activity.crossService; + +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.logic.arena.ArenaLogic; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.gm.ArenaOfUser; +import com.ljsd.jieling.logic.dao.gm.CoreOfServerInfo; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.hero.HeroLogic; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; + +import java.net.UnknownHostException; + +/** + * @Author hj + * @Date 2021/6/17 18:17 + * @Description: 跨服功能类 + * @Version 1.0 + */ +public class CrossServiceLogic { + private static final Logger LOGGER = LoggerFactory.getLogger(ArenaLogic.class); + + private CrossServiceLogic(){} + + public static class Instance { + public final static CrossServiceLogic instance = new CrossServiceLogic(); + } + + public static CrossServiceLogic getInstance() { + return CrossServiceLogic.Instance.instance; + } + + public String findServerName(int serverId) throws UnknownHostException { + MongoTemplate core = MongoUtil.getCoreMongoTemplate(); + Query query = new Query(); + query.addCriteria(Criteria.where("server_id").is(String.valueOf(serverId))); + return core.findOne(query, CoreOfServerInfo.class).getName(); + } + + public void insert(User user) throws UnknownHostException { + ArenaOfUser arenaOfUser = new ArenaOfUser(user); + MongoTemplate core = MongoUtil.getCoreMongoTemplate(); + core.insert(arenaOfUser,"arenaOfUser"); + } + + public void update(ArenaOfUser arenaOfUser) throws Exception { + MongoTemplate core = MongoUtil.getCoreMongoTemplate(); + // 根据id查询 + Query query = new Query(Criteria.where("_id").is(arenaOfUser.getId())); + // 修改的参数 + Update update = new Update(); + update.set("arenaOfPlayerManager",arenaOfUser.getPlayerManager()); + update.set("arenaOfHeroManager",arenaOfUser.getHeroManager()); + update.set("arenaOfPokemons",arenaOfUser.getPokemons()); + update.set("arenaOfSeals",arenaOfUser.getSeals()); + update.set("arenaOfGuildSkill",arenaOfUser.getGuildSkill()); + core.updateMulti(query, update, ArenaOfUser.class); + } + + public ArenaOfUser query(int uid) throws UnknownHostException { + MongoTemplate core = MongoUtil.getCoreMongoTemplate(); + Query query = new Query(); + query.addCriteria(Criteria.where("_id").is(uid)); + return core.findOne(query, ArenaOfUser.class); + } + + /** + * 计算战力 + * @param arenaOfUser + * @throws Exception + */ + private void countForce(ArenaOfUser arenaOfUser) throws Exception { + User user = UserManager.getUser(arenaOfUser.getId()); + int totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.WORLD_TEAM_ARENA_DEFENSE, false); + arenaOfUser.getHeroManager().setTotalForce(totalForce); + } + + /** + * 处理跨服数据 + * @param user + * @throws Exception + */ + public void dispose(User user) throws Exception{ + + ArenaOfUser query = query(user.getId()); + // 添加 + if (query == null){ + insert(user); + } + // 更新 + else { + // 获取新的跨服用户信息 + ArenaOfUser arenaOfUser = new ArenaOfUser(user); + // 计算战力 + countForce(arenaOfUser); + // 更新数据 + update(arenaOfUser); + } + } + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java index 22832192b..6f370f7c3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Equip.java @@ -14,7 +14,7 @@ import org.slf4j.LoggerFactory; import java.util.*; @Deprecated -public class Equip extends PropertyItem implements Cloneable{ +public class Equip extends PropertyItem{ private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(Equip.class); private int rebuildLevel; @@ -320,9 +320,4 @@ public class Equip extends PropertyItem implements Cloneable{ updateString("rebuildLevel",rebuildLevel); this.rebuildLevel = rebuildLevel; } - - @Override - public Object clone() throws CloneNotSupportedException { - return (Equip) super.clone(); - } } 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 3e729fed5..b7e5e1ed8 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 @@ -19,7 +19,7 @@ import org.slf4j.LoggerFactory; import java.util.*; -public class Hero extends MongoBase implements Comparable { +public class Hero extends MongoBase implements Comparable,Cloneable { private static final Logger LOGGER = LoggerFactory.getLogger(Hero.class); private String id; @@ -31,9 +31,9 @@ public class Hero extends MongoBase implements Comparable { private int star; - private Map equipByPositionMap; + private Map equipByPositionMap = new HashMap<>(); - private Map soulEquipByPositionMap; + private Map soulEquipByPositionMap = new HashMap<>(); private int breakId; @@ -463,4 +463,20 @@ public class Hero extends MongoBase implements Comparable { } return Integer.compare(o.getStar(), this.getStar()); } + + @Override + public Object clone(){ + Hero clone = null; + try { + clone = (Hero) super.clone(); + + clone.equipByPositionMap = new HashMap<>(clone.equipByPositionMap); + clone.soulEquipByPositionMap = new HashMap<>(clone.soulEquipByPositionMap); + clone.jewelInfo = new HashSet<>(clone.jewelInfo); + } catch (CloneNotSupportedException e) { + LOGGER.error("英雄克隆失败........"); + e.printStackTrace(); + } + return clone; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Pokemon.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Pokemon.java index 3103c1d4c..cfd9ea463 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Pokemon.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Pokemon.java @@ -10,7 +10,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -public class Pokemon extends MongoBase { +public class Pokemon extends MongoBase implements Cloneable { private int tmpId; @@ -94,5 +94,15 @@ public class Pokemon extends MongoBase { // updateString("comonpentsLevelMap",new HashMap<>()); // } + @Override + public Object clone(){ + Pokemon clone = null; + try { + clone = (Pokemon) super.clone(); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return clone; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PropertyItem.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PropertyItem.java index 512c31c78..ba532b67a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PropertyItem.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PropertyItem.java @@ -2,9 +2,11 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; +import java.util.HashMap; +import java.util.HashSet; import java.util.Map; -public class PropertyItem extends MongoBase { +public class PropertyItem extends MongoBase implements Cloneable { private String id; private int equipId; @@ -120,4 +122,18 @@ public class PropertyItem extends MongoBase { updateString("isLocked", isLocked); this.isLocked = isLocked; } + + @Override + public Object clone() { + PropertyItem clone = null; + try { + clone = (PropertyItem) super.clone(); + + clone.propertyValueByIdMap = new HashMap<>(clone.propertyValueByIdMap); + clone.secondValueByIdMap = new HashMap<>(clone.secondValueByIdMap); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return clone; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfHero.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfHero.java new file mode 100644 index 000000000..00bfb3e52 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfHero.java @@ -0,0 +1,180 @@ +package com.ljsd.jieling.logic.dao.gm; + +import com.ljsd.jieling.logic.dao.Hero; +import com.ljsd.jieling.logic.dao.HeroManager; +import com.ljsd.jieling.logic.dao.root.User; + +import java.util.*; + +/** + * @Author hj + * @Date 2021/6/17 16:49 + * @Description: + * @Version 1.0 + */ +public class ArenaOfHero { + private String id; + private int templateId; //模板ID + private int level;//等级 + private int star; + private Map equipByPositionMap = new HashMap<>(); + private Map soulEquipByPositionMap = new HashMap<>(); + private int breakId; + private int starBreakId; + private int createTime; + private int lastUpdateEnergyTime; + private int speed; + private int especialEquipLevel; + private int isLock; + private int createType; + private int changeId; + private Set jewelInfo = new HashSet<>(); + + public ArenaOfHero(User user, Hero hero) { + HeroManager heroManager = user.getHeroManager(); + this.id = hero.getId(); + this.templateId = hero.getTemplateId(); + this.level = hero.getLevel(heroManager); + this.star = hero.getStar(); + this.equipByPositionMap = new HashMap<>(hero.getEquipByHongmengPositionMap(heroManager)); + this.soulEquipByPositionMap = new HashMap<>(hero.getSoulEquipByPositionMap()); + this.breakId = hero.getBreakIdByHongMeng(heroManager); + this.starBreakId = hero.getStarBreakId(); + this.createTime = hero.getCreateTime(); + this.lastUpdateEnergyTime = hero.getLastUpdateEnergyTime(); + this.speed = hero.getSpeed(); + this.especialEquipLevel = hero.getEspecialEquipLevelByHongmeng(heroManager,hero.getId()); + this.isLock = hero.getIsLock(); + this.createType = hero.getCreateType(); + this.changeId = hero.getChangeId(); + this.jewelInfo = new HashSet<>(hero.getJewelInfo()); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getTemplateId() { + return templateId; + } + + public void setTemplateId(int templateId) { + this.templateId = templateId; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public int getStar() { + return star; + } + + public void setStar(int star) { + this.star = star; + } + + public Map getEquipByPositionMap() { + return equipByPositionMap; + } + + public void setEquipByPositionMap(Map equipByPositionMap) { + this.equipByPositionMap = equipByPositionMap; + } + + public Map getSoulEquipByPositionMap() { + return soulEquipByPositionMap; + } + + public void setSoulEquipByPositionMap(Map soulEquipByPositionMap) { + this.soulEquipByPositionMap = soulEquipByPositionMap; + } + + public int getBreakId() { + return breakId; + } + + public void setBreakId(int breakId) { + this.breakId = breakId; + } + + public int getStarBreakId() { + return starBreakId; + } + + public void setStarBreakId(int starBreakId) { + this.starBreakId = starBreakId; + } + + public int getCreateTime() { + return createTime; + } + + public void setCreateTime(int createTime) { + this.createTime = createTime; + } + + public int getLastUpdateEnergyTime() { + return lastUpdateEnergyTime; + } + + public void setLastUpdateEnergyTime(int lastUpdateEnergyTime) { + this.lastUpdateEnergyTime = lastUpdateEnergyTime; + } + + public int getSpeed() { + return speed; + } + + public void setSpeed(int speed) { + this.speed = speed; + } + + public int getEspecialEquipLevel() { + return especialEquipLevel; + } + + public void setEspecialEquipLevel(int especialEquipLevel) { + this.especialEquipLevel = especialEquipLevel; + } + + public int getIsLock() { + return isLock; + } + + public void setIsLock(int isLock) { + this.isLock = isLock; + } + + public int getCreateType() { + return createType; + } + + public void setCreateType(int createType) { + this.createType = createType; + } + + public int getChangeId() { + return changeId; + } + + public void setChangeId(int changeId) { + this.changeId = changeId; + } + + public Set getJewelInfo() { + return jewelInfo; + } + + public void setJewelInfo(Set jewelInfo) { + this.jewelInfo = jewelInfo; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfHeroManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfHeroManager.java new file mode 100644 index 000000000..26abd5e75 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfHeroManager.java @@ -0,0 +1,87 @@ +package com.ljsd.jieling.logic.dao.gm; + +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.logic.dao.Hero; +import com.ljsd.jieling.logic.dao.PropertyItem; +import com.ljsd.jieling.logic.dao.TeamPosHeroInfo; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.hero.HeroLogic; +import org.springframework.data.mongodb.core.mapping.Field; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author hj + * @Date 2021/6/18 14:51 + * @Description: + * @Version 1.0 + */ +public class ArenaOfHeroManager { + + private Map> teams = new HashMap<>(); + + private Map heros = new HashMap<>(); + + private Map jewels = new HashMap<>(); + + private int totalForce; + + public ArenaOfHeroManager(User user) { + // 阵容信息 + teams = new HashMap<>(); + List infos = + user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,new ArrayList<>()); + teams.put(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,infos); + // 英雄 + heros = new HashMap<>(); + Map heroMap = user.getHeroManager().getHeroMap(); + infos.forEach(v->{ + Hero hero = heroMap.get(v.getHeroId()); + heros.put(v.getHeroId(),new ArenaOfHero(user,hero)); + }); + // 魂宝灵宝 + jewels = new HashMap<>(); + Map equipMap = user.getEquipManager().getEquipMap(); + heroMap.values().forEach(v-> v.getJewelInfo().forEach(v2->{ + PropertyItem item = (PropertyItem)equipMap.get(v2).clone(); + jewels.put(v2,item); + })); + // 总战力 + totalForce = HeroLogic.getInstance().calTeamTotalForce(user, GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,false); + } + + public Map> getTeams() { + return teams; + } + + public void setTeams(Map> teams) { + this.teams = teams; + } + + public Map getHeros() { + return heros; + } + + public void setHeros(Map heros) { + this.heros = heros; + } + + public Map getJewels() { + return jewels; + } + + public void setJewels(Map jewels) { + this.jewels = jewels; + } + + public int getTotalForce() { + return totalForce; + } + + public void setTotalForce(int totalForce) { + this.totalForce = totalForce; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayer.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayer.java deleted file mode 100644 index 4b9299816..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayer.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.ljsd.jieling.logic.dao.gm; - -/** - * @Author hj - * @Date 2021/6/17 15:16 - * @Description: gm用玩家信息 - * @Version 1.0 - */ -public class ArenaOfPlayer { - - private int uId; - private int level; - private String name; - private int head; - private int headFrame; - private String guildName; - private int userTitle; - private int practiceLevel; - - public int getuId() { - return uId; - } - - public void setuId(int uId) { - this.uId = uId; - } - - public int getLevel() { - return level; - } - - public void setLevel(int level) { - this.level = level; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getHead() { - return head; - } - - public void setHead(int head) { - this.head = head; - } - - public int getHeadFrame() { - return headFrame; - } - - public void setHeadFrame(int headFrame) { - this.headFrame = headFrame; - } - - public String getGuildName() { - return guildName; - } - - public void setGuildName(String guildName) { - this.guildName = guildName; - } - - public int getUserTitle() { - return userTitle; - } - - public void setUserTitle(int userTitle) { - this.userTitle = userTitle; - } - - public int getPracticeLevel() { - return practiceLevel; - } - - public void setPracticeLevel(int practiceLevel) { - this.practiceLevel = practiceLevel; - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayerManager.java new file mode 100644 index 000000000..3d458ce26 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfPlayerManager.java @@ -0,0 +1,135 @@ +package com.ljsd.jieling.logic.dao.gm; + +import com.ljsd.GameApplication; +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; +import com.ljsd.jieling.logic.dao.GuilidManager; +import com.ljsd.jieling.logic.dao.PlayerManager; +import com.ljsd.jieling.logic.dao.root.GuildInfo; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.hero.HeroLogic; + +import java.net.UnknownHostException; + +/** + * @Author hj + * @Date 2021/6/17 15:16 + * @Description: gm用玩家信息 + * @Version 1.0 + */ +public class ArenaOfPlayerManager { + + private int uId; + private int level; + private String name; + private int head; + private int headFrame; + private String guildName; + private int userTitle; + private int practiceLevel; + private int serverId; + private String serverName; + + public ArenaOfPlayerManager(User user) throws UnknownHostException { + PlayerManager player = user.getPlayerInfoManager(); + int guildId = player.getGuildId(); + + this.uId = user.getId(); + this.level = player.getLevel(); + this.name = player.getNickName(); + this.head = player.getHead(); + this.headFrame = player.getHeadFrame(); + if (guildId == 0){ + this.guildName = ""; + }else { + GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId); + this.guildName = guildInfo.getName(); + } + this.userTitle = player.getUserTitle(); + this.practiceLevel = user.getHeroManager().getPracticeLevel(); + this.serverId = GameApplication.serverId; + this.serverName = CrossServiceLogic.getInstance().findServerName(serverId); + } + + public int getuId() { + return uId; + } + + public void setuId(int uId) { + this.uId = uId; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getHead() { + return head; + } + + public void setHead(int head) { + this.head = head; + } + + public int getHeadFrame() { + return headFrame; + } + + public void setHeadFrame(int headFrame) { + this.headFrame = headFrame; + } + + public String getGuildName() { + return guildName; + } + + public void setGuildName(String guildName) { + this.guildName = guildName; + } + + public int getUserTitle() { + return userTitle; + } + + public void setUserTitle(int userTitle) { + this.userTitle = userTitle; + } + + public int getPracticeLevel() { + return practiceLevel; + } + + public void setPracticeLevel(int practiceLevel) { + this.practiceLevel = practiceLevel; + } + + public int getServerId() { + return serverId; + } + + public void setServerId(int serverId) { + this.serverId = serverId; + } + + public String getServerName() { + return serverName; + } + + public void setServerName(String serverName) { + this.serverName = serverName; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfUser.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfUser.java index 81574a549..f7e9e2db5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfUser.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/ArenaOfUser.java @@ -1,24 +1,110 @@ package com.ljsd.jieling.logic.dao.gm; -import com.ljsd.jieling.logic.dao.Hero; -import com.ljsd.jieling.logic.dao.Jewel; -import com.ljsd.jieling.logic.dao.Pokemon; +import com.ljsd.jieling.logic.dao.*; +import com.ljsd.jieling.logic.dao.root.User; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Field; -import java.util.List; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Map; /** * @Author hj * @Date 2021/6/17 13:43 - * @Description: + * @Description: 跨服排行用户信息 * @Version 1.0 */ +@Document(collection = "arenaOfUser") public class ArenaOfUser { - private ArenaOfPlayer player; + @Id + private int id; - private List heroes; + @Field(value = "arenaOfPlayerManager") + private ArenaOfPlayerManager playerManager; - private List jewels; + @Field(value = "arenaOfHeroManager") + private ArenaOfHeroManager heroManager; - private List pokemons; + @Field(value = "arenaOfPokemons") + private Map pokemons = new HashMap<>(); + + @Field(value = "arenaOfSeals") + private Map seals = new HashMap<>(); + + @Field(value = "arenaOfGuildSkill") + private Map guildSkill = new HashMap<>(4); + + public ArenaOfUser(User user) throws UnknownHostException { + this.id = user.getId(); + + HeroManager heroManager = user.getHeroManager(); + // 玩家基本信息 + this.playerManager = new ArenaOfPlayerManager(user); + // 英雄 + this.heroManager = new ArenaOfHeroManager(user); + // 灵兽 + pokemons = new HashMap<>(); + Map pokemonMap = user.getPokemonManager().getPokemonMap(); + Map teamMap = user.getPokemonManager().getPokemonTeamMap(); + teamMap.values().forEach(v->{ + // clone 深度复制 + Pokemon pokemon = (Pokemon)pokemonMap.get(v).clone(); + pokemons.put(v,pokemon); + }); + // 紫府神印 + seals = new HashMap<>(heroManager.getPurpleMansionSeal()); + // 公会技能 + guildSkill = new HashMap<>(user.getGuildMyInfo().getGuildSkill()); + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public ArenaOfPlayerManager getPlayerManager() { + return playerManager; + } + + public void setPlayerManager(ArenaOfPlayerManager playerManager) { + this.playerManager = playerManager; + } + + public ArenaOfHeroManager getHeroManager() { + return heroManager; + } + + public void setHeroManager(ArenaOfHeroManager heroManager) { + this.heroManager = heroManager; + } + + public Map getPokemons() { + return pokemons; + } + + public void setPokemons(Map pokemons) { + this.pokemons = pokemons; + } + + public Map getGuildSkill() { + return guildSkill; + } + + public void setGuildSkill(Map guildSkill) { + this.guildSkill = guildSkill; + } + + public Map getSeals() { + return seals; + } + + public void setSeals(Map seals) { + this.seals = seals; + } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/CoreOfServerInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/CoreOfServerInfo.java new file mode 100644 index 000000000..7957a35d7 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/gm/CoreOfServerInfo.java @@ -0,0 +1,203 @@ +package com.ljsd.jieling.logic.dao.gm; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.index.Indexed; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Field; + +/** + * + * @author Administrator + * @date 2015/8/13 + */ + +@Document(collection = "server_info") +public class CoreOfServerInfo { + @Id + private int _id; + + @Field(value = "name") + private String name; + + @Field(value = "ip") + private String IP; + + @Field(value = "port") + private String port; + + @Indexed + @Field(value = "server_id") + private String server_id; + + @Field(value = "channel") + private String channel; + + @Field(value = "sub_channel") + private String sub_channel; + + /** + * -1 服务器准备中 + * -2 未运营 + * 0 已关闭 + * 1 维护 + * 2 流畅 + * 3 拥挤 + * 4 爆满 + * 5 自动 + */ + @Field(value = "state") + private String status; + + @Field(value = "plat") + private String plat; + + @Field(value = "open_time") + private String open_time; + + @Field(value = "is_new") + private String is_new; + + /* 服务器启动类型 0手动开启 1 按时 2 按量*/ + @Field(value = "open_type") + private String open_type; + + @Field(value = "register_state") + private String register_state; + + @Field(value = "coreName") + private String coreName; + + public CoreOfServerInfo(int _id, String name) { + this._id = _id; + this.server_id = String.valueOf(_id); + this.name = name; + } + + public int get_id() { + return _id; + } + + public void set_id(int _id) { + this._id = _id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getIP() { + return IP; + } + + public void setIP(String IP) { + this.IP = IP; + } + + public String getPort() { + return port; + } + + public void setPort(String port) { + this.port = port; + } + + public String getServer_id() { + return server_id; + } + + public void setServer_id(String server_id) { + this.server_id = server_id; + } + + public String getChannel() { + return channel; + } + + public void setChannel(String channel) { + this.channel = channel; + } + + public String getSub_channel() { + return sub_channel; + } + + public void setSub_channel(String sub_channel) { + this.sub_channel = sub_channel; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getPlat() { + return plat; + } + + public void setPlat(String plat) { + this.plat = plat; + } + + public String getOpen_time() { + return open_time; + } + + public void setOpen_time(String open_time) { + this.open_time = open_time; + } + + public String getIs_new() { + return is_new==null?"0":is_new; + } + + public void setIs_new(String is_new) { + this.is_new = is_new; + } + + public String getOpen_type() { + return open_type==null?"0":open_type; + } + + public void setOpen_type(String open_type) { + this.open_type = open_type; + } + + public String getRegister_state() { return register_state==null?"1":register_state; } + + public void setRegister_state(String register_state) { this.register_state = register_state; } + + public String getCoreName() { + return coreName; + } + + public void setCoreName(String coreName) { + this.coreName = coreName; + } + + @Override + public String toString() { + return "ServerInfo{" + + "_id=" + _id + + ", name='" + name + '\'' + + ", IP='" + IP + '\'' + + ", port='" + port + '\'' + + ", server_id='" + server_id + '\'' + + ", channel='" + channel + '\'' + + ", sub_channel='" + sub_channel + '\'' + + ", status='" + status + '\'' + + ", plat='" + plat + '\'' + + ", open_time='" + open_time + '\'' + + ", is_new='" + is_new + '\'' + + ", open_type='" + open_type + '\'' + + ", register_state='" + register_state + '\'' + + ", coreName='" + coreName + '\'' + + '}'; + } +} 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 1d57c3584..db59b60d9 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 @@ -20,6 +20,7 @@ import com.ljsd.jieling.ktbeans.ReportEventEnum; import com.ljsd.jieling.ktbeans.ReportUtil; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.ActivityType; +import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; import com.ljsd.jieling.logic.activity.event.*; import com.ljsd.jieling.logic.activity.eventhandler.HeroFiveStarGetEventHandler; import com.ljsd.jieling.logic.activity.eventhandler.PokemonFiveStarGetEventHandler; @@ -34,7 +35,6 @@ import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.logic.redpacket.WelfareRedPackEvent; import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType; import com.ljsd.jieling.logic.store.BuyGoodsNewLogic; -import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.util.*; import config.*; @@ -778,63 +778,66 @@ public class HeroLogic{ } user.getTeamPosManager().changeTeamInfo(teamId,heroIds); //401图内可以更改编队 - if(teamId == GlobalsDef.ENDLESS_TEAM){ + if (teamId == GlobalsDef.ENDLESS_TEAM) { List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); - if(teamPosHeroInfos!=null){ - List heroes = new ArrayList<>(teamPosHeroInfos.size()); - Map> heroAllAttributeMap = new HashMap<>(teamPosHeroInfos.size()); - List indiHeros = new ArrayList<>(); - for (TeamPosHeroInfo heroInfo : teamPosHeroInfos) { - Hero hero = heroManager.getEndlessHeroInfo().get(heroInfo.getHeroId()); - if (hero == null) { - break; - } - if(heroAllAttributeMap.get(heroInfo.getHeroId())!=null){ - continue; - } - - Map config = STableManager.getConfig(SEndlessHeroProp.class); - SEndlessHeroProp sEndlessHeroProp = config.get(hero.getTemplateId()); - Map heroAllAttribute = new HashMap<>(); - for(int[] prop:sEndlessHeroProp.getProps()){ - heroAllAttribute.put(prop[0],(long)prop[1]); - } - Map endlessHeroInfo = user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo(); - if(endlessHeroInfo!=null&& endlessHeroInfo.containsKey(heroInfo.getHeroId())){ - int curHp = (int)(endlessHeroInfo.get(heroInfo.getHeroId()) /10000.00 * heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId())); - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(), (long) curHp); - }else{ - heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(), 10000L); - } - heroAllAttributeMap.put(hero.getId(), heroAllAttribute); - heroes.add(heroInfo.getHeroId()); - MapInfoProto.HeroInfo indiInfo = MapInfoProto.HeroInfo.newBuilder().setHeroId(heroInfo.getHeroId()) - .setHeroHp(heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId())) - .setHeroMaxHp(heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId())) - .build(); - indiHeros.add(indiInfo); + if (teamPosHeroInfos != null) { + List heroes = new ArrayList<>(teamPosHeroInfos.size()); + Map> heroAllAttributeMap = new HashMap<>(teamPosHeroInfos.size()); + List indiHeros = new ArrayList<>(); + for (TeamPosHeroInfo heroInfo : teamPosHeroInfos) { + Hero hero = heroManager.getEndlessHeroInfo().get(heroInfo.getHeroId()); + if (hero == null) { + break; + } + if (heroAllAttributeMap.get(heroInfo.getHeroId()) != null) { + continue; } - user.getMapManager().setHeroAllAttributeMap(heroAllAttributeMap); - if(user.getMapManager().getCurMapId()!=0){ - MapInfoProto.EndlessSetTeamIndication response = MapInfoProto.EndlessSetTeamIndication.newBuilder().addAllInfo(indiHeros).build(); - MessageUtil.sendIndicationMessage(iSession,1, MessageTypeProto.MessageType.ENDLESS_MAP_SET_TEAM_INDICATION_VALUE,response,true); + Map config = STableManager.getConfig(SEndlessHeroProp.class); + SEndlessHeroProp sEndlessHeroProp = config.get(hero.getTemplateId()); + Map heroAllAttribute = new HashMap<>(); + for (int[] prop : sEndlessHeroProp.getProps()) { + heroAllAttribute.put(prop[0], (long) prop[1]); } - }else{ - user.getTeamPosManager().changeTeamInfo(teamId,heroIds); + Map endlessHeroInfo = user.getMapManager().getEndlessMapInfo().getEndlessHeroInfo(); + if (endlessHeroInfo != null && endlessHeroInfo.containsKey(heroInfo.getHeroId())) { + int curHp = (int) (endlessHeroInfo.get(heroInfo.getHeroId()) / 10000.00 * heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId())); + heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(), (long) curHp); + } else { + heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(), 10000L); + } + heroAllAttributeMap.put(hero.getId(), heroAllAttribute); + heroes.add(heroInfo.getHeroId()); + MapInfoProto.HeroInfo indiInfo = MapInfoProto.HeroInfo.newBuilder().setHeroId(heroInfo.getHeroId()) + .setHeroHp(heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId())) + .setHeroMaxHp(heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId())) + .build(); + indiHeros.add(indiInfo); } - - }else if(teamId == GlobalsDef.TEAM_ARENA_DEFENSE){ - int teamForce = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false); - //更新竞技场防御编队战力 - String key = RedisKey.getKey(RedisKey.AREDEF_TEAM_FORCE_RANK, "", false); - RedisUtil.getInstence().zsetAddOne(key, String.valueOf(user.getId()), teamForce); - - } - if(teamId==GlobalsDef.FORMATION_NORMAL){ - Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(iSession.getUid())); + user.getMapManager().setHeroAllAttributeMap(heroAllAttributeMap); + if (user.getMapManager().getCurMapId() != 0) { + MapInfoProto.EndlessSetTeamIndication response = MapInfoProto.EndlessSetTeamIndication.newBuilder().addAllInfo(indiHeros).build(); + MessageUtil.sendIndicationMessage(iSession, 1, MessageTypeProto.MessageType.ENDLESS_MAP_SET_TEAM_INDICATION_VALUE, response, true); + } + } else { + user.getTeamPosManager().changeTeamInfo(teamId, heroIds); } + } else if (teamId == GlobalsDef.TEAM_ARENA_DEFENSE) { + int teamForce = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false); + //更新竞技场防御编队战力 + String key = RedisKey.getKey(RedisKey.AREDEF_TEAM_FORCE_RANK, "", false); + RedisUtil.getInstence().zsetAddOne(key, String.valueOf(user.getId()), teamForce); + + } + if (teamId == GlobalsDef.FORMATION_NORMAL) { + Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(iSession.getUid())); + } + CrossServiceLogic.getInstance().dispose(user); + // 跨服 更新编队信息 + if (teamId == GlobalsDef.WORLD_TEAM_ARENA_DEFENSE) { + CrossServiceLogic.getInstance().dispose(user); + } user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_IN_TEAM,heroIds.size()); MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.TEAM_POS_SAVE_RESPONSE_VALUE,null,true); } @@ -2359,7 +2362,6 @@ public class HeroLogic{ if(isInTeam(user,heroId,1)){ Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(uid)); } - // 鸿蒙阵,穿装备 addOrUpdateHongmeng(session); @@ -2458,7 +2460,6 @@ public class HeroLogic{ if(isInTeam(user,heroId,1)){ Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(uid)); } - // 鸿蒙阵,脱装备 addOrUpdateHongmeng(session); @@ -2507,7 +2508,8 @@ public class HeroLogic{ if(!drop.getHeroList().isEmpty()){ user.getUserMissionManager().onGameEvent(user,GameEvent.COMPOS_HERO,drop.getHero(0).getHeroId(),composeNum); } - MessageUtil.sendMessage(iSession,1,msgId,heroComposeResponse,true); } + MessageUtil.sendMessage(iSession,1,msgId,heroComposeResponse,true); + } public String getQuality(int natural) { String quality = "N"; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java index 7560d203f..ddf4e9150 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java @@ -43,7 +43,9 @@ public enum RankEnum { WARLD_DIS_ARENA_RANK(28,RedisKey.WARLD_DIS_ARENA_RANK,ArenaRank::new,true),//世界服排行 SHAN_HE_SHE_JI_CHAPTER_RANK(29,RedisKey.SHAN_HE_SHE_JI_CHAPTER_RANK,ShanHeSheJiTuChapterRank::new,false),//山河社稷章节排行榜 SHAN_HE_SHE_JI_STAR_RANK(30,RedisKey.SHAN_HE_SHE_JI_STAR_RANK,ShanHeSheJiTuStarRank::new,false),//山河社稷星星排行榜 - TA_SUI_LING_XIAO_RANK(31,RedisKey.TA_SUI_LING_XIAO_RANK,TaSuiLingXiaoRank::new,false) + TA_SUI_LING_XIAO_RANK(31,RedisKey.TA_SUI_LING_XIAO_RANK,TaSuiLingXiaoRank::new,false), + + CROSS_SERVICE_ARENA(32,RedisKey.CROSS_SERVICE_ARENA,ArenaRank::new,false) ; private int type;