public void ReqLogin(MsgPack pack) { ReqLogin data = pack.msg.reqLogin; GameMsg msg = new GameMsg() { cmd = (int)CMD.RspLogin, }; //如果账号已经登入 if (cacheSvc.IsAcctOnline(data.acct)) { msg.err = (int)ErrorCode.AcctIsOnline; } else { PlayerData pd = cacheSvc.GetPlayerData(data.acct, data.pass); if (pd == null) { //存在,密码错误 msg.err = (int)ErrorCode.WrongPass; } else { //登入成功 //计算体力最大值 int power = pd.power; int powerMax = PECommon.GetPowerLimit(pd.lv); if (pd.power < powerMax) { long nowTime = timerSvc.GetNowTime(); long millisecendsCount = nowTime - pd.time; //计算玩家离线时间回复体力值 int addPower = (int)(millisecendsCount / (1000 * 60 * PECommon.PowerAddSpace)) * PECommon.PowerAddCount; if (addPower > 0) { pd.power += addPower; if (pd.power > powerMax) { pd.power = powerMax; } } } if (pd.power != power) { cacheSvc.UpdataPlayerData(pd.id, pd); } msg.rspLogin = new RspLogin() { playerData = pd }; cacheSvc.AcctOnline(data.acct, pack.session, pd); } } pack.session.SendMsg(msg); }
public void ReqLogin(MsgPack pack) { RequestLogin data = pack.Msg.RequestLogin; //账号是否上线 NetMsg netMsg = new NetMsg { cmd = (int)Command.ResponseLogin }; if (_cacheSvc.IsAcctOnline(data.Acct)) { //己上线:返回错误信息 netMsg.err = (int)ErrorCode.AcctIsOnline; } else { //账号不在线 || 账号是否已经存在 PlayerData playerData = _cacheSvc.GetPlayerData(data.Acct, data.Pass); if (playerData == null) { //账号存在,密码错误 netMsg.err = (int)ErrorCode.WrongPass; } else { #region 计算离线玩家体力值 int power = playerData.Power; long timeNow = _timeSvc.GetNowTime(); long milliseconds = timeNow - playerData.Time; int addPower = (int)(milliseconds / (1000 * 60 * PeRoot.PowerAddSpace)) * PeRoot.PowerAddCount; if (addPower > 0) { int powerMax = PeRoot.GetPowerLimit(playerData.Level); if (playerData.Power < powerMax) { playerData.Power += addPower; if (playerData.Power > powerMax) { playerData.Power = powerMax; } } } if (power != playerData.Power) { _cacheSvc.UpdatePlayerData(playerData.Id, playerData); } #endregion netMsg.ResponseLogin = new ResponseLogin { PlayerData = playerData }; //缓存账号数据 _cacheSvc.AcctOnLine(data.Acct, pack.Session, playerData); } } pack.Session.SendMsg(netMsg); }