50 lines
1.4 KiB
C#
50 lines
1.4 KiB
C#
namespace RoR2.Achievements;
|
|
|
|
[RegisterAchievement("CompleteTeleporterWithoutInjury", "Items.SecondarySkillMagazine", null, 1u, null)]
|
|
public class CompleteTeleporterWithoutInjuryAchievement : BaseAchievement
|
|
{
|
|
private bool hasBeenHit;
|
|
|
|
public override void OnInstall()
|
|
{
|
|
base.OnInstall();
|
|
TeleporterInteraction.onTeleporterBeginChargingGlobal += OnTeleporterBeginCharging;
|
|
TeleporterInteraction.onTeleporterChargedGlobal += OnTeleporterCharged;
|
|
GlobalEventManager.onClientDamageNotified += OnClientDamageNotified;
|
|
}
|
|
|
|
public override void OnUninstall()
|
|
{
|
|
TeleporterInteraction.onTeleporterBeginChargingGlobal -= OnTeleporterBeginCharging;
|
|
TeleporterInteraction.onTeleporterChargedGlobal -= OnTeleporterCharged;
|
|
GlobalEventManager.onClientDamageNotified -= OnClientDamageNotified;
|
|
base.OnUninstall();
|
|
}
|
|
|
|
private void OnTeleporterBeginCharging(TeleporterInteraction teleporterInteraction)
|
|
{
|
|
hasBeenHit = false;
|
|
}
|
|
|
|
private void OnTeleporterCharged(TeleporterInteraction teleporterInteraction)
|
|
{
|
|
Check();
|
|
}
|
|
|
|
private void OnClientDamageNotified(DamageDealtMessage damageDealtMessage)
|
|
{
|
|
if (!hasBeenHit && (bool)damageDealtMessage.victim && damageDealtMessage.victim == base.localUser.cachedBodyObject)
|
|
{
|
|
hasBeenHit = true;
|
|
}
|
|
}
|
|
|
|
private void Check()
|
|
{
|
|
if ((bool)base.localUser.cachedBody && (bool)base.localUser.cachedBody.healthComponent && base.localUser.cachedBody.healthComponent.alive && !hasBeenHit)
|
|
{
|
|
Grant();
|
|
}
|
|
}
|
|
}
|