Пример #1
0
    public void ReqFBFight(MsgPack pack)
    {
        ReqFBFight data = (ReqFBFight)pack.msg;

        SCPacketBase msg   = new RspFBFight();
        PlayerData   pd    = cacheSvc.GetPlayerDataBySession(pack.session);
        int          power = cfgSvc.GetMapCfg(data.Fbid).power;

        if (pd.Fuben < data.Fbid)
        {
            msg.error = (int)ErrorCode.ClientDataError;
        }
        else if (pd.Power < power)
        {
            msg.error = (int)ErrorCode.LackPower;
        }
        else
        {
            pd.Power -= power;
            if (cacheSvc.UpdatePlayerData(pd.Id, pd))
            {
                RspFBFight rspFBFight = new RspFBFight {
                    Fbid  = data.Fbid,
                    Power = pd.Power
                };
                msg = rspFBFight;
            }
            else
            {
                msg.error = (int)ErrorCode.UpdateDBError;
            }
        }
        pack.session.SendMsg(msg);
    }
Пример #2
0
    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;
                long now          = timerSvc.GetNowTime();
                long milliseconds = now - pd.time;
                int  addPower     = (int)(milliseconds / (1000 * 60 * PECommon.PowerAddSpace)) * PECommon.PowerAddCount;
                if (addPower > 0)
                {
                    int powerMax = PECommon.GetPowerLimit(pd.lv);
                    if (pd.power < powerMax)
                    {
                        pd.power += addPower;
                        if (pd.power > powerMax)
                        {
                            pd.power = powerMax;
                        }
                    }
                }

                if (power != pd.power)
                {
                    cacheSvc.UpdatePlayerData(pd.id, pd);
                }

                msg.rspLogin = new RspLogin
                {
                    playerData = pd
                };
                // 缓存账号数据
                cacheSvc.AcctOnLine(data.acct, pack.session, pd);
            }
        }
        // 回应客户端
        pack.session.SendMsg(msg);
    }
Пример #3
0
    public void RequsetLogin(MsgPack packMsg)
    {
        RequestLoginMsg data = packMsg._msg.reqLoginMsg;
        //当前账号是否已经上线
        NetMsg svrMsg = new NetMsg
        {
            cmd = (int)MsgCommand.Cmd_RspLogin,
        };

        //1. 已上线,返回一个信息
        if (cacheSvc.IsAccountOnLine(data._account))
        {
            svrMsg.err = (int)ErroCode.Error_AccountIsOnline;
        }
        else
        {
            //2. 未上线:
            //账号存在:检测密码
            PlayerData playerData = cacheSvc.GetPlayerData(data._account, data._pwd);
            if (playerData == null)
            {
                svrMsg.err = (int)ErroCode.Error_WrongPwd;
            }
            else
            {
                //计算离线体力增值
                int  curPower         = playerData.power;
                long nowTime          = TimerSvc.Instance.GetNowTime();
                long timeInterval     = nowTime - playerData.time;
                int  increasePowerVal = (int)(timeInterval / (1000 * 60 * Constants.cPowerAddInterval)) * Constants.cPowerAddValPerChange;
                if (increasePowerVal > 0)
                {
                    int maxPowerVal = CommonTools.CalcPowerLimit(playerData.lv);

                    if (playerData.power < maxPowerVal)
                    {
                        playerData.power += increasePowerVal;
                        playerData.power  = (playerData.power > maxPowerVal) ? maxPowerVal : playerData.power;
                    }
                }

                if (playerData.power != curPower)
                {
                    cacheSvc.UpdatePlayerData(playerData.id, playerData);
                }

                //不存在:创建默认的账号密码
                svrMsg.rspLoginMsg = new ResponseLoginMsg {
                    _playerData = playerData
                };
                //存储到缓存中
                cacheSvc.SaveAccount(data._account, packMsg._session, playerData);
            }
        }

        //3.响应客户端的请求
        packMsg._session.SendMsg(svrMsg);
    }
Пример #4
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);
        }
Пример #5
0
    public void ReqLogin(MsgPack pack)
    {
        ReqLogin data = (ReqLogin)pack.msg;
        //当前账号是否已经上线
        SCPacketBase msg = new RspLogin();

        if (cacheSvc.IsAcctOnLine(data.Acct))
        {
            //己上线:返回错误信息
            msg.error = (int)ErrorCode.AcctIsOnline;
        }
        else
        {
            //未上线:
            //账号是否存在
            PlayerData pd = cacheSvc.GetPlayerData(data.Acct, data.Pass);
            if (pd == null)
            {
                //存在,密码错误
                msg.error = (int)ErrorCode.WrongPass;
            }
            else
            {
                //计算离线体力增长
                int  power        = pd.Power;
                long now          = timerSvc.GetNowTime();
                long milliseconds = now - pd.Time;
                int  addPower     = (int)(milliseconds / (1000 * 60 * KDCommon.PowerAddSpace)) * KDCommon.PowerAddCount;
                if (addPower > 0)
                {
                    int powerMax = KDCommon.GetPowerLimit(pd.Lv);
                    if (pd.Power < powerMax)
                    {
                        pd.Power += addPower;
                        if (pd.Power > powerMax)
                        {
                            pd.Power = powerMax;
                        }
                    }
                }

                if (power != pd.Power)
                {
                    cacheSvc.UpdatePlayerData(pd.Id, pd);
                }

                msg = new RspLogin {
                    PlayerData = pd
                };
                //缓存账号数据
                cacheSvc.AcctOnline(data.Acct, pack.session, pd);
            }
        }
        //回应客户端
        pack.session.SendMsg(msg);
    }
