From e683d993d522016e418f13246a027f9d0a5feed9 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Tue, 21 Dec 2021 19:04:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A2=E7=B4=A2=20=E6=88=98=E6=96=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../explorerMap/ExplorerMapInfoHandler.java | 15 ++ .../logic/explorerMap/ExplorerMapLogic.java | 232 +++++++++++------- .../com/ljsd/jieling/util/FightDataUtil.java | 2 + 3 files changed, 154 insertions(+), 95 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapInfoHandler.java index 3521ac79c..2c43ab9a2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/explorerMap/ExplorerMapInfoHandler.java @@ -1,10 +1,15 @@ package com.ljsd.jieling.handler.explorerMap; import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.ExplorerInfo; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.network.session.ISession; import rpc.protocols.MessageTypeProto; import rpc.protocols.PlayerInfoProto; +import java.util.Map; + public class ExplorerMapInfoHandler extends BaseHandler { @Override public MessageTypeProto.MessageType getMessageCode() { @@ -13,6 +18,16 @@ public class ExplorerMapInfoHandler extends BaseHandler explorer = user.getPlayerInfoManager().getExplorer(); + + + + diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/explorerMap/ExplorerMapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/explorerMap/ExplorerMapLogic.java index fefe32df7..030f9eb99 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/explorerMap/ExplorerMapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/explorerMap/ExplorerMapLogic.java @@ -5,13 +5,10 @@ import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; import com.ljsd.jieling.logic.dao.ExplorerInfo; -import com.ljsd.jieling.logic.dao.PlayerManager; -import com.ljsd.jieling.logic.dao.TeamEnum; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.cross.CSPlayer; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; -import config.SArenaRobotConfig; import config.SExplore; import config.SExploreFight; import manager.STableManager; @@ -20,130 +17,168 @@ import org.slf4j.LoggerFactory; import rpc.protocols.CommonProto; import util.TimeUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; public class ExplorerMapLogic { private static final Logger LOGGER = LoggerFactory.getLogger(ExplorerMapLogic.class); - public ExplorerMapLogic(){ + + public ExplorerMapLogic() { } public static ExplorerMapLogic getInstance() { return ExplorerMapLogic.Instance.instance; } - public static class Instance { - public final static ExplorerMapLogic instance = new ExplorerMapLogic(); - } //战斗 派遣 - public static void battle(User user, int mapId, int teamId){ + public static void battle(User user, int mapId, int teamId) { RedisUtil redisUtil = RedisUtil.getInstence(); String key2 = RedisKey.getKey(RedisKey.EXPLORER_MAP_PLAYER, String.valueOf(mapId), false); redisUtil.lSet(key2, String.valueOf(user.getId())); } - public static void battle(User user){ + public static void battle(User user) { Map explorer = user.getPlayerInfoManager().getExplorer(); } - //单场战斗 - public static void singleBattle(User user,int teamId){ - ExplorerInfo explorerInfo = user.getPlayerInfoManager().getExplorer().get(teamId); - if(explorerInfo == null){ + + public static void calOfflineReward(User user){ + //计算离线奖励 + Map explorer = user.getPlayerInfoManager().getExplorer(); + if (explorer == null || explorer.size() == 0) { return; } - if(explorerInfo.getPlayerHp()!=0 && explorerInfo.getEnemyHp()!=0){ - int teamForce = HeroLogic.getInstance().calTeamTotalForce(user,teamId, false); - SExplore exploreConfig = STableManager.getConfig(SExplore.class).get(explorerInfo.getMapId()); - if(exploreConfig == null){ - return; - } - //怪物的初始血量 - int mapMonsterForce = exploreConfig.getMonsterForce(); - float ratio = (float)teamForce/mapMonsterForce; - SExploreFight exploreFightData = SExploreFight.getConfigByFightDownAndFightUp(ratio); - if(exploreFightData == null){ - return; - } - //掉血比例 - float reduceRatio = exploreFightData.getLoseFight(); - //玩家掉血 - explorerInfo.setPlayerHp(explorerInfo.getPlayerHp() - (int)(explorerInfo.getPlayerHp()*reduceRatio)); - //怪物掉血 - explorerInfo.setEnemyHp(explorerInfo.getEnemyHp()- (int)(explorerInfo.getEnemyHp()*reduceRatio)); - //玩家死亡 设置重生时间 - if(explorerInfo.getPlayerHp() == 0){ - explorerInfo.setPlayerReliveTime(TimeUtils.nowInt()+300); - } - //怪物死亡 设置重生时间 - if(explorerInfo.getEnemyHp() == 0){ - explorerInfo.setEnemyReliveTime(TimeUtils.nowInt()+300); - //胜利添加掉落 - ListdropList = explorerInfo.getDropList(); - if(dropList == null){ - dropList = new ArrayList<>(); - } - dropList.add(exploreConfig.getReward()); - } - - - } + int offlineTime = (int)(user.getPlayerInfoManager().getOffLineTime()/1000); + for (Map.Entry keyVal : explorer.entrySet()){ + while (keyVal.getValue().getPlayerReliveTime()< offlineTime && keyVal.getValue().getEnemyReliveTime()< offlineTime){ + //打完架后 必定有一方没血 + if(keyVal.getValue().getPlayerHp() == 0){ + //直接满血复活 + int teamForce = HeroLogic.getInstance().calTeamTotalForce(user, keyVal.getKey(), false); + if(TimeUtils.nowInt()> keyVal.getValue().getPlayerReliveTime()+300){ + keyVal.getValue().setPlayerReliveTime(keyVal.getValue().getPlayerReliveTime()+300); + keyVal.getValue().setPlayerHp(teamForce); + } + } + if(keyVal.getValue().getEnemyHp() == 0){ + if(TimeUtils.nowInt()> keyVal.getValue().getEnemyReliveTime()+300){ + keyVal.getValue().setEnemyReliveTime(keyVal.getValue().getEnemyReliveTime()+300); + SExplore exploreConfig = STableManager.getConfig(SExplore.class).get(keyVal.getValue().getMapId()); + if (exploreConfig == null) { + continue; + } + //怪物的初始血量 + int mapMonsterForce = exploreConfig.getMonsterForce(); + keyVal.getValue().setEnemyHp(mapMonsterForce); + } + } + //打架 + singleBattle(user,keyVal.getKey()); + } + } } - //复活怪物 自己血量之类的 - public static void recycleFight(){ - try{ - Set uids = OnlineUserManager.sessionMap.keySet(); - for(int uid:uids){ - User user = UserManager.getUser(uid); - Map explorer = user.getPlayerInfoManager().getExplorer(); - if(explorer == null || explorer.size() == 0){ - continue; - } - List delayId = new ArrayList<>(); - for (Map.Entry keyVal:explorer.entrySet()){ - //到期探索 - if(keyVal.getValue().getSendEndTime()= TimeUtils.nowInt()){ - int teamForce = HeroLogic.getInstance().calTeamTotalForce(user,keyVal.getKey(), false); - keyVal.getValue().setPlayerHp(teamForce); - //打架 TODO - singleBattle(user,keyVal.getKey()); - } - //复活怪物 - if(keyVal.getValue().getEnemyHp() == 0 && keyVal.getValue().getEnemyReliveTime()>= TimeUtils.nowInt()){ - SExplore exploreConfig = STableManager.getConfig(SExplore.class).get(keyVal.getValue().getMapId()); - if(exploreConfig == null){ - continue; - } - //怪物的初始血量 - int mapMonsterForce = exploreConfig.getMonsterForce(); - keyVal.getValue().setEnemyHp(mapMonsterForce); - //打架 TODO - singleBattle(user,keyVal.getKey()); - } - } - for(int id :delayId){ - explorer.remove(id); - } - //探索队伍 map - //地图怪物 map<地图id,List<>()地图上所有的怪物(怪物id,刷新时间,血量)> + + //单场战斗 + public static void singleBattle(User user, int teamId) { + ExplorerInfo explorerInfo = user.getPlayerInfoManager().getExplorer().get(teamId); + if (explorerInfo == null) { + return; } - }catch (Exception e){ + //if(explorerInfo.getPlayerHp()!=0 && explorerInfo.getEnemyHp()!=0){ + while (explorerInfo.getPlayerHp() != 0 && explorerInfo.getEnemyHp() != 0) + { + int teamForce = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false); + SExplore exploreConfig = STableManager.getConfig(SExplore.class).get(explorerInfo.getMapId()); + if (exploreConfig == null) { + return; + } + //怪物的初始血量 + int mapMonsterForce = exploreConfig.getMonsterForce(); + float ratio = (float) teamForce / mapMonsterForce; + SExploreFight exploreFightData = SExploreFight.getConfigByFightDownAndFightUp(ratio); + if (exploreFightData == null) { + return; + } + //掉血比例 + float reduceRatio = exploreFightData.getLoseFight(); + //玩家掉血 + explorerInfo.setPlayerHp(explorerInfo.getPlayerHp() - (int) (explorerInfo.getPlayerHp() * reduceRatio)); + //怪物掉血 + explorerInfo.setEnemyHp(explorerInfo.getEnemyHp() - (int) (explorerInfo.getEnemyHp() * reduceRatio)); + //玩家死亡 设置重生时间 + if (explorerInfo.getPlayerHp() == 0) { + explorerInfo.setPlayerReliveTime(TimeUtils.nowInt() + 300); + } + //怪物死亡 设置重生时间 + if (explorerInfo.getEnemyHp() == 0) { + explorerInfo.setEnemyReliveTime(TimeUtils.nowInt() + 300); + //胜利添加掉落 + List dropList = explorerInfo.getDropList(); + if (dropList == null) { + dropList = new ArrayList<>(); + } + dropList.add(exploreConfig.getReward()); + } + } + + } + + //复活怪物 自己血量之类的 在线每分钟监听 + public static void recycleFight() { + try { + Set uids = OnlineUserManager.sessionMap.keySet(); + for (int uid : uids) { + User user = UserManager.getUser(uid); + Map explorer = user.getPlayerInfoManager().getExplorer(); + if (explorer == null || explorer.size() == 0) { + continue; + } + List delayId = new ArrayList<>(); + for (Map.Entry keyVal : explorer.entrySet()) { + //到期探索 + if (keyVal.getValue().getSendEndTime() < TimeUtils.now()) { + delayId.add(keyVal.getKey()); + } + //复活 + //复活玩家 + if (keyVal.getValue().getPlayerHp() == 0 && keyVal.getValue().getPlayerReliveTime() >= TimeUtils.nowInt()) { + int teamForce = HeroLogic.getInstance().calTeamTotalForce(user, keyVal.getKey(), false); + keyVal.getValue().setPlayerHp(teamForce); + //打架 TODO + singleBattle(user, keyVal.getKey()); + } + //复活怪物 + if (keyVal.getValue().getEnemyHp() == 0 && keyVal.getValue().getEnemyReliveTime() >= TimeUtils.nowInt()) { + SExplore exploreConfig = STableManager.getConfig(SExplore.class).get(keyVal.getValue().getMapId()); + if (exploreConfig == null) { + continue; + } + //怪物的初始血量 + int mapMonsterForce = exploreConfig.getMonsterForce(); + keyVal.getValue().setEnemyHp(mapMonsterForce); + //打架 TODO + singleBattle(user, keyVal.getKey()); + } + } + for (int id : delayId) { + explorer.remove(id); + } + //探索队伍 map + //地图怪物 map<地图id,List<>()地图上所有的怪物(怪物id,刷新时间,血量)> + } + } catch (Exception e) { e.printStackTrace(); } } - //怪物刷新 - //邮件结算 /** * 获取地图玩家信息 */ @@ -171,4 +206,11 @@ public class ExplorerMapLogic { .setHeadFrame(csPlayer.getHeadFrame()) .build(); } + + //怪物刷新 + //邮件结算 + + public static class Instance { + public final static ExplorerMapLogic instance = new ExplorerMapLogic(); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java index bd704e3a4..306782ee9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -99,6 +99,7 @@ public class FightDataUtil { SCHero hero = SCHero.getsCHero().get(sMonster.getMonsterId()); if(hero!=null){ unitData.set("job",hero.getJob()); + unitData.set("star",hero.getStar()); } if (unitSkill.length==1){ unitData.set("skill", getSkill(unitSkill[0],sMonster.getSkinId())); @@ -389,6 +390,7 @@ public class FightDataUtil { unitData.set("property", getProperty(property)); unitData.set("skinId",data.getSkinId()); unitData.set("job",hero.getJob()); + unitData.set("star",data.getStar()); return unitData; }