コード例 #1
0
ファイル: LoginSystem.cs プロジェクト: WhitePetal/ARPG
        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);
        }
コード例 #2
0
        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);
            }
        }