93 lines
2.5 KiB
C#
93 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
using Comfort.Common;
|
|
using EFT.InventoryLogic;
|
|
|
|
public class PresetFactory
|
|
{
|
|
private static Type _presetFactoryType;
|
|
|
|
private static FieldInfo _itemPresetsField;
|
|
|
|
private static object _presetFactoryInstance;
|
|
|
|
static PresetFactory()
|
|
{
|
|
LoadPresetFactoryType();
|
|
}
|
|
|
|
private static void LoadPresetFactoryType()
|
|
{
|
|
Assembly assembly = Assembly.Load("Assembly-CSharp");
|
|
if (assembly == null)
|
|
{
|
|
ItemFactory.Log("Log: Failed to load Assembly-CSharp.");
|
|
return;
|
|
}
|
|
Type[] types = assembly.GetTypes();
|
|
foreach (Type type in types)
|
|
{
|
|
if (type.Name == "\uef57")
|
|
{
|
|
_presetFactoryType = type;
|
|
break;
|
|
}
|
|
}
|
|
if (_presetFactoryType == null)
|
|
{
|
|
ItemFactory.Log("Log: Failed to find PresetFactory type.");
|
|
return;
|
|
}
|
|
ItemFactory.Log("Log: Found PresetFactory type: " + _presetFactoryType.FullName);
|
|
PropertyInfo property = typeof(Singleton<>).MakeGenericType(_presetFactoryType).GetProperty("Instance", BindingFlags.Static | BindingFlags.Public);
|
|
if (property != null)
|
|
{
|
|
_presetFactoryInstance = property.GetValue(null);
|
|
}
|
|
_itemPresetsField = _presetFactoryType.GetField("ItemPresets", BindingFlags.Instance | BindingFlags.NonPublic);
|
|
if (_itemPresetsField == null)
|
|
{
|
|
ItemFactory.Log("Log: Failed to find ItemPresets field.");
|
|
}
|
|
}
|
|
|
|
public static Dictionary<string, object> GetItemPresets()
|
|
{
|
|
if (_presetFactoryInstance == null || _itemPresetsField == null)
|
|
{
|
|
ItemFactory.Log("Log: PresetFactory is not properly initialized.");
|
|
return null;
|
|
}
|
|
Dictionary<string, object> dictionary = _itemPresetsField.GetValue(_presetFactoryInstance) as Dictionary<string, object>;
|
|
if (dictionary != null)
|
|
{
|
|
ItemFactory.Log($"Log: Found {dictionary.Count} item presets.");
|
|
}
|
|
else
|
|
{
|
|
ItemFactory.Log("Log: ItemPresets is null.");
|
|
}
|
|
return dictionary;
|
|
}
|
|
|
|
public static Item SpawnPresetItem(string templateId)
|
|
{
|
|
Dictionary<string, object> itemPresets = GetItemPresets();
|
|
if (itemPresets == null || !itemPresets.ContainsKey(templateId))
|
|
{
|
|
ItemFactory.Log("Log: No preset found for the given templateId.");
|
|
return null;
|
|
}
|
|
object obj = itemPresets[templateId];
|
|
PropertyInfo property = obj.GetType().GetProperty("Item", BindingFlags.Instance | BindingFlags.Public);
|
|
if (property != null)
|
|
{
|
|
Item result = property.GetValue(obj) as Item;
|
|
ItemFactory.Log("Log: Spawned preset item with templateId: " + templateId);
|
|
return result;
|
|
}
|
|
ItemFactory.Log("Log: Failed to retrieve Item from the preset.");
|
|
return null;
|
|
}
|
|
}
|