Decompiled source of JacketAestheticOfVice v2.0.2

plugins/JacketPassiveEnhancement.dll

Decompiled 2 weeks ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using Alexandria.ItemAPI;
using BepInEx;
using Dungeonator;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace JacketPassiveEnhancement;

[BepInPlugin("jacket.passive.aesthetic", "Jacket Aesthetic of Vice", "2.0.6")]
public class JacketPassiveEnhancement : BaseUnityPlugin
{
	private bool foundJacket;

	private PlayerController jacketPlayer;

	private bool itemAdded;

	private int currentStacks;

	private float stackTimer;

	private float lastHealth = 1f;

	private int lastEnemyCount;

	private const float DAMAGE_PER_STACK = 0.01f;

	private const float SPEED_PER_STACK = 0.005f;

	private const float RELOAD_PER_STACK = 0.01f;

	private const int MAX_STACKS = 25;

	private const float STACK_DURATION = 5f;

	private float originalDamage = 1f;

	private float originalSpeed = 1f;

	private float originalReload = 1f;

	private void Awake()
	{
		((BaseUnityPlugin)this).Logger.LogInfo((object)"✅ Aesthetic of Vice - Mod Carregado!");
		ETGModMainBehaviour.WaitForGameManagerStart((Action<GameManager>)GMStart);
	}

	private void GMStart(GameManager manager)
	{
		RegisterPassiveItem();
	}