Пример #6
0
    /// <summary>
    /// 响应登录的请求
    /// </summary>
    /// <param name="pack">消息包</param>
    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.pwd); // 获取玩家数据
            if (pd == null)                                              // 账号和密码不匹配
            {
                msg.err = (int)ErrorCode.WrongPwd;
            }
            else   // 登录成功
                   // 计算离线体力增长
            {
                int  power        = pd.power;                                                                            // 当前体力
                long now          = timerSvc.GetNowTime();
                long milliseconds = now - pd.time;                                                                       // 距离上一次下线的时间间隔
                int  addPower     = (int)(milliseconds / (1000 * 60 * PECommon.PowerAddSpace)) * PECommon.PowerAddCount; // 需要增加的体力值
                if (addPower > 0)
                {
                    int powerMax = PECommon.GetPowerLimit(pd.lv);
                    if (pd.power < powerMax)
                    {
                        pd.power += addPower;
                        if (pd.power > powerMax)
                        {
                            pd.power = powerMax;
                        }
                    }
                }

                if (power != pd.power)
                {
                    cacheSvc.UpdatePlayerData(pd.id, pd);
                }
                // 响应客户端的数据
                msg.rspLogin = new RspLogin {
                    playerData = pd // 返回玩家数据
                };
                // 缓存账号数据
                cacheSvc.AcctOnLine(data.acct, pack.session, pd);
            }
        }
        // 回应客户端
        pack.session.SendMsg(msg);
    }
Пример #7
0
    public void ReqLogin(MsgPack pack)
    {
        ReqLogin data = pack.gameMsg.val as 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 powerMax = Common.GetPowerLimit(pd.lv);
                if (pd.power < powerMax)
                {
                    int addPower = PowerSys.GetAddPowerOffline(TimerSvc.Instance.GetNowTime() - pd.time);
                    if (addPower + pd.power >= powerMax)
                    {
                        pd.power = powerMax;
                    }
                    else
                    {
                        pd.power += addPower;
                    }
                }

                if (!cacheSvc.UpdatePlayerData(pd.id, pd))
                {
                    msg.err = (int)ErrorCode.UpdateDBError;
                }
                else
                {
                    msg.val = new RspLogin
                    {
                        playerData = pd
                    };
                    cacheSvc.AcctOnline(data.acct, pack.session, pd);
                }
            }
        }

        pack.session.SendMsg(msg);
    }
Пример #8
0
    /// <summary>
    /// 处理登录注册请求
    /// </summary>
    /// <param name="msg"></param>
    public void ReqLogin(MsgPack pack)
    {
        ReqLogin data = pack.msg.reqLogin;
        //给客户端的回应消息
        GameMsg rspMsg = new GameMsg()
        {
            cmd      = (int)CMD.RspLogin,
            rspLogin = new RspLogin()
            {
            },
        };

        //当前账号已上线 产生错误码
        if (cacheSvc.IsAcctOnLine(data.acct))
        {
            rspMsg.err = (int)ErrorCode.AcctIsOnline;
        }
        //当前账号未上线
        else
        {
            PlayerData pd = cacheSvc.GetPlayerData(data.acct, data.pass);
            if (pd != null)//账密匹配 产生玩家数据(这里包含了创建账号)
            {
                //更新玩家体力值
                int  power = pd.power;
                long time  = pd.time;
                long now   = TimerSvc.Instance.GetNowTime();
                pd.time = now;
                long millSeconds = now - time;
                int  addPower    = (int)(millSeconds / (1000 * 1 * PECommon.PowerAddMinute) * PECommon.PowerAddCount);
                if (addPower > 0)
                {
                    int powerMax = PECommon.GetPowerLimit(pd);
                    pd.power = power + addPower > powerMax ? powerMax : power + addPower;
                }
                if (pd.power > power)
                {
                    cacheSvc.UpdatePlayerData(pd.id, pd);
                }
                //将此账号添加到字典中
                cacheSvc.AddAcctOnline(data.acct, pack.session, pd);
                rspMsg.rspLogin.playerData = pd;
            }
            else//账密不匹配 产生错误码
            {
                rspMsg.err = (int)ErrorCode.ErrorPass;
            }
        }

        //回应客户端
        pack.session.SendMsg(rspMsg);
    }
