/// <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); } }
/// <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); }
/// <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); }
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); }