コード例 #1
0
ファイル: ChatSys.cs プロジェクト: hoppyNaut/DarkGod
    public void SndChat(PackMsg pack)
    {
        SndChat      data         = pack.msg.sndChat;
        PlayerData   pd           = cacheSvc.GetPlayerDataCache(pack.session);
        PshTaskProgs pshTaskProgs = null;

        //更新任务进度
        pshTaskProgs = TaskSys.Instance.CalcTaskProgs(pd, 6);

        GameMsg msg = new GameMsg {
            cmd     = (int)CMD.PshChat,
            pshChat = new PshChat
            {
                name = pd.name,
                msg  = data.msg
            }
        };

        if (pshTaskProgs != null)
        {
            msg.pshTaskProgs = pshTaskProgs;
        }

        //广播所有在线客户端
        List <ServerSession> sessionList = cacheSvc.GetOnLineServerSessions();

        foreach (ServerSession session in sessionList)
        {
            session.SendMsg(msg);
        }
    }
コード例 #2
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);
    }
コード例 #3
0
ファイル: AutoGuideSys.cs プロジェクト: hoppyNaut/DarkGod
    /// <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);
    }
コード例 #4
0
    public void ReqFBFightEnd(PackMsg pack)
    {
        ReqFBFightEnd data    = pack.msg.reqFBFightEnd;
        ServerSession session = pack.session;

        GameMsg msg = new GameMsg
        {
            cmd = (int)(CMD.RspFBFFightEnd),
        };
        PlayerData playerData = cacheSvc.GetPlayerDataCache(session);
        MapCfg     mapCfg     = cfgSvc.GetMapCfg(data.fbid);

        if (data.isWin)
        {
            if (data.costTime > 0 && data.restHp > 0)
            {
                TaskSys.Instance.CalcTaskProgs(playerData, 2);

                PECommon.UpdateExp(playerData, mapCfg.exp);
                playerData.coin    += mapCfg.coin;
                playerData.crystal += mapCfg.crystal;
                if (data.fbid == playerData.fuben)
                {
                    playerData.fuben++;
                }

                if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
                {
                    msg.err = (int)ErrorCode.UpdateDBError;
                }
                else
                {
                    RspFBFightEnd rspFBFightEnd = new RspFBFightEnd
                    {
                        isWin    = data.isWin,
                        fbid     = data.fbid,
                        restHp   = data.restHp,
                        costTime = data.costTime,
                        exp      = playerData.exp,
                        lv       = playerData.lv,
                        coin     = playerData.coin,
                        crystal  = playerData.crystal,
                        fuben    = playerData.fuben,
                    };

                    msg.rspFBFightEnd = rspFBFightEnd;
                }
            }
        }
        else
        {
            msg.err = (int)ErrorCode.UpdateDBError;
        }
        session.SendMsg(msg);
    }
コード例 #5
0
ファイル: NetSvc.cs プロジェクト: hoppyNaut/DarkGod
 public void Update()
 {
     if (msgPackQueue.Count > 0)
     {
         PECommon.Log("msgPackCount:" + msgPackQueue.Count);
         lock (obj)
         {
             PackMsg pack = msgPackQueue.Dequeue();
             HandOutMsg(pack);
         }
     }
 }
コード例 #6
0
    public void ReqTakeTaskReward(PackMsg pack)
    {
        ReqTakeTaskReward data    = pack.msg.reqTakeTaskReward;
        ServerSession     session = pack.session;
        GameMsg           msg     = new GameMsg
        {
            cmd = (int)CMD.RspTakeTaskReward,
        };
        int        rewardID   = data.rid;
        PlayerData playerData = cacheSvc.GetPlayerDataCache(session);

        TaskRewardCfg  trc = cfgSvc.GetTaskRewardCfg(rewardID);
        TaskRewardData trd = GetTaskRewardData(playerData, rewardID);

        //安全验证
        if (trd.progress == trc.count && !trd.taked)
        {
            playerData.coin += trc.coin;
            PECommon.UpdateExp(playerData, trc.exp);
            trd.taked = true;
            //更新任务进度数据
            CalcTaskArr(playerData, trd);

            if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
            {
                msg.err = (int)ErrorCode.UpdateDBError;
            }
            else
            {
                msg.rspTakeTaskReward = new RspTakeTaskReward
                {
                    coin    = playerData.coin,
                    exp     = playerData.exp,
                    lv      = playerData.lv,
                    hp      = playerData.hp,
                    taskArr = playerData.taskArr,
                };
                session.SendMsg(msg);
            }
        }
        else
        {
            msg.err = (int)ErrorCode.ClientDataError;
        }
    }