Пример #9
0
    public void ReqRename(MsgPack pack)
    {
        ReqRename data = pack.msg.reqRename;
        GameMsg   msg  = new GameMsg
        {
            cmd = (int)CMD.RspRename
        };

        if (cacheSvc.IsAcctOnLine(data.name))
        {
            //名称存在:返回错误码
            msg.err = (int)ErrorCode.NameIsExist;
        }
        else
        {
            //不存在:更新缓存  以及数据库,再返回给客户端
            PlayerData playerData = cacheSvc.GetPlayerDataBySession(pack.session);
            playerData.name = data.name;
            if (!cacheSvc.UpdatePlayerData(playerData.id, playerData)) //更新数据库出错
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                msg.rspRename = new RspRename
                {
                    name = data.name
                };
            }
        }
        pack.session.SendMsg(msg);
    }
Пример #10
0
    /// <summary>
    /// 处理请求升级逻辑
    /// </summary>
    /// <param name="pack"></param>
    public void ReqStrong(MsgPack pack)
    {
        ReqStrong data = pack.msg.reqStrong;
        GameMsg   msg  = new GameMsg
        {
            cmd = (int)CMD.RspStrong,
        };
        PlayerData pd          = cacheSvc.GetPlayerDataBySettion(pack.session);
        int        curtStartLv = pd.strongArr[data.pos];//请求升级的武器
        StrongCfg  nextSd      = cfgSvc.GetStrongCfg(data.pos, curtStartLv + 1);

        //数据校验(这是必须的,如果客户端均已校验,则此校验结果可以作为玩家是否作弊的依据)
        if (pd.lv < nextSd.minlv)
        {
            msg.err = (int)ErrorCode.LackLevel;
        }
        else if (pd.coin < nextSd.coin)
        {
            msg.err = (int)ErrorCode.LackCoin;
        }
        else if (pd.crystal < nextSd.crystal)
        {
            msg.err = (int)ErrorCode.LackCrystal;
        }
        else//校验通过
        {
            //资产变化
            pd.coin                -= nextSd.coin;
            pd.crystal             -= nextSd.crystal;
            pd.strongArr[data.pos] += 1;
            //属性变化
            pd.hp    += nextSd.addhp;
            pd.ad    += nextSd.addhurt;
            pd.ap    += nextSd.addhurt;
            pd.addef += nextSd.adddef;
            pd.apdef += nextSd.adddef;
            //任务进度更新
            TaskSys.Instance.CalcTaskPrgs(pd, 3);
            //数据库更新
            if (cacheSvc.UpdatePlayerData(pd.id, pd))
            {
                msg.rspStrong = new RspStrong
                {
                    coin      = pd.coin,
                    crystal   = pd.crystal,
                    hp        = pd.hp,
                    ad        = pd.ad,
                    ap        = pd.ap,
                    addef     = pd.addef,
                    apdef     = pd.apdef,
                    strongArr = pd.strongArr
                };
            }
            else
            {
                msg.err = (int)ErrorCode.UpdateDbError;
            }
        }
        pack.session.SendMsg(msg);
    }
Пример #11
0
        public void ReqRename(MsgPack pack)
        {
            ReqRename data = pack.msg.reqRename;
            GameMsg   msg  = new GameMsg
            {
                cmd = (int)CMD.RspRename
            };

            if (cacheSvc.IsNameExist(data.name))
            {
                msg.err = (int)ErrorCode.NameIsExist;
            }
            else
            {
                PlayerData playerData = cacheSvc.GetPlayerDataSession(pack.session);
                playerData.name = data.name;
                if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
                {
                    msg.err = (int)ErrorCode.UpdateDBError;
                }
                else
                {
                    msg.rspRename = new RspRename
                    {
                        name = data.name
                    };
                }
            }
            pack.session.SendMsg(msg);
        }
Пример #12
0
    public void ReqStrong(MsgPack pack)
    {
        ReqStrong data = pack.gameMsg.val as ReqStrong;
        GameMsg   msg  = new GameMsg()
        {
            cmd = (int)CMD.RspStrong
        };

        PlayerData pd         = cacheSvc.GetPlayerDataBySession(pack.session);
        int        curtStarLv = pd.strongArr[data.pos];
        StrongCfg  nextSD     = cfgSvc.GetStrongData(data.pos, curtStarLv + 1);

        if (pd.lv < nextSD.minlv)
        {
            msg.err = (int)ErrorCode.LackLevel;
        }
        else if (pd.coin < nextSD.coin)
        {
            msg.err = (int)ErrorCode.LackCoin;
        }
        else if (pd.crystal < nextSD.crystal)
        {
            msg.err = (int)ErrorCode.LackCrystal;
        }
        else
        {
            TaskSys.Instance.CalcTaskPrgs(pd, 3);

            pd.coin                -= nextSD.coin;
            pd.crystal             -= nextSD.crystal;
            pd.strongArr[data.pos] += 1;
            pd.hp    += nextSD.addhp;
            pd.ad    += nextSD.addhurt;
            pd.ap    += nextSD.addhurt;
            pd.addef += nextSD.adddef;
            pd.apdef += nextSD.adddef;
        }

        if (cacheSvc.UpdatePlayerData(pd.id, pd))
        {
            msg.val = new RspStrong()
            {
                coin    = pd.coin,
                crystal = pd.crystal,
                hp      = pd.hp,
                ad      = pd.ad,
                ap      = pd.ap,
                addef   = pd.addef,
                apdef   = pd.apdef,
                strong  = pd.strongArr
            };
        }
        else
        {
            msg.err = (int)ErrorCode.UpdateDBError;
        }

        pack.session.SendMsg(msg);
    }
