public void ReqLogin(MsgPack pack) { ReqLogin data = pack.msg.reqLogin; // 判断当前账号是否已经上线 GameMsg msg = new GameMsg { cmd = (int)CMD.RspLogin, rspLogin = new RspLogin() }; // 已上线:返回错误信息 if (cacheSev.IsAccountOnline(data.account)) { msg.err = (int)ErrorCode.AccountIsOnline; } else // 未上线: { // 账号是否存在并检测密码 PlayerData pd = cacheSev.GetPlayerData(data.account, data.pass); if (pd == null) { msg.err = (int)ErrorCode.WrongPass; } else { int power = pd.power; long milliseconds = timeSev.GetNowTime() - pd.time; int addPower = (int)(milliseconds / (1000 * 60 * NETCommon.PowerAddSpace)) * NETCommon.PowerAddCount; if (addPower > 0) { int powerMax = NETCommon.GetPowerLimit(pd.lv); int targetPower = pd.power + addPower; pd.power = pd.power < powerMax ? (targetPower > powerMax ? powerMax : targetPower) : powerMax; } if (power != pd.power) { cacheSev.UpdatePlayerData(pd); } msg.rspLogin = new RspLogin { playerData = pd }; // 缓存账号数据 cacheSev.CacheAccountOnline(data.account, pack.session, pd); } } // 回应客户端 pack.session.SendMsg(msg); }
private void CalcPowerAdd(int id) { GameMsg msg = new GameMsg { cmd = (int)CMD.PshPower, pshPower = new PshPower() }; // 向所有在线玩家推送 Dictionary <ServerSession, PlayerData> onlineDic = cacheSev.GetOnlinePlayers(); foreach (var pair in onlineDic) { PlayerData pd = pair.Value; ServerSession session = pair.Key; int powerMax = NETCommon.GetPowerLimit(pd.lv); if (pd.power >= powerMax) { continue; } pd.power += NETCommon.PowerAddCount; if (pd.power > powerMax) { pd.power = powerMax; } pd.time = timeSev.GetNowTime(); if (!cacheSev.UpdatePlayerData(pd)) { msg.err = (int)ErrorCode.UpdateDBError; } else { msg.pshPower.power = pd.power; } session.SendMsg(msg); } }