コード例 #7
0
    /// <summary>
    /// 登录请求
    /// </summary>
    /// <param name="msg"></param>
    public void ReqLogin(PackMsg pack)
    {
        ReqLogin req = pack.gameMsg.reqLogin;
        //当前账号是否上线
        //已经上线  返回错误提示
        //未上线
        //账号是否存在
        //存在  检测密码
        //不存在 创建默认账号密码(应该是存入数据库之类的)
        //回应客户端
        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.RspLogin,
        };

        //当前账号是否上线
        if (cacheService.isAccountOnLine(req.account))
        {
            //已经上线  返回错误提示
            msg.err = (int)ErrorCode.AccIsOnLine;
        }
        else
        {
            //未上线
            PlayerData _playdata = cacheService.GetPlayData(req.account, req.password);
            //账号是否存在
            if (_playdata == null)
            {
                //为空 说明密码错误
                msg.err = (int)ErrorCode.PassError;
            }
            else
            {
                msg.rspLogin = new RspLogin
                {
                    playerData = _playdata
                };
            }
            //缓存账号数据
            cacheService.CachePlayerInfo(req.account, pack.serverSession, _playdata);
        }
        //回应客户端
        pack.serverSession.SendMsg(msg);
    }
コード例 #8
0
ファイル: NetSvc.cs プロジェクト: hoppyNaut/DarkGod
    //消息包处理
    public void HandOutMsg(PackMsg pack)
    {
        switch ((CMD)pack.msg.cmd)
        {
        case CMD.ReqLogin:
            LoginSys.Instance.ReqLogin(pack);
            break;

        case CMD.ReqRename:
            LoginSys.Instance.ReqRename(pack);
            break;

        case CMD.ReqTask:
            AutoGuideSys.Instance.ReqTask(pack);
            break;

        case CMD.ReqStrong:
            StrongSys.Instance.ReqStrong(pack);
            break;

        case CMD.SndChat:
            ChatSys.Instance.SndChat(pack);
            break;

        case CMD.ReqPurchase:
            PurchaseSys.Instance.ReqPurchase(pack);
            break;

        case CMD.ReqTakeTaskReward:
            TaskSys.Instance.ReqTakeTaskReward(pack);
            break;

        case CMD.ReqFBFight:
            FuBenSys.Instance.ReqFBFight(pack);
            break;

        case CMD.ReqFBFightEnd:
            FuBenSys.Instance.ReqFBFightEnd(pack);
            break;
        }
    }
コード例 #9
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);
    }
