r2mods/ilspy_dump/ror2_csproj/RoR2.Achievements.Bandit2/Bandit2ConsecutiveResetAchi...

122 lines
3.0 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using Assets.RoR2.Scripts.Platform;
using RoR2.Skills;
namespace RoR2.Achievements.Bandit2;
[RegisterAchievement("Bandit2ConsecutiveReset", "Skills.Bandit2.Rifle", "CompleteThreeStages", 3u, typeof(Bandit2ConsecutiveResetServerAchievement))]
public class Bandit2ConsecutiveResetAchievement : BaseAchievement
{
private class Bandit2ConsecutiveResetServerAchievement : BaseServerAchievement
{
private int progress;
private SkillDef requiredSkillDef;
private bool waitingForKill;
private CharacterBody _trackedBody;
private CharacterBody trackedBody
{
get
{
return _trackedBody;
}
set
{
if ((object)_trackedBody != value)
{
if ((object)_trackedBody != null)
{
_trackedBody.onSkillActivatedServer -= OnBodySKillActivatedServer;
}
_trackedBody = value;
if ((object)_trackedBody != null)
{
_trackedBody.onSkillActivatedServer += OnBodySKillActivatedServer;
progress = 0;
waitingForKill = false;
}
}
}
}
private void OnBodySKillActivatedServer(GenericSkill skillSlot)
{
if ((object)skillSlot.skillDef == requiredSkillDef && (object)requiredSkillDef != null)
{
if (waitingForKill)
{
progress = 0;
}
waitingForKill = true;
}
}
public override void OnInstall()
{
base.OnInstall();
requiredSkillDef = SkillCatalog.GetSkillDef(SkillCatalog.FindSkillIndexByName("Bandit2.ResetRevolver"));
GlobalEventManager.onCharacterDeathGlobal += OnCharacterDeathGlobal;
RoR2Application.onFixedUpdate += FixedUpdate;
}
public override void OnUninstall()
{
trackedBody = null;
RoR2Application.onFixedUpdate -= FixedUpdate;
GlobalEventManager.onCharacterDeathGlobal -= OnCharacterDeathGlobal;
base.OnUninstall();
}
private void FixedUpdate()
{
trackedBody = GetCurrentBody();
}
private void OnCharacterDeathGlobal(DamageReport damageReport)
{
if ((DamageType)(damageReport.damageInfo.damageType & DamageType.ResetCooldownsOnKill) == DamageType.ResetCooldownsOnKill && !(damageReport.attackerBody == null) && (object)damageReport.attackerBody == trackedBody)
{
waitingForKill = false;
progress++;
if (progress >= requirement)
{
Grant();
ServerTryToCompleteActivity();
}
}
}
}
private static readonly int requirement = 15;
protected override BodyIndex LookUpRequiredBodyIndex()
{
return BodyCatalog.FindBodyIndex("Bandit2Body");
}
protected override void OnBodyRequirementMet()
{
base.OnBodyRequirementMet();
SetServerTracked(shouldTrack: true);
}
protected override void OnBodyRequirementBroken()
{
SetServerTracked(shouldTrack: false);
base.OnBodyRequirementBroken();
}
public override void TryToCompleteActivity()
{
bool flag = base.localUser.id == LocalUserManager.GetFirstLocalUser().id;
if (shouldGrant && flag)
{
BaseActivitySelector baseActivitySelector = new BaseActivitySelector();
baseActivitySelector.activityAchievementID = "Bandit2ConsecutiveReset";
PlatformSystems.activityManager.TryToCompleteActivity(baseActivitySelector);
}
}
}