Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

System.MissingFieldException: Field 'UberText.m_TextMeshGameObject' not found. #43

Open
chucklu opened this issue Mar 12, 2020 · 13 comments

Comments

@chucklu
Copy link
Collaborator

chucklu commented Mar 12, 2020

2020-03-12 12:03:09.196+08:00 [15] ERROR Triton.Common.LogUtilities.Logger - [Tick] Exception during execution:
Buddy.Coroutines.CoroutineUnhandledException: Exception was thrown by coroutine ---> System.MissingFieldException: Field 'UberText.m_TextMeshGameObject' not found.
at Triton.Game.Mono.MonoClass.method_5(String string_4)
at Triton.Game.Mono.MonoClass.method_3[T](String string_4)
at Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Struct88.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Struct87.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Struct60.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Buddy.Coroutines.Coroutine.Class66.Struct18.MoveNext()
--- End of inner exception stack trace ---
at Buddy.Coroutines.Coroutine.method_2(Boolean bool_2)
at Buddy.Coroutines.Coroutine.method_0(Boolean bool_2)
at Buddy.Coroutines.Coroutine.Resume()
at Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Tick()
at Triton.Bot.BotManager.smethod_1(IBot ibot_1)

@chucklu
Copy link
Collaborator Author

chucklu commented Mar 12, 2020

// Buddy.Coroutines.Coroutine
// Token: 0x060004C0 RID: 1216 RVA: 0x00093D30 File Offset: 0x00091F30
this.method_0(false);

public void Resume()
		{
			if (this.IsDisposed)
			{
				throw new ObjectDisposedException(base.GetType().FullName);
			}
			if (this.IsFinished)
			{
				throw new InvalidOperationException("This coroutine has finished execution and cannot be resumed.");
			}
			if (Coroutine.coroutine_0 == this)
			{
				throw new InvalidOperationException("A coroutine cannot resume itself");
			}
			this.method_0(false);
		}

@chucklu
Copy link
Collaborator Author

chucklu commented Mar 12, 2020

this.method_2(bool_2);

// Buddy.Coroutines.Coroutine
// Token: 0x060004C1 RID: 1217 RVA: 0x00093D84 File Offset: 0x00091F84
private void method_0(bool bool_2)
{
	SynchronizationContext synchronizationContext = SynchronizationContext.Current;
	Coroutine coroutine = Coroutine.coroutine_0;
	try
	{
		Coroutine.coroutine_0 = this;
		SynchronizationContext.SetSynchronizationContext(null);
		Action action = this.action_0;
		this.action_0 = null;
		action();
		if (!bool_2)
		{
			this.Ticks++;
		}
		this.method_2(bool_2);
	}
	finally
	{
		Coroutine.coroutine_0 = coroutine;
		SynchronizationContext.SetSynchronizationContext(synchronizationContext);
	}
}

@chucklu
Copy link
Collaborator Author

chucklu commented Mar 12, 2020

Vector3 center = newPlayButtonText2.m_TextMeshGameObject.Renderer.Bounds.m_Center;

// Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Struct88
// Token: 0x06001414 RID: 5140 RVA: 0x000CACD0 File Offset: 0x000C8ED0
void IAsyncStateMachine.MoveNext()
{
	int num = this.int_0;
	try
	{
		TaskAwaiter taskAwaiter;
		TaskAwaiter<bool> taskAwaiter2;
		switch (num)
		{
		case 0:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num2 = -1;
			num = -1;
			this.int_0 = num2;
			break;
		}
		case 1:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num3 = -1;
			num = -1;
			this.int_0 = num3;
			goto IL_1D9;
		}
		case 2:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num4 = -1;
			num = -1;
			this.int_0 = num4;
			goto IL_209;
		}
		case 3:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num5 = -1;
			num = -1;
			this.int_0 = num5;
			goto IL_5F7;
		}
		case 4:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num6 = -1;
			num = -1;
			this.int_0 = num6;
			goto IL_627;
		}
		case 5:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num7 = -1;
			num = -1;
			this.int_0 = num7;
			goto IL_657;
		}
		case 6:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num8 = -1;
			num = -1;
			this.int_0 = num8;
			goto IL_687;
		}
		case 7:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num9 = -1;
			num = -1;
			this.int_0 = num9;
			goto IL_6B7;
		}
		case 8:
		{
			IL_6CB:
			try
			{
				if (num != 8)
				{
					while (this.enumerator_0.MoveNext())
					{
						if (!this.enumerator_0.Current.AreAllCustomDecksReady())
						{
							DefaultBot.ilog_0.DebugFormat("[TournamentScene_DeckPicker] !AreAllCustomDecksReady", Array.Empty<object>());
							taskAwaiter = Coroutine.Sleep(1000).GetAwaiter();
							if (!taskAwaiter.IsCompleted)
							{
								int num10 = 8;
								num = 8;
								this.int_0 = num10;
								this.taskAwaiter_0 = taskAwaiter;
								this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
								return;
							}
							goto IL_762;
						}
					}
					goto IL_78C;
				}
				taskAwaiter = this.taskAwaiter_0;
				this.taskAwaiter_0 = default(TaskAwaiter);
				int num11 = -1;
				num = -1;
				this.int_0 = num11;
				IL_762:
				taskAwaiter.GetResult();
				taskAwaiter = default(TaskAwaiter);
				goto IL_C6A;
			}
			finally
			{
				if (num < 0)
				{
					((IDisposable)this.enumerator_0).Dispose();
				}
			}
			IL_78C:
			this.enumerator_0 = default(List<CustomDeckPage>.Enumerator);
			DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] Now attempting to select the desired custom deck.", Array.Empty<object>());
			CollectionDeckBoxVisual selectedCustomDeckBox = this.deckPickerTrayDisplay_0.m_selectedCustomDeckBox;
			taskAwaiter2 = DefaultBot.smethod_5("TournamentScene_DeckPicker", selectedCustomDeckBox, this.list_0, this.deckPickerTrayDisplay_0, DefaultBotSettings.Instance.ConstructedCustomDeck).GetAwaiter();
			if (!taskAwaiter2.IsCompleted)
			{
				int num12 = 9;
				num = 9;
				this.int_0 = num12;
				this.taskAwaiter_1 = taskAwaiter2;
				this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter<bool>, DefaultBot.Struct88>(ref taskAwaiter2, ref this);
				return;
			}
			goto IL_82E;
		}
		case 9:
		{
			taskAwaiter2 = this.taskAwaiter_1;
			this.taskAwaiter_1 = default(TaskAwaiter<bool>);
			int num13 = -1;
			num = -1;
			this.int_0 = num13;
			goto IL_82E;
		}
		case 10:
		{
			taskAwaiter2 = this.taskAwaiter_1;
			this.taskAwaiter_1 = default(TaskAwaiter<bool>);
			int num14 = -1;
			num = -1;
			this.int_0 = num14;
			goto IL_86C;
		}
		case 11:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num15 = -1;
			num = -1;
			this.int_0 = num15;
			goto IL_B86;
		}
		case 12:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num16 = -1;
			num = -1;
			this.int_0 = num16;
			goto IL_BB6;
		}
		case 13:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num17 = -1;
			num = -1;
			this.int_0 = num17;
			goto IL_BE6;
		}
		case 14:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num18 = -1;
			num = -1;
			this.int_0 = num18;
			goto IL_C13;
		}
		case 15:
		{
			taskAwaiter = this.taskAwaiter_0;
			this.taskAwaiter_0 = default(TaskAwaiter);
			int num19 = -1;
			num = -1;
			this.int_0 = num19;
			goto IL_C40;
		}
		default:
			if (DefaultBotSettings.Instance.ClientBackAttempts >= 5)
			{
				DefaultBot.ilog_0.ErrorFormat("[TournamentScene_DeckPicker] The client has been detected to be in a broken state. Please restart it as soon as possible as it cannot leave the current scene.", Array.Empty<object>());
				DefaultBotSettings.Instance.ClientBroken = true;
			}
			GameEventManager.Instance.method_6();
			taskAwaiter = Coroutine.Yield().GetAwaiter();
			if (!taskAwaiter.IsCompleted)
			{
				int num20 = 0;
				num = 0;
				this.int_0 = num20;
				this.taskAwaiter_0 = taskAwaiter;
				this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
				return;
			}
			break;
		}
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		if (!DefaultBotSettings.Instance.ClientBroken && (DefaultBotSettings.Instance.NeedsToCacheQuests || DefaultBotSettings.Instance.NeedsToCacheCustomDecks))
		{
			DefaultBotSettings instance = DefaultBotSettings.Instance;
			int clientBackAttempts = instance.ClientBackAttempts;
			instance.ClientBackAttempts = clientBackAttempts + 1;
			DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] Now returning to the Hub to cache quests/decks.", Array.Empty<object>());
			taskAwaiter = this.defaultBot_0.method_50(this.tournamentScene_0).GetAwaiter();
			if (!taskAwaiter.IsCompleted)
			{
				int num21 = 1;
				num = 1;
				this.int_0 = num21;
				this.taskAwaiter_0 = taskAwaiter;
				this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
				return;
			}
		}
		else
		{
			GameEventManager.Instance.method_7();
			taskAwaiter = Coroutine.Yield().GetAwaiter();
			if (!taskAwaiter.IsCompleted)
			{
				int num22 = 2;
				num = 2;
				this.int_0 = num22;
				this.taskAwaiter_0 = taskAwaiter;
				this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
				return;
			}
			goto IL_209;
		}
		IL_1D9:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C6A;
		IL_209:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		if (DefaultBotSettings.Instance.GameMode != GameMode.Constructed)
		{
			if (DefaultBotSettings.Instance.ClientBroken)
			{
				BotManager.Stop();
				DefaultBot.ilog_0.ErrorFormat("[TournamentScene_DeckPicker] Your client needs to be restarted before continuing.", Array.Empty<object>());
				taskAwaiter = Coroutine.Yield().GetAwaiter();
				if (!taskAwaiter.IsCompleted)
				{
					int num23 = 3;
					num = 3;
					this.int_0 = num23;
					this.taskAwaiter_0 = taskAwaiter;
					this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
					return;
				}
			}
			else
			{
				DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] Now returning to the Hub to change the game type.", Array.Empty<object>());
				taskAwaiter = this.defaultBot_0.method_50(this.tournamentScene_0).GetAwaiter();
				if (!taskAwaiter.IsCompleted)
				{
					int num24 = 4;
					num = 4;
					this.int_0 = num24;
					this.taskAwaiter_0 = taskAwaiter;
					this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
					return;
				}
				goto IL_627;
			}
		}
		else
		{
			this.deckPickerTrayDisplay_0 = DeckPickerTrayDisplay.Get();
			if (this.deckPickerTrayDisplay_0 == null)
			{
				DefaultBot.ilog_0.DebugFormat("[TournamentScene_DeckPicker] DeckPickerTrayDisplay is null", Array.Empty<object>());
				goto IL_C6A;
			}
			if (!this.deckPickerTrayDisplay_0.IsLoaded())
			{
				DefaultBot.ilog_0.DebugFormat("[TournamentScene_DeckPicker] !DeckPickerTrayDisplay.IsLoaded", Array.Empty<object>());
				goto IL_C6A;
			}
			if (string.IsNullOrEmpty(DefaultBotSettings.Instance.ConstructedCustomDeck))
			{
				DefaultBot.ilog_0.ErrorFormat("[TournamentScene_DeckPicker] Please type a name for ConstructedCustomDeck!", Array.Empty<object>());
				BotManager.Stop();
				taskAwaiter = Coroutine.Yield().GetAwaiter();
				if (!taskAwaiter.IsCompleted)
				{
					int num25 = 5;
					num = 5;
					this.int_0 = num25;
					this.taskAwaiter_0 = taskAwaiter;
					this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
					return;
				}
				goto IL_657;
			}
			else
			{
				bool @bool = Options.Get().GetBool(Option.IN_WILD_MODE);
				this.bool_0 = false;
				if (DefaultBotSettings.Instance.ConstructedGameRule == GameRule.Auto)
				{
					CustomDeckCache customDeckCache = MainSettings.Instance.CustomDecks.FirstOrDefault(new Func<CustomDeckCache, bool>(DefaultBot.Class224.<>9.method_2));
					if (customDeckCache != null)
					{
						if (customDeckCache.IsWild)
						{
							if (!@bool)
							{
								this.bool_0 = true;
							}
						}
						else if (@bool)
						{
							this.bool_0 = true;
						}
					}
				}
				else if (DefaultBotSettings.Instance.ConstructedGameRule == GameRule.Wild)
				{
					if (!@bool)
					{
						this.bool_0 = true;
						DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] Now changing the game ruleset to 'Wild'.", Array.Empty<object>());
					}
				}
				else if (DefaultBotSettings.Instance.ConstructedGameRule == GameRule.Standard)
				{
					if (@bool)
					{
						this.bool_0 = true;
						DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] Now changing the game ruleset to 'Standard'.", Array.Empty<object>());
					}
				}
				else
				{
					DefaultBot.ilog_0.ErrorFormat("[TournamentScene_DeckPicker] Unprocessed ConstructedGameRule: {0}.", DefaultBotSettings.Instance.ConstructedGameRule);
					BotManager.Stop();
					taskAwaiter = Coroutine.Yield().GetAwaiter();
					if (!taskAwaiter.IsCompleted)
					{
						int num26 = 6;
						num = 6;
						this.int_0 = num26;
						this.taskAwaiter_0 = taskAwaiter;
						this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
						return;
					}
					goto IL_687;
				}
				if (this.bool_0)
				{
					Client.LeftClickAt(this.deckPickerTrayDisplay_0.m_switchFormatButton.Transform.Position);
					taskAwaiter = Coroutine.Sleep(1500).GetAwaiter();
					if (!taskAwaiter.IsCompleted)
					{
						int num27 = 7;
						num = 7;
						this.int_0 = num27;
						this.taskAwaiter_0 = taskAwaiter;
						this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
						return;
					}
					goto IL_6B7;
				}
				else
				{
					this.list_0 = this.deckPickerTrayDisplay_0.m_customPages;
					if (this.list_0 != null)
					{
						this.enumerator_0 = this.list_0.GetEnumerator();
						goto IL_6CB;
					}
					DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] Now attempting to select the desired basic deck.", Array.Empty<object>());
					HeroPickerButton selectedHeroButton = this.deckPickerTrayDisplay_0.m_selectedHeroButton;
					taskAwaiter2 = DefaultBot.smethod_4("TournamentScene_DeckPicker", selectedHeroButton, this.deckPickerTrayDisplay_0.m_heroButtons, this.deckPickerTrayDisplay_0, DefaultBotSettings.Instance.ConstructedCustomDeck).GetAwaiter();
					if (!taskAwaiter2.IsCompleted)
					{
						int num28 = 10;
						num = 10;
						this.int_0 = num28;
						this.taskAwaiter_1 = taskAwaiter2;
						this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter<bool>, DefaultBot.Struct88>(ref taskAwaiter2, ref this);
						return;
					}
					goto IL_86C;
				}
			}
		}
		IL_5F7:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C6A;
		IL_627:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C6A;
		IL_657:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C6A;
		IL_687:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C6A;
		IL_6B7:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C6A;
		IL_82E:
		bool result = taskAwaiter2.GetResult();
		taskAwaiter2 = default(TaskAwaiter<bool>);
		if (!result)
		{
			DefaultBotSettings.Instance.NeedsToCacheQuests = true;
			goto IL_C6A;
		}
		goto IL_88D;
		IL_86C:
		bool result2 = taskAwaiter2.GetResult();
		taskAwaiter2 = default(TaskAwaiter<bool>);
		if (!result2)
		{
			DefaultBotSettings.Instance.NeedsToCacheQuests = true;
			goto IL_C6A;
		}
		IL_88D:
		if (this.deckPickerTrayDisplay_0.m_rankedPlayButtons == null)
		{
			DefaultBot.ilog_0.DebugFormat("[TournamentScene_DeckPicker] DeckPickerTrayDisplay.m_rankedPlayButtons == null.", Array.Empty<object>());
			goto IL_C6A;
		}
		this.bool_1 = Options.Get().GetBool(Option.IN_RANKED_PLAY_MODE);
		if (DefaultBotSettings.Instance.ConstructedMode == ConstructedMode.Casual)
		{
			if (this.bool_1)
			{
				DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] Now changing to \"Casual\" constructed.", Array.Empty<object>());
				Client.LeftClickAt(this.deckPickerTrayDisplay_0.m_rankedPlayButtons.m_casualButton.Transform.Position);
				taskAwaiter = Coroutine.Sleep(1500).GetAwaiter();
				if (!taskAwaiter.IsCompleted)
				{
					int num29 = 11;
					num = 11;
					this.int_0 = num29;
					this.taskAwaiter_0 = taskAwaiter;
					this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
					return;
				}
				goto IL_B86;
			}
		}
		else if (DefaultBotSettings.Instance.ConstructedMode == ConstructedMode.Ranked)
		{
			if (!this.bool_1)
			{
				DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] Now changing to \"Ranked\" constructed.", Array.Empty<object>());
				Client.LeftClickAt(this.deckPickerTrayDisplay_0.m_rankedPlayButtons.m_rankedButton.Transform.Position);
				taskAwaiter = Coroutine.Sleep(1500).GetAwaiter();
				if (!taskAwaiter.IsCompleted)
				{
					int num30 = 12;
					num = 12;
					this.int_0 = num30;
					this.taskAwaiter_0 = taskAwaiter;
					this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
					return;
				}
				goto IL_BB6;
			}
		}
		else
		{
			DefaultBot.ilog_0.ErrorFormat("[TournamentScene_DeckPicker] Unprocessed ConstructedMode: {0}.", DefaultBotSettings.Instance.ConstructedMode);
			BotManager.Stop();
			taskAwaiter = Coroutine.Yield().GetAwaiter();
			if (!taskAwaiter.IsCompleted)
			{
				int num31 = 13;
				num = 13;
				this.int_0 = num31;
				this.taskAwaiter_0 = taskAwaiter;
				this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
				return;
			}
			goto IL_BE6;
		}
		DefaultBotSettings.Instance.ClientBackAttempts = 0;
		TransitionPopup transitionPopup = GameMgr.Get().m_transitionPopup;
		if (transitionPopup != null && transitionPopup.IsShown())
		{
			DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] The \"Matching\" popup is showing.", Array.Empty<object>());
			taskAwaiter = Coroutine.Sleep(1000).GetAwaiter();
			if (!taskAwaiter.IsCompleted)
			{
				int num32 = 14;
				num = 14;
				this.int_0 = num32;
				this.taskAwaiter_0 = taskAwaiter;
				this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
				return;
			}
			goto IL_C13;
		}
		else
		{
			PlayButton playButton = this.deckPickerTrayDisplay_0.m_playButton;
			UberText newPlayButtonText = playButton.m_newPlayButtonText;
			if (!playButton.IsEnabled())
			{
				DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] The \"{0}\" is not enabled.", newPlayButtonText.Text);
				goto IL_C6A;
			}
			UberText newPlayButtonText2 = playButton.m_newPlayButtonText;
			Vector3 center = newPlayButtonText2.m_TextMeshGameObject.Renderer.Bounds.m_Center;
			DefaultBot.ilog_0.InfoFormat("[TournamentScene_DeckPicker] Now clicking the \"{0}\" button.", newPlayButtonText2.Text);
			Client.LeftClickAt(center);
			taskAwaiter = Coroutine.Sleep(3000).GetAwaiter();
			if (!taskAwaiter.IsCompleted)
			{
				int num33 = 15;
				num = 15;
				this.int_0 = num33;
				this.taskAwaiter_0 = taskAwaiter;
				this.asyncTaskMethodBuilder_0.AwaitUnsafeOnCompleted<TaskAwaiter, DefaultBot.Struct88>(ref taskAwaiter, ref this);
				return;
			}
			goto IL_C40;
		}
		IL_B86:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C6A;
		IL_BB6:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C6A;
		IL_BE6:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C6A;
		IL_C13:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		goto IL_C4F;
		IL_C40:
		taskAwaiter.GetResult();
		taskAwaiter = default(TaskAwaiter);
		IL_C4F:;
	}
	catch (Exception exception)
	{
		this.int_0 = -2;
		this.asyncTaskMethodBuilder_0.SetException(exception);
		return;
	}
	IL_C6A:
	this.int_0 = -2;
	this.asyncTaskMethodBuilder_0.SetResult();
}

