back_recharge
wangyuan 2019-03-28 20:51:17 +08:00
parent 6e413a7129
commit 271ffd9b3d
5 changed files with 48 additions and 38 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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<Integer, MapMission> 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;
}
}

View File

@ -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;
}
}

View File

@ -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;