using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using BepInEx;
using Receiver2;
using Receiver2ModdingKit;
using TMPro;
using UnityEngine;
using UnityEngine.Events;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace GunDealer;
public class GunDealer : MonoBehaviour
{
private List<string> gunList = new List<string>();
private int selectedGun;
public TextMeshPro gunNameText;
public Transform spawnPoint;
public Transform magSpawnPoint;
private LevelObject levelObject;
private void Awake()
{
if ((Object)(object)spawnPoint == (Object)null)
{
spawnPoint = ((Component)this).transform.Find("GunSpawnPoint");
}
if ((Object)(object)magSpawnPoint == (Object)null)
{
magSpawnPoint = ((Component)this).transform.Find("magSpawnPoint");
}
if ((Object)(object)gunNameText == (Object)null)
{
gunNameText = ((Component)((Component)this).transform.Find("screen/screen_text")).GetComponent<TextMeshPro>();
}
levelObject = Object.FindObjectOfType<LevelObject>();
string[] gunNames = ReceiverCoreScript.Instance().GetGunNames();
for (int i = 0; i < gunNames.Length; i++)
{
if (!gunNames[i].Contains("wolfire"))
{
gunList.Add(gunNames[i]);
}
}
selectedGun = Random.Range(0, gunList.Count - 1);
UpdateGunName();
}
public void SpawnGun()
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
((InventoryItem)Object.Instantiate<GunScript>(ReceiverCoreScript.Instance().GetGunPrefab(gunList[selectedGun]), spawnPoint.position + Vector3.up * 0.3f, spawnPoint.rotation, levelObject.PlayerRoomTransform)).AddRigidBody();
}
private void UpdateGunName()
{
((TMP_Text)gunNameText).text = gunList[selectedGun].Split(new char[1] { '.' })[1].Replace('_', ' ').ToUpper();
}
public void SpawnMatchingMag()
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: 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)
string[] magazine_root_types = ReceiverCoreScript.Instance().GetGunPrefab(gunList[selectedGun]).magazine_root_types;
MagazineScript val = default(MagazineScript);
for (int i = 0; i < magazine_root_types.Length; i++)
{
if (ReceiverCoreScript.Instance().TryGetMagazinePrefabFromRoot(magazine_root_types[i], (MagazineClass)1, ref val))
{
((InventoryItem)Object.Instantiate<MagazineScript>(val, magSpawnPoint.position + new Vector3(0.05f * (float)i, 0.05f), magSpawnPoint.rotation, levelObject.PlayerRoomTransform)).AddRigidBody();
}
}
}
public void SelectNextGun()
{
if (selectedGun == 0)
{
selectedGun = gunList.Count - 1;
UpdateGunName();
}
else
{
selectedGun--;
UpdateGunName();
}
}
public void SelectPrevGun()
{
if (selectedGun == gunList.Count - 1)
{
selectedGun = 0;
UpdateGunName();
}
else
{
selectedGun++;
UpdateGunName();
}
}
}
[BepInPlugin("CiarenceW-GunDealer", "GunDealer", "1.0.1")]
[BepInProcess("receiver2.exe")]
internal class GunDealerManager : BaseUnityPlugin
{
private GunDealer gunDealerConsole;
private void Awake()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
BepInPlugin val = (BepInPlugin)Attribute.GetCustomAttribute(((object)this).GetType(), typeof(BepInPlugin));
((BaseUnityPlugin)this).Logger.LogInfo((object)$"GunDealer {val.GUID} version {val.Version} Awaken wokeism woke");
ReceiverEvents.StartListening((ReceiverEventTypeVoid)26, (UnityAction<ReceiverEventTypeVoid>)InstantiateConsole);
ModdingKitEvents.AddTaskAtCoreStartup(new StartupAction(FindGunDealerAssetBundle));
}
private void FindGunDealerAssetBundle()
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
string directoryName = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);
Debug.Log((object)directoryName);
if (Directory.Exists(directoryName))
{
string[] files = Directory.GetFiles(directoryName);
foreach (string fileName in files)
{
string text = fileName;
OperatingSystemFamily operatingSystemFamily = SystemInfo.operatingSystemFamily;
if (!text.Contains(((object)(OperatingSystemFamily)(ref operatingSystemFamily)).ToString().ToLower()))
{
continue;
}
AssetBundle val = AssetBundle.GetAllLoadedAssetBundles().FirstOrDefault((Func<AssetBundle, bool>)((AssetBundle bundle) => ((Object)bundle).name.Contains(Path.GetFileNameWithoutExtension(fileName))));
if ((Object)(object)val == (Object)null)
{
val = AssetBundle.LoadFromFile(fileName);
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("Failed to load AssetBundle " + fileName));
return;
}
}
string[] allAssetNames = val.GetAllAssetNames();
foreach (string text2 in allAssetNames)
{
GameObject val2 = val.LoadAsset<GameObject>(text2);
if ((Object)(object)val2 != (Object)null && val2.TryGetComponent<GunDealer>(ref gunDealerConsole))
{
Debug.Log((object)"Found gun dealer bundle");
return;
}
}
}
if ((Object)(object)gunDealerConsole == (Object)null)
{
Debug.LogError((object)"mdoel replacer is null!!!! SHITTTTTT!!!!!!!!!!!");
}
}
else
{
Debug.LogError((object)"direrctort DOESNT FUCKING EDXIST");
}
}
private void InstantiateConsole(ReceiverEventTypeVoid ev)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Invalid comparison between Unknown and I4
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
if ((int)ReceiverCoreScript.Instance().game_mode.GetGameMode() == 3)
{
Object.Instantiate<GunDealer>(gunDealerConsole, new Vector3(-0.17f, 1f, 15.1491f), new Quaternion(0f, 1f, 0f, 0f));
return;
}
GunDealerSpawnPoint gunDealerSpawnPoint = Object.FindObjectOfType<GunDealerSpawnPoint>();
if ((Object)(object)gunDealerSpawnPoint != (Object)null)
{
Object.Instantiate<GunDealer>(gunDealerConsole, ((Component)gunDealerSpawnPoint).transform.position, ((Component)gunDealerSpawnPoint).transform.rotation);
}
}
}
public class GunDealerSpawnPoint : MonoBehaviour
{
}