private SortedList <IHistorial> historial(int cuenta = 0) { var historial = new SortedList <IHistorial>(); historial.AddRange(HistorialDeposito.Where(c => cuenta == 0 ? true : cuenta == c.CuentaOrigen || cuenta == c.CuentaDestino)); historial.AddRange(HistorialRetiro.Where(c => cuenta == 0 ? true : cuenta == c.CuentaOrigen)); return(historial); }
private void load() { // Calculate default multiplier control points var lastTimingPoint = new TimingControlPoint(); var lastDifficultyPoint = new DifficultyControlPoint(); // Merge timing + difficulty points var allPoints = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default); allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints); allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints); // Generate the timing points, making non-timing changes use the previous timing change var timingChanges = allPoints.Select(c => { var timingPoint = c as TimingControlPoint; var difficultyPoint = c as DifficultyControlPoint; if (timingPoint != null) { lastTimingPoint = timingPoint; } if (difficultyPoint != null) { lastDifficultyPoint = difficultyPoint; } return(new MultiplierControlPoint(c.Time) { Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier, TimingPoint = lastTimingPoint, DifficultyPoint = lastDifficultyPoint }); }); double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue; // Perform some post processing of the timing changes timingChanges = timingChanges // Collapse sections after the last hit object .Where(s => s.StartTime <= lastObjectTime) // Collapse sections with the same start time .GroupBy(s => s.StartTime).Select(g => g.Last()).OrderBy(s => s.StartTime); DefaultControlPoints.AddRange(timingChanges); // If we have no control points, add a default one if (DefaultControlPoints.Count == 0) { DefaultControlPoints.Add(new MultiplierControlPoint { Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier }); } DefaultControlPoints.ForEach(c => applySpeedAdjustment(c, Playfield)); }
protected override Playfield <ManiaHitObject, ManiaJudgement> CreatePlayfield() { double lastSpeedMultiplier = 1; double lastBeatLength = 500; // Merge timing + difficulty points var allPoints = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default); allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints); allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints); // Generate the timing points, making non-timing changes use the previous timing change var timingChanges = allPoints.Select(c => { var timingPoint = c as TimingControlPoint; var difficultyPoint = c as DifficultyControlPoint; if (timingPoint != null) { lastBeatLength = timingPoint.BeatLength; } if (difficultyPoint != null) { lastSpeedMultiplier = difficultyPoint.SpeedMultiplier; } return(new TimingChange { Time = c.Time, BeatLength = lastBeatLength, SpeedMultiplier = lastSpeedMultiplier }); }); double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue; // Perform some post processing of the timing changes timingChanges = timingChanges // Collapse sections after the last hit object .Where(s => s.Time <= lastObjectTime) // Collapse sections with the same start time .GroupBy(s => s.Time).Select(g => g.Last()).OrderBy(s => s.Time) // Collapse sections with the same beat length .GroupBy(s => s.BeatLength * s.SpeedMultiplier).Select(g => g.First()) .ToList(); return(new ManiaPlayfield(Columns ?? (int)Math.Round(Beatmap.BeatmapInfo.Difficulty.CircleSize), timingChanges) { Anchor = Anchor.Centre, Origin = Anchor.Centre, // Invert by default for now (should be moved to config/skin later) Scale = new Vector2(1, -1) }); }
protected override void ApplyBeatmap() { // Calculate default multiplier control points var lastTimingPoint = new TimingControlPoint(); var lastDifficultyPoint = new DifficultyControlPoint(); // Merge timing + difficulty points var allPoints = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default); allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints); allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints); // Generate the timing points, making non-timing changes use the previous timing change var timingChanges = allPoints.Select(c => { var timingPoint = c as TimingControlPoint; var difficultyPoint = c as DifficultyControlPoint; if (timingPoint != null) { lastTimingPoint = timingPoint; } if (difficultyPoint != null) { lastDifficultyPoint = difficultyPoint; } return(new MultiplierControlPoint(c.Time) { TimingPoint = lastTimingPoint, DifficultyPoint = lastDifficultyPoint }); }); double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue; // Perform some post processing of the timing changes timingChanges = timingChanges // Collapse sections after the last hit object .Where(s => s.StartTime <= lastObjectTime) // Collapse sections with the same start time .GroupBy(s => s.StartTime).Select(g => g.Last()).OrderBy(s => s.StartTime) // Collapse sections with the same beat length .GroupBy(s => s.TimingPoint.BeatLength * s.DifficultyPoint.SpeedMultiplier).Select(g => g.First()); DefaultControlPoints.AddRange(timingChanges); // If we have no control points, add a default one if (DefaultControlPoints.Count == 0) { DefaultControlPoints.Add(new MultiplierControlPoint()); } }
static public SortedList <KEY_TYPE, VALUE_TYPE> ToSortedList <KEY_TYPE, VALUE_TYPE>(this IEnumerable <KeyValuePair <KEY_TYPE, VALUE_TYPE> > item) { SortedList <KEY_TYPE, VALUE_TYPE> sorted_list = new SortedList <KEY_TYPE, VALUE_TYPE>(); sorted_list.AddRange(item); return(sorted_list); }
private SortedList <CSPrice> LoadDayPrices(int day) { SortedList <CSPrice> ret = new SortedList <CSPrice>(Comp_CSPrice); ret.AddRange(StorageLoader.LoadStorage(DateToDay.ToDate(day), CurrencyPair)); return(ret); }
public void FromMap(Tuple <double, Color>[] values) { colourMap.Clear(); colourMap.AddRange(values.Select(x => new KeyValuePair <double, int>(x.Item1, unchecked (x.Item2.A << 24 | x.Item2.R << 16 | x.Item2.G << 8 | x.Item2.B)))); MinValue = colourMap.Keys.Min(); MaxValue = colourMap.Keys.Max(); sortedKeys = colourMap.Keys.ToArray(); }
public void AddNewMessages(params Message[] messages) { messages = messages.Except(Messages).ToArray(); Messages.AddRange(messages); purgeOldMessages(); NewMessagesArrived?.Invoke(messages); }
public void AddNewMessages(IEnumerable <Message> messages) { messages = messages.Except(Messages).ToList(); Messages.AddRange(messages); purgeOldMessages(); NewMessagesArrived?.Invoke(messages); }
public void FromMap(Tuple <double, Color>[] values) { colourMap.Clear(); colourMap.AddRange(values.Select(x => new KeyValuePair <double, int>(x.Item1, // ReSharper disable once RedundantOverflowCheckingContext unchecked (x.Item2.A << 24 | x.Item2.R << 16 | x.Item2.G << 8 | x.Item2.B)))); MinValue = colourMap.Keys.Min(); MaxValue = colourMap.Keys.Max(); sortedKeys = colourMap.Keys.ToArray(); }
public void TestSortedSerialization() { var original = new SortedList <int>(); original.AddRange(new[] { 6, 5, 4, 3, 2, 1 }); var deserialized = JsonConvert.DeserializeObject <SortedList <int> >(JsonConvert.SerializeObject(original)); Assert.AreEqual(original.Count, deserialized.Count, "Counts are not equal"); for (int i = 0; i < original.Count; i++) { Assert.AreEqual(original[i], deserialized[i], $"Item at index {i} differs"); } }
public void TestCustomComparer() { int Compare(int i1, int i2) => i2.CompareTo(i1); var original = new SortedList <int>(Compare); original.AddRange(new[] { 1, 2, 3, 4, 5, 6 }); var deserialized = new SortedList <int>(Compare); JsonConvert.PopulateObject(JsonConvert.SerializeObject(original), deserialized); Assert.AreEqual(original.Count, deserialized.Count, "Counts are not equal"); for (int i = 0; i < original.Count; i++) { Assert.AreEqual(original[i], deserialized[i], $"Item at index {i} differs"); } }
public static void Flatten(this Clip clip) { var flattenedNotes = new SortedList <NoteEvent>(); foreach (var note in clip.Notes) { flattenedNotes.Add(note); if (note.HasChildren) { foreach (var child in note.Children) { child.Parent = null; } flattenedNotes.AddRange(note.Children); note.Children = null; } } clip.Notes = flattenedNotes; }
/// <summary> /// Adds new messages to the channel and purges old messages. Triggers the <see cref="NewMessagesArrived"/> event. /// </summary> /// <param name="messages"></param> public void AddNewMessages(params Message[] messages) { messages = messages.Except(Messages).ToArray(); if (messages.Length == 0) { return; } Messages.AddRange(messages); var maxMessageId = messages.Max(m => m.Id); if (maxMessageId > LastMessageId) { LastMessageId = maxMessageId; } purgeOldMessages(); NewMessagesArrived?.Invoke(messages); }
protected override object JGetObject(MemoryStream bytes) { Console.WriteLine("Inicio Deserializar Data"); object[] partes = base.GetPartsObject(bytes); Data data = new Data(); SortedList <long, Tarea> tareas = new SortedList <long, Tarea>(); Categoria[] categorias = (Categoria[])partes[CATEGORIAS]; Lista[] listas = (Lista[])partes[LISTAS]; data.Listas.Clear(); data.Categorias.Clear(); data.Listas.AddRange(listas); for (int i = 0; i < listas.Length; i++) { tareas.AddRange(listas[i].Tareas.GetValues()); } for (int i = 0; i < listas.Length; i++) { listas[i].TareasOcultas.SetValues(tareas); listas[i].ListasHerencia.SetValues(data.Listas); } for (int i = 0; i < categorias.Length; i++) { data.Categorias.Add(categorias[i]); categorias[i].Listas.SetValues(data.Listas); } Console.WriteLine("Fin Deserializar Data"); return(data); }
private void load() { double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue; double baseBeatLength = TimingControlPoint.DEFAULT_BEAT_LENGTH; if (RelativeScaleBeatLengths) { IReadOnlyList <TimingControlPoint> timingPoints = Beatmap.ControlPointInfo.TimingPoints; double maxDuration = 0; for (int i = 0; i < timingPoints.Count; i++) { if (timingPoints[i].Time > lastObjectTime) { break; } double endTime = i < timingPoints.Count - 1 ? timingPoints[i + 1].Time : lastObjectTime; double duration = endTime - timingPoints[i].Time; if (duration > maxDuration) { maxDuration = duration; // The slider multiplier is post-multiplied to determine the final velocity, but for relative scale beat lengths // the multiplier should not affect the effective timing point (the longest in the beatmap), so it is factored out here baseBeatLength = timingPoints[i].BeatLength / Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier; } } } // Merge sequences of timing and difficulty control points to create the aggregate "multiplier" control point var lastTimingPoint = new TimingControlPoint(); var lastDifficultyPoint = new DifficultyControlPoint(); var allPoints = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default); allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints); allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints); // Generate the timing points, making non-timing changes use the previous timing change and vice-versa var timingChanges = allPoints.Select(c => { var timingPoint = c as TimingControlPoint; var difficultyPoint = c as DifficultyControlPoint; if (timingPoint != null) { lastTimingPoint = timingPoint; } if (difficultyPoint != null) { lastDifficultyPoint = difficultyPoint; } return(new MultiplierControlPoint(c.Time) { Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier, BaseBeatLength = baseBeatLength, TimingPoint = lastTimingPoint, DifficultyPoint = lastDifficultyPoint }); }); // Trim unwanted sequences of timing changes timingChanges = timingChanges // Collapse sections after the last hit object .Where(s => s.StartTime <= lastObjectTime) // Collapse sections with the same start time .GroupBy(s => s.StartTime).Select(g => g.Last()).OrderBy(s => s.StartTime); controlPoints.AddRange(timingChanges); if (controlPoints.Count == 0) { controlPoints.Add(new MultiplierControlPoint { Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier }); } }
/// <summary> /// 回复信息 /// </summary> /// <returns></returns> public string Reply() { //回复信息 var result = Value; //如果是带有记忆的*号标识 if (Star != null) { //如果名字不为空 if (SetVariable.Name != "" || SetVariable.Name != null) { //遍历每一个*符号 for (int i = 0; i < Star.Count; i++) { //存储变量数目 User.StoreNum++; //设定记忆变量 Memory.Set(User.UserId + "" + User.StoreNum, SetVariable.Name, AI.Star.List[i]); //break; } //返回值 //return this.Value; } //输出信息 //return this.Value + Smart.Star.List[Star-1]; //遍历每一个*符号 //for (int i = 0; i < this.Star.Count; i++) //{ // result += Smart.Star.List[i]; //} } //如果有动态执行函数功能 if (Function != null) { //需要传递的参数集合 var parm = new SortedList <string>(); //将里面的索引值取出来 var star = Star; if (star != null) { int[] va = star.ToArray(); //将真实值取出来 parm.AddRange(va.Select(a => AI.Star.List[a - 1])); } //执行,依然要把参数传递过去 return(CodeCompiler.Execute(Function.Name, parm.ToArray())); } //获取存储的变量值 if (GetVariable.Name != null) { //获取变量 result += Memory.Get(User.UserId + "" + User.StoreNum, GetVariable.Name); } //如果输出用户曾经的输出 if (Input != -1) { //输出信息 result += AI.Input.List[Input - 1]; } if (String.IsNullOrEmpty(result)) { //随机数的方式返回 var rnd = new Random(); //返回 if (Rand != null) { return(Rand.List[rnd.Next(0, Rand.List.Count)]); } } return(result); }
public void Awake() { _spawns.AddRange(GetComponentsInChildren <SpawnInfo>()); }
public TransceleratorSections(QuestionSections sections) { m_sections = new SortedList <int, ISectionInfo>(sections.Items.Length); m_sections.AddRange(sections.Items.Select(s => new KeyValuePair <int, ISectionInfo>(s.StartRef, s))); }
//<pattern>*[地名:北京|上海|天津|-ns]*将*[行为:开盘|发布会]*</pattern> // <template> // <function name="Normal" para="1,2,3"></function> // <question>[0]什么地方[1]将[2][行为][3]?[地名]</question> // </template> private void BuildRealCategory() { for (int i = 0; i < Categorys.Count; i++) { SortedList<Pattern> realPatterns = new SortedList<Pattern>(); SortedList<Pattern> patterns = Categorys[i].Patterns; foreach (Pattern t in patterns) { if (t.Value.Contains("[")) { string patternValue = t.Value; List<Pattern> myPatterns = new List<Pattern>(); int leftIndex = patternValue.IndexOf('['); int rightIndex = patternValue.IndexOf(']'); // string middleValue = string.Empty; while (leftIndex > -1) { string patternString = patternValue.Substring(leftIndex + 1, rightIndex - leftIndex - 1); string[] valueTemplate = patternString.Split(new[] { '|', ':' }, StringSplitOptions.RemoveEmptyEntries); if (myPatterns.Count == 0) { Pattern[] pts = new Pattern[valueTemplate.Count() - 1]; string header = patternValue.Substring(0, leftIndex); for (int k = 0; k < pts.Count(); k++) { pts[k] = new Pattern(); pts[k].Value = header + valueTemplate[k + 1]; Template template = new Template(); Template.Question[] questions = new Template.Question[t.Template.Questions.Count]; for (int n = 0; n < questions.Count(); n++) { //questions[n] = new Template.Question(); //questions[n].Answer = // t.Template.Questions[n].Answer.Replace( // "[" + valueTemplate[0] + "]", valueTemplate[k + 1]); //questions[n].Description = t.Template.Questions[n].Description.Replace( // "[" + valueTemplate[0] + "]", valueTemplate[k + 1]); } template.Questions.AddRange(questions); template.Function = t.Template.Function; template.Star = t.Template.Star; pts[k].Template = template; } myPatterns.AddRange(pts); } else { Pattern[,] pts = new Pattern[myPatterns.Count, valueTemplate.Count() - 1]; for (int k = 0; k < myPatterns.Count; k++) { for (int n = 0; n < valueTemplate.Count() - 1; n++) { pts[k, n] = new Pattern(); pts[k, n].Value = myPatterns[k].Value + patternValue.Substring(0, leftIndex) + valueTemplate[n + 1]; List<Template.Question> questions = myPatterns[k].Template.Questions; Template template = new Template(); for (int m = 0; m < questions.Count; m++) { //Template.Question myQuestion = new Template.Question(); //myQuestion.Description = questions[m].Description.Replace( // "[" + valueTemplate[0] + "]", valueTemplate[n + 1]); //myQuestion.Answer = questions[m].Answer.Replace( // "[" + valueTemplate[0] + "]", valueTemplate[n + 1]); //template.AddQuestion(myQuestion); } template.Function = myPatterns[k].Template.Function; template.Star = myPatterns[k].Template.Star; pts[k, n].Template = template; } } myPatterns.Clear(); foreach (var p in pts) { myPatterns.Add(p); } } patternValue = patternValue.Substring(rightIndex + 1, patternValue.Length - rightIndex - 1); // int lastRightIndex = rightIndex; leftIndex = patternValue.IndexOf('['); rightIndex = patternValue.IndexOf(']'); if (rightIndex == -1) { foreach (Pattern t1 in myPatterns) { t1.Value += patternValue; } } } realPatterns.AddRange(myPatterns); } else { //Pattern pattern = new Pattern(); realPatterns.Add(t); } } Categorys[i].Patterns = realPatterns; } }
private void load() { switch (VisualisationMethod) { case ScrollVisualisationMethod.Sequential: scrollingInfo.Algorithm = new SequentialScrollAlgorithm(ControlPoints); break; case ScrollVisualisationMethod.Overlapping: scrollingInfo.Algorithm = new OverlappingScrollAlgorithm(ControlPoints); break; case ScrollVisualisationMethod.Constant: scrollingInfo.Algorithm = new ConstantScrollAlgorithm(); break; } double lastObjectTime = Objects.LastOrDefault()?.GetEndTime() ?? double.MaxValue; double baseBeatLength = TimingControlPoint.DEFAULT_BEAT_LENGTH; if (RelativeScaleBeatLengths) { baseBeatLength = Beatmap.GetMostCommonBeatLength(); // The slider multiplier is post-multiplied to determine the final velocity, but for relative scale beat lengths // the multiplier should not affect the effective timing point (the longest in the beatmap), so it is factored out here baseBeatLength /= Beatmap.Difficulty.SliderMultiplier; } // Merge sequences of timing and difficulty control points to create the aggregate "multiplier" control point var lastTimingPoint = new TimingControlPoint(); var lastEffectPoint = new EffectControlPoint(); var allPoints = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default); allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints); allPoints.AddRange(Beatmap.ControlPointInfo.EffectPoints); // Generate the timing points, making non-timing changes use the previous timing change and vice-versa var timingChanges = allPoints.Select(c => { switch (c) { case TimingControlPoint timingPoint: lastTimingPoint = timingPoint; break; case EffectControlPoint difficultyPoint: lastEffectPoint = difficultyPoint; break; } return(new MultiplierControlPoint(c.Time) { Velocity = Beatmap.Difficulty.SliderMultiplier, BaseBeatLength = baseBeatLength, TimingPoint = lastTimingPoint, EffectPoint = lastEffectPoint }); }); // Trim unwanted sequences of timing changes timingChanges = timingChanges // Collapse sections after the last hit object .Where(s => s.StartTime <= lastObjectTime) // Collapse sections with the same start time .GroupBy(s => s.StartTime).Select(g => g.Last()).OrderBy(s => s.StartTime); ControlPoints.AddRange(timingChanges); if (ControlPoints.Count == 0) { ControlPoints.Add(new MultiplierControlPoint { Velocity = Beatmap.Difficulty.SliderMultiplier }); } }
//<pattern>*[地名:北京|上海|天津|-ns]*将*[行为:开盘|发布会]*</pattern> // <template> // <function name="Normal" para="1,2,3"></function> // <question>[0]什么地方[1]将[2][行为][3]?[地名]</question> // </template> private void BuildRealCategory() { for (int i = 0; i < Categorys.Count; i++) { SortedList <Pattern> realPatterns = new SortedList <Pattern>(); SortedList <Pattern> patterns = Categorys[i].Patterns; foreach (Pattern t in patterns) { if (t.Value.Contains("[")) { string patternValue = t.Value; List <Pattern> myPatterns = new List <Pattern>(); int leftIndex = patternValue.IndexOf('['); int rightIndex = patternValue.IndexOf(']'); // string middleValue = string.Empty; while (leftIndex > -1) { string patternString = patternValue.Substring(leftIndex + 1, rightIndex - leftIndex - 1); string[] valueTemplate = patternString.Split(new[] { '|', ':' }, StringSplitOptions.RemoveEmptyEntries); if (myPatterns.Count == 0) { Pattern[] pts = new Pattern[valueTemplate.Count() - 1]; string header = patternValue.Substring(0, leftIndex); for (int k = 0; k < pts.Count(); k++) { pts[k] = new Pattern(); pts[k].Value = header + valueTemplate[k + 1]; Template template = new Template(); Template.Question[] questions = new Template.Question[t.Template.Questions.Count]; for (int n = 0; n < questions.Count(); n++) { //questions[n] = new Template.Question(); //questions[n].Answer = // t.Template.Questions[n].Answer.Replace( // "[" + valueTemplate[0] + "]", valueTemplate[k + 1]); //questions[n].Description = t.Template.Questions[n].Description.Replace( // "[" + valueTemplate[0] + "]", valueTemplate[k + 1]); } template.Questions.AddRange(questions); template.Function = t.Template.Function; template.Star = t.Template.Star; pts[k].Template = template; } myPatterns.AddRange(pts); } else { Pattern[,] pts = new Pattern[myPatterns.Count, valueTemplate.Count() - 1]; for (int k = 0; k < myPatterns.Count; k++) { for (int n = 0; n < valueTemplate.Count() - 1; n++) { pts[k, n] = new Pattern(); pts[k, n].Value = myPatterns[k].Value + patternValue.Substring(0, leftIndex) + valueTemplate[n + 1]; List <Template.Question> questions = myPatterns[k].Template.Questions; Template template = new Template(); for (int m = 0; m < questions.Count; m++) { //Template.Question myQuestion = new Template.Question(); //myQuestion.Description = questions[m].Description.Replace( // "[" + valueTemplate[0] + "]", valueTemplate[n + 1]); //myQuestion.Answer = questions[m].Answer.Replace( // "[" + valueTemplate[0] + "]", valueTemplate[n + 1]); //template.AddQuestion(myQuestion); } template.Function = myPatterns[k].Template.Function; template.Star = myPatterns[k].Template.Star; pts[k, n].Template = template; } } myPatterns.Clear(); foreach (var p in pts) { myPatterns.Add(p); } } patternValue = patternValue.Substring(rightIndex + 1, patternValue.Length - rightIndex - 1); // int lastRightIndex = rightIndex; leftIndex = patternValue.IndexOf('['); rightIndex = patternValue.IndexOf(']'); if (rightIndex == -1) { foreach (Pattern t1 in myPatterns) { t1.Value += patternValue; } } } realPatterns.AddRange(myPatterns); } else { //Pattern pattern = new Pattern(); realPatterns.Add(t); } } Categorys[i].Patterns = realPatterns; } }
/// <summary> /// 回复信息 /// </summary> /// <returns></returns> public string Reply() { //回复信息 var result = Value; //如果是带有记忆的*号标识 if (Star != null) { //如果名字不为空 if (SetVariable.Name != "" || SetVariable.Name != null) { //遍历每一个*符号 for (int i = 0; i < Star.Count; i++) { //存储变量数目 User.StoreNum++; //设定记忆变量 Memory.Set(User.UserId + "" + User.StoreNum, SetVariable.Name, AI.Star.List[i]); //break; } //返回值 //return this.Value; } //输出信息 //return this.Value + Smart.Star.List[Star-1]; //遍历每一个*符号 //for (int i = 0; i < this.Star.Count; i++) //{ // result += Smart.Star.List[i]; //} } //如果有动态执行函数功能 if (Function != null) { //需要传递的参数集合 var parm = new SortedList<string>(); //将里面的索引值取出来 var star = Star; if (star != null) { int[] va = star.ToArray(); //将真实值取出来 parm.AddRange(va.Select(a => AI.Star.List[a - 1])); } //执行,依然要把参数传递过去 return CodeCompiler.Execute(Function.Name, parm.ToArray()); } //获取存储的变量值 if (GetVariable.Name != null) { //获取变量 result += Memory.Get(User.UserId + "" + User.StoreNum, GetVariable.Name); } //如果输出用户曾经的输出 if (Input != -1) { //输出信息 result += AI.Input.List[Input - 1]; } if (String.IsNullOrEmpty(result)) { //随机数的方式返回 var rnd = new Random(); //返回 if (Rand != null) return Rand.List[rnd.Next(0, Rand.List.Count)]; } return result; }