using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Text.Json;
using System.Text.Json.Serialization;
using BepInEx;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppSystem.Collections.Generic;
using SOD.Common;
using SOD.Common.BepInEx;
using SOD.Common.BepInEx.Configuration;
using SOD.Common.Custom;
using SOD.Common.Extensions;
using SOD.Common.Helpers;
using SOD.Common.Helpers.SyncDiskObjects;
using SOD.CourierJobs;
using SOD.CourierJobs.Core;
using SOD.MailCourier.Core;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("SOD.MailCourier")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+84fa49cefc00fb4270fae3c90bd4fbe6711a0f4d")]
[assembly: AssemblyProduct("SOD.MailCourier")]
[assembly: AssemblyTitle("SOD.MailCourier")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace SOD.MailCourier.Patches
{
internal static class BioScreenControllerPatches
{
[HarmonyPatch(typeof(BioScreenController), "UpdateSummary")]
internal static class BioScreenController_UpdateSummary
{
[HarmonyPrefix]
internal static bool Prefix(BioScreenController __instance)
{
if (__instance.hoveredSlot != null && __instance.isOpen)
{
Interactable interactable = __instance.hoveredSlot.GetInteractable();
if (interactable != null && interactable.preset.summaryMessageSource != null && interactable.preset.summaryMessageSource == "mail_courier_job_message")
{
CourierJob courierJob = CourierJobGenerator.FindJobBySealedMailId(interactable.id);
if (courierJob != null)
{
__instance.summaryTextToDisplay = "Delivery address: " + courierJob.DeliveryAddressName + " Mailbox";
return false;
}
__instance.summaryTextToDisplay = "This delivery is no longer valid, please discard this item.";
}
}
return true;
}
}
[HarmonyPatch(typeof(BioScreenController), "SelectSlot")]
internal static class BioScreenController_SelectSlot
{
[HarmonyPrefix]
internal static bool Prefix(BioScreenController __instance, InventorySlot newSlot)
{
if (__instance.selectedSlot != null && __instance.isOpen)
{
Interactable interactable = __instance.selectedSlot.GetInteractable();
if (interactable != null && interactable.preset.summaryMessageSource != null && interactable.preset.summaryMessageSource == "mail_courier_job_message")
{
if (newSlot.interactableID == -1)
{
CourierJobGenerator.SetDestinationRoute(null);
}
else if (newSlot.interactableID != interactable.id)
{
CourierJob courierJob = CourierJobGenerator.FindJobBySealedMailId(newSlot.interactableID);
if (courierJob != null)
{
CourierJobGenerator.SetDestinationRoute(courierJob.Mailbox);
}
else
{
CourierJobGenerator.SetDestinationRoute(null);
}
}
}
else if (newSlot.interactableID != -1)
{
CourierJob courierJob2 = CourierJobGenerator.FindJobBySealedMailId(newSlot.interactableID);
if (courierJob2 != null)
{
CourierJobGenerator.SetDestinationRoute(courierJob2.Mailbox);
}
else
{
CourierJobGenerator.SetDestinationRoute(null);
}
}
}
return true;
}
}
}
internal static class FirstPersonItemControllerPatches
{
[HarmonyPatch(typeof(FirstPersonItemController), "PickUpItem")]
internal static class FirstPersonItemController_PickUpItem
{
[HarmonyPrefix]
internal static void Prefix(Interactable pickUpThis)
{
if (pickUpThis != null && (SoCustomComparison)(object)pickUpThis.preset != (SoCustomComparison)null && pickUpThis.preset.summaryMessageSource != null && pickUpThis.preset.summaryMessageSource == "mail_courier_job_message" && ShopSelectButtonControllerPatches.ShopSelectButtonController_PurchaseExecute.ComingFromAPurchase)
{
MailCourierInteractable = pickUpThis;
}
}
}
[HarmonyPatch(typeof(FirstPersonItemController), "UpdateCurrentActions")]
internal static class FirstPersonItemController_UpdateCurrentActions
{
[HarmonyPrefix]
internal static bool Prefix(FirstPersonItemController __instance)
{
if (InteractionController.Instance.lookingAtInteractable && (Object)(object)InteractionController.Instance.currentLookingAtInteractable != (Object)null && InteractionController.Instance.currentLookingAtInteractable.interactable != null && BioScreenController.Instance.selectedSlot != null && BioScreenController.Instance.selectedSlot.interactableID > -1 && CourierJobGenerator.FindJobsByMailboxId(InteractionController.Instance.currentLookingAtInteractable.interactable.id).Any((CourierJob job) => job.SealedMailId == BioScreenController.Instance.selectedSlot.interactableID))
{
InteractionAction currentAction = __instance.currentActions[(InteractionKey)1].currentAction;
if (((currentAction != null) ? currentAction.interactionName : null) != "mail_courier_job_message" || !__instance.currentActions[(InteractionKey)1].enabled)
{
Enumerator<InteractionKey, InteractableCurrentAction> enumerator = __instance.currentActions.Values.GetEnumerator();
while (enumerator.MoveNext())
{
InteractableCurrentAction current = enumerator.Current;
current.display = false;
current.enabled = false;
}
InteractableCurrentAction obj = __instance.currentActions[(InteractionKey)1];
obj.display = true;
obj.enabled = true;
obj.currentAction = (InteractionAction)(object)CourierJobGenerator.InsertMailInteractionAction;
}
return false;
}
return true;
}
}
[HarmonyPatch(typeof(FirstPersonItemController), "OnInteraction")]
internal static class FirstPersonItemController_OnInteraction
{
[HarmonyPrefix]
internal static bool Prefix(FirstPersonItemController __instance, InteractionKey input)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
InteractableCurrentAction val = default(InteractableCurrentAction);
if (__instance.currentActions.TryGetValue(input, ref val))
{
InteractionAction currentAction = val.currentAction;
if (((currentAction != null) ? currentAction.interactionName : null) == "mail_courier_job_message" && val.enabled && val.display)
{
InsertMailIntoMailbox();
return false;
}
}
return true;
}
private static void InsertMailIntoMailbox()
{
if (BioScreenController.Instance.selectedSlot != null && BioScreenController.Instance.selectedSlot.interactableID > -1)
{
CourierJob courierJob = CourierJobGenerator.FindJobBySealedMailId(BioScreenController.Instance.selectedSlot.interactableID);
if (courierJob != null)
{
CourierJobGenerator.DestroyCourierJob(courierJob);
GameplayController.Instance.AddMoney(courierJob.Payment, true, (string)null);
}
}
}
}
internal static Interactable MailCourierInteractable;
}
internal static class ShopSelectButtonControllerPatches
{
[HarmonyPatch(typeof(ShopSelectButtonController), "UpdateTooltip")]
internal static class ShopSelectButtonController_UpdateTooltip
{
[HarmonyPrefix]
internal static bool Prefix(ShopSelectButtonController __instance)
{
if ((SoCustomComparison)(object)__instance.preset == (SoCustomComparison)null || __instance.preset.summaryMessageSource != "mail_courier_job_message")
{
return true;
}
((ButtonController)__instance).tooltip.mainText = "Generates a random mail delivery mission, should you choose to accept it.";
return true;
}
}
[HarmonyPatch(typeof(ShopSelectButtonController), "PurchaseExecute")]
internal static class ShopSelectButtonController_PurchaseExecute
{
internal static bool ComingFromAPurchase;
[HarmonyPrefix]
internal static void Prefix(ShopSelectButtonController __instance, ref int __state)
{
if (!((SoCustomComparison)(object)__instance.preset == (SoCustomComparison)null) && !(__instance.preset.summaryMessageSource != "mail_courier_job_message"))
{
__state = GameplayController.Instance.money;
ComingFromAPurchase = true;
}
}
[HarmonyPostfix]
internal static void Postfix(ShopSelectButtonController __instance, ref int __state)
{
ComingFromAPurchase = false;
if (!((SoCustomComparison)(object)__instance.preset == (SoCustomComparison)null) && !(__instance.preset.summaryMessageSource != "mail_courier_job_message") && GameplayController.Instance.money != __state && FirstPersonItemControllerPatches.MailCourierInteractable != null)
{
CourierJobGenerator.CreateJob(FirstPersonItemControllerPatches.MailCourierInteractable.id);
FirstPersonItemControllerPatches.MailCourierInteractable = null;
}
}
}
}
internal static class ToolboxPatches
{
[HarmonyPatch(typeof(Toolbox), "LoadAll")]
internal static class Toolbox_LoadAll
{
[HarmonyPostfix]
internal static void Postfix()
{
CourierJobGenerator.RegisterMailCourierJobs();
}
}
}
}
namespace SOD.MailCourier.Core
{
internal static class CourierJobGenerator
{
private const string SAVEDATA_FILENAME = "mailcourier_savedata.json";
private static readonly Dictionary<int, CourierJob> _courierJobsBySealedMail = new Dictionary<int, CourierJob>();
private static readonly Dictionary<int, List<CourierJob>> _courierJobsByMailbox = new Dictionary<int, List<CourierJob>>();
private static Dictionary<int, Interactable> _mailboxLocations;
private static List<Interactable> _mailboxList;
private static readonly Lazy<JsonSerializerOptions> _serializerOptions = new Lazy<JsonSerializerOptions>(() => new JsonSerializerOptions
{
WriteIndented = true,
Converters =
{
(JsonConverter)new Vector3JsonConverter(),
(JsonConverter)new TimeDataJsonConverter()
}
});
internal static readonly FPSInteractionAction InsertMailInteractionAction = new FPSInteractionAction
{
action = new AIActionPreset
{
presetName = "mail_courier_job_message",
onlyAvailableWhenItemSelected = true
},
interactionName = "mail_courier_job_message",
keyOverride = (InteractionKey)1
};
internal static void CreateJob(int sealedMailId)
{
Interactable val = FindMailbox(null);
if (val == null)
{
PluginController<Plugin, IPluginBindings>.Log.LogError((object)"Unable to create mail courier job, no mailboxes found in the world.");
return;
}
NewAddress val2 = ((Il2CppObjectBase)val.objectRef).TryCast<NewAddress>();
string deliveryAddressName = val2.residence.GetResidenceString() + " " + ((Object)((NewGameLocation)val2).building).name;
CourierJob courierJob = new CourierJob(val.id, sealedMailId, deliveryAddressName);
_courierJobsBySealedMail.Add(sealedMailId, courierJob);
if (!_courierJobsByMailbox.TryGetValue(val.id, out var value))
{
value = (_courierJobsByMailbox[val.id] = new List<CourierJob>());
}
value.Add(courierJob);
SetDestinationRoute(val);
}
internal static void SetDestinationRoute(Interactable mailbox)
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
if (MapController.Instance.playerRoute != null)
{
if (mailbox == null)
{
foreach (CourierJob value in _courierJobsBySealedMail.Values)
{
if (MapController.Instance.playerRoute.end.nodeCoord == value.Mailbox.node.nodeCoord)
{
MapController.Instance.playerRoute.Remove();
break;
}
}
}
if (((PluginController<Plugin, IPluginBindings>)PluginController<Plugin, IPluginBindings>.Instance).Config.OverwriteExistingWaypoint && MapController.Instance.playerRoute != null)
{
MapController.Instance.playerRoute.Remove();
}
}
if (mailbox != null)
{
MapController.Instance.PlotPlayerRoute(mailbox.node, true, (NewGameLocation)null);
}
}
internal static void CleanupCourierJobs()
{
//IL_0012: 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)
//IL_00a3: 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_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
if (_courierJobsBySealedMail.Count == 0)
{
return;
}
TimeData currentDateTime = Lib.Time.CurrentDateTime;
Interactable[] source = default(Interactable[]);
foreach (CourierJob courierJob in _courierJobsBySealedMail.Values.ToList())
{
Interactable sealedMail = courierJob.SealedMail;
if (sealedMail == null || sealedMail.rem)
{
DestroyCourierJob(courierJob);
continue;
}
if (Lib.Gameplay.HasInteractableInInventory("DeliverableMailItemPreset", ref source) && source.Any((Interactable a) => a.id == courierJob.SealedMailId))
{
courierJob.LastTimeActive = currentDateTime;
}
TimeData lastTimeActive = courierJob.LastTimeActive;
if (((TimeData)(ref lastTimeActive)).AddHours(4) <= currentDateTime)
{
DestroyCourierJob(courierJob);
}
}
}
internal static void DestroyCourierJob(CourierJob courierJob)
{
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
if (_courierJobsBySealedMail.ContainsKey(courierJob.SealedMailId))
{
Interactable val = FindSealedMail(courierJob.SealedMailId);
if (val != null && val.id > 0 && !val.rem)
{
val.Delete();
}
if (MapController.Instance.playerRoute != null && MapController.Instance.playerRoute.end.nodeCoord == courierJob.Mailbox.node.nodeCoord)
{
MapController.Instance.playerRoute.Remove();
}
_courierJobsBySealedMail.Remove(courierJob.SealedMailId);
List<CourierJob> list = _courierJobsByMailbox[courierJob.MailboxId];
list.Remove(courierJob);
if (list.Count == 0)
{
_courierJobsByMailbox.Remove(courierJob.MailboxId);
}
}
}
internal static Interactable FindMailbox(int? mailboxId)
{
if (_mailboxLocations == null)
{
IEnumerable<IGrouping<int, ResidenceController>> enumerable = from a in EnumerableExtensions.Where<ResidenceController>(CityData.Instance.residenceDirectory, (Func<ResidenceController, bool>)((ResidenceController a) => a.mailbox != null && a.mailbox.integratedInteractables != null && a.mailbox.integratedInteractables.Count > 0))
group a by a.mailbox.id;
_mailboxList = new List<Interactable>();
foreach (IGrouping<int, ResidenceController> item in enumerable)
{
ResidenceController val = item.First();
_mailboxList.AddRange(EnumerableExtensions.Where<Interactable>(val.mailbox.integratedInteractables, (Func<Interactable, bool>)delegate(Interactable a)
{
if (a.objectRef == null)
{
return false;
}
NewAddress val2 = ((Il2CppObjectBase)a.objectRef).TryCast<NewAddress>();
return !((Object)(object)val2 == (Object)null) && (Object)(object)val2.residence != (Object)null;
}));
}
_mailboxLocations = _mailboxList.ToDictionary((Interactable a) => a.id);
}
if (mailboxId.HasValue)
{
return _mailboxLocations[mailboxId.Value];
}
return _mailboxList[Random.Shared.Next(_mailboxList.Count)];
}
internal static Interactable FindSealedMail(int sealedMailId)
{
Interactable result = default(Interactable);
if (!CityData.Instance.savableInteractableDictionary.TryGetValue(sealedMailId, ref result))
{
return null;
}
return result;
}
internal static CourierJob FindJobBySealedMailId(int sealedMailId)
{
if (!_courierJobsBySealedMail.TryGetValue(sealedMailId, out var value))
{
return null;
}
return value;
}
internal static IReadOnlyList<CourierJob> FindJobsByMailboxId(int mailboxId)
{
if (!_courierJobsByMailbox.TryGetValue(mailboxId, out var value))
{
return new List<CourierJob>();
}
return value;
}
internal static void LoadFromFile(SaveGameArgs saveGameArgs)
{
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Expected O, but got Unknown
_courierJobsBySealedMail.Clear();
_courierJobsByMailbox.Clear();
string path = Path.Combine(Lib.SaveGame.GetSaveGameDataPath(saveGameArgs), "mailcourier_savedata.json");
if (!File.Exists(path))
{
return;
}
List<CourierJob> list = JsonSerializer.Deserialize<List<CourierJob>>(File.ReadAllText(path), _serializerOptions.Value);
foreach (CourierJob item in list)
{
_courierJobsBySealedMail.Add(item.SealedMailId, item);
if (!_courierJobsByMailbox.TryGetValue(item.MailboxId, out var value))
{
value = (_courierJobsByMailbox[item.MailboxId] = new List<CourierJob>());
}
value.Add(item);
}
ManualLogSource log = PluginController<Plugin, IPluginBindings>.Log;
bool flag = default(bool);
BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(40, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Loaded ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(list.Count);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" active player mail courier jobs.");
}
log.LogInfo(val);
}
internal static void SaveToFile(SaveGameArgs saveGameArgs)
{
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Expected O, but got Unknown
string path = Path.Combine(Lib.SaveGame.GetSaveGameDataPath(saveGameArgs), "mailcourier_savedata.json");
if (_courierJobsBySealedMail.Count == 0)
{
if (File.Exists(path))
{
File.Delete(path);
}
return;
}
string contents = JsonSerializer.Serialize(_courierJobsBySealedMail.Values.ToList(), _serializerOptions.Value);
File.WriteAllText(path, contents);
ManualLogSource log = PluginController<Plugin, IPluginBindings>.Log;
bool flag = default(bool);
BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(39, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Saved ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(_courierJobsBySealedMail.Count);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" active player mail courier jobs.");
}
log.LogInfo(val);
}
internal static void RegisterMailCourierJobs()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
_courierJobsBySealedMail.Clear();
_courierJobsByMailbox.Clear();
_mailboxLocations = null;
_mailboxList = null;
SyncDiskSaleLocation val = (SyncDiskSaleLocation)13;
string newsStand = ((object)(SyncDiskSaleLocation)(ref val)).ToString();
IEnumerable<MenuPreset> enumerable = from a in GameExtensions.GetFromResourceCache<MenuPreset>(Toolbox.Instance)
where ((SoCustomComparison)a).GetPresetName() == newsStand
select a;
InteractablePreset interactablePreset = Toolbox.Instance.GetInteractablePreset("SealedEnvelope");
RetailItemPreset fromResourceCache = GameExtensions.GetFromResourceCache<RetailItemPreset>(Toolbox.Instance, "CleaningSpray");
InteractablePreset val2 = Object.Instantiate<InteractablePreset>(interactablePreset);
RetailItemPreset val3 = Object.Instantiate<RetailItemPreset>(fromResourceCache);
((SoCustomComparison)val2).presetName = "DeliverableMailItemPreset";
((Object)val2).name = "DeliverableMailItemPreset_ShopText";
((SoCustomComparison)val3).presetName = "DeliverableMailItemRetailPreset";
((Object)val3).name = ((SoCustomComparison)val3).presetName;
Lib.DdsStrings["evidence.names", ((SoCustomComparison)val2).presetName] = "Sealed Mail";
Lib.DdsStrings["evidence.names", ((Object)val2).name] = "Mail Courier Job";
Lib.DdsStrings["ui.interaction", "mail_courier_job_message"] = "Insert";
val2.placeAtHome = false;
val2.spawnEvidence = null;
val2.useEvidence = false;
val2.findEvidence = (FindEvidence)0;
val2.readingSource = (ReadingModeSource)0;
val2.value = new Vector2(50f, 50f);
val2.retailItem = val3;
val2.summaryMessageSource = "mail_courier_job_message";
((InteractionAction)InsertMailInteractionAction).action.availableWhenItemsSelected.Add(val2.fpsItem);
val2.fpsItem.actions.Add(InsertMailInteractionAction);
val3.itemPreset = val2;
val3.menuCategory = (MenuCategory)3;
val3.desireCategory = (CompanyCategory)7;
val3.isConsumable = false;
val3.canBeFavourite = false;
val3.isHot = false;
GameExtensions.GetResourceCacheCollection<RetailItemPreset>(Toolbox.Instance)[((SoCustomComparison)val3).presetName] = (ScriptableObject)(object)val3;
Toolbox.Instance.objectPresetDictionary[((SoCustomComparison)val2).presetName] = val2;
foreach (MenuPreset item in enumerable)
{
InteractablePreset val4 = EnumerableExtensions.Where<InteractablePreset>(item.itemsSold, (Func<InteractablePreset, bool>)((InteractablePreset a) => ((SoCustomComparison)a).presetName == "DeliverableMailItemPreset")).FirstOrDefault();
if ((SoCustomComparison)(object)val4 != (SoCustomComparison)null)
{
item.itemsSold.Remove(val4);
item.itemsSold.Insert(0, val2);
}
else
{
item.itemsSold.Insert(0, val2);
}
}
PluginController<Plugin, IPluginBindings>.Log.LogInfo((object)"Registered mail courier job in newsstands.");
}
}
}
namespace SOD.CourierJobs
{
public interface IPluginBindings
{
[Binding(50, "Initial mail delivery cost. (refunded on completion)", "General.InitialCost")]
int InitialCost { get; set; }
[Binding(75, "The minimum reward for a mail delivery.", "General.BaseReward")]
int BaseReward { get; set; }
[Binding(0.75f, "The percentage of the distance to travel as a bonus on top of the base reward.", "General.DistanceBonusPercentage")]
float DistanceBonusPercentage { get; set; }
[Binding(false, "If you already have a waypoint, should it be overwritten when accepting a new courier job?", "Optional.OverwriteExistingWaypoint")]
bool OverwriteExistingWaypoint { get; set; }
}
[BepInPlugin("Venomaus.SOD.MailCourier", "MailCourier", "1.0.2")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Plugin : PluginController<Plugin, IPluginBindings>
{
public const string PLUGIN_GUID = "Venomaus.SOD.MailCourier";
public const string PLUGIN_NAME = "MailCourier";
public const string PLUGIN_VERSION = "1.0.2";
public override void Load()
{
base.Harmony.PatchAll(Assembly.GetExecutingAssembly());
PluginController<Plugin, IPluginBindings>.Log.LogInfo((object)"Plugin is patched.");
Lib.SaveGame.OnBeforeLoad += SaveGame_OnBeforeLoad;
Lib.SaveGame.OnBeforeSave += SaveGame_OnBeforeSave;
Lib.Time.OnHourChanged += Time_OnHourChanged;
}
private void Time_OnHourChanged(object sender, TimeChangedArgs e)
{
CourierJobGenerator.CleanupCourierJobs();
}
private void SaveGame_OnBeforeLoad(object sender, SaveGameArgs e)
{
CourierJobGenerator.LoadFromFile(e);
}
private void SaveGame_OnBeforeSave(object sender, SaveGameArgs e)
{
CourierJobGenerator.SaveToFile(e);
}
}
}
namespace SOD.CourierJobs.Core
{
public sealed class CourierJob
{
public int MailboxId { get; set; }
public int SealedMailId { get; set; }
public Vector3 PointOfOrigin { get; set; }
public string DeliveryAddressName { get; set; }
public TimeData LastTimeActive { get; set; }
[JsonIgnore]
internal int Payment
{
get
{
//IL_0027: 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)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
float num = ((PluginController<Plugin, IPluginBindings>)PluginController<Plugin, IPluginBindings>.Instance).Config.InitialCost + ((PluginController<Plugin, IPluginBindings>)PluginController<Plugin, IPluginBindings>.Instance).Config.BaseReward;
Vector3 val = Mailbox.GetWorldPosition(true) - PointOfOrigin;
return (int)Math.Round(num + ((Vector3)(ref val)).magnitude * ((PluginController<Plugin, IPluginBindings>)PluginController<Plugin, IPluginBindings>.Instance).Config.DistanceBonusPercentage);
}
}
[JsonIgnore]
internal Interactable Mailbox => CourierJobGenerator.FindMailbox(MailboxId);
[JsonIgnore]
internal Interactable SealedMail => CourierJobGenerator.FindSealedMail(SealedMailId);
public CourierJob()
{
}
public CourierJob(int mailboxId, int mailItemId, string deliveryAddressName)
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
MailboxId = mailboxId;
SealedMailId = mailItemId;
DeliveryAddressName = deliveryAddressName;
LastTimeActive = Lib.Time.CurrentDateTime;
}
}
}