r2mods/ilspy_dump/ror2_csproj/EntityStates.ScavMonster/Death.cs

80 lines
1.8 KiB
C#

using RoR2;
using UnityEngine;
using UnityEngine.Networking;
namespace EntityStates.ScavMonster;
public class Death : GenericCharacterDeath
{
[SerializeField]
public SpawnCard spawnCard;
public static float duration;
private bool shouldDropPack;
protected override bool shouldAutoDestroy => false;
public override void OnEnter()
{
base.OnEnter();
if (!NetworkServer.active)
{
return;
}
CharacterMaster characterMaster = (base.characterBody ? base.characterBody.master : null);
if ((bool)characterMaster)
{
bool flag = characterMaster.IsExtraLifePendingServer();
bool flag2 = characterMaster.inventory.GetItemCount(RoR2Content.Items.Ghost) > 0;
bool flag3 = !Stage.instance || Stage.instance.scavPackDroppedServer;
shouldDropPack = !flag && !flag2 && !flag3;
if (shouldDropPack)
{
Stage.instance.scavPackDroppedServer = true;
}
}
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (NetworkServer.active && base.fixedAge >= duration)
{
DestroyBodyAsapServer();
}
}
public override void OnExit()
{
DestroyModel();
base.OnExit();
}
protected override void OnPreDestroyBodyServer()
{
base.OnPreDestroyBodyServer();
if (shouldDropPack)
{
AttemptDropPack();
}
}
private void AttemptDropPack()
{
DirectorCore instance = DirectorCore.instance;
if ((bool)instance)
{
Xoroshiro128Plus rng = new Xoroshiro128Plus(Run.instance.stageRng.nextUint);
DirectorPlacementRule placementRule = new DirectorPlacementRule
{
placementMode = DirectorPlacementRule.PlacementMode.NearestNode,
position = base.characterBody.footPosition,
minDistance = 0f,
maxDistance = float.PositiveInfinity
};
_ = (bool)instance.TrySpawnObject(new DirectorSpawnRequest(spawnCard, placementRule, rng));
}
}
}