Files
2026-06-04 11:42:34 +02:00

368 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using RecNet;
using UnityEngine;
namespace RecRoom.Challenges
{
// Token: 0x02000B1A RID: 2842
[HMFEEFDKPLO]
public class TimedBufferChallenge : Challenge
{
// Token: 0x06015B21 RID: 88865 RVA: 0x0060601C File Offset: 0x0060421C
public TimedBufferChallenge()
{
}
// Token: 0x06015B22 RID: 88866 RVA: 0x00606074 File Offset: 0x00604274
public TimedBufferChallenge(IChallenge challengeToCount, int count, float interval)
: this(new IChallenge[] { challengeToCount }, count, interval)
{
}
// Token: 0x06015B23 RID: 88867 RVA: 0x00606088 File Offset: 0x00604288
public TimedBufferChallenge(IChallenge challengeToCount, int count, float interval, Func<float> getCurrentTimeFunc)
: this(new IChallenge[] { challengeToCount }, count, interval, getCurrentTimeFunc)
{
}
// Token: 0x06015B24 RID: 88868 RVA: 0x006060A0 File Offset: 0x006042A0
public TimedBufferChallenge(IChallenge[] challengesToCount, int count, float interval)
: this(challengesToCount, count, interval, TimedBufferChallenge.UnityTimeFunc)
{
}
// Token: 0x06015B25 RID: 88869 RVA: 0x006060B0 File Offset: 0x006042B0
public TimedBufferChallenge(IChallenge[] challengesToCount, int count, float interval, Func<float> getCurrentTimeFunc)
{
this.challengesToCount = new List<IChallenge>(challengesToCount);
this.total = count;
this.interval = interval;
this.getCurrentTimeFunc = getCurrentTimeFunc;
this.Initialize();
}
// Token: 0x17000901 RID: 2305
// (get) Token: 0x06015B26 RID: 88870 RVA: 0x00606130 File Offset: 0x00604330
public int BufferSize
{
get
{
return this.entryBuffer.Count;
}
}
// Token: 0x06015B27 RID: 88871 RVA: 0x00606140 File Offset: 0x00604340
protected override void Initialize()
{
base.Initialize();
this.WithConditions.Clear();
using (List<IChallenge>.Enumerator enumerator = this.challengesToCount.GetEnumerator())
{
while (enumerator.MoveNext())
{
IChallenge challengeToCount = enumerator.Current;
TimedBufferChallenge $this = this;
challengeToCount.SkipSerialization = true;
challengeToCount.ChallengeCompleteEvent += delegate(IChallenge challenge, ChallengeEvents.IChallengeEventData data)
{
TimedBufferChallenge.TimedBufferEntry timedBufferEntry = new TimedBufferChallenge.TimedBufferEntry
{
Time = $this.getCurrentTimeFunc(),
EventData = data
};
$this.entryBuffer.Add(timedBufferEntry);
challengeToCount.Reset();
};
this.WithConditions.Add(challengeToCount);
}
}
}
// Token: 0x06015B28 RID: 88872 RVA: 0x006061EC File Offset: 0x006043EC
public override void Reset()
{
base.Reset();
this.entryBuffer.Clear();
}
// Token: 0x06015B29 RID: 88873 RVA: 0x00606200 File Offset: 0x00604400
protected override bool EvaluateInternal(ChallengeEvents.IChallengeEventData challengeEventData)
{
base.EvaluateInternal(challengeEventData);
IEnumerable<TimedBufferChallenge.TimedBufferEntry> enumerable = this.entryBuffer;
if (this.interval > 0f)
{
enumerable = this.entryBuffer.Where((TimedBufferChallenge.TimedBufferEntry entry) => entry.Time > this.getCurrentTimeFunc() - this.interval);
}
int num = this.currentCount;
this.currentCount = 0;
switch (this.BufferCountMethod)
{
case TimedBufferChallenge.BufferCountMethods.UniqueToolCount:
enumerable = (from _ in enumerable
group _ by _.EventData.GetVar("t_vid")).Select(new Func<IGrouping<object, TimedBufferChallenge.TimedBufferEntry>, TimedBufferChallenge.TimedBufferEntry>(Enumerable.FirstOrDefault<TimedBufferChallenge.TimedBufferEntry>));
this.currentCount = enumerable.Count<TimedBufferChallenge.TimedBufferEntry>();
break;
case TimedBufferChallenge.BufferCountMethods.UniqueAttackerCount:
enumerable = (from _ in enumerable
group _ by _.EventData.GetVar("ap_pid")).Select(new Func<IGrouping<object, TimedBufferChallenge.TimedBufferEntry>, TimedBufferChallenge.TimedBufferEntry>(Enumerable.FirstOrDefault<TimedBufferChallenge.TimedBufferEntry>));
this.currentCount = enumerable.Count<TimedBufferChallenge.TimedBufferEntry>();
break;
case TimedBufferChallenge.BufferCountMethods.UniqueDefenderCount:
enumerable = (from _ in enumerable
group _ by _.EventData.GetVar("dp_pid")).Select(new Func<IGrouping<object, TimedBufferChallenge.TimedBufferEntry>, TimedBufferChallenge.TimedBufferEntry>(Enumerable.FirstOrDefault<TimedBufferChallenge.TimedBufferEntry>));
this.currentCount = enumerable.Count<TimedBufferChallenge.TimedBufferEntry>();
break;
case TimedBufferChallenge.BufferCountMethods.GroupedToolMaxCount:
{
IEnumerable<IGrouping<object, TimedBufferChallenge.TimedBufferEntry>> enumerable2 = from entry in enumerable
group entry by entry.EventData.GetVar("t_vid");
int num2;
if (enumerable2.Count<IGrouping<object, TimedBufferChallenge.TimedBufferEntry>>() > 0)
{
num2 = enumerable2.Max(new Func<IGrouping<object, TimedBufferChallenge.TimedBufferEntry>, int>(Enumerable.Count<TimedBufferChallenge.TimedBufferEntry>));
}
else
{
num2 = 0;
}
this.currentCount = num2;
break;
}
case TimedBufferChallenge.BufferCountMethods.UniqueGameCount:
enumerable = (from _ in enumerable
group _ by _.EventData.GetVar("gid")).Select(new Func<IGrouping<object, TimedBufferChallenge.TimedBufferEntry>, TimedBufferChallenge.TimedBufferEntry>(Enumerable.FirstOrDefault<TimedBufferChallenge.TimedBufferEntry>));
this.currentCount = enumerable.Count<TimedBufferChallenge.TimedBufferEntry>();
break;
default:
this.currentCount = enumerable.Count<TimedBufferChallenge.TimedBufferEntry>();
break;
}
this.entryBuffer = enumerable.ToList<TimedBufferChallenge.TimedBufferEntry>();
if (num != this.currentCount)
{
if (this.notificationCounts.Contains(this.currentCount))
{
base.Notify(this.currentCount, this.total);
}
base.Dirty = true;
}
return this.currentCount >= this.total;
}
// Token: 0x17000902 RID: 2306
// (get) Token: 0x06015B2A RID: 88874 RVA: 0x006064A4 File Offset: 0x006046A4
public override ChallengeProgress Progress
{
get
{
TimedBufferChallenge.ProgressModes progressMode = this.ProgressMode;
if (progressMode != TimedBufferChallenge.ProgressModes.Count)
{
return base.Progress;
}
return new ChallengeProgress
{
Count = this.currentCount,
Total = this.total
};
}
}
// Token: 0x06015B2B RID: 88875 RVA: 0x006064F0 File Offset: 0x006046F0
public override Dictionary<string, object> Serialize()
{
Dictionary<string, object> dictionary = base.Serialize();
dictionary["ccc"] = this.challengesToCount.Select((IChallenge _) => _.Serialize()).ToList<Dictionary<string, object>>();
dictionary["t"] = this.total;
dictionary["i"] = this.interval.ToString("F2", CultureInfo.InvariantCulture);
dictionary["pm"] = (int)this.ProgressMode;
if (this.notificationCounts.Count > 0)
{
dictionary["n"] = this.notificationCounts;
}
dictionary["pb"] = this.PersistBuffer;
if (this.BufferCountMethod != TimedBufferChallenge.BufferCountMethods.Count)
{
dictionary["m"] = (int)this.BufferCountMethod;
}
if (this.entryBuffer.Count > 0 && this.PersistBuffer)
{
dictionary["b"] = this.entryBuffer.Select((TimedBufferChallenge.TimedBufferEntry _) => _.Serialize()).ToList<Dictionary<string, object>>();
}
return dictionary;
}
// Token: 0x06015B2C RID: 88876 RVA: 0x00606638 File Offset: 0x00604838
protected override void DeserializeInternal(Dictionary<string, object> jsonDict)
{
base.DeserializeInternal(jsonDict);
List<Dictionary<string, object>> list = OFPFHHLNHIC.NGILNLCIOJM<Dictionary<string, object>>("ccc", jsonDict);
IEnumerable<IChallenge> enumerable = from _ in list.Select(new Func<Dictionary<string, object>, IChallenge>(ChallengeParser.FromJsonDict))
where _ != null
select _;
this.challengesToCount = new List<IChallenge>(enumerable);
this.total = OFPFHHLNHIC.KOFIKGFMMKD<int>("t", jsonDict);
this.interval = OFPFHHLNHIC.EDMLGIIJCED("i", jsonDict);
this.ProgressMode = (TimedBufferChallenge.ProgressModes)ChallengeParser.GetOptionalKey<int>("pm", jsonDict, 0);
this.PersistBuffer = ChallengeParser.GetOptionalKey<bool>("pb", jsonDict, true);
this.BufferCountMethod = (TimedBufferChallenge.BufferCountMethods)ChallengeParser.GetOptionalKey<int>("m", jsonDict, 0);
if (jsonDict.ContainsKey("b"))
{
this.entryBuffer = OFPFHHLNHIC.NGILNLCIOJM<Dictionary<string, object>>("b", jsonDict).Select(new Func<Dictionary<string, object>, TimedBufferChallenge.TimedBufferEntry>(TimedBufferChallenge.TimedBufferEntry.DeserializeFromDict)).ToList<TimedBufferChallenge.TimedBufferEntry>();
}
if (jsonDict.ContainsKey("n"))
{
this.notificationCounts = OFPFHHLNHIC.NGILNLCIOJM<int>("n", jsonDict);
}
}
// Token: 0x17000903 RID: 2307
// (get) Token: 0x06015B2D RID: 88877 RVA: 0x0060676C File Offset: 0x0060496C
public override ChallengeTypes ChallengeType
{
get
{
return ChallengeTypes.TimedBufferChallenge;
}
}
// Token: 0x04003C6D RID: 15469
public TimedBufferChallenge.BufferCountMethods BufferCountMethod;
// Token: 0x04003C6E RID: 15470
public TimedBufferChallenge.ProgressModes ProgressMode;
// Token: 0x04003C6F RID: 15471
protected static readonly Func<float> UnityTimeFunc = new Func<float>(Time.get_realtimeSinceStartup);
// Token: 0x04003C70 RID: 15472
private Func<float> getCurrentTimeFunc = new Func<float>(Time.get_realtimeSinceStartup);
// Token: 0x04003C71 RID: 15473
public const float IGNORE_INTERVAL = -1f;
// Token: 0x04003C72 RID: 15474
protected float interval;
// Token: 0x04003C73 RID: 15475
protected int total;
// Token: 0x04003C74 RID: 15476
private int currentCount;
// Token: 0x04003C75 RID: 15477
private List<TimedBufferChallenge.TimedBufferEntry> entryBuffer = new List<TimedBufferChallenge.TimedBufferEntry>();
// Token: 0x04003C76 RID: 15478
public bool PersistBuffer;
// Token: 0x04003C77 RID: 15479
protected List<IChallenge> challengesToCount = new List<IChallenge>();
// Token: 0x04003C78 RID: 15480
[HEFNGMICCHG]
public List<int> notificationCounts = new List<int>();
// Token: 0x04003C79 RID: 15481
public const string CHALLENGES_COUNT_CHALLENGE_KEY = "ccc";
// Token: 0x04003C7A RID: 15482
public const string INTERVAL_KEY = "i";
// Token: 0x04003C7B RID: 15483
public const string COUNT_KEY = "t";
// Token: 0x04003C7C RID: 15484
public const string METHOD_KEY = "m";
// Token: 0x04003C7D RID: 15485
public const string BUFFER_KEY = "b";
// Token: 0x04003C7E RID: 15486
public const string PERSIST_BUFFER_KEY = "pb";
// Token: 0x04003C7F RID: 15487
public const string PROGRESS_MODE_KEY = "pm";
// Token: 0x04003C80 RID: 15488
public const string NOTIFICATIONS_KEY = "n";
// Token: 0x02000B1B RID: 2843
public enum BufferCountMethods
{
// Token: 0x04003C93 RID: 15507
Count,
// Token: 0x04003C94 RID: 15508
UniqueToolCount,
// Token: 0x04003C95 RID: 15509
UniqueAttackerCount,
// Token: 0x04003C96 RID: 15510
UniqueDefenderCount,
// Token: 0x04003C97 RID: 15511
GroupedToolMaxCount,
// Token: 0x04003C98 RID: 15512
UniqueGameCount
}
// Token: 0x02000B1C RID: 2844
public enum ProgressModes
{
// Token: 0x04003C9A RID: 15514
Complete,
// Token: 0x04003C9B RID: 15515
Count
}
// Token: 0x02000B1D RID: 2845
public struct TimedBufferEntry : OBFEFLHKHJJ, INMKELLJKBO, EBHIILNPABI
{
// Token: 0x06015B38 RID: 88888 RVA: 0x00606838 File Offset: 0x00604A38
public void Deserialize(Dictionary<string, object> dict)
{
this.Time = OFPFHHLNHIC.EDMLGIIJCED("t", dict);
this.EventData = ChallengeEvents.ChallengeEventData.Parse(OFPFHHLNHIC.KOFIKGFMMKD<Dictionary<string, object>>("e", dict));
}
// Token: 0x06015B39 RID: 88889 RVA: 0x00606864 File Offset: 0x00604A64
public Dictionary<string, object> Serialize()
{
return new Dictionary<string, object>
{
{
"t",
this.Time.ToString("F2", CultureInfo.InvariantCulture)
},
{
"e",
this.EventData.Serialize()
}
};
}
// Token: 0x06015B3A RID: 88890 RVA: 0x006068B0 File Offset: 0x00604AB0
public static TimedBufferChallenge.TimedBufferEntry DeserializeFromDict(Dictionary<string, object> dict)
{
TimedBufferChallenge.TimedBufferEntry timedBufferEntry = default(TimedBufferChallenge.TimedBufferEntry);
timedBufferEntry.Deserialize(dict);
return timedBufferEntry;
}
// Token: 0x04003C9C RID: 15516
public float Time;
// Token: 0x04003C9D RID: 15517
public ChallengeEvents.IChallengeEventData EventData;
// Token: 0x04003C9E RID: 15518
private const string TIME_KEY = "t";
// Token: 0x04003C9F RID: 15519
private const string EVENT_DATA_KEY = "e";
}
}
}