Пример #13
0
    public void ReqBuy(MsgPack pack)
    {
        ReqBuy  data = pack.msg.reqBuy;
        GameMsg msg  = new GameMsg {
            cmd = (int)CMD.RspBuy
        };

        PlayerData playerData = cacheSvc.GetPlayerDataBySession(pack.session);

        if (playerData.diamond < data.cost)
        {
            msg.err = (int)ErrorCode.LackDiamond;
        }
        else
        {
            playerData.diamond -= data.cost;
            PshTaskPrgs pshTaskPrgs = null;
            switch (data.type)
            {
            case 0:

                playerData.power += 100;
                // 任务进度更新
                pshTaskPrgs = TaskSys.Instance.GetCalcTaskPrgs(playerData, 4);
                break;

            case 1:

                playerData.coin += 1000;
                // 任务进度更新
                pshTaskPrgs = TaskSys.Instance.GetCalcTaskPrgs(playerData, 5);
                break;
            }

            if (cacheSvc.UpdatePlayerData(playerData.id, playerData) == false)
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                RspBuy rspBuy = new RspBuy
                {
                    type    = data.type,
                    diamond = playerData.diamond,
                    coin    = playerData.coin,
                    power   = playerData.power
                };

                msg.rspBuy = rspBuy;

                // 并包处理
                msg.pshTaskPrgs = pshTaskPrgs;
            }
        }


        pack.session.SendMsg(msg);
    }
Пример #14
0
    public void ReqPurchase(PackMsg pack)
    {
        ReqPurchase   data    = pack.msg.reqPurchase;
        ServerSession session = pack.session;

        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.RspPurchase
        };

        PlayerData playerData = cacheSvc.GetPlayerDataCache(session);

        //钻石不够
        if (playerData.diamond < data.costDiamond)
        {
            msg.err = (int)ErrorCode.LackCrystal;
        }
        else
        {
            playerData.diamond -= data.costDiamond;
            PshTaskProgs pshTaskPrgs = null;
            switch (data.buyType)
            {
            case 0:
                //更新任务进度
                pshTaskPrgs         = TaskSys.Instance.CalcTaskProgs(playerData, 4);
                playerData.stamina += 100;
                break;

            case 1:
                //更新任务进度
                pshTaskPrgs      = TaskSys.Instance.CalcTaskProgs(playerData, 5);
                playerData.coin += 100;
                break;
            }

            if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                RspPurchase rspPurchase = new RspPurchase
                {
                    buyType = data.buyType,
                    diamond = playerData.diamond,
                    coin    = playerData.coin,
                    stamina = playerData.stamina
                };
                //并包优化
                msg.rspPurchase  = rspPurchase;
                msg.pshTaskProgs = pshTaskPrgs;
            }
        }
        session.SendMsg(msg);
    }
Пример #15
0
        public void RequestStrong(MsgPack msgPack)
        {
            RequestStrong data   = msgPack.Msg.RequestStrong;
            NetMsg        netMsg = new NetMsg
            {
                cmd = (int)Command.RspStrong
            };
            PlayerData playerData     = CacheSvc.GetPlayerDataBySession(msgPack.Session);
            int        curtStartLevel = playerData.StrongArray[data.pos];
            StrongCfg  nextStrong     = ResCfgSvc.Instance.GetStrongCfg(data.pos, curtStartLevel + 1);

            if (playerData.Level < nextStrong.MinLevel)
            {
                netMsg.err = (int)ErrorCode.LackLevel;
            }
            else if (playerData.Coin < nextStrong.Coin)
            {
                netMsg.err = (int)ErrorCode.LackCoin;
            }
            else if (playerData.Crystal < nextStrong.Crystal)
            {
                netMsg.err = (int)ErrorCode.LackCrystal;
            }
            else
            {
                TaskSys.Instance.CalcTaskPrangs(playerData, 3);
                playerData.Coin    -= nextStrong.Coin;
                playerData.Crystal -= nextStrong.Crystal;
                playerData.StrongArray[data.pos] += 1;

                playerData.Hp        += nextStrong.AddHp;
                playerData.Ad        += nextStrong.AddHurt;
                playerData.AdDefense += nextStrong.AddDefense;
                playerData.ApDefense += nextStrong.AddDefense;
            }
            if (!CacheSvc.UpdatePlayerData(playerData.Id, playerData))
            {
                netMsg.err = (int)ErrorCode.UpdateDbError;
            }
            else
            {
                netMsg.ResponseStrong = new ResponseStrong
                {
                    Coin        = playerData.Coin,
                    Crystal     = playerData.Crystal,
                    Hp          = playerData.Hp,
                    Ad          = playerData.Ad,
                    Ap          = playerData.Ap,
                    AdDefense   = playerData.AdDefense,
                    ApDefense   = playerData.ApDefense,
                    StrongArray = playerData.StrongArray,
                };
            }
            msgPack.Session.SendMsg(netMsg);
        }