コード例 #10
0
ファイル: LoginSys.cs プロジェクト: hoppyNaut/DarkGod
    //回应重命名请求
    public void ReqRename(PackMsg pack)
    {
        ReqRename     data    = pack.msg.reqRename;
        ServerSession session = pack.session;

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

        //判断当前名字是否存在
        //若存在,返回错误码
        if (cacheSvc.IsNameExist(data.name))
        {
            msg.err = (int)ErrorCode.NameIsExist;
        }
        //若不存在,更新缓存以及数据库,返回客户端
        else
        {
            PlayerData playerData = cacheSvc.GetPlayerDataCache(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);
    }
コード例 #11
0
    /// <summary>
    /// 回应强化请求
    /// </summary>
    public void ReqStrong(PackMsg pack)
    {
        ReqStrong     data    = pack.msg.reqStrong;
        ServerSession session = pack.session;

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

        PlayerData playerData = cacheSvc.GetPlayerDataCache(session);

        if (playerData.strongArr[data.pos] == data.starlv)
        {
            int       nextStarLv    = data.starlv + 1;
            StrongCfg nextStrongCfg = cfgSvc.GetStrongCfg(data.pos, nextStarLv);

            if (playerData.lv < nextStrongCfg.minlv)
            {
                msg.err = (int)ErrorCode.LackLevel;
            }
            else if (playerData.coin < nextStrongCfg.coin)
            {
                msg.err = (int)ErrorCode.LackCoin;
            }
            else if (playerData.crystal < nextStrongCfg.crystal)
            {
                msg.err = (int)ErrorCode.LackCrystal;
            }
            else
            {
                //更新任务进度
                PshTaskProgs pshTaskProgs = TaskSys.Instance.CalcTaskProgs(playerData, 3);

                playerData.hp    += nextStrongCfg.addhp;
                playerData.ad    += nextStrongCfg.addhurt;
                playerData.ap    += nextStrongCfg.addhurt;
                playerData.addef += nextStrongCfg.adddef;
                playerData.apdef += nextStrongCfg.adddef;
                playerData.strongArr[data.pos] += 1;

                playerData.coin    -= nextStrongCfg.coin;
                playerData.crystal -= nextStrongCfg.crystal;

                if (!cacheSvc.UpdatePlayerData(playerData.id, playerData))
                {
                    msg.err = (int)ErrorCode.UpdateDBError;
                }
                else
                {
                    RspStrong rspStrong = new RspStrong
                    {
                        pos       = nextStrongCfg.pos,
                        starlv    = nextStrongCfg.starlv,
                        addhp     = nextStrongCfg.addhp,
                        addhurt   = nextStrongCfg.addhurt,
                        adddef    = nextStrongCfg.adddef,
                        minlv     = nextStrongCfg.minlv,
                        coin      = nextStrongCfg.coin,
                        crystal   = nextStrongCfg.crystal,
                        strongArr = playerData.strongArr
                    };
                    msg.rspStrong = rspStrong;
                    if (pshTaskProgs != null)
                    {
                        msg.pshTaskProgs = pshTaskProgs;
                    }
                }
            }
        }
        else
        {
            msg.err = (int)ErrorCode.ServerDataError;
        }
        pack.session.SendMsg(msg);
    }
コード例 #12
0
ファイル: LoginSys.cs プロジェクト: hoppyNaut/DarkGod
    public void ReqLogin(PackMsg pack)
    {
        ReqLogin      data    = pack.msg.reqLogin;
        ServerSession session = pack.session;
        //判断当前账号是否上线
        GameMsg msg = new GameMsg
        {
            cmd = (int)CMD.RspLogin,
        };

        //已上线,返回错误信息
        if (cacheSvc.IsAcctOnLine(data.acct))
        {
            msg.err = (int)ErrorCode.AcctIsOnLine;
        }
        else
        {
            //未上线:
            //账号是否存在
            PlayerData _playerData = cacheSvc.GetPlayerDate(data.acct, data.pwd);
            if (_playerData == null)
            {
                //账号存在 但密码错误
                msg.err = (int)ErrorCode.WrongPwd;
            }
            //存在 返回账号数据
            else
            {
                //计算离线增加体力
                int  stamina          = _playerData.stamina;
                long now              = timeSvc.GetNowTime();
                long milliSecondsSpan = now - _playerData.time;
                int  growStamina      = (int)(milliSecondsSpan / (1000 * 60 * PECommon.StaminaAddSpace)) * PECommon.StaminaAddCount;
                //PECommon.Log(milliSecondsSpan / 60000+ " " + milliSecondsSpan.ToString() + " " + growStamina.ToString());
                if (growStamina > 0)
                {
                    int maxStamina = PECommon.GetStaminaLimitByLv(_playerData.lv);
                    if (_playerData.stamina < maxStamina)
                    {
                        _playerData.stamina += growStamina;
                        if (_playerData.stamina > maxStamina)
                        {
                            _playerData.stamina = maxStamina;
                        }
                    }
                }

                if (stamina != _playerData.stamina)
                {
                    cacheSvc.UpdatePlayerData(_playerData.id, _playerData);
                }

                msg.rspLogin = new RspLogin
                {
                    //将账号数据存到回应包里
                    playerData = _playerData
                };
                //将账号数据存储进缓存层
                cacheSvc.StoreIdOnline(data.acct, session, _playerData);
            }
        }

        //回应客户端
        pack.session.SendMsg(msg);
    }
コード例 #13
0
 /// <summary>
 /// 重命名请求
 /// </summary>
 /// <param name="pack"></param>
 public void ReqRename(PackMsg pack)
 {
 }