@chucklu
Copy link
Collaborator Author

chucklu commented Mar 12, 2020

// Triton.Game.Mapping.UberText
// Token: 0x1700372D RID: 14125
// (get) Token: 0x0600937D RID: 37757 RVA: 0x0007C576 File Offset: 0x0007A776
public GameObject m_TextMeshGameObject
{
	get
	{
		return base.method_3<GameObject>("m_TextMeshGameObject");
	}
}

@chucklu
Copy link
Collaborator Author

chucklu commented Mar 12, 2020

The above field was moved to

// UberTextRendering
// Token: 0x040090D1 RID: 37073
private GameObject m_textMeshGameObject;

UberTextRendering is a new class

@chucklu
Copy link
Collaborator Author

chucklu commented Mar 14, 2020

2020-03-15 02:12:38.914+08:00 [17] ERROR Triton.Common.LogUtilities.Logger - [Tick] Exception during execution:
Buddy.Coroutines.CoroutineUnhandledException: Exception was thrown by coroutine ---> System.MissingFieldException: Field 'UberText.m_TextMeshGameObject' not found.
at Triton.Game.Mono.MonoClass.method_5(String string_4)
at Triton.Game.Mono.MonoClass.method_3[T](String string_4)
at Triton.Game.Client.CardInteractPoint(Card card)
at Triton.Game.Abstraction.Card..ctor(Card backingObject)
at Triton.Game.Data.MulliganData..ctor()
at Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Struct73.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Struct78.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Struct71.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Struct60.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Buddy.Coroutines.Coroutine.Class66.Struct18.MoveNext()
--- End of inner exception stack trace ---
at Buddy.Coroutines.Coroutine.method_2(Boolean bool_2)
at Buddy.Coroutines.Coroutine.method_0(Boolean bool_2)
at Buddy.Coroutines.Coroutine.Resume()
at Triton.Bot.Logic.Bots.DefaultBot.DefaultBot.Tick()
at Triton.Bot.BotManager.smethod_1(IBot ibot_1)

@chucklu
Copy link
Collaborator Author

chucklu commented Mar 14, 2020

// Triton.Game.Client
// Token: 0x060017ED RID: 6125 RVA: 0x000625D4 File Offset: 0x000607D4
public static Vector3 CardInteractPoint(Card card)
{
	Actor actor = card.GetActor();
	if (actor == null)
	{
		return new Vector3(0f, 0f, 0f);
	}
	UberText costTextMesh = actor.m_costTextMesh;
	if (costTextMesh != null)
	{
		return costTextMesh.m_TextMeshGameObject.Renderer.Bounds.m_Center;
	}
	return actor.Transform.Position;
}

@Dustsc
Copy link

Dustsc commented Mar 21, 2020

// Triton.Game.Mapping.UberText
public GameObject m_TextMeshGameObject => method_3<GameObject>("m_TextMeshGameObject");
替换为
public GameObject m_TextMeshGameObject => m_UberTextRendering.m_textMeshGameObject;

// Triton.Game.Mapping.UberTextRendering
添加
public GameObject m_textMeshGameObject => method_3<GameObject>("m_textMeshGameObject");

@chucklu
Copy link
Collaborator Author

chucklu commented Mar 21, 2020

@Dustsc How do you define the class Triton.Game.Mapping.UberTextRendering?

