private void HandleEraTaskAccident() { if (this.EraDataDict.Count > 0) { this.RuntimeData.CurFastEraStage = 1; this.RuntimeData.CurFastEraStateProcess = 0; foreach (KuaFuData <KFEraData> item_era in this.EraDataDict.Values) { int calProcess = 0; foreach (EraTaskData item_task in item_era.V.EraTaskList) { EraTaskConfig taskConfig = null; lock (this.RuntimeData.Mutex) { if (!this.RuntimeData.EraTaskConfigDict.TryGetValue(item_task.TaskID, out taskConfig)) { continue; } } if (taskConfig.EraStage == (int)item_era.V.EraStage) { if (this.CheckTaskComplete(item_task, taskConfig)) { calProcess += taskConfig.Reward; } } } if (calProcess != item_era.V.EraStageProcess || item_era.V.EraStageProcess > 100) { LogManager.WriteLog(LogTypes.Analysis, string.Format("HandleEraTaskAccident JunTuanId:{0} Stage:{1} BeforeProcess:{2} AfterProcess:{3}", new object[] { item_era.V.JunTuanID, item_era.V.EraStage, item_era.V.EraStageProcess, calProcess }), null, true); item_era.V.EraStageProcess = Math.Min(calProcess, 100); this.SaveEraData(item_era.V, false); } this.HandleFastEraStage(item_era.V); } } }
private bool CheckTaskComplete(EraTaskData taskData, EraTaskConfig taskConfig) { bool taskcomplete = true; for (int dataidx = 0; dataidx < taskConfig.CompletionCondition.Count; dataidx++) { int conditionNum = taskConfig.CompletionCondition[dataidx].Value; switch (dataidx) { case 0: taskcomplete &= (taskData.TaskVal1 >= conditionNum); break; case 1: taskcomplete &= (taskData.TaskVal2 >= conditionNum); break; case 2: taskcomplete &= (taskData.TaskVal3 >= conditionNum); break; } } return(taskcomplete); }
public void InitConfig() { try { lock (this.RuntimeData.Mutex) { string fileName = "Config/EraUI.xml"; string fullPathFileName = KuaFuServerManager.GetResourcePath(fileName, KuaFuServerManager.ResourcePathTypes.GameRes); this.RuntimeData.EraUIConfigDict.Load(fullPathFileName, null); fileName = "Config/EraTask.xml"; fullPathFileName = KuaFuServerManager.GetResourcePath(fileName, KuaFuServerManager.ResourcePathTypes.GameRes); this.RuntimeData.EraTaskConfigDict.Clear(); XElement xml = ConfigHelper.Load(fullPathFileName); IEnumerable <XElement> xmlItems = xml.Elements(); foreach (XElement xmlItem in xmlItems) { EraTaskConfig data = new EraTaskConfig(); data.ID = (int)ConfigHelper.GetElementAttributeValueLong(xmlItem, "ID", 0L); data.EraID = (int)ConfigHelper.GetElementAttributeValueLong(xmlItem, "EraID", 0L); data.EraStage = (int)ConfigHelper.GetElementAttributeValueLong(xmlItem, "EraStage", 0L); data.Reward = (int)ConfigHelper.GetElementAttributeValueLong(xmlItem, "Reward", 0L); string tempValue = ConfigHelper.GetElementAttributeValue(xmlItem, "CompletionCondition", ""); string[] tempFields = tempValue.Split(new char[] { '|' }); foreach (string item in tempFields) { string[] strkvp = item.Split(new char[] { ',' }); if (strkvp.Length == 2) { int goodsid = Convert.ToInt32(strkvp[0]); int num = Convert.ToInt32(strkvp[1]); data.CompletionCondition.Add(new KeyValuePair <int, int>(goodsid, num)); } } this.RuntimeData.EraTaskConfigDict[data.ID] = data; } fileName = "Config/EraReward.xml"; fullPathFileName = KuaFuServerManager.GetResourcePath(fileName, KuaFuServerManager.ResourcePathTypes.GameRes); this.RuntimeData.EraAwardConfigDict.Clear(); xml = ConfigHelper.Load(fullPathFileName); xmlItems = xml.Elements(); foreach (XElement xmlItem in xmlItems) { EraAwardConfigBase data2 = new EraAwardConfigBase(); data2.ID = (int)ConfigHelper.GetElementAttributeValueLong(xmlItem, "ID", 0L); data2.EraID = (int)ConfigHelper.GetElementAttributeValueLong(xmlItem, "EraID", 0L); data2.AwardType = (int)ConfigHelper.GetElementAttributeValueLong(xmlItem, "Type", 0L); string StartTime = ConfigHelper.GetElementAttributeValue(xmlItem, "StartTime", ""); if (!string.IsNullOrEmpty(StartTime)) { DateTime.TryParse(StartTime, out data2.StartTime); } string EndTime = ConfigHelper.GetElementAttributeValue(xmlItem, "EndTime", ""); if (!string.IsNullOrEmpty(EndTime)) { DateTime.TryParse(EndTime, out data2.EndTime); } this.RuntimeData.EraAwardConfigDict[data2.ID] = data2; } } } catch (Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); } }
private bool HandleAddEraProcess(KuaFuData <KFEraData> data, EraTaskConfig taskConfig) { bool result; if (taskConfig.EraStage != (int)data.V.EraStage) { result = false; } else { int oldEraStageProcess = data.V.EraStageProcess; int oldEraStage = (int)data.V.EraStage; data.V.EraStageProcess = Math.Min(data.V.EraStageProcess + taskConfig.Reward, 100); if (data.V.EraStageProcess == 100 && data.V.EraStage < 4) { data.V.EraStage = (byte)Math.Min((int)(data.V.EraStage + 1), 4); data.V.EraStageProcess = 0; AsyncDataItem evItem = new AsyncDataItem(KuaFuEventTypes.JunTuanEraStage, new object[] { data.V.JunTuanID }); ClientAgentManager.Instance().BroadCastAsyncEvent(GameTypes.JunTuan, evItem, 0); data.V.EraTimePointList.Add(TimeUtil.NowDateTime()); } if (data.V.EraStageProcess == oldEraStageProcess && (int)data.V.EraStage == oldEraStage) { result = false; } else { if (data.V.EraStageProcess == 100 && data.V.EraStage == 4) { data.V.EraTimePointList.Add(TimeUtil.NowDateTime()); } this.HandleFastEraStage(data.V); bool needSort = false; KFEraRankData rankData = this.EraRankList.V.Find((KFEraRankData x) => x.JunTuanID == data.V.JunTuanID); if (null != rankData) { needSort = true; rankData.JunTuanID = data.V.JunTuanID; rankData.EraStage = data.V.EraStage; rankData.EraStageProcess = data.V.EraStageProcess; rankData.RankTime = TimeUtil.NowDateTime(); } else if (this.EraRankList.V.Count < 5) { needSort = true; rankData = new KFEraRankData(); rankData.JunTuanID = data.V.JunTuanID; rankData.EraStage = data.V.EraStage; rankData.EraStageProcess = data.V.EraStageProcess; rankData.RankTime = TimeUtil.NowDateTime(); this.EraRankList.V.Add(rankData); } else { KFEraRankData minRankData = this.EraRankList.V[this.EraRankList.V.Count - 1]; if (data.V.EraStage > minRankData.EraStage || (data.V.EraStage == minRankData.EraStage && data.V.EraStageProcess > minRankData.EraStageProcess)) { needSort = true; minRankData.JunTuanID = data.V.JunTuanID; minRankData.EraStage = data.V.EraStage; minRankData.EraStageProcess = data.V.EraStageProcess; minRankData.RankTime = TimeUtil.NowDateTime(); } } if (needSort) { this.EraRankList.V.Sort(delegate(KFEraRankData left, KFEraRankData right) { int result2; if (left.EraStage > right.EraStage) { result2 = -1; } else if (left.EraStage < right.EraStage) { result2 = 1; } else if (left.EraStageProcess > right.EraStageProcess) { result2 = -1; } else if (left.EraStageProcess < right.EraStageProcess) { result2 = 1; } else if (left.RankTime < right.RankTime) { result2 = -1; } else if (left.RankTime > right.RankTime) { result2 = 1; } else { result2 = 0; } return(result2); }); for (int loop = 0; loop < this.EraRankList.V.Count; loop++) { this.EraRankList.V[loop].RankValue = loop + 1; } TimeUtil.AgeByNow(ref this.EraRankList.Age); } result = true; } } return(result); }
public bool EraDonate(int juntuanid, int taskid, int var1, int var2, int var3) { bool result; lock (this.Mutex) { if (0 == this.RuntimeData.CurrentEraID) { result = false; } else { KuaFuData <KFEraData> data = null; if (!this.EraDataDict.TryGetValue(juntuanid, out data)) { result = false; } else { EraTaskConfig taskConfig = null; lock (this.RuntimeData.Mutex) { if (!this.RuntimeData.EraTaskConfigDict.TryGetValue(taskid, out taskConfig)) { return(false); } } if (taskConfig.EraID != this.RuntimeData.CurrentEraID) { result = false; } else { EraTaskData taskData = data.V.EraTaskList.Find((EraTaskData x) => x.TaskID == taskid); if (null == taskData) { taskData = new EraTaskData(); taskData.TaskID = taskid; data.V.EraTaskList.Add(taskData); } if (this.CheckTaskComplete(taskData, taskConfig)) { result = true; } else { for (int dataidx = 0; dataidx < taskConfig.CompletionCondition.Count; dataidx++) { int conditionNum = taskConfig.CompletionCondition[dataidx].Value; switch (dataidx) { case 0: taskData.TaskVal1 = Math.Min(taskData.TaskVal1 + var1, conditionNum); break; case 1: taskData.TaskVal2 = Math.Min(taskData.TaskVal2 + var2, conditionNum); break; case 2: taskData.TaskVal3 = Math.Min(taskData.TaskVal3 + var3, conditionNum); break; } } if (this.CheckTaskComplete(taskData, taskConfig)) { if (this.HandleAddEraProcess(data, taskConfig)) { this.SaveEraData(data.V, true); } } else { this.SaveEraData(data.V, false); } this.SaveEraTaskData(juntuanid, taskData); TimeUtil.AgeByNow(ref data.Age); result = true; } } } } } return(result); }