using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using HarmonyLib;
using Jotunn.Entities;
using Jotunn.Managers;
using Newtonsoft.Json;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("MMOHeim SimpleQuest")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MMOHeim SimpleQuest")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("526f6350-8ad0-4fd8-8066-5806b070f058")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace SimpleQuest;
[HarmonyPatch(typeof(Inventory), "AddItem", new Type[] { typeof(ItemData) })]
public static class ItemCollectionPatch
{
private static void Postfix(Inventory __instance, ItemData item, bool __result)
{
if (!__result || item == null || (Object)(object)item.m_dropPrefab == (Object)null || (Object)(object)Player.m_localPlayer == (Object)null || __instance != ((Humanoid)Player.m_localPlayer).GetInventory())
{
return;
}
if ((Object)(object)SimpleQuestPro.Instance != (Object)null)
{
string name = ((Object)item.m_dropPrefab).name;
foreach (QuestConfig item2 in SimpleQuestPro.Instance.serverQuests.Quests.Where((QuestConfig q) => string.IsNullOrEmpty(q.PreReqID) || SimpleQuestPro.Instance.completedQuests.Contains(q.PreReqID)).ToList())
{
if (!SimpleQuestPro.Instance.completedQuests.Contains(item2.ID))
{
QuestRequirement questRequirement = item2.Reqs?.FirstOrDefault((QuestRequirement r) => r.Prefab.Trim().Equals(name, StringComparison.OrdinalIgnoreCase));
if (questRequirement != null)
{
int itemCount = QuestUtils.GetItemCount(name);
string itemName = QuestUtils.GetItemName(name);
((Character)Player.m_localPlayer).Message((MessageType)1, $"{itemName}: {itemCount} / {questRequirement.Amount}", 0, (Sprite)null);
}
}
}
if (SimpleQuestPro.Instance.IsWindowActive())
{
QuestUI.UpdateUI();
}
}
QuestUI.UpdateHUD();
}
}
[HarmonyPatch]
public static class PlantWatcher
{
[HarmonyPatch(typeof(Player), "ConsumeResources")]
[HarmonyPrefix]
private static void Prefix(Requirement[] requirements, int itemQuality)
{
if (requirements == null || (Object)(object)Player.m_localPlayer == (Object)null)
{
return;
}
foreach (Requirement val in requirements)
{
if (val == null || (Object)(object)val.m_resItem == (Object)null)
{
continue;
}
string name = ((Object)val.m_resItem).name;
string questName = "";
if (name.Contains("CarrotSeeds"))
{
questName = "Carrot";
}
else if (name.Contains("TurnipSeeds"))
{
questName = "Turnip";
}
else if (name.Contains("OnionSeeds"))
{
questName = "Onion";
}
else if (name.Contains("Seed"))
{
questName = name.Replace("Seeds", "").Replace("Seed", "");
}
if (string.IsNullOrEmpty(questName))
{
continue;
}
if ((Object)(object)SimpleQuestPro.Instance != (Object)null)
{
foreach (QuestConfig visibleQuest in QuestUtils.GetVisibleQuests())
{
if (SimpleQuestPro.Instance.completedQuests.Contains(visibleQuest.ID))
{
continue;
}
QuestRequirement questRequirement = visibleQuest.KillReqs?.FirstOrDefault((QuestRequirement k) => string.Equals(k.Prefab.Trim(), questName, StringComparison.OrdinalIgnoreCase));
if (questRequirement != null)
{
if (!SimpleQuestPro.playerKills.ContainsKey(questName))
{
SimpleQuestPro.playerKills[questName] = 0;
}
SimpleQuestPro.playerKills[questName]++;
int num = SimpleQuestPro.playerKills[questName];
string itemName = QuestUtils.GetItemName(questName);
((Character)Player.m_localPlayer).Message((MessageType)1, $"{itemName}: {num} / {questRequirement.Amount}", 0, (Sprite)null);
}
}
if (SimpleQuestPro.Instance.IsWindowActive())
{
QuestUI.UpdateUI();
}
}
QuestUI.UpdateHUD();
}
}
}
public class QuestConfig
{
public string ID;
public string Title;
public string Goal;
public string Rarity;
public string RewardItem;
public string PreReqID;
public int RewardAmount;
public int ExpReward;
public List Reqs;
public List KillReqs;
public List RewardItems;
}
public class QuestList
{
public List Quests = new List();
}
public class QuestRequirement
{
public string Prefab;
public int Amount;
}
public static class QuestUI
{
private class TrackerDragHandler : MonoBehaviour, IBeginDragHandler, IEventSystemHandler, IDragHandler, IEndDragHandler
{
private RectTransform rectTransform;
private Canvas canvas;
private bool canDrag;
public void OnBeginDrag(PointerEventData eventData)
{
canDrag = IsTrackerDragAllowed() && (Object)(object)hudPanel != (Object)null && hudPanel.activeSelf;
if (canDrag)
{
rectTransform = hudPanel.GetComponent();
canvas = (((Object)(object)rectTransform != (Object)null) ? ((Component)rectTransform).GetComponentInParent