Example #1
0
    /// <summary>
    /// 初始化读取任务配置;
    /// </summary>
    /// <param name="path"></param>
    public void InitGuideTaskCfg(string path)
    {
        XmlDocument doc = new XmlDocument();

        doc.Load(path);
        XmlNodeList nodeList = doc.SelectSingleNode("root").ChildNodes;

        for (int i = 0; i < nodeList.Count; i++)
        {
            XmlElement ele = nodeList[i] as XmlElement;
            if (ele.GetAttributeNode("ID") == null)
            {
                continue;
            }
            int          ID  = Convert.ToInt32(ele.GetAttributeNode("ID").InnerText);//获得元素ele的属性ID的值,将它转换为整型
            GuideTaskCfg gtc = new GuideTaskCfg()
            {
                ID = ID
            };
            foreach (XmlElement e in ele.ChildNodes)
            {
                switch (e.Name)
                {
                case "coin":
                    gtc.coin = int.Parse(e.InnerText);
                    break;

                case "exp":
                    gtc.exp = int.Parse(e.InnerText);
                    break;
                }
            }
            guideTaskDic.Add(gtc.ID, gtc);
        }
    }
Example #2
0
    /// <summary>
    /// 获取任务
    /// </summary>
    /// <param name="taskId"></param>
    /// <returns></returns>
    public GuideTaskCfg GetGuideTaskData(int taskId)
    {
        GuideTaskCfg data = null;

        if (_dictAutoGuideCfgData.TryGetValue(taskId, out data))
        {
            return(data);
        }

        return(null);
    }
Example #3
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);
    }
Example #4
0
    private void InitGuideCfgData()
    {
        //开始解析xml文件
        XmlDocument doc = new XmlDocument();

        doc.Load(@"..\..\..\Configs\guide.xml");

        XmlNodeList nodeList = doc.SelectSingleNode("root").ChildNodes;

        for (int i = 0; i < nodeList.Count; i++)
        {
            XmlElement element = nodeList[i] as XmlElement;

            if (element.GetAttributeNode("ID") == null)
            {
                continue;
            }
            int id = Convert.ToInt32(element.GetAttributeNode("ID").InnerText);

            GuideTaskCfg guideData = new GuideTaskCfg
            {
                ID = id,
            };

            #region 遍历解析
            foreach (XmlElement elem in nodeList[i].ChildNodes)
            {
                switch (elem.Name)
                {
                case "coin":
                    guideData.gainCoin = int.Parse(elem.InnerText);
                    break;

                case "exp":
                    guideData.gainExp = int.Parse(elem.InnerText);
                    break;
                }
            }
            #endregion

            _dictAutoGuideCfgData.Add(id, guideData);
        }
    }
    /// <summary>
    /// 处理任务完成逻辑
    /// </summary>
    public void ReqGuide(MsgPack pack)
    {
        ReqGuide data = pack.msg.reqGuide;
        GameMsg  msg  = new GameMsg
        {
            cmd = (int)CMD.RspGuide,
        };

        PlayerData pd = cacheSvc.GetPlayerDataBySettion(pack.session);

        if (pd.guideid == data.guideid)//一次安全校验,如果客户端数据和服务端对不上,直接踢下线
        {
            //是否为智者引导任务
            if (pd.guideid == 1001)
            {
                TaskSys.Instance.CalcTaskPrgs(pd, 1);
            }
            GuideTaskCfg gtc = cfgSvc.GetGuideTaskCfgData(pd.guideid);
            //缓存数据变化
            pd.guideid++;
            pd.coin += gtc.coin;
            PECommon.CaculExp(pd, gtc.exp);
            if (cacheSvc.UpdatePlayerData(pd.id, pd))
            {
                msg.rspGuide = new RspGuide
                {
                    guideid = pd.guideid,
                    coin    = pd.coin,
                    exp     = pd.exp,
                    lv      = pd.lv
                };
            }
            else
            {
                msg.err = (int)ErrorCode.UpdateDbError;
            }
        }
        else
        {
            msg.err = (int)ErrorCode.ServerDataError;
        }
        pack.session.SendMsg(msg);
    }