diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java index 9c0138c7b..b21b74228 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java @@ -16,7 +16,7 @@ public class SGameSetting implements BaseConfig { private int initialEnergy; - private int energyRecoverSpeed; + private int[] energyRecoverSpeed; private int[] actionPowerRormula; @@ -59,7 +59,7 @@ public class SGameSetting implements BaseConfig { return initialEnergy; } - public int getEnergyRecoverSpeed() { + public int[] getEnergyRecoverSpeed() { return energyRecoverSpeed; } 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 f68dcf395..4c986c889 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 @@ -34,8 +34,6 @@ public class Hero extends MongoBase { private int breakId; - private int energy; - private int createTime ; private int lastUpdateEnergyTime; @@ -67,7 +65,6 @@ public class Hero extends MongoBase { createTime = (int)(System.currentTimeMillis()/1000); lastUpdateEnergyTime = createTime; breakId = 0; - energy = SGameSetting.getGameSetting().getInitialEnergy(); } public void upStar(int upStar) throws Exception { @@ -184,12 +181,7 @@ public class Hero extends MongoBase { return lastUpdateEnergyTime; } - public void updateEnergy(int energy,int updateTime) throws Exception { - updateString("energy",energy); - updateString("lastUpdateEnergyTime",energy); - this.energy = energy; - this.lastUpdateEnergyTime = updateTime; - } + public void setCreateTime(int createTime) throws Exception { updateString("createTime",createTime); @@ -201,10 +193,6 @@ public class Hero extends MongoBase { this.lastUpdateEnergyTime = lastUpdateEnergyTime; } - public int getEnergy() { - return energy; - } - public int getCreateTime() { return createTime; } 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 364b4ef05..9bbc2130b 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 @@ -2,8 +2,11 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; +import com.ljsd.jieling.config.SGameSetting; +import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.mongo.MongoKey; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.util.MathUtils; public class PlayerManager extends MongoBase { @@ -29,6 +32,10 @@ public class PlayerManager extends MongoBase { private int mapId; + private int energy; + + private int lastUpdateEnergyTime; + private long createTime; //创建时间 private String clientVersion; @@ -131,6 +138,12 @@ public class PlayerManager extends MongoBase { } public void setMapId(int mapId) throws Exception { + if(mapId == 0){ + setLastUpdateEnergyTime((int)(System.currentTimeMillis()/1000)); + } + if(mapId != 0 ){ + setLastUpdateEnergyTime(GlobalsDef.BATTLING); + } updateString("mapId", mapId); this.mapId = mapId; } @@ -153,4 +166,31 @@ public class PlayerManager extends MongoBase { this.clientVersion = clientVersion; } + public int getEnergy() { + if(lastUpdateEnergyTime != GlobalsDef.BATTLING && 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 35d7de1a3..b693b467b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -26,6 +26,8 @@ public class CBean2Proto { .setFamilyId(playerManager.getFamilyId()) .setHead(playerManager.getHead()) .setCurMapId((maxMapId == 0 && mapId == 0) ? 100 : mapId) + .setEnergy(playerManager.getEnergy()) + .setLastUpdateEnergyTime(playerManager.getLastUpdateEnergyTime()) .build(); return player; } @@ -46,8 +48,6 @@ public class CBean2Proto { if(equipByPositionMap!=null && !equipByPositionMap.isEmpty()){ equipList.addAll(equipByPositionMap.values()); } - //todo 只能自己才能检测恢复精力 - checkAndUpdateHeroEnergy(hero); return CommonProto.Hero .newBuilder() .setId(hero.getId()) @@ -56,26 +56,11 @@ public class CBean2Proto { .setStar(hero.getStar()) .setBreakId(hero.getBreakId()) .setCreateTime(hero.getCreateTime()) - .setEnergy(hero.getEnergy()) - .setLastUpdateEnergyTime(hero.getLastUpdateEnergyTime()) .addAllSkillIdList(hero.getSkillList()) .addAllEquipIdList(equipList) .build(); } - private static void checkAndUpdateHeroEnergy(Hero hero) throws Exception { - int baseEnergy = hero.getEnergy(); - if(hero.getLastUpdateEnergyTime() != GlobalsDef.BATTLING && baseEnergy