122 lines
3.0 KiB
C#
122 lines
3.0 KiB
C#
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|