Пример #16
0
    /// <summary>
    /// 回应任务完成请求
    /// </summary>
    public void ReqTask(PackMsg pack)
    {
        ReqTask       data    = pack.msg.reqTask;
        ServerSession session = pack.session;

        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.RspTask
        };

        PlayerData   playerData   = cacheSvc.GetPlayerDataCache(pack.session);
        AutoGuideCfg AutoGuideCfg = cfgSvc.GetAutoGuideCfg(data.taskID);

        //更新任务ID
        if (playerData.taskid == data.taskID)
        {
            PshTaskProgs pshTaskProgs = null;
            //更新任务智者点拨进度
            if (playerData.taskid == 1001)
            {
                pshTaskProgs = TaskSys.Instance.CalcTaskProgs(playerData, 1);
            }
            playerData.taskid++;
            //更新玩家数据
            playerData.coin += AutoGuideCfg.coin;
            PECommon.UpdateExp(playerData, AutoGuideCfg.exp);

            if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                RspTask rspTask = new RspTask
                {
                    taskID = playerData.taskid,
                    coin   = playerData.coin,
                    exp    = playerData.exp,
                    lv     = playerData.lv,
                    hp     = playerData.hp,
                };
                //发送回客户端
                msg.rspTask = rspTask;
                if (pshTaskProgs != null)
                {
                    msg.pshTaskProgs = pshTaskProgs;
                }
            }
        }
        else
        {
            msg.err = (int)ErrorCode.ServerDataError;
        }
        pack.session.SendMsg(msg);
    }
Пример #17
0
    public void ReqFight(MsgPack packMsg)
    {
        RequestCopyerFight data = packMsg._msg.reqCopyerFight;

        NetMsg netMsg = new NetMsg
        {
            cmd = (int)MsgCommand.Cmd_RspCopyerFight,
        };

        PlayerData playerData = cacheSvc.GetPlayerDataBySession(packMsg._session);
        int        needPower  = cfgSvc.GetMapCfgData(data.chapterID).costPower;

        if (playerData.curChapter < data.chapterID)
        {
            netMsg.err = (int)ErroCode.Error_ClientData;
        }
        else
        {
            if (needPower <= playerData.power)
            {
                playerData.power -= needPower;
                if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
                {
                    netMsg.err = (int)ErroCode.Error_UpdateDB;
                }
                else
                {
                    netMsg.rspCopyerFight = new ResponseCopyerFight
                    {
                        chapterID = data.chapterID,
                        power     = playerData.power
                    };
                }
            }
            else
            {
                netMsg.err = (int)ErroCode.Error_PowerLack;
            }

            packMsg._session.SendMsg(netMsg);
        }
    }
Пример #18
0
    public void ReqFBFight(MsgPack pack)
    {
        ReqFBFight data = pack.msg.reqFBFight;

        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.RspFBFight
        };

        PlayerData playerData = cacheSvc.GetPlayerDataBySession(pack.session);
        int        power      = cfgSvc.GetMapCfg(data.fbId).power;

        // 判断发过来的副本id是否合法
        if (data.fbId > playerData.fuben)
        {
            msg.err = (int)ErrorCode.ClientDataError;
        }
        else if (playerData.power < power)
        {
            msg.err = (int)ErrorCode.LackPower;
        }
        else
        {
            playerData.power -= power;
            if (cacheSvc.UpdatePlayerData(playerData.id, playerData) == false)
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                RspFBFight rspFBFight = new RspFBFight {
                    fbId  = data.fbId,
                    power = playerData.power
                };

                msg.rspFBFight = rspFBFight;
            }
        }

        pack.session.SendMsg(msg);
    }
