204 lines
10 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|