예제 #1
0
        public void RequestBattleEnd(MsgPack msgPack)
        {
            RequestBattleEnd data = msgPack.Msg.RequestBattleEnd;

            NetMsg netMsg = new NetMsg
            {
                cmd = (int)Command.ResponseBattleEnd
            };

            //校验战斗是否合法
            if (data.IsWin)
            {
                if (data.CostTime > 0 && data.RestHp > 0)
                {
                    //获取战斗副本相应的奖励
                    MapCfg     mapCfg     = _resCfgSvc.GetMapData(data.BattleId);
                    PlayerData playerData = _cacheSvc.GetPlayerDataBySession(msgPack.Session);

                    TaskSys.Instance.CalcTaskPrangs(playerData, 2);
                    playerData.Coin    += mapCfg.Coin;
                    playerData.Crystal += mapCfg.Crystal;

                    PeRoot.CalcExp(playerData, mapCfg.Exp);

                    if (playerData.Battle == data.BattleId)
                    {
                        playerData.Battle += 1;
                    }

                    if (!_cacheSvc.UpdatePlayerData(playerData.Id, playerData))
                    {
                        netMsg.err = (int)ErrorCode.UpdateDbError;
                    }
                    else
                    {
                        ResponseBattleEnd battleEnd = new ResponseBattleEnd
                        {
                            IsWin    = data.IsWin,
                            Battle   = data.BattleId,
                            CostTime = data.CostTime,
                            RestHp   = data.RestHp,


                            Coin     = playerData.Coin,
                            Level    = playerData.Level,
                            Exp      = playerData.Exp,
                            Crystal  = playerData.Crystal,
                            BattleId = playerData.Battle,
                        };
                        netMsg.ResponseBattleEnd = battleEnd;
                    }
                }
            }
            else
            {
                netMsg.err = (int)ErrorCode.ClientDataError;
            }
            msgPack.Session.SendMsg(netMsg);
        }
예제 #2
0
        public void Init()
        {
            _cacheSvc = CacheSvc.Instance;
            _timeSvc  = TimeSvc.Instance;

            TimeSvc.Instance.AddTimeTask(CalcPowerAdd, PeRoot.PowerAddSpace, PETimeUnit.Minute, 0);
            PeRoot.Log("PowerSys Init Done.||体力恢复系统.");
        }
예제 #3
0
        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);
        }
예제 #4
0
        public void ClearOffLineData(ServerSession session)
        {
            PlayerData playerData = _cacheSvc.GetPlayerDataBySession(session);

            if (playerData != null)
            {
                playerData.Time = _timeSvc.GetNowTime();
                if (!_cacheSvc.UpdatePlayerData(playerData.Id, playerData))
                {
                    PeRoot.Log("Update offline time error", LogType.LogError);
                }
                _cacheSvc.AcctOffLine(session);
            }
        }
예제 #5
0
        public void RequestTaskReward(MsgPack msgPack)
        {
            RequestTask data   = msgPack.Msg.RequestTask;
            NetMsg      netMsg = new NetMsg
            {
                cmd = (int)Command.ResponseTask
            };
            PlayerData playerData = _cacheSvc.GetPlayerDataBySession(msgPack.Session);

            TaskRewardCfg  taskCfg  = _resCfgSvc.GetTaskData(data.TaskId);
            TaskRewardData taskData = CalcTaskRewardData(playerData, data.TaskId);

            if (taskData.Prangs == taskCfg.Count && !taskData.Tasked)
            {
                playerData.Coin += taskCfg.Coin;
                PeRoot.CalcExp(playerData, taskCfg.Exp);
                playerData.Diamond += taskCfg.Diamond;
                taskData.Tasked     = true;
                CalcTaskArray(playerData, taskData);

                if (!_cacheSvc.UpdatePlayerData(playerData.Id, playerData))
                {
                    netMsg.err = (int)ErrorCode.UpdateDbError;
                }
                else
                {
                    ResponseTask responseTask = new ResponseTask
                    {
                        Coin      = playerData.Coin,
                        Level     = playerData.Level,
                        Diamond   = playerData.Diamond,
                        Exp       = playerData.Exp,
                        TaskArray = playerData.TaskArray,
                    };
                    netMsg.ResponseTask = responseTask;
                }
            }
            else
            {
                netMsg.err = (int)ErrorCode.ClientDataError;
            }

            msgPack.Session.SendMsg(netMsg);
        }
예제 #6
0
        private void CalcPowerAdd(int timeId)
        {
            PeRoot.Log("All Online Player Calc Power Incress....");
            NetMsg netMsg = new NetMsg
            {
                cmd = (int)Command.PshPower
            };

            netMsg.PshPower = new PshPower();

            Dictionary <ServerSession, PlayerData> onLineDictionary = _cacheSvc.GetOnLine();

            foreach (var item in onLineDictionary)
            {
                PlayerData    playerData = item.Value;
                ServerSession session    = item.Key;

                int powerMax = PeRoot.GetPowerLimit(playerData.Level);
                if (playerData.Power >= powerMax)
                {
                    continue;
                }
                else
                {
                    playerData.Power += PeRoot.PowerAddCount;
                    playerData.Time   = _timeSvc.GetNowTime();
                    if (playerData.Power > powerMax)
                    {
                        playerData.Power = powerMax;
                    }
                }

                if (!_cacheSvc.UpdatePlayerData(playerData.Id, playerData))
                {
                    netMsg.err = (int)ErrorCode.UpdateDbError;
                }
                else
                {
                    netMsg.PshPower.Power = playerData.Power;
                    session.SendMsg(netMsg);
                }
            }
        }
예제 #7
0
 public void Init()
 {
     //服务层
     NetSvc.Instance.Init();
     //数据层
     DbMgr.Instance.Init();
     //缓存层
     CacheSvc.Instance.Init();
     //计时器
     TimeSvc.Instance.Init();
     //配置层
     ResCfgSvc.Instance.Init();
     //业务系统层
     PeRoot.Log("ServerRoot Init Done.||业务系统:", LogType.Info);
     LoginSys.Instance.Init();
     GuideSys.Instance.Init();
     StrongSys.Instance.Init();
     ChatSys.Instance.Init();
     BuySys.Instance.Init();
     PowerSys.Instance.Init();
     TaskSys.Instance.Init();
     BattleSys.Instance.Init();
     PeRoot.Log("等待客户端连接", LogType.Info);
 }
예제 #8
0
 public void Init()
 {
     _cacheSvc = CacheSvc.Instance;
     PeRoot.Log("ChatSys Init Done.||聊天业务系统.");
 }
예제 #9
0
 public void Init()
 {
     _cacheSvc = CacheSvc.Instance;
     _timeSvc  = TimeSvc.Instance;
     PeRoot.Log("LoginSys Init Done.||登入业务系统.");
 }
예제 #10
0
 public void Init()
 {
     _cacheSvc = CacheSvc.Instance;
     PeRoot.Log("BuySys Init Done.||购买业务系统.");
 }