Пример #19
0
        public void RequestBuy(MsgPack msgPack)
        {
            RequestBuy data   = msgPack.Msg.RequestBuy;
            NetMsg     netMsg = new NetMsg
            {
                cmd = (int)Command.ResponseBuy
            };

            PlayerData playerData = _cacheSvc.GetPlayerDataBySession(msgPack.Session);

            if (playerData.Diamond < data.DiamondPay)
            {
                netMsg.err = (int)ErrorCode.LockDiamond;
            }
            else
            {
                playerData.Diamond -= data.DiamondPay;
                PshTask pshTask = null;
                switch (data.Type)
                {
                case 0:
                    playerData.Power += 100;
                    pshTask           = TaskSys.Instance.GetTaskPrangs(playerData, 4);
                    break;

                case 1:
                    playerData.Coin += 1000;
                    pshTask          = TaskSys.Instance.GetTaskPrangs(playerData, 5);
                    break;
                }

                if (!_cacheSvc.UpdatePlayerData(playerData.Id, playerData))
                {
                    netMsg.err = (int)ErrorCode.UpdateDbError;
                }
                else
                {
                    ResponseBuy responseBuy = new ResponseBuy
                    {
                        Type    = data.Type,
                        Diamond = playerData.Diamond,
                        Coin    = playerData.Coin,
                        Power   = playerData.Power,
                    };

                    //并包处理
                    netMsg.ResponseBuy = responseBuy;

                    netMsg.PshTask = pshTask;
                }
            }
            msgPack.Session.SendMsg(netMsg);
        }
Пример #20
0
    public void ReqBuy(MsgPack pack)
    {
        ReqBuy     data = (ReqBuy)pack.msg;
        RspBuy     msg  = new RspBuy();
        PlayerData pd   = cacheSvc.GetPlayerDataBySession(pack.session);

        if (pd.Diamond < data.Cost)
        {
            msg.error = (int)ErrorCode.LackDiamond;
        }
        else
        {
            pd.Diamond -= data.Cost;
            PshTaskPrgs pshTaskPrgs = null;
            switch (data.Type)
            {
            case 0:
                pd.Power += 100;
                //任务进度数据更新
                pshTaskPrgs = TaskSys.Instance.GetTaskPrgs(pd, 4);
                break;

            case 1:
                pd.Coin += 1000;
                //任务进度数据更新
                pshTaskPrgs = TaskSys.Instance.GetTaskPrgs(pd, 5);
                break;
            }

            if (!cacheSvc.UpdatePlayerData(pd.Id, pd))
            {
                msg.error = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                RspBuy rspBuy = new RspBuy {
                    Type   = data.Type,
                    Dimond = pd.Diamond,
                    Coin   = pd.Coin,
                    Power  = pd.Power
                };
                msg = rspBuy;

                //并包处理
                //msg.pshTaskPrgs = pshTaskPrgs;
                if (pshTaskPrgs != null)
                {
                    pack.session.SendMsg(pshTaskPrgs);
                }
            }
        }
        pack.session.SendMsg(msg);
    }
Пример #21
0
    public void ReqFBFight(PackMsg pack)
    {
        ReqFBFight    data    = pack.msg.reqFBFight;
        ServerSession session = pack.session;

        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.RspFBFight,
        };

        PlayerData playerData = cacheSvc.GetPlayerDataCache(session);
        MapCfg     mapCfg     = cfgSvc.GetMapCfg(data.fbid);

        if (playerData.fuben < data.fbid)
        {
            msg.err = (int)ErrorCode.ClientDataError;
        }
        else if (playerData.stamina < mapCfg.costStamina)
        {
            msg.err = (int)ErrorCode.LackStamia;
        }
        else
        {
            playerData.stamina -= mapCfg.costStamina;
            if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                RspFBFight rspFBFight = new RspFBFight
                {
                    fbid    = data.fbid,
                    stamina = playerData.stamina,
                };
                msg.rspFBFight = rspFBFight;
            }
        }
        session.SendMsg(msg);
    }
Пример #22
0
    public void ReqGuide(MsgPack pack)
    {
        ReqGuide data = pack.msg.reqGuide;

        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.RspGuide
        };

        PlayerData pd = cacheSvc.GetPlayerDataBySession(pack.session);
        GuideCfg   gc = cfgSvc.GetGuideCfg(data.guideid);

        // 更新引导ID
        if (pd.guideid == data.guideid)
        {
            // 检测是否是智者点拨任务
            if (pd.guideid == 1001)
            {
                TaskSys.Instance.CalcTaskPrgs(pd, 1);
            }


            pd.guideid += 1;

            // 更新玩家数据
            pd.coin += gc.coin;
            Common.CalcExp(pd, gc.exp);

            // 数据更新数据库
            if (cacheSvc.UpdatePlayerData(pd.id, pd) == false)
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                msg.rspGuide = new RspGuide
                {
                    guideid = pd.guideid,
                    coin    = pd.coin,
                    lv      = pd.lv,
                    exp     = pd.exp
                };
            }
        }
        else
        {
            msg.err = (int)ErrorCode.ServerDataError;
        }

        pack.session.SendMsg(msg);
    }
