diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index b068fba83..e7dcbc24f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -50,8 +50,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ } - boolean isInMap = user.getMapManager().getCurMapId() != 0; - CommonProto.Player player = CBean2Proto.getPlayer(userId, user.getPlayerInfoManager(), user.getPlayerInfoManager().getMapId(), user.getMapManager().getCurMapId(),isInMap); + CommonProto.Player player = CBean2Proto.getPlayer(userId, user.getPlayerInfoManager(), user.getPlayerInfoManager().getMapId(), user.getMapManager().getCurMapId(),user.getMapManager()); PlayerInfoProto.GetPlayerInfoResponse getPlayerInfoResponse = PlayerInfoProto.GetPlayerInfoResponse.newBuilder() .setPlayer(player) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 31147a298..3fe9dc17a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -67,8 +67,8 @@ public class MapLogic { public void enterMap(ISession iSession, int mapId, int teamId, MessageTypeProto.MessageType messageType) throws Exception { int uid = iSession.getUid(); User user = UserManager.getUser(uid); - int energy = user.getPlayerInfoManager().getEnergy(false); MapManager mapManager = user.getMapManager(); + int energy = mapManager.getEnergy(); if (teamId == 0) { LOGGER.info("enterMap() uid=>{} teamId =>{} ", uid, teamId); MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), ""); @@ -131,7 +131,7 @@ public class MapLogic { return; } int leftEnergy = energy - scMapConfig.getEnergyConfused(); - user.getPlayerInfoManager().setEnergy(leftEnergy); + mapManager.setEnergy(leftEnergy); mapManager.setCurMapId(mapId); initMap(mapManager, user); user.setMapManager(mapManager); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java index edd751d97..ff292d3c0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java @@ -4,8 +4,10 @@ package com.ljsd.jieling.handler.map; import com.ljsd.common.mogodb.MongoBase; import com.ljsd.jieling.config.SAccomplishmentConfig; +import com.ljsd.jieling.config.SGameSetting; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.util.MathUtils; import org.springframework.data.mongodb.core.mapping.Field; import java.util.*; @@ -39,6 +41,10 @@ public class MapManager extends MongoBase { private Map allMissionProgress = new ConcurrentHashMap<>(); + private int energy; + + private int lastUpdateEnergyTime; + public MapManager() { this.setRootCollection(User._COLLECTION_NAME); } @@ -62,6 +68,11 @@ public class MapManager extends MongoBase { } public void setCurMapId(int curMapId) throws Exception { + if(curMapId == 0){ + setLastUpdateEnergyTime((int)(System.currentTimeMillis()/1000)); + }else{ + setLastUpdateEnergyTime(GlobalsDef.BATTLING); + } updateString("curMapId", curMapId); this.curMapId = curMapId; } @@ -193,4 +204,34 @@ public class MapManager extends MongoBase { updateString( "allMissionProgress." + mapMission.getMapId(), mapMission); allMissionProgress.put(mapMission.getMapId(),mapMission); } + + + + public int getEnergy() { + if(curMapId==0 && energy< SGameSetting.getGameSetting().getInitialEnergy()){ + int updateTime = (int)(System.currentTimeMillis()/1000); + int[] energyRecoverSpeed = SGameSetting.getGameSetting().getEnergyRecoverSpeed(); + int addValue = (updateTime - lastUpdateEnergyTime)/60/energyRecoverSpeed[1] * energyRecoverSpeed[0]; + if(addValue != 0){ + int curEnergy = MathUtils.setBetweenWithMax(energy + addValue,0,SGameSetting.getGameSetting().getInitialEnergy()); + setEnergy(curEnergy); + setLastUpdateEnergyTime(updateTime); + } + } + return energy; + } + + public void setLastUpdateEnergyTime(int lastUpdateEnergyTime) { + updateString("lastUpdateEnergyTime", lastUpdateEnergyTime); + this.lastUpdateEnergyTime = lastUpdateEnergyTime; + } + + public void setEnergy(int energy) { + updateString("energy", energy); + this.energy = energy; + } + + public int getLastUpdateEnergyTime() { + return lastUpdateEnergyTime; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index ca7f2bb41..15a76f448 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -32,10 +32,6 @@ public class PlayerManager extends MongoBase { private int mapId; - private int energy; - - private int lastUpdateEnergyTime; - private long createTime; //创建时间 private String clientVersion; @@ -160,31 +156,4 @@ public class PlayerManager extends MongoBase { this.clientVersion = clientVersion; } - public int getEnergy(boolean isInMap) { - if(!isInMap && energy< SGameSetting.getGameSetting().getInitialEnergy()){ - int updateTime = (int)(System.currentTimeMillis()/1000); - int[] energyRecoverSpeed = SGameSetting.getGameSetting().getEnergyRecoverSpeed(); - int addValue = (updateTime - lastUpdateEnergyTime)/60/energyRecoverSpeed[1] * energyRecoverSpeed[0]; - if(addValue != 0){ - int curEnergy = MathUtils.setBetweenWithMax(energy + addValue,0,SGameSetting.getGameSetting().getInitialEnergy()); - setEnergy(curEnergy); - setLastUpdateEnergyTime(updateTime); - } - } - return energy; - } - - public void setLastUpdateEnergyTime(int lastUpdateEnergyTime) { - updateString("lastUpdateEnergyTime", lastUpdateEnergyTime); - this.lastUpdateEnergyTime = lastUpdateEnergyTime; - } - - public void setEnergy(int energy) { - updateString("energy", energy); - this.energy = energy; - } - - public int getLastUpdateEnergyTime() { - return lastUpdateEnergyTime; - } } 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 a524ed511..fd5d101d7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.util; import com.ljsd.jieling.config.SGameSetting; import com.ljsd.jieling.config.SMonsterConfig; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.handler.map.MapMission; import com.ljsd.jieling.handler.map.TemporaryItems; import com.ljsd.jieling.logic.dao.*; @@ -17,7 +18,7 @@ import java.util.concurrent.CopyOnWriteArrayList; public class CBean2Proto { - public static CommonProto.Player getPlayer(int uid, PlayerManager playerManager, int maxMapId, int mapId,boolean isInMap) { + public static CommonProto.Player getPlayer(int uid, PlayerManager playerManager, int maxMapId, int mapId, MapManager mapManager) { CommonProto.Player player = CommonProto.Player .newBuilder() .setUid(uid) @@ -28,8 +29,8 @@ public class CBean2Proto { .setFamilyId(playerManager.getFamilyId()) .setHead(playerManager.getHead()) .setCurMapId((maxMapId == 0 && mapId == 0) ? 100 : mapId) - .setEnergy(playerManager.getEnergy(isInMap)) - .setLastUpdateEnergyTime(playerManager.getLastUpdateEnergyTime()) + .setEnergy(mapManager.getEnergy()) + .setLastUpdateEnergyTime(mapManager.getLastUpdateEnergyTime()) .setServerTime((int)(System.currentTimeMillis()/1000)) .build(); return player;