	private void RegisterPassiveItem()
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Expected O, but got Unknown
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		try
		{
			string text = "Aesthetic of Vice";
			GameObject val = new GameObject(text);
			AestheticOfViceItem aestheticOfViceItem = val.AddComponent<AestheticOfViceItem>();
			ItemBuilder.AddSpriteToObject(text, "JacketPassiveEnhancement/Sprites/icon", val, (Assembly)null);
			string text2 = "Violence is the Answer";
			string text3 = "A red jacket covered in blood, worn by one of Miami's most relentless killers.\n\nThey say whoever wears it feels an uncontrollable fury and a connection to chaos.\n\nEffect: Aesthetic of Vice\nKill enemies quickly to build stacks (max 25)!\n\nEach stack grants:\n• +1% Damage\n• +0.5% Speed\n• +1% Reload Speed\n\nGetting hit removes ALL stacks!\n\nHotline Miami style!";
			ItemBuilder.SetupItem((PickupObject)(object)aestheticOfViceItem, text2, text3, "aestheticvice");
			((PickupObject)aestheticOfViceItem).quality = (ItemQuality)4;
			((PickupObject)aestheticOfViceItem).CanBeDropped = false;
			Databases.Items.Add((PickupObject)(object)aestheticOfViceItem, false, "ANY");
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"✅ Item '{text}' registrado com ID: {((PickupObject)aestheticOfViceItem).PickupObjectId}");
		}
		catch (Exception ex)
		{
			((BaseUnityPlugin)this).Logger.LogError((object)("Erro ao registrar item: " + ex.Message + "\n" + ex.StackTrace));
		}
	}

	private void Update()
	{
		if (!foundJacket)
		{
			FindJacket();
		}
		else if ((Object)(object)jacketPlayer != (Object)null)
		{
			UpdateStackTimer();
			CheckForDamage();
			UpdateBonuses();
			CheckForEnemyKills();
		}
	}

	private void FindJacket()
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Expected O, but got Unknown
		try
		{
			PlayerController val = (PlayerController)Object.FindObjectOfType(typeof(PlayerController));
			if ((Object)(object)val != (Object)null && IsJacket(val))
			{
				ActivatePassive(val);
			}
		}
		catch (Exception ex)
		{
			((BaseUnityPlugin)this).Logger.LogError((object)("Erro: " + ex.Message));
		}
	}

	private bool IsJacket(PlayerController player)
	{
		if (((Object)player).name.ToLower().Contains("jacket"))
		{
			return true;
		}
		if ((Object)(object)((GameActor)player).CurrentGun != (Object)null)
		{
			string text = ((Object)((GameActor)player).CurrentGun).name.ToLower();
			if (text.Contains("bat") || text.Contains("taco"))
			{
				return true;
			}
		}
		return false;
	}

	private void ActivatePassive(PlayerController player)
	{
		jacketPlayer = player;
		foundJacket = true;
		originalDamage = jacketPlayer.stats.GetStatValue((StatType)5);
		originalSpeed = jacketPlayer.stats.GetStatValue((StatType)0);
		originalReload = jacketPlayer.stats.GetStatValue((StatType)10);
		lastHealth = ((BraveBehaviour)jacketPlayer).healthHaver.GetCurrentHealth();
		lastEnemyCount = GetEnemyCount();
		AddItemToInventory();
		((BaseUnityPlugin)this).Logger.LogInfo((object)"\ud83c\udfad Aesthetic of Vice ATIVADA!");
	}

	private void AddItemToInventory()
	{
		if (itemAdded)
		{
			return;
		}
		try
		{
			PickupObject byName = PickupObjectDatabase.GetByName("Aesthetic of Vice");
			PassiveItem val = (PassiveItem)(object)((byName is PassiveItem) ? byName : null);
			if ((Object)(object)val != (Object)null)
			{
				((PickupObject)val).Pickup(jacketPlayer);
				itemAdded = true;
				((BaseUnityPlugin)this).Logger.LogInfo((object)"\ud83d\udce6 Item adicionado ao inventário!");
			}
		}
		catch (Exception ex)
		{
			((BaseUnityPlugin)this).Logger.LogError((object)("Erro ao adicionar item: " + ex.Message));
		}
	}

	private int GetEnemyCount()
	{
		if ((Object)(object)jacketPlayer == (Object)null || jacketPlayer.CurrentRoom == null)
		{
			return 0;
		}
		return jacketPlayer.CurrentRoom.GetActiveEnemies((ActiveEnemyType)0)?.Count ?? 0;
	}

	private void CheckForEnemyKills()
	{
		int enemyCount = GetEnemyCount();
		if (enemyCount < lastEnemyCount)
		{
			int num = lastEnemyCount - enemyCount;
			for (int i = 0; i < num; i++)
			{
				AddStack();
			}
		}
		lastEnemyCount = enemyCount;
	}

	private void CheckForDamage()
	{
		if (!((Object)(object)jacketPlayer == (Object)null) && !((Object)(object)((BraveBehaviour)jacketPlayer).healthHaver == (Object)null))
		{
			float currentHealth = ((BraveBehaviour)jacketPlayer).healthHaver.GetCurrentHealth();
			if (currentHealth < lastHealth && currentStacks > 0)
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)$"\ud83d\udca5 RESET! Perdeu todos os {currentStacks} stacks!");
				currentStacks = 0;
				stackTimer = 0f;
			}
			lastHealth = currentHealth;
		}
	}

	private void AddStack()
	{
		if (currentStacks < 25)
		{
			currentStacks++;
			stackTimer = 5f;
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"\ud83d\udd25 Stack +{currentStacks}/{25}!");
		}
		else
		{
			stackTimer = 5f;
		}
	}

	private void UpdateStackTimer()
	{
		if (currentStacks > 0 && stackTimer > 0f)
		{
			stackTimer -= Time.deltaTime;
			if (stackTimer <= 0f)
			{
				currentStacks = 0;
				((BaseUnityPlugin)this).Logger.LogInfo((object)"⏰ Todos os stacks expiraram!");
			}
		}
	}

	private void UpdateBonuses()
	{
		if (!((Object)(object)jacketPlayer == (Object)null))
		{
			float num = 1f + (float)currentStacks * 0.01f;
			float num2 = 1f + (float)currentStacks * 0.005f;
			float num3 = 1f + (float)currentStacks * 0.01f;
			jacketPlayer.stats.SetBaseStatValue((StatType)5, originalDamage * num, jacketPlayer);
			jacketPlayer.stats.SetBaseStatValue((StatType)0, originalSpeed * num2, jacketPlayer);
			jacketPlayer.stats.SetBaseStatValue((StatType)10, originalReload * num3, jacketPlayer);
			jacketPlayer.stats.RecalculateStats(jacketPlayer, false, false);
		}
	}
}
public class AestheticOfViceItem : PassiveItem
{
	public override void Pickup(PlayerController player)
	{
		((PassiveItem)this).Pickup(player);
	}

	public override DebrisObject Drop(PlayerController player)
	{
		return ((PassiveItem)this).Drop(player);
	}
}