using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using InControl;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("ReviveModTest")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ReviveModTest")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("7469583b-4b99-463c-b4fb-5abc190a3d43")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
public class ReviveSystem
{
public static void RevivePlayer(PlayerController target, Vector3 pos)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
MethodInfo method = typeof(PlayerController).GetMethod("CoopResurrectInternal", BindingFlags.Instance | BindingFlags.NonPublic);
if ((object)method != null && target != null && target.IsGhost)
{
IEnumerator enumerator = (IEnumerator)method.Invoke(target, new object[3] { pos, null, false });
((MonoBehaviour)target).StartCoroutine(enumerator);
}
}
}
[BepInPlugin("revive.mod", "Revive Mod", "4.2")]
public class ReviveMod : BaseUnityPlugin
{
[CompilerGenerated]
private sealed class <HandleReviveHealth>d__34 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public PlayerController target;
public ReviveMod <>4__this;
private int <count>5__1;
private float <maxHealth>5__2;
private float <targetHealth>5__3;
private float <timer>5__4;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <HandleReviveHealth>d__34(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
if ((Object)(object)target == (Object)null || (Object)(object)((BraveBehaviour)target).healthHaver == (Object)null)
{
return false;
}
if (!<>4__this.reviveCounts.ContainsKey(target))
{
<>4__this.reviveCounts[target] = 0;
}
<>4__this.reviveCounts[target]++;
<count>5__1 = <>4__this.reviveCounts[target];
<maxHealth>5__2 = ((BraveBehaviour)target).healthHaver.GetMaxHealth();
<targetHealth>5__3 = Mathf.Max(<maxHealth>5__2 - (float)(<count>5__1 - 1), 1f);
Debug.Log((object)$"复活次数: {<count>5__1} -> 锁定血量: {<targetHealth>5__3}");
<timer>5__4 = 0f;
break;
case 1:
<>1__state = -1;
break;
}
if (<timer>5__4 < 1.5f)
{
if ((Object)(object)target != (Object)null && (Object)(object)((BraveBehaviour)target).healthHaver != (Object)null)
{
((BraveBehaviour)target).healthHaver.ForceSetCurrentHealth(<targetHealth>5__3);
}
<timer>5__4 += BraveTime.DeltaTime;
<>2__current = null;
<>1__state = 1;
return true;
}
if ((Object)(object)target != (Object)null && (Object)(object)((BraveBehaviour)target).healthHaver != (Object)null)
{
((BraveBehaviour)target).healthHaver.ForceSetCurrentHealth(<targetHealth>5__3);
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <ReviveFlow>d__33 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public PlayerController target;
public ReviveMod <>4__this;
private Vector3 <corpsePos>5__1;
private Vector3 <offset>5__2;
private Vector3 <finalPos>5__3;
private Vector3 <start>5__4;
private float <t>5__5;
private float <moveTime>5__6;
private Vector3 <pos>5__7;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <ReviveFlow>d__33(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<corpsePos>5__1 = ((target.PlayerIDX == 0) ? <>4__this.corpsePosP1 : <>4__this.corpsePosP2);
<offset>5__2 = ((target.PlayerIDX == 0) ? new Vector3(-0.85f, -0.3f, 0f) : new Vector3(-0.8f, -0.25f, 0f));
<finalPos>5__3 = <corpsePos>5__1 + <offset>5__2;
<start>5__4 = ((BraveBehaviour)((BraveBehaviour)target).specRigidbody).transform.position;
<t>5__5 = 0f;
<moveTime>5__6 = 0.15f;
goto IL_0168;
case 1:
<>1__state = -1;
goto IL_0168;
case 2:
<>1__state = -1;
ReviveSystem.RevivePlayer(target, <finalPos>5__3);
<>2__current = null;
<>1__state = 3;
return true;
case 3:
{
<>1__state = -1;
((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.HandleReviveHealth(target));
return false;
}
IL_0168:
if (<t>5__5 < <moveTime>5__6)
{
<t>5__5 += Time.deltaTime;
<pos>5__7 = Vector3.Lerp(<start>5__4, <finalPos>5__3, <t>5__5 / <moveTime>5__6);
((BraveBehaviour)((BraveBehaviour)target).specRigidbody).transform.position = <pos>5__7;
((BraveBehaviour)target).specRigidbody.Reinitialize();
<>2__current = null;
<>1__state = 1;
return true;
}
((BraveBehaviour)((BraveBehaviour)target).specRigidbody).transform.position = <finalPos>5__3;
((BraveBehaviour)target).specRigidbody.Reinitialize();
<>2__current = null;
<>1__state = 2;
return true;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <ShowFailBar>d__36 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public PlayerController player;
public ReviveMod <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <ShowFailBar>d__36(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
GameUIRoot.Instance.StartPlayerReloadBar(player, new Vector3(0f, 1.5f, 0f), 0.3f);
<>2__current = null;
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
GameUIRoot.Instance.ForceClearReload(player.PlayerIDX);
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
private Dictionary<PlayerController, float> glowTimers = new Dictionary<PlayerController, float>();
private Dictionary<PlayerController, int> reviveCounts = new Dictionary<PlayerController, int>();
private HashSet<PlayerController> hintedBodies = new HashSet<PlayerController>();
private Transform[] hintPoints = (Transform[])(object)new Transform[2];
private bool isReviving = false;
private bool reviveDone = false;
private float reviveTimer = 0f;
private float saveTimer = 0f;
private float saveDuration = 0.25f;
private float reviveDuration = 3.5f;
private PlayerController reviver;
private PlayerController target;
private Vector3 corpsePosP1;
private Vector3 corpsePosP2;
private GameObject glowP1;
private GameObject glowP2;
private float glowTimer = 0f;
private bool corpseRecordedP1 = false;
private bool corpseRecordedP2 = false;
private bool globalHintShown = false;
private bool runInitialized = false;
private void Awake()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
for (int i = 0; i < 2; i++)
{
GameObject val = new GameObject("ReviveHintPoint_" + i);
hintPoints[i] = val.transform;
}
}
private void Update()
{
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
if (!GameManager.HasInstance || (Object)(object)GameManager.Instance.PrimaryPlayer == (Object)null)
{
runInitialized = false;
}
else
{
if (!GameManager.HasInstance)
{
return;
}
TrackDeath();
HandlePlayer(GameManager.Instance.PrimaryPlayer);
HandlePlayer(GameManager.Instance.SecondaryPlayer);
UpdateRevive();
UpdateGlow();
if (Input.GetKeyDown((KeyCode)121))
{
PlayerController primaryPlayer = GameManager.Instance.PrimaryPlayer;
if ((Object)(object)primaryPlayer != (Object)null && ((BraveBehaviour)primaryPlayer).healthHaver.IsAlive)
{
((BraveBehaviour)primaryPlayer).healthHaver.ApplyDamage(999f, Vector2.zero, "kill P1", (CoreDamageTypes)0, (DamageCategory)5, true, (PixelCollider)null, false);
}
}
if (Input.GetKeyDown((KeyCode)117))
{
PlayerController secondaryPlayer = GameManager.Instance.SecondaryPlayer;
if ((Object)(object)secondaryPlayer != (Object)null && ((BraveBehaviour)secondaryPlayer).healthHaver.IsAlive)
{
((BraveBehaviour)secondaryPlayer).healthHaver.ApplyDamage(999f, Vector2.zero, "kill P2", (CoreDamageTypes)0, (DamageCategory)5, true, (PixelCollider)null, false);
}
}
UpdateGlowEffect();
}
}
private void UpdateGlowEffect()
{
glowTimer += Time.deltaTime;
float pulse = (Mathf.Sin(glowTimer * 3f) + 1f) / 2f;
UpdateSingleGlow(glowP1, pulse);
UpdateSingleGlow(glowP2, pulse);
}
private void UpdateGlow(tk2dSprite glow, float pulse)
{
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)glow == (Object)null))
{
Color val = default(Color);
((Color)(ref val))..ctor(0.3f, 0.7f, 1f, 0.4f);
Color val2 = default(Color);
((Color)(ref val2))..ctor(0.7f, 0.9f, 1f, 0.8f);
((tk2dBaseSprite)glow).color = Color.Lerp(val, val2, pulse);
}
}
private void UpdateSingleGlow(GameObject glow, float pulse)
{
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)glow == (Object)null)
{
return;
}
LineRenderer component = glow.GetComponent<LineRenderer>();
if (!((Object)(object)component == (Object)null))
{
PlayerController primaryPlayer = GameManager.Instance.PrimaryPlayer;
PlayerController secondaryPlayer = GameManager.Instance.SecondaryPlayer;
float num = 999f;
if ((Object)(object)primaryPlayer != (Object)null)
{
num = Mathf.Min(num, Vector3.Distance(Vector2.op_Implicit(((BraveBehaviour)primaryPlayer).specRigidbody.UnitCenter), glow.transform.position));
}
if ((Object)(object)secondaryPlayer != (Object)null)
{
num = Mathf.Min(num, Vector3.Distance(Vector2.op_Implicit(((BraveBehaviour)secondaryPlayer).specRigidbody.UnitCenter), glow.transform.position));
}
float num2 = Mathf.Clamp01(1f - num / 2f);
float num3 = pulse * 0.5f + num2 * 0.5f;
Color val = default(Color);
((Color)(ref val))..ctor(0.3f, 0.7f, 1f, 0.2f);
Color val2 = default(Color);
((Color)(ref val2))..ctor(0.7f, 0.9f, 1f, 0.9f);
Color endColor = (component.startColor = Color.Lerp(val, val2, num3));
component.endColor = endColor;
float endWidth = (component.startWidth = Mathf.Lerp(0.04f, 0.1f, num3));
component.endWidth = endWidth;
}
}
private void UpdateGlow()
{
PlayerController primaryPlayer = GameManager.Instance.PrimaryPlayer;
PlayerController secondaryPlayer = GameManager.Instance.SecondaryPlayer;
HandleGlow(primaryPlayer);
HandleGlow(secondaryPlayer);
}
private void HandleGlow(PlayerController player)
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)player == (Object)null || (Object)(object)((BraveBehaviour)player).sprite == (Object)null)
{
return;
}
if (!player.IsGhost)
{
((BraveBehaviour)player).sprite.color = Color.white;
glowTimers.Remove(player);
return;
}
if (!glowTimers.ContainsKey(player))
{
glowTimers[player] = 0f;
}
glowTimers[player] += Time.deltaTime;
float num = glowTimers[player];
float num2 = (Mathf.Sin(num * 3f) + 1f) / 2f;
Color val = default(Color);
((Color)(ref val))..ctor(0.3f, 0.6f, 1f);
Color val2 = Color.Lerp(val, Color.white, num2);
((BraveBehaviour)player).sprite.color = val2 * 1.2f;
}
private void TrackDeath()
{
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Unknown result type (might be due to invalid IL or missing references)
PlayerController primaryPlayer = GameManager.Instance.PrimaryPlayer;
if (!runInitialized && (Object)(object)primaryPlayer != (Object)null && ((BraveBehaviour)primaryPlayer).healthHaver.IsAlive)
{
reviveCounts.Clear();
runInitialized = true;
Debug.Log((object)"新一局,重置复活次数");
}
PlayerController secondaryPlayer = GameManager.Instance.SecondaryPlayer;
if ((Object)(object)primaryPlayer != (Object)null)
{
if (primaryPlayer.IsGhost && !corpseRecordedP1)
{
corpsePosP1 = Vector2.op_Implicit(((BraveBehaviour)primaryPlayer).specRigidbody.UnitCenter);
corpseRecordedP1 = true;
CreateGlow(ref glowP1, corpsePosP1);
}
else if (!primaryPlayer.IsGhost && corpseRecordedP1)
{
corpseRecordedP1 = false;
if ((Object)(object)glowP1 != (Object)null)
{
Object.Destroy((Object)(object)glowP1);
glowP1 = null;
}
}
}
if (!((Object)(object)secondaryPlayer != (Object)null))
{
return;
}
if (secondaryPlayer.IsGhost && !corpseRecordedP2)
{
corpsePosP2 = Vector2.op_Implicit(((BraveBehaviour)secondaryPlayer).specRigidbody.UnitCenter);
corpseRecordedP2 = true;
CreateGlow(ref glowP2, corpsePosP2);
}
else if (!secondaryPlayer.IsGhost && corpseRecordedP2)
{
corpseRecordedP2 = false;
if ((Object)(object)glowP2 != (Object)null)
{
Object.Destroy((Object)(object)glowP2);
glowP2 = null;
}
}
}
private void CreateGlow(ref GameObject glow, Vector3 pos)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Expected O, but got Unknown
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)glow != (Object)null)
{
Object.Destroy((Object)(object)glow);
}
glow = new GameObject("ReviveGlow");
glow.transform.position = pos;
glow.transform.localScale = Vector3.one;
LineRenderer val = glow.AddComponent<LineRenderer>();
val.useWorldSpace = false;
val.loop = true;
val.positionCount = 64;
val.alignment = (LineAlignment)0;
val.numCornerVertices = 8;
val.numCapVertices = 8;
val.textureMode = (LineTextureMode)0;
((Renderer)val).material = new Material(Shader.Find("Sprites/Default"));
((Renderer)val).sortingOrder = 100;
float num = 0.55f;
for (int i = 0; i < val.positionCount; i++)
{
float num2 = (float)Math.PI * 2f * (float)i / (float)val.positionCount;
float num3 = Mathf.Cos(num2) * num;
float num4 = Mathf.Sin(num2) * num;
val.SetPosition(i, new Vector3(num3, num4, 0f));
}
Color val2 = default(Color);
((Color)(ref val2))..ctor(0.3f, 0.7f, 1f, 0.55f);
val.startColor = val2;
val.endColor = val2;
val.startWidth = 0.07f;
val.endWidth = 0.07f;
glow.layer = 0;
}
private void HandlePlayer(PlayerController player)
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: 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_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)player == (Object)null)
{
return;
}
PlayerController otherPlayer = GameManager.Instance.GetOtherPlayer(player);
if ((Object)(object)otherPlayer == (Object)null)
{
return;
}
int playerIDX = player.PlayerIDX;
BraveInput instanceForPlayer = BraveInput.GetInstanceForPlayer(playerIDX);
Vector3 val = ((otherPlayer.PlayerIDX == 0) ? corpsePosP1 : corpsePosP2);
bool flag = ((otherPlayer.PlayerIDX == 0) ? corpseRecordedP1 : corpseRecordedP2);
if (flag)
{
float num = Vector3.Distance(Vector2.op_Implicit(((BraveBehaviour)player).specRigidbody.UnitCenter), val);
bool flag2 = flag && num < 2f;
if (flag2 && !isReviving && (Object)(object)player != (Object)(object)reviver && !globalHintShown)
{
ShowReviveHint(player, val);
globalHintShown = true;
}
bool flag3 = false;
PlayerAction actionFromType = instanceForPlayer.ActiveActions.GetActionFromType((GungeonActionType)10);
flag3 = ((actionFromType == null) ? Input.GetKeyDown((KeyCode)101) : ((OneAxisInputControl)actionFromType).WasPressed);
if (!isReviving && flag3 && flag2)
{
StartRevive(player, otherPlayer);
}
}
}
private void StartRevive(PlayerController player, PlayerController other)
{
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)((BraveBehaviour)other).healthHaver != (Object)null) || !((BraveBehaviour)other).healthHaver.IsAlive)
{
isReviving = true;
reviveDone = false;
reviveTimer = 0f;
saveTimer = 0f;
reviver = player;
target = other;
HideReviveHint(player);
hintedBodies.Remove(other);
Debug.Log((object)"开始复活");
if ((Object)(object)GameUIRoot.Instance != (Object)null)
{
GameUIRoot.Instance.StartPlayerReloadBar(player, new Vector3(0f, 1.5f, 0f), reviveDuration);
}
}
}
private void UpdateRevive()
{
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
if (!isReviving || (Object)(object)reviver == (Object)null || (Object)(object)target == (Object)null)
{
return;
}
BraveInput instanceForPlayer = BraveInput.GetInstanceForPlayer(reviver.PlayerIDX);
float x = ((TwoAxisInputControl)instanceForPlayer.ActiveActions.Move).Value.x;
float y = ((TwoAxisInputControl)instanceForPlayer.ActiveActions.Move).Value.y;
if ((Mathf.Abs(x) > 0.2f || Mathf.Abs(y) > 0.2f) && saveTimer > saveDuration)
{
Debug.Log((object)"移动中断救人");
CancelRevive();
return;
}
saveTimer += Time.deltaTime;
reviveTimer += Time.deltaTime;
if (isReviving && !reviveDone && reviveTimer >= reviveDuration)
{
reviveDone = true;
isReviving = false;
((MonoBehaviour)this).StartCoroutine(ReviveFlow(target));
target = null;
reviver = null;
}
}
[IteratorStateMachine(typeof(<ReviveFlow>d__33))]
private IEnumerator ReviveFlow(PlayerController target)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <ReviveFlow>d__33(0)
{
<>4__this = this,
target = target
};
}
[IteratorStateMachine(typeof(<HandleReviveHealth>d__34))]
private IEnumerator HandleReviveHealth(PlayerController target)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <HandleReviveHealth>d__34(0)
{
<>4__this = this,
target = target
};
}
private void CancelRevive()
{
if ((Object)(object)reviver != (Object)null && (Object)(object)GameUIRoot.Instance != (Object)null)
{
GameUIRoot.Instance.ForceClearReload(reviver.PlayerIDX);
((MonoBehaviour)this).StartCoroutine(ShowFailBar(reviver));
}
isReviving = false;
reviveTimer = 0f;
saveTimer = 0f;
reviver = null;
target = null;
}
[IteratorStateMachine(typeof(<ShowFailBar>d__36))]
private IEnumerator ShowFailBar(PlayerController player)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <ShowFailBar>d__36(0)
{
<>4__this = this,
player = player
};
}
private void EnsureHintPoint(int idx)
{
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
if ((Object)(object)hintPoints[idx] == (Object)null)
{
GameObject val = new GameObject("ReviveHintPoint_" + idx);
hintPoints[idx] = val.transform;
}
}
private void ShowReviveHint(PlayerController player, Vector3 pos)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
int playerIDX = player.PlayerIDX;
EnsureHintPoint(playerIDX);
Transform val = hintPoints[playerIDX];
val.position = pos;
string text = GetInteractKey(playerIDX);
if (string.IsNullOrEmpty(text))
{
text = "E";
}
string text2 = (IsChinese() ? ("按 " + text + " 进行救援") : ("Press " + text + " to Revive"));
if (!TextBoxManager.HasTextBox(val))
{
TextBoxManager.ShowTextBox(val.position, val, 0.8f, text2, string.Empty, false, (BoxSlideOrientation)0, false, false);
}
}
private void HideReviveHint(PlayerController player)
{
int playerIDX = player.PlayerIDX;
Transform val = hintPoints[playerIDX];
if (TextBoxManager.HasTextBox(val))
{
TextBoxManager.ClearTextBox(val);
}
}
private string GetInteractKey(int idx)
{
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
BraveInput instanceForPlayer = BraveInput.GetInstanceForPlayer(idx);
if ((Object)(object)instanceForPlayer == (Object)null)
{
return "E";
}
PlayerAction actionFromType = instanceForPlayer.ActiveActions.GetActionFromType((GungeonActionType)10);
if (actionFromType == null)
{
return "E";
}
foreach (BindingSource binding in actionFromType.Bindings)
{
KeyBindingSource val = (KeyBindingSource)(object)((binding is KeyBindingSource) ? binding : null);
if ((BindingSource)(object)val != (BindingSource)null)
{
KeyCombo control = val.Control;
return ((object)(KeyCombo)(ref control)).ToString();
}
}
return "E";
}
private bool IsChinese()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Invalid comparison between Unknown and I4
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Invalid comparison between Unknown and I4
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Invalid comparison between Unknown and I4
return (int)Application.systemLanguage == 6 || (int)Application.systemLanguage == 40 || (int)Application.systemLanguage == 41;
}
}