Пример #23
0
        public void RequestBattle(MsgPack msgPack)
        {
            RequestBattle data = msgPack.Msg.RequestBattle;

            NetMsg netMsg = new NetMsg
            {
                cmd = (int)Command.ResponseBattle
            };
            PlayerData playerData = _cacheSvc.GetPlayerDataBySession(msgPack.Session);
            int        power      = _resCfgSvc.GetMapData(data.BattleId).Power;

            if (playerData.Battle < data.BattleId)
            {
                netMsg.err = (int)ErrorCode.ClientDataError;
            }
            else if (playerData.Power < power)
            {
                netMsg.err = (int)ErrorCode.LackPower;
            }
            else
            {
                playerData.Power -= power;
                if (_cacheSvc.UpdatePlayerData(playerData.Id, playerData))
                {
                    ResponseBattle responseBattle = new ResponseBattle
                    {
                        BattleId = data.BattleId,
                        Power    = playerData.Power,
                    };
                    netMsg.ResponseBattle = responseBattle;
                }
                else
                {
                    netMsg.err = (int)ErrorCode.UpdateDbError;
                }
            }
            msgPack.Session.SendMsg(netMsg);
        }
Пример #24
0
    public void ReqDungeonFight(MsgPack pack)
    {
        ReqDungeonFight data = pack.msg.reqDungeonFight;

        GameMsg msg = new GameMsg {
            cmd = (int)CMD.RspDungeonFight
        };

        PlayerData pd    = cacheSvc.GetPlayerDataBySession(pack.session);
        int        power = cfgSvc.GetMapCfg(data.dungeonId).power;

        if (pd.dungeon < data.dungeonId)   // 关卡进度是否合法
        {
            msg.err = (int)ErrorCode.ClientDataError;
        }
        else if (pd.power < power)
        {
            msg.err = (int)ErrorCode.LackPower;
        }
        else
        {
            pd.power -= power;
            if (cacheSvc.UpdatePlayerData(pd.id, pd))
            {
                RspDungeonFight rspDungeonFight = new RspDungeonFight {
                    dungeonId = data.dungeonId,
                    power     = pd.power
                };
                msg.rspDungeonFight = rspDungeonFight;
            }
            else
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
        }
        pack.session.SendMsg(msg);
    }
Пример #25
0
    /// <summary>
    /// 发送任务引导消息
    /// </summary>
    /// <param name="packMsg"></param>
    public void RequestGuideTaskMessage(MsgPack packMsg)
    {
        RequestGuideTask taskData = packMsg._msg.reqGuideTask;
        NetMsg           netMsg   = new NetMsg
        {
            cmd = (int)MsgCommand.Cmd_RspGuideTask,
        };

        PlayerData   playerData = cacheSvc.GetPlayerDataBySession(packMsg._session);
        GuideTaskCfg cfgData    = cfgSvc.GetGuideTaskData(playerData.guideid);

        //更新任务ID
        if (playerData.guideid == taskData.taskId)
        {
            //智者点拨任务
            if (playerData.guideid == 1001)
            {
                TaskRewardSys.Instance.CalcTaskProgress(playerData, Constants.cTask_WisemanTellme);
            }

            //玩家数据更新
            playerData.guideid += 1;
            playerData.coin    += cfgData.gainCoin;
            CommonTools.CalcExp(playerData, cfgData.gainExp);

            //任务奖励更新到数据库
            if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
            {
                netMsg.err = (int)ErroCode.Error_UpdateDB;
            }
            else
            {
                netMsg.rspGuideTask = new ResponseGuideTask
                {
                    taskId   = playerData.guideid,
                    gainCoin = playerData.coin,
                    roleLv   = playerData.lv,
                    gainExp  = playerData.exp
                };
            }
        }
        else
        {
            netMsg.err = (int)ErroCode.Error_ServerData;
        }

        //发给客户端
        packMsg._session.SendMsg(netMsg);
    }
Пример #26
0
    public void ReqFBFight(MsgPack pack)
    {
        ReqFBFight data = pack.msg.reqFBFight;

        GameMsg msg = new GameMsg {
            cmd = (int)CMD.RspFBFight,
        };

        PlayerData pd    = cacheSvc.GetPlayerDataBySession(pack.session);
        int        power = cfgSvc.GetMapCfg(data.fbid).power;

        if (pd.fuben < data.fbid)
        {
            msg.err = (int)ErrorCode.ClientDataError;
        }
        else if (pd.power < power)
        {
            msg.err = (int)ErrorCode.LackPower;
        }
        else
        {
            pd.power -= power;
            if (cacheSvc.UpdatePlayerData(pd.id, pd))
            {
                msg.rspFBFight = new RspFBFight {
                    fbid  = data.fbid,
                    power = pd.power,
                };
            }
            else
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
        }
        pack.session.SendMsg(msg);
    }
