r2mods/ilspy_dump/ror2_csproj/RoR2.Achievements/LoaderKillLoadersAchievemen...

82 lines
2.1 KiB
C#

using System.Collections.Generic;
namespace RoR2.Achievements;
[RegisterAchievement("LoaderKillLoaders", "Skills.Loader.Thunderslam", "DefeatSuperRoboBallBoss", 3u, typeof(LoaderKillLoadersServerAchievement))]
public class LoaderKillLoadersAchievement : BaseAchievement
{
private class LoaderKillLoadersServerAchievement : BaseServerAchievement
{
private BodyIndex bodyIndex;
private List<SceneDef> requiredSceneDefs = new List<SceneDef>();
private int numKills;
public override void OnInstall()
{
base.OnInstall();
bodyIndex = BodyCatalog.FindBodyIndex("LoaderBody");
requiredSceneDefs.Add(SceneCatalog.GetSceneDefFromSceneName("artifactworld"));
requiredSceneDefs.Add(SceneCatalog.GetSceneDefFromSceneName("artifactworld01"));
requiredSceneDefs.Add(SceneCatalog.GetSceneDefFromSceneName("artifactworld02"));
requiredSceneDefs.Add(SceneCatalog.GetSceneDefFromSceneName("artifactworld03"));
GlobalEventManager.onCharacterDeathGlobal += OnCharacterDeath;
}
public override void OnUninstall()
{
GlobalEventManager.onCharacterDeathGlobal -= OnCharacterDeath;
base.OnUninstall();
}
private void OnCharacterDeath(DamageReport damageReport)
{
if ((bool)damageReport.victimBody)
{
if (damageReport.victimBody.bodyIndex == bodyIndex && IsCurrentBody(damageReport.attackerBody) && CheckForArtifactWorldScene())
{
numKills++;
}
if (numKills >= 3)
{
Grant();
}
}
}
private bool CheckForArtifactWorldScene()
{
bool result = false;
for (int i = 0; i < requiredSceneDefs.Count; i++)
{
if (SceneCatalog.mostRecentSceneDef == requiredSceneDefs[i])
{
result = true;
break;
}
}
return result;
}
}
private const int requirement = 3;
protected override BodyIndex LookUpRequiredBodyIndex()
{
return BodyCatalog.FindBodyIndex("LoaderBody");
}
protected override void OnBodyRequirementMet()
{
base.OnBodyRequirementMet();
SetServerTracked(shouldTrack: true);
}
protected override void OnBodyRequirementBroken()
{
SetServerTracked(shouldTrack: false);
base.OnBodyRequirementBroken();
}
}