Files
7d2dXG/Mods/zzz_REBIRTH__Utils/Harmony/Harmony_XUiC_LootWindowGroup.cs
Nathaniel Cosford e06f2bd282 Add All Mods
2025-05-29 23:33:28 +09:30

204 lines
10 KiB
C#

using Audio;
using Platform;
namespace Harmony.XUiC_LootWindowGroupPatches
{
[HarmonyPatch(typeof(XUiC_LootWindowGroup))]
[HarmonyPatch("Update")]
public class UpdatePatch
{
public static bool Prefix(XUiC_LootWindowGroup __instance, float _dt
)
{
//Log.Out("XUiC_LootWindowGroupPatches-Update __instance.xui.playerUI.entityPlayer != null: " + (__instance.xui.playerUI.entityPlayer != null));
//Log.Out("XUiC_LootWindowGroupPatches-Update __instance.xui.playerUI.entityPlayer.hasBeenAttackedTime: " + __instance.xui.playerUI.entityPlayer.hasBeenAttackedTime);
//Log.Out("XUiC_LootWindowGroupPatches-Update __instance.isOpening: " + __instance.isOpening);
if (__instance.viewComponent != null && __instance.windowGroup != null && __instance.windowGroup.isShowing && __instance.viewComponent.IsVisible)
__instance.viewComponent.Update(_dt);
if (__instance.curInputStyle != __instance.lastInputStyle)
{
PlayerInputManager.InputStyle lastInputStyle = __instance.lastInputStyle;
__instance.lastInputStyle = __instance.curInputStyle;
__instance.RefreshBindings();
__instance.InputStyleChanged(lastInputStyle, __instance.lastInputStyle);
}
for (int index = 0; index < __instance.children.Count; ++index)
{
XUiController child = __instance.children[index];
if (!child.IsDormant)
child.Update(_dt);
}
if (__instance.xui.playerUI.entityPlayer != null && __instance.xui.playerUI.entityPlayer.hasBeenAttackedTime > 0 && __instance.isOpening)
{
//Log.Out("XUiC_LootWindowGroupPatches-Update 1");
GUIWindowManager windowManager = __instance.xui.playerUI.windowManager;
windowManager.Close("timer");
__instance.isOpening = false;
__instance.isClosingFromDamage = true;
windowManager.Close("looting");
}
else
{
//Log.Out("XUiC_LootWindowGroupPatches-Update 2");
if (!__instance.isOpening)
{
//Log.Out("XUiC_LootWindowGroupPatches-Update 3");
return false;
}
Entity entity = GameManager.Instance.World.GetEntity(__instance.te.EntityId);
EntitySupplyCrate supplyCrate = null;
bool forceTimer = false;
bool isSupplyCrate = false;
if (entity != null && entity is EntitySupplyCrate)
{
supplyCrate = (EntitySupplyCrate)entity;
if (supplyCrate != null)
{
isSupplyCrate = true;
//Log.Out("XUiC_LootWindowGroupPatches-Update IS SUPPLY CRATE");
if (supplyCrate.Buffs.GetCustomVar("$WasOpened") == 0f)
{
forceTimer = true;
}
}
}
if (((__instance.te.bWasTouched && !forceTimer) || (double)__instance.openTimeLeft <= 0.0))
{
//Log.Out("XUiC_LootWindowGroupPatches-Update 4 __instance.te.lootListName: " + __instance.te.lootListName);
//Log.Out("XUiC_LootWindowGroupPatches-Update 4 __instance.te.bWasTouched: " + __instance.te.bWasTouched);
//Log.Out("XUiC_LootWindowGroupPatches-Update 4 __instance.openTimeLeft: " + __instance.openTimeLeft);
if (!__instance.te.bWasTouched && !__instance.te.bPlayerStorage && !__instance.te.bPlayerBackpack)
{
//Log.Out("XUiC_LootWindowGroupPatches-Update 5");
__instance.xui.playerUI.entityPlayer.Progression.AddLevelExp(__instance.xui.playerUI.entityPlayer.gameStage, "_xpFromLoot", Progression.XPTypes.Looting);
}
__instance.openTimeLeft = 0.0f;
__instance.te.bWasTouched = true;
if (isSupplyCrate && supplyCrate != null)
{
supplyCrate.Buffs.SetCustomVar("$WasOpened", 1f);
}
__instance.OpenContainer();
}
else
{
//Log.Out("XUiC_LootWindowGroupPatches-Update 4 __instance.te.lootListName: " + __instance.te.lootListName);
//Log.Out("XUiC_LootWindowGroupPatches-Update 4 __instance.te.bWasTouched: " + __instance.te.bWasTouched);
//Log.Out("XUiC_LootWindowGroupPatches-Update 4 __instance.openTimeLeft: " + __instance.openTimeLeft);
//Log.Out("XUiC_LootWindowGroupPatches-Update 6");
if (__instance.timerWindow != null)
{
//Log.Out("XUiC_LootWindowGroupPatches-Update 7");
__instance.timerWindow.UpdateTimer(__instance.openTimeLeft, __instance.openTimeLeft / __instance.totalOpenTime);
}
__instance.openTimeLeft -= _dt;
}
}
//Log.Out("XUiC_LootWindowGroupPatches-Update END");
return false;
}
}
[HarmonyPatch(typeof(XUiC_LootWindowGroup))]
[HarmonyPatch("OnOpen")]
public class OnOpenPatch
{
public static bool Prefix(XUiC_LootWindowGroup __instance
)
{
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen START");
__instance.isClosingFromDamage = false;
if (__instance.te.EntityId != -1)
{
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen 1");
if ((double)EffectManager.GetValue(PassiveEffects.DisableLoot, _entity: (EntityAlive)__instance.xui.playerUI.entityPlayer, tags: GameManager.Instance.World.GetEntity(__instance.te.EntityId).EntityClass.Tags) > 0.0)
{
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen 2");
Manager.PlayInsidePlayerHead("twitch_no_attack");
GUIWindowManager windowManager = __instance.xui.playerUI.windowManager;
__instance.ignoreCloseSound = true;
windowManager.Close("timer");
__instance.isOpening = false;
__instance.isClosingFromDamage = true;
windowManager.Close("looting");
return false;
}
}
else if ((double)EffectManager.GetValue(PassiveEffects.DisableLoot, _entity: (EntityAlive)__instance.xui.playerUI.entityPlayer, tags: __instance.te.blockValue.Block.Tags) > 0.0)
{
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen 3");
Manager.PlayInsidePlayerHead("twitch_no_attack");
GUIWindowManager windowManager = __instance.xui.playerUI.windowManager;
__instance.ignoreCloseSound = true;
windowManager.Close("timer");
__instance.isOpening = false;
__instance.isClosingFromDamage = true;
windowManager.Close("looting");
return false;
}
__instance.ignoreCloseSound = false;
__instance.xui.playerUI.windowManager.CloseIfOpen("backpack");
__instance.lootWindow.ViewComponent.UiTransform.gameObject.SetActive(false);
EntityPlayer entityPlayer = (EntityPlayer)__instance.xui.playerUI.entityPlayer;
float openTime = LootContainer.GetLootContainer(__instance.te.lootListName).openTime;
__instance.totalOpenTime = __instance.openTimeLeft = EffectManager.GetValue(PassiveEffects.ScavengingTime, _originalValue: entityPlayer.IsCrouching ? openTime * 1.5f : openTime, _entity: (EntityAlive)entityPlayer);
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen openTime: " + openTime);
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen BEFORE __instance.totalOpenTime: " + __instance.totalOpenTime);
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen __instance.openTimeLeft: " + __instance.openTimeLeft);
bool optionProtectCrate = RebirthVariables.customProtectCrate;
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen optionProtectCrate: " + optionProtectCrate);
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen __instance.te.lootListName.ToLower(): " + __instance.te.lootListName.ToLower());
if (optionProtectCrate && __instance.te.lootListName.ToLower().Contains("airdrop"))
{
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen AIR DROP");
__instance.totalOpenTime = RebirthVariables.supplyCrateOpenTime;
__instance.openTimeLeft = RebirthVariables.supplyCrateOpenTime;
}
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen AFTER __instance.totalOpenTime: " + __instance.totalOpenTime);
if (__instance.nonPagingHeaderWindow != null)
__instance.nonPagingHeaderWindow.SetHeader("LOOTING");
__instance.xui.playerUI.windowManager.OpenIfNotOpen("CalloutGroup", false);
__instance.xui.playerUI.windowManager.Open("timer", false);
__instance.timerWindow = __instance.xui.GetChildByType<XUiC_Timer>();
__instance.timerWindow.currentOpenEventText = Localization.Get("xuiOpeningLoot");
__instance.isOpening = true;
LootContainer lootContainer = LootContainer.GetLootContainer(__instance.te.lootListName);
if (lootContainer == null || lootContainer.soundClose == null)
{
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen 4");
return false;
}
Vector3 position = __instance.te.ToWorldPos().ToVector3() + Vector3.one * 0.5f;
if (__instance.te.EntityId != -1 && GameManager.Instance.World != null)
{
//Log.Out("XUiC_LootWindowGroupPatches-OnOpen 5");
Entity entity = GameManager.Instance.World.GetEntity(__instance.te.EntityId);
if (entity != null)
position = entity.GetPosition();
}
Manager.BroadcastPlayByLocalPlayer(position, lootContainer.soundOpen);
return false;
}
}
}