Пример #27
0
    private void CalcStaminaGrow(int timeID)
    {
        //计算体力增长
        PECommon.Log("All  Onlion Player Calc Power Increase....");
        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.PshStamina
        };

        msg.pshStamina = new PshStamina();

        //更新在线玩家体力
        Dictionary <ServerSession, PlayerData> onLineSessionDic = cacheSvc.GetOnlineSessionDic();

        foreach (ServerSession session in onLineSessionDic.Keys)
        {
            PlayerData playerData = onLineSessionDic[session];
            int        maxStamina = PECommon.GetStaminaLimitByLv(playerData.lv);
            if (playerData != null)
            {
                if (playerData.stamina < maxStamina)
                {
                    playerData.stamina += PECommon.StaminaAddCount;
                    playerData.time     = TimerSvc.Instance.GetNowTime();
                    if (playerData.stamina > maxStamina)
                    {
                        playerData.stamina = maxStamina;
                    }
                }

                if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
                {
                    msg.err = (int)ErrorCode.UpdateDBError;
                }
                else
                {
                    msg.pshStamina.stamina = playerData.stamina;
                    session.SendMsg(msg);
                }
            }
            else
            {
                msg.err = (int)ErrorCode.ServerDataError;
            }
        }

        //更新离线玩家体力
    }
Пример #28
0
    public void ReqBuy(MsgPack pack)
    {
        ReqBuy  data = pack.msg.reqBuy;
        GameMsg msg  = new GameMsg {
            cmd = (int)CMD.RspBuy
        };
        PlayerData pd = cacheSvc.GetPlayerDataBySession(pack.session);

        if (pd.diamond < data.cost)
        {
            msg.err = (int)ErrorCode.LackDiamond;
        }
        else
        {
            pd.diamond -= data.cost;
            PshTaskPrgs pshTaskPrgs = null;
            switch (data.type)
            {
            case 0:
                pd.power += 100;
                //TaskSys.Instance.GetTaskPrgs(pd, 4); // 不让他发送了,网络并包流量优化
                pshTaskPrgs = TaskSys.Instance.GetTaskPrgs(pd, 4);     // 任务进度数据更新
                break;

            case 1:
                pd.coin    += 1000;
                pshTaskPrgs = TaskSys.Instance.GetTaskPrgs(pd, 5);     // 任务进度数据更新
                break;
            }
            if (!cacheSvc.UpdatePlayerData(pd.id, pd))
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                RspBuy rspBuy = new RspBuy {
                    type   = data.type,
                    dimond = pd.diamond,
                    coin   = pd.coin,
                    power  = pd.power
                };
                msg.rspBuy = rspBuy;
                // 并包处理
                msg.pshTaskPrgs = pshTaskPrgs;
            }
        }
        pack.session.SendMsg(msg); // 发送的就是合并后的两个包
    }
Пример #29
0
    /// <summary>
    /// 在线玩家计算体力增长与消息推送
    /// </summary>
    /// <param name="tid"></param>
    public void CalcPowerAdd(int tid)
    {
        //计算体力增长
        PECommon.Log("All Online Player Calc Power Incress....");
        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.PshPower
        };

        msg.pshPower = new PshPower();

        //所有在线玩家获得实时的体力增长推送数据
        Dictionary <ServerSession, PlayerData> onlineDic = cacheSvc.GetOnlineCache();

        foreach (var item in onlineDic)
        {
            PlayerData    pd       = item.Value;
            ServerSession session  = item.Key;
            int           power    = pd.power;
            int           powerMax = PECommon.GetPowerLimit(pd);
            if (pd.power >= powerMax)
            {
                continue;
            }
            else
            {
                pd.power += PECommon.PowerAddCount;
                pd.time   = timerSvc.GetNowTime();
                if (pd.power > powerMax)
                {
                    pd.power = powerMax;
                }
            }
            if (pd.power != power)
            {
                pd.time = timerSvc.GetNowTime();
                if (!cacheSvc.UpdatePlayerData(pd.id, pd))
                {
                    msg.err = (int)ErrorCode.UpdateDbError;
                }
                else
                {
                    msg.pshPower.power = pd.power;
                    session.SendMsg(msg);//推送给在线玩家
                }
            }
        }
    }
Пример #30
0
    public void ReqTakeTaskReward(MsgPack pack)
    {
        ReqTakeTaskReward data = pack.Msg.reqTakeTaskReward;

        GameMsg msg = new GameMsg()
        {
            cmd = (int)CMD.RspTakeTaskReward
        };

        PlayerData pd = cacheSvc.GetPlayerDataBySession(pack.Session);

        TaskRewardCfg  trc = cfgSvc.GetTaskRewardCfg(data.tid);
        TaskRewardData trd = CalcTaskRewardData(pd, data.tid);


        if (trd.prgs == trc.count && !trd.taked)
        {
            pd.coin += trc.coin;
            PECommon.CalcExp(pd, trc.exp);
            trd.taked = true;
            //更新任务进度数据
            CalcTaskArr(pd, trd);

            if (!cacheSvc.UpdatePlayerData(pd.id, pd))
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                RspTakeTaskReward rspTakeTaskReward = new RspTakeTaskReward()
                {
                    coin    = pd.coin,
                    lv      = pd.lv,
                    exp     = pd.exp,
                    taskArr = pd.taskArr
                };
                msg.rspTakeTaskReward = rspTakeTaskReward;
            }
        }
        else
        {
            msg.err = (int)ErrorCode.ClientDataError;
        }

        pack.Session.SendMsg(msg);
    }