using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using DG.Tweening;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
using UnityEngine.Localization.Tables;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Sayrus.HelperFarmer")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+76210269d08fb7dbed9ab298629a3b8bc4cd014d")]
[assembly: AssemblyProduct("Helper Farmer")]
[assembly: AssemblyTitle("Sayrus.HelperFarmer")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Sayrus.HelperFarmer
{
public class Utils
{
public static ushort CLEANER_HOUSE_ID = 1156;
public static ushort FARMER_HOUSE_ID = 8765;
public static ushort FERTILIZER_ID = 280;
public static ushort HOE_PRO_ID = 307;
public static ushort HOE_ID = 302;
public static ushort WATER_CAN_ID = 303;
public static bool IsHoe(Item item)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return item.dataId == HOE_ID || item.dataId == HOE_PRO_ID;
}
}
public class HelperFarmerFarmState : StateBase<HelperCleanerStateMachine>
{
[CompilerGenerated]
private sealed class <FarmGardenBedAfterDelay>d__6 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public GardenBed gardenBed;
public Item hoe;
public HelperFarmerFarmState <>4__this;
private ItemData <data>5__1;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <FarmGardenBedAfterDelay>d__6(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<data>5__1 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Invalid comparison between Unknown and I4
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
break;
case 1:
<>1__state = -1;
<data>5__1 = null;
break;
}
if ((int)gardenBed.state.Value == 0)
{
gardenBed.PlowBedServerRpc((byte)1);
ItemManager.Instance.GetItemData((uint)hoe.dataId, ref <data>5__1);
if (hoe.durability > <data>5__1.durabilityPerHit)
{
hoe.durability -= <data>5__1.durabilityPerHit;
((HelperBase)<>4__this.Owner).containerRef.containerNet.SetItemById(hoe.id, hoe);
}
else
{
((HelperBase)<>4__this.Owner).containerRef.containerNet.RemoveItemById(hoe.id);
}
<>2__current = (object)new WaitForSeconds(1f);
<>1__state = 1;
return true;
}
((StateBase<HelperCleanerStateMachine>)<>4__this).stateMachine.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerIdleState(((StateBase<HelperCleanerStateMachine>)<>4__this).stateMachine));
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <FertilizeGardenBedAfterDelay>d__8 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public GardenBed gardenBed;
public HelperFarmerFarmState <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <FertilizeGardenBedAfterDelay>d__8(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
if (!gardenBed.isFertilized.Value && ((HelperBase)<>4__this.Owner).containerRef.containerNet.GetItemAmount(Utils.FERTILIZER_ID) != 0)
{
((HelperBase)<>4__this.Owner).containerRef.containerNet.RemoveAmount(Utils.FERTILIZER_ID, (ushort)1);
gardenBed.isFertilized.Value = true;
<>2__current = (object)new WaitForSeconds(1f);
<>1__state = 1;
return true;
}
break;
case 1:
<>1__state = -1;
break;
}
((StateBase<HelperCleanerStateMachine>)<>4__this).stateMachine.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerIdleState(((StateBase<HelperCleanerStateMachine>)<>4__this).stateMachine));
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <WaterGardenBedAfterDelay>d__7 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public GardenBed gardenBed;
public Item waterCan;
public HelperFarmerFarmState <>4__this;
private ItemData <data>5__1;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <WaterGardenBedAfterDelay>d__7(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<data>5__1 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
if (!gardenBed.isWatered.Value)
{
ItemManager.Instance.GetItemData((uint)waterCan.dataId, ref <data>5__1);
if (waterCan.durability > <data>5__1.durabilityPerHit)
{
waterCan.durability -= <data>5__1.durabilityPerHit;
waterCan.charge--;
((HelperBase)<>4__this.Owner).containerRef.containerNet.SetItemById(waterCan.id, waterCan);
}
else
{
((HelperBase)<>4__this.Owner).containerRef.containerNet.RemoveItemById(waterCan.id);
}
gardenBed.isWatered.Value = true;
<>2__current = (object)new WaitForSeconds(1f);
<>1__state = 1;
return true;
}
break;
case 1:
<>1__state = -1;
<data>5__1 = null;
break;
}
((StateBase<HelperCleanerStateMachine>)<>4__this).stateMachine.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerIdleState(((StateBase<HelperCleanerStateMachine>)<>4__this).stateMachine));
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public HelperTaskFarm task;
private HelperCleaner Owner => base.stateMachine.Owner;
public HelperFarmerFarmState(HelperCleanerStateMachine newStateMachine, HelperTaskFarm newTask)
: base(newStateMachine)
{
task = newTask;
}
public override void ExecutePerFrame()
{
Owner.SetAnimatorMoveSpeed();
}
public override void OnEnter()
{
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
((HelperBase)Owner).animator.SetBool("Cleanup", true);
((HelperBase)Owner).agent.isStopped = true;
HelperCleaner owner = Owner;
HelperTaskFarm.TaskType taskType = task.taskType;
if (1 == 0)
{
}
IEnumerator enumerator = taskType switch
{
HelperTaskFarm.TaskType.Farm => FarmGardenBedAfterDelay(task.gardenBed, task.item),
HelperTaskFarm.TaskType.Fertilize => FertilizeGardenBedAfterDelay(task.gardenBed),
HelperTaskFarm.TaskType.Water => WaterGardenBedAfterDelay(task.gardenBed, task.item),
_ => throw new NotImplementedException("Unknown task type"),
};
if (1 == 0)
{
}
((MonoBehaviour)owner).StartCoroutine(enumerator);
ShortcutExtensions.DOLookAt(((Component)Owner).transform, ((Component)task.gardenBed).transform.position, 0.5f, (AxisConstraint)4, (Vector3?)null);
}
[IteratorStateMachine(typeof(<FarmGardenBedAfterDelay>d__6))]
private IEnumerator FarmGardenBedAfterDelay(GardenBed gardenBed, Item hoe)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <FarmGardenBedAfterDelay>d__6(0)
{
<>4__this = this,
gardenBed = gardenBed,
hoe = hoe
};
}
[IteratorStateMachine(typeof(<WaterGardenBedAfterDelay>d__7))]
private IEnumerator WaterGardenBedAfterDelay(GardenBed gardenBed, Item waterCan)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <WaterGardenBedAfterDelay>d__7(0)
{
<>4__this = this,
gardenBed = gardenBed,
waterCan = waterCan
};
}
[IteratorStateMachine(typeof(<FertilizeGardenBedAfterDelay>d__8))]
private IEnumerator FertilizeGardenBedAfterDelay(GardenBed gardenBed)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <FertilizeGardenBedAfterDelay>d__8(0)
{
<>4__this = this,
gardenBed = gardenBed
};
}
public override void OnExit()
{
((Behaviour)((HelperBase)Owner).agent).enabled = true;
((HelperBase)Owner).agent.isStopped = false;
((HelperBase)Owner).animator.SetBool("Cleanup", false);
}
public override void ExecutePerSecond()
{
}
}
public class HelperFarmerFullInventoryState : StateBase<HelperCleanerStateMachine>
{
private HelperCleaner Owner => base.stateMachine.Owner;
public HelperFarmerFullInventoryState(HelperCleanerStateMachine newStateMachine)
: base(newStateMachine)
{
}
public override void OnEnter()
{
Owner.SetAgentProperty((AgentStopProperty)0, false);
((HelperBase)Owner).isInventoryFull.Value = true;
}
public override void OnExit()
{
Owner.SetAgentProperty((AgentStopProperty)0, true);
((HelperBase)Owner).isInventoryFull.Value = false;
}
public override void ExecutePerFrame()
{
Owner.SetAnimatorMoveSpeed();
}
public override void ExecutePerSecond()
{
}
}
public class HelperFarmerIdleState : StateBase<HelperCleanerStateMachine>
{
private HelperTaskFarm externalTask;
private HelperCleaner Owner => base.stateMachine.Owner;
public HelperFarmerIdleState(HelperCleanerStateMachine newStateMachine)
: base(newStateMachine)
{
}
public HelperFarmerIdleState(HelperCleanerStateMachine newStateMachine, HelperTaskFarm task)
: base(newStateMachine)
{
externalTask = task;
}
public override void OnEnter()
{
if (externalTask != null)
{
base.stateMachine.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerMoveToState(base.stateMachine, externalTask));
return;
}
HelperTaskFarm helperTaskFarm = HelpersManager.Instance.GiveFarmerTask(Owner);
if (helperTaskFarm != null)
{
base.stateMachine.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerMoveToState(base.stateMachine, helperTaskFarm));
}
else
{
base.stateMachine.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerMoveToDefaultPosState(base.stateMachine));
}
}
public override void ExecutePerFrame()
{
Owner.SetAnimatorMoveSpeed();
}
public override void OnExit()
{
}
public override void ExecutePerSecond()
{
}
}
public static class MyExt
{
public static HelperTaskFarm GiveFarmerTask(this HelpersManager target, HelperCleaner owner)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Invalid comparison between Unknown and I4
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
GardenManager instance = GardenManager.Instance;
Item val = ((IEnumerable<Item>)StringExtension.ToList<Item>(((HelperBase)owner).containerRef.containerNet.items)).FirstOrDefault((Func<Item, bool>)Utils.IsHoe);
bool flag = val.id != 0;
bool flag2 = ((HelperBase)owner).containerRef.containerNet.GetItemAmount(Utils.FERTILIZER_ID) != 0;
Item val2 = ((IEnumerable<Item>)StringExtension.ToList<Item>(((HelperBase)owner).containerRef.containerNet.items)).FirstOrDefault((Func<Item, bool>)((Item item) => item.dataId == Utils.WATER_CAN_ID && item.charge > 0));
bool flag3 = val2.id != 0;
if (!(flag || flag2 || flag3))
{
return null;
}
GardenBed[] gardenBeds = instance.gardenBeds;
foreach (GardenBed val3 in gardenBeds)
{
bool flag4 = (int)val3.state.Value == 0;
if (flag && flag4)
{
return new HelperTaskFarm(((Component)val3).transform.position, val3, HelperTaskFarm.TaskType.Farm, val);
}
if (flag3 && !flag4 && !val3.isWatered.Value)
{
return new HelperTaskFarm(((Component)val3).transform.position, val3, HelperTaskFarm.TaskType.Water, val2);
}
if (flag2 && !flag4 && !val3.isFertilized.Value)
{
return new HelperTaskFarm(((Component)val3).transform.position, val3, HelperTaskFarm.TaskType.Fertilize);
}
}
return null;
}
}
public class HelperFarmerMoveToDefaultPosState : StateBase<HelperCleanerStateMachine>
{
private HelperCleaner Owner => base.stateMachine.Owner;
public HelperFarmerMoveToDefaultPosState(HelperCleanerStateMachine newStateMachine)
: base(newStateMachine)
{
}
public override void ExecutePerSecond()
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
if (Owner.CanMove() && ((Behaviour)((HelperBase)Owner).agent).isActiveAndEnabled)
{
((HelperBase)Owner).agent.SetDestination(((HelperBase)Owner).defaultPos);
}
CheckOnNestSit();
}
private void CheckOnNestSit()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
if (Vector3.Distance(((Component)Owner).transform.position, ((HelperBase)Owner).defaultPos) <= ((HelperBase)Owner).targetDetectDistance)
{
base.stateMachine.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerNestSittingState(base.stateMachine));
}
}
public override void ExecutePerFrame()
{
Owner.SetAnimatorMoveSpeed();
}
public override void OnEnter()
{
((StateBase<HelperCleanerStateMachine>)this).ExecutePerSecond();
}
public override void OnExit()
{
}
}
public class HelperFarmerMoveToState : StateBase<HelperCleanerStateMachine>
{
[CompilerGenerated]
private sealed class <RecalculateAfterDelay>d__5 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public HelperFarmerMoveToState <>4__this;
private Vector3 <point>5__1;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <RecalculateAfterDelay>d__5(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(1f);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
if (HelpersManager.Instance.GetReachablePointOnNavMesh((HelperBase)(object)<>4__this.Owner, <>4__this.task.movePos, ref <point>5__1, 20f))
{
<>4__this.task.movePos = <point>5__1;
}
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
private HelperTaskFarm task;
private HelperCleaner Owner => base.stateMachine.Owner;
public HelperFarmerMoveToState(HelperCleanerStateMachine newStateMachine, HelperTaskFarm newTask)
: base(newStateMachine)
{
task = newTask;
}
private void OnFurniturePlaced()
{
((MonoBehaviour)Owner).StartCoroutine(RecalculateAfterDelay());
}
[IteratorStateMachine(typeof(<RecalculateAfterDelay>d__5))]
private IEnumerator RecalculateAfterDelay()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <RecalculateAfterDelay>d__5(0)
{
<>4__this = this
};
}
public override void ExecutePerFrame()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
Owner.SetAnimatorMoveSpeed();
if (Vector2.Distance(FlatDistanceExtension.xz(((Component)Owner).transform.position), FlatDistanceExtension.xz(task.movePos)) <= ((HelperBase)Owner).targetDetectDistance)
{
base.stateMachine.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerFarmState(base.stateMachine, task));
}
}
public override void ExecutePerSecond()
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
if (Owner.CanMove())
{
((HelperBase)Owner).agent.SetDestination(task.movePos);
}
}
private void OnDespawn()
{
FurnitureManager instance = FurnitureManager.Instance;
instance.OnFurniturePlaced = (Action)Delegate.Remove(instance.OnFurniturePlaced, new Action(OnFurniturePlaced));
HelperCleaner owner = Owner;
owner.OnDespawn = (Action)Delegate.Remove(owner.OnDespawn, new Action(OnDespawn));
}
public override void OnEnter()
{
HelperCleaner owner = Owner;
owner.OnDespawn = (Action)Delegate.Combine(owner.OnDespawn, new Action(OnDespawn));
FurnitureManager instance = FurnitureManager.Instance;
instance.OnFurniturePlaced = (Action)Delegate.Combine(instance.OnFurniturePlaced, new Action(OnFurniturePlaced));
}
public override void OnExit()
{
HelperCleaner owner = Owner;
owner.OnDespawn = (Action)Delegate.Remove(owner.OnDespawn, new Action(OnDespawn));
FurnitureManager instance = FurnitureManager.Instance;
instance.OnFurniturePlaced = (Action)Delegate.Remove(instance.OnFurniturePlaced, new Action(OnFurniturePlaced));
}
}
public class HelperFarmerNestSittingState : StateBase<HelperCleanerStateMachine>
{
[CompilerGenerated]
private sealed class <JumpOff>d__9 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public HelperFarmerNestSittingState <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <JumpOff>d__9(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Expected O, but got Unknown
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>4__this.jumpInvoked = true;
<>4__this.DoJump(((HelperBase)<>4__this.Owner).landingPos.position);
((HelperBase)<>4__this.Owner).animator.SetBool("NestSit", false);
if (PlayerManager.Instance.isLocalPlayerSpawned)
{
SoundManager.Instance.PlayServerRpc((SoundEvent)8000, ((Component)<>4__this.Owner).transform.position, false, default(ServerRpcParams));
}
<>2__current = (object)new WaitForSeconds(<>4__this.jumpDuration);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
((Behaviour)((HelperBase)<>4__this.Owner).agent).enabled = true;
((StateBase<HelperCleanerStateMachine>)<>4__this).stateMachine.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerIdleState(((StateBase<HelperCleanerStateMachine>)<>4__this).stateMachine, <>4__this.task));
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
private bool invokeJumpOnEnter;
private bool jumpInvoked;
private float jumpDuration = 1.2f;
private HelperTaskFarm task;
private HelperCleaner Owner => base.stateMachine.Owner;
public HelperFarmerNestSittingState(HelperCleanerStateMachine newStateMachine, bool newInvokeJumpOnEnter = true)
: base(newStateMachine)
{
invokeJumpOnEnter = newInvokeJumpOnEnter;
}
public override void OnEnter()
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
((Behaviour)((HelperBase)Owner).agent).enabled = false;
((HelperBase)Owner).animator.SetBool("NestSit", true);
if (invokeJumpOnEnter)
{
DoJump(((HelperBase)Owner).defaultPos);
}
if (PlayerManager.Instance.isLocalPlayerSpawned)
{
SoundManager.Instance.PlayServerRpc((SoundEvent)8010, ((Component)Owner).transform.position, false, default(ServerRpcParams));
}
}
public override void OnExit()
{
}
[IteratorStateMachine(typeof(<JumpOff>d__9))]
private IEnumerator JumpOff()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <JumpOff>d__9(0)
{
<>4__this = this
};
}
private void DoJump(Vector3 endPos)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
((HelperBase)Owner).networkAnimator.SetTrigger("Jump");
ShortcutExtensions.DOJump(((Component)Owner).transform, endPos, 1f, 1, jumpDuration, false);
ShortcutExtensions.DORotate(((Component)Owner).transform, ((HelperBase)Owner).defaultRot, jumpDuration, (RotateMode)0);
}
public override void ExecutePerFrame()
{
Owner.SetAnimatorMoveSpeed();
}
public override void ExecutePerSecond()
{
if (!jumpInvoked && ((HelperBase)Owner).isActivated)
{
task = HelpersManager.Instance.GiveFarmerTask(Owner);
if (task != null)
{
((MonoBehaviour)Owner).StartCoroutine(JumpOff());
}
}
}
}
internal class HelperFarmerPatch
{
private static readonly List<Type> allowedTypes = new List<Type>(6)
{
typeof(HelperFarmerMoveToDefaultPosState),
typeof(HelperFarmerFarmState),
typeof(HelperFarmerNestSittingState),
typeof(HelperFarmerMoveToState),
typeof(HelperFarmerIdleState),
typeof(HelperFarmerFullInventoryState)
};
[HarmonyPatch(typeof(HelperCleaner), "OnNetworkSpawn")]
[HarmonyPostfix]
[HarmonyDebug]
public static void OnNetworkSpawn(HelperCleaner __instance)
{
if (((Object)((Component)__instance).gameObject).name == "Helper Farmer")
{
FieldInfo field = typeof(HelperCleaner).GetField("stateMachine", BindingFlags.Instance | BindingFlags.NonPublic);
object? value = field.GetValue(__instance);
HelperCleanerStateMachine val = (HelperCleanerStateMachine)((value is HelperCleanerStateMachine) ? value : null);
val.SetInitState((StateBase<HelperCleanerStateMachine>)new HelperFarmerNestSittingState(val, newInvokeJumpOnEnter: false));
}
}
[HarmonyPatch(typeof(HelperCleaner), "Activate")]
[HarmonyPrefix]
[HarmonyDebug]
public static bool Activate(HelperCleaner __instance)
{
((HelperBase)__instance).isActivated = true;
FieldInfo field = typeof(HelperCleaner).GetField("stateMachine", BindingFlags.Instance | BindingFlags.NonPublic);
object? value = field.GetValue(__instance);
HelperCleanerStateMachine val = (HelperCleanerStateMachine)((value is HelperCleanerStateMachine) ? value : null);
if (((object)val.CurrentState).GetType().Name == "HelperFarmerMoveToDefaultPosState")
{
val.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerIdleState(val));
return false;
}
return true;
}
[HarmonyPatch(typeof(HelperCleaner), "Deactivate")]
[HarmonyPrefix]
[HarmonyDebug]
public static bool Deactivate(HelperCleaner __instance)
{
FieldInfo field = typeof(HelperCleaner).GetField("stateMachine", BindingFlags.Instance | BindingFlags.NonPublic);
object? value = field.GetValue(__instance);
HelperCleanerStateMachine val = (HelperCleanerStateMachine)((value is HelperCleanerStateMachine) ? value : null);
if (!allowedTypes.Contains(((object)val.CurrentState).GetType()))
{
return true;
}
val.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerMoveToDefaultPosState(val));
HelpersManager.Instance.RemoveFromTaskList((HelperBase)(object)__instance);
((HelperBase)__instance).isActivated = false;
return false;
}
[HarmonyPatch(typeof(HelperCleaner), "CheckContainerChanged")]
[HarmonyPrefix]
[HarmonyDebug]
public static bool CheckContainerChanged(HelperCleaner __instance)
{
FieldInfo field = typeof(HelperCleaner).GetField("stateMachine", BindingFlags.Instance | BindingFlags.NonPublic);
object? value = field.GetValue(__instance);
HelperCleanerStateMachine val = (HelperCleanerStateMachine)((value is HelperCleanerStateMachine) ? value : null);
if (!allowedTypes.Contains(((object)val.CurrentState).GetType()))
{
return true;
}
if (val.CurrentState is HelperFarmerFullInventoryState && !((HelperBase)__instance).containerRef.containerNet.IsFull())
{
val.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerIdleState(val));
}
if (val.CurrentState is HelperFarmerMoveToState)
{
val.ChangeState((StateBase<HelperCleanerStateMachine>)new HelperFarmerIdleState(val));
}
return false;
}
}
internal class HelperFarmerStateMachinePatch
{
[HarmonyPatch(typeof(HelperCleanerStateMachine), "ChangeState")]
[HarmonyPrefix]
[HarmonyDebug]
private static bool ChangeState(HelperCleanerStateMachine __instance, StateBase<HelperCleanerStateMachine> newState)
{
if (((HelperBase)__instance.Owner).isActivated || !(((object)newState).GetType().Name != "HelperFarmerNestSittingState"))
{
__instance.Owner.currentStateName = ((object)newState).GetType().Name;
FieldInfo field = typeof(HelperCleanerStateMachine).GetField("isTransition", BindingFlags.Instance | BindingFlags.NonPublic);
FieldInfo field2 = typeof(HelperCleanerStateMachine).GetField("<PreviousState>k__BackingField", BindingFlags.Instance | BindingFlags.NonPublic);
FieldInfo field3 = typeof(HelperCleanerStateMachine).GetField("<CurrentState>k__BackingField", BindingFlags.Instance | BindingFlags.NonPublic);
field.SetValue(__instance, true);
__instance.CurrentState.OnExit();
field2.SetValue(__instance, __instance.CurrentState);
field3.SetValue(__instance, newState);
__instance.CurrentState.OnEnter();
field.SetValue(__instance, false);
return false;
}
return true;
}
}
public class HelperTaskFarm : HelperTaskBase
{
public enum TaskType
{
Farm,
Water,
Fertilize
}
public Vector3 farmPos;
public Vector3 movePos;
public GardenBed gardenBed;
public TaskType taskType;
public Item item;
public HelperTaskFarm(Vector3 newMovePos, GardenBed newGardenBed, TaskType newTaskType)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
movePos = newMovePos;
gardenBed = newGardenBed;
taskType = newTaskType;
((HelperTaskBase)this)..ctor();
}
public HelperTaskFarm(Vector3 newMovePos, GardenBed newGardenBed, TaskType newTaskType, Item newItem)
: this(newMovePos, newGardenBed, newTaskType)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
item = newItem;
}
}
[BepInPlugin("Sayrus.HelperFarmer", "Helper Farmer", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
internal static ManualLogSource Logger;
private void Awake()
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected O, but got Unknown
Logger = ((BaseUnityPlugin)this).Logger;
Logger.LogInfo((object)"Plugin Sayrus.HelperFarmer is loaded!");
Harmony val = new Harmony("Sayrus.HelperFarmer");
val.PatchAll(typeof(PatchGardenManager_Awake));
val.PatchAll(typeof(HelperFarmerStateMachinePatch));
val.PatchAll(typeof(HelperFarmerPatch));
InjectLocalizedString("ItemData", "ItemDataNameHelperFarmerHouse", "Helper Farmer House");
InjectLocalizedString("ItemData", "ItemDataDescrHelperFarmerHouse", "Helps with farming.");
InjectLocalizedString("Interactive", "InteractiveNameHelperFarmer", "Helper Farmer");
}
private void InjectLocalizedString(string tableCollectionName, string key, string localizedValue)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
LocalizedStringDatabase stringDatabase = LocalizationSettings.StringDatabase;
StringTable result = ((LocalizedDatabase<StringTable, StringTableEntry>)(object)stringDatabase).GetTableAsync(TableReference.op_Implicit(tableCollectionName), (Locale)null).Result;
if (!((Object)(object)result == (Object)null) && ((DetailedLocalizationTable<StringTableEntry>)(object)result).GetEntry(key) == null)
{
((DetailedLocalizationTable<StringTableEntry>)(object)result).AddEntry(key, localizedValue);
}
}
}
public class PatchGardenManager_Awake
{
private static ItemData savedItem;
[HarmonyDebug]
[HarmonyPatch(typeof(GardenManager), "Awake")]
[HarmonyPrefix]
private static void Prefix(GardenManager __instance)
{
if (!((Object)(object)GardenManager.Instance != (Object)null))
{
GardenBed[] gardenBeds = __instance.gardenBeds;
foreach (GardenBed obj in gardenBeds)
{
typeof(GardenBed).GetField("targetHoeHitCount", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(obj, 1);
}
}
}
[HarmonyPatch(typeof(ItemManager), "Awake")]
[HarmonyPrefix]
[HarmonyDebug]
private static void AddCustomItems(ItemManager __instance)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Expected O, but got Unknown
ItemData val = __instance.itemDataHub.itemData.Where((ItemData item) => item.id == Utils.CLEANER_HOUSE_ID).First();
ItemData val2 = new ItemData
{
id = Utils.FARMER_HOUSE_ID,
name = "ItemDataNameHelperFarmerHouse",
icon = val.icon,
type = (Type)10,
maxStack = 1,
maxCharge = 0,
durability = 0,
durabilityPerHit = 0,
durabilityDecreasePerRepair = 0,
price = 1800,
playerCantSell = false,
playerCantDrop = false,
buyByOne = false,
quest = false,
shopItem = true,
alchemicalIngredient = false,
commonLootItem = false,
levelDependant = 3,
questDependant = 0,
doNotSave = false,
collectiblePrefab = val.collectiblePrefab,
fpPrefab = val.fpPrefab,
tpPrefab = val.tpPrefab,
netPrefab = val.netPrefab,
containerClean = null,
containerDirty = null,
itemDescription = "ItemDataDescrHelperFarmerHouse"
};
__instance.itemDataHub.itemData = CollectionExtensions.AddItem<ItemData>((IEnumerable<ItemData>)__instance.itemDataHub.itemData, val2).ToArray();
savedItem = val2;
Debug.Log((object)"[AddCustomItems] Added custom wares");
}
[HarmonyPatch(typeof(FurnitureManager), "OnNetworkSpawn")]
[HarmonyTranspiler]
[HarmonyDebug]
private static IEnumerable<CodeInstruction> Furniture_OnNetworkSpawn(IEnumerable<CodeInstruction> instructions)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Expected O, but got Unknown
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Expected O, but got Unknown
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Expected O, but got Unknown
return new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
{
new CodeMatch((Func<CodeInstruction, bool>)((CodeInstruction instruction) => instruction.opcode == OpCodes.Call && (instruction.operand as MethodInfo).Name == "Instantiate" && (instruction.operand as MethodInfo).ReturnType == typeof(GameObject)), (string)null)
}).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[3]
{
new CodeInstruction(OpCodes.Ldloc_2, (object)null),
new CodeInstruction(OpCodes.Ldfld, (object)AccessTools.Field(typeof(SavedDevice), "itemDataId")),
new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(PatchGardenManager_Awake), "InstantiateFurniture_OnLoad", (Type[])null, (Type[])null))
}).RemoveInstruction()
.Instructions();
}
[HarmonyPatch(typeof(FurnitureManager), "PlaceFurnitureServerRpc", new Type[]
{
typeof(uint),
typeof(Vector3),
typeof(Quaternion),
typeof(ServerRpcParams)
})]
[HarmonyTranspiler]
[HarmonyDebug]
private static IEnumerable<CodeInstruction> PlaceFurnitureServerRpc(IEnumerable<CodeInstruction> instructions)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Expected O, but got Unknown
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Expected O, but got Unknown
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Expected O, but got Unknown
return new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
{
new CodeMatch((Func<CodeInstruction, bool>)((CodeInstruction instruction) => instruction.opcode == OpCodes.Call && (instruction.operand as MethodInfo).Name == "Instantiate" && (instruction.operand as MethodInfo).ReturnType == typeof(GameObject)), (string)null)
}).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[3]
{
new CodeInstruction(OpCodes.Ldloc_2, (object)null),
new CodeInstruction(OpCodes.Ldfld, (object)AccessTools.Field(typeof(Item), "dataId")),
new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(PatchGardenManager_Awake), "InstantiateFurniture", (Type[])null, (Type[])null))
}).RemoveInstruction()
.Instructions();
}
[HarmonyPatch(typeof(HelperHouse), "OnNetworkSpawn")]
[HarmonyTranspiler]
[HarmonyDebug]
private static IEnumerable<CodeInstruction> OnNetworkSpawn(IEnumerable<CodeInstruction> instructions)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Expected O, but got Unknown
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Expected O, but got Unknown
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Expected O, but got Unknown
return new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
{
new CodeMatch((Func<CodeInstruction, bool>)((CodeInstruction instruction) => instruction.opcode == OpCodes.Call && (instruction.operand as MethodInfo).Name == "Instantiate" && (instruction.operand as MethodInfo).ReturnType == typeof(HelperBase)), (string)null)
}).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[3]
{
new CodeInstruction(OpCodes.Ldarg_0, (object)null),
new CodeInstruction(OpCodes.Ldfld, (object)AccessTools.Field(typeof(HelperHouse), "furniture")),
new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(PatchGardenManager_Awake), "InstantiateHelper", (Type[])null, (Type[])null))
}).RemoveInstruction()
.Instructions();
}
public static GameObject InstantiateFurniture_OnLoad(GameObject original, Vector3 position, Quaternion rotation, Transform parent, uint itemId)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(original, position, rotation, parent);
if (itemId == Utils.FARMER_HOUSE_ID)
{
InitFarmerHouse(val);
}
return val;
}
public static GameObject InstantiateFurniture(GameObject original, Vector3 position, Quaternion rotation, uint itemId)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(original, position, rotation);
if (itemId == Utils.FARMER_HOUSE_ID)
{
InitFarmerHouse(val);
}
return val;
}
private static void InitFarmerHouse(GameObject owlHouse)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
((Renderer)((Component)owlHouse.transform.Find("Container/Owls_Nest/Owls_Nest/Owls_Nest")).GetComponent<MeshRenderer>()).material.color = new Color(0.192f, 1f, 0.086f);
ItemManager.Instance.GetItemData((uint)Utils.FARMER_HOUSE_ID, ref owlHouse.GetComponent<Furniture>().itemData);
}
public static Object InstantiateHelper(Object original, Vector3 position, Quaternion rotation, Furniture demo)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
Object obj = Object.Instantiate(original, position, rotation);
HelperBase val = (HelperBase)(object)((obj is HelperBase) ? obj : null);
if (demo.itemData.id == Utils.FARMER_HOUSE_ID)
{
((Renderer)((Component)((Component)val).transform.Find("HalloweenOwl_Gr/coat_low")).GetComponent<SkinnedMeshRenderer>()).material.color = new Color(0.192f, 1f, 0.086f);
((Renderer)((Component)((Component)val).transform.Find("HalloweenOwl_Gr/hood_low")).GetComponent<SkinnedMeshRenderer>()).material.color = new Color(0.192f, 1f, 0.086f);
((Object)val).name = "Helper Farmer";
((Component)val).GetComponent<Interactive>().ObjectTitle = "InteractiveNameHelperFarmer";
}
return (Object)(object)val;
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "Sayrus.HelperFarmer";
public const string PLUGIN_NAME = "Helper Farmer";
public const string PLUGIN_VERSION = "1.0.0";
}
}