@ghotm
Copy link

ghotm commented Mar 21, 2020

@chucklu 自己定义一个SimpleUberTextRendering即可,不用实现全部方法以及字段,只需要实现你需要的

@ghotm
Copy link

ghotm commented Mar 21, 2020

using System;

namespace Triton.Game.Mapping.SimpleUI
{
	// Token: 0x02000BEC RID: 3052
	public class UberTextRendering : MonoBehaviour
	{
		// Token: 0x06009BC4 RID: 39876 RVA: 0x000132D0 File Offset: 0x000114D0
		public UberTextRendering(IntPtr address, string className) : base(address, className)
		{
		}

		// Token: 0x06009BC5 RID: 39877 RVA: 0x000837B3 File Offset: 0x000819B3
		public UberTextRendering(IntPtr address) : this(address, "UberTextRendering")
		{
		}

		// Token: 0x17003A70 RID: 14960
		// (get) Token: 0x06009BC6 RID: 39878 RVA: 0x000837C1 File Offset: 0x000819C1
		public GameObject m_textMeshGameObject
		{
			get
			{
				return base.method_3<GameObject>("m_TextMeshGameObject");
			}
		}
	}
}

@Dustsc
Copy link

Dustsc commented Mar 21, 2020

就像Triton.Game.Mapping中的其它类一样,和dll中的相比,缺少很多的方法和字段,所以在Triton.Game.Mapping.UberTextRendering中只需要定义m_textMeshGameObject即可

@Dustsc
Copy link

Dustsc commented Mar 21, 2020

using ns26;
using ns27;
using System;
using System.Collections.Generic;
using Triton.Game.Mono;
using System.Runtime.InteropServices;

namespace Triton.Game.Mapping
{
	[Attribute38("UberTextRendering")]
	public class UberTextRendering : MonoBehaviour
	{
		public UberTextRendering(IntPtr address, string className)
				: base(address, className)
		{
		}

		public UberTextRendering(IntPtr address)
			: this(address, "UberTextRendering")
		{
		}
		
		public GameObject m_textMeshGameObject => method_3<GameObject>("m_textMeshGameObject");
	}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants