terraria-source-code/Social/WeGame/AchievementsSocialModule.cs
2021-10-26 12:45:26 -04:00

173 lines
5.8 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.Social.WeGame.AchievementsSocialModule
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
using rail;
using System;
using System.Threading;
namespace Terraria.Social.WeGame
{
public class AchievementsSocialModule : Terraria.Social.Base.AchievementsSocialModule
{
private const string FILE_NAME = "/achievements-wegame.dat";
private bool _areStatsReceived;
private bool _areAchievementReceived;
private RailCallBackHelper _callbackHelper = new RailCallBackHelper();
private IRailPlayerAchievement _playerAchievement;
private IRailPlayerStats _playerStats;
public override void Initialize()
{
// ISSUE: method pointer
this._callbackHelper.RegisterCallback((RAILEventID) 2001, new RailEventCallBackHandler((object) this, __methodptr(RailEventCallBack)));
// ISSUE: method pointer
this._callbackHelper.RegisterCallback((RAILEventID) 2101, new RailEventCallBackHandler((object) this, __methodptr(RailEventCallBack)));
IRailPlayerStats myPlayerStats = this.GetMyPlayerStats();
IRailPlayerAchievement playerAchievement = this.GetMyPlayerAchievement();
if (myPlayerStats == null || playerAchievement == null)
return;
myPlayerStats.AsyncRequestStats("");
playerAchievement.AsyncRequestAchievement("");
while (!this._areStatsReceived && !this._areAchievementReceived)
{
CoreSocialModule.RailEventTick();
Thread.Sleep(10);
}
}
public override void Shutdown() => this.StoreStats();
private IRailPlayerStats GetMyPlayerStats()
{
if (this._playerStats == null)
{
IRailStatisticHelper irailStatisticHelper = rail_api.RailFactory().RailStatisticHelper();
if (irailStatisticHelper != null)
{
RailID railId = new RailID();
((RailComparableID) railId).id_ = (__Null) 0L;
this._playerStats = irailStatisticHelper.CreatePlayerStats(railId);
}
}
return this._playerStats;
}
private IRailPlayerAchievement GetMyPlayerAchievement()
{
if (this._playerAchievement == null)
{
IRailAchievementHelper achievementHelper = rail_api.RailFactory().RailAchievementHelper();
if (achievementHelper != null)
{
RailID railId = new RailID();
((RailComparableID) railId).id_ = (__Null) 0L;
this._playerAchievement = achievementHelper.CreatePlayerAchievement(railId);
}
}
return this._playerAchievement;
}
public void RailEventCallBack(RAILEventID eventId, EventBase data)
{
if (eventId != 2001)
{
if (eventId != 2101)
return;
this._areAchievementReceived = true;
}
else
this._areStatsReceived = true;
}
public override bool IsAchievementCompleted(string name)
{
bool flag = false;
RailResult railResult = (RailResult) 1;
IRailPlayerAchievement playerAchievement = this.GetMyPlayerAchievement();
if (playerAchievement != null)
railResult = playerAchievement.HasAchieved(name, ref flag);
return flag && railResult == 0;
}
public override byte[] GetEncryptionKey()
{
RailID railId = rail_api.RailFactory().RailPlayer().GetRailID();
byte[] numArray = new byte[16];
byte[] bytes = BitConverter.GetBytes((ulong) ((RailComparableID) railId).id_);
Array.Copy((Array) bytes, (Array) numArray, 8);
Array.Copy((Array) bytes, 0, (Array) numArray, 8, 8);
return numArray;
}
public override string GetSavePath() => "/achievements-wegame.dat";
private int GetIntStat(string name)
{
int num = 0;
this.GetMyPlayerStats()?.GetStatValue(name, ref num);
return num;
}
private float GetFloatStat(string name)
{
double num = 0.0;
this.GetMyPlayerStats()?.GetStatValue(name, ref num);
return (float) num;
}
private bool SetFloatStat(string name, float value)
{
IRailPlayerStats myPlayerStats = this.GetMyPlayerStats();
RailResult railResult = (RailResult) 1;
if (myPlayerStats != null)
railResult = myPlayerStats.SetStatValue(name, (double) value);
return railResult == 0;
}
public override void UpdateIntStat(string name, int value)
{
IRailPlayerStats myPlayerStats = this.GetMyPlayerStats();
if (myPlayerStats == null)
return;
int num = 0;
if (myPlayerStats.GetStatValue(name, ref num) != null || num >= value)
return;
myPlayerStats.SetStatValue(name, value);
}
private bool SetIntStat(string name, int value)
{
IRailPlayerStats myPlayerStats = this.GetMyPlayerStats();
RailResult railResult = (RailResult) 1;
if (myPlayerStats != null)
railResult = myPlayerStats.SetStatValue(name, value);
return railResult == 0;
}
public override void UpdateFloatStat(string name, float value)
{
IRailPlayerStats myPlayerStats = this.GetMyPlayerStats();
if (myPlayerStats == null)
return;
double num = 0.0;
if (myPlayerStats.GetStatValue(name, ref num) != null || num >= (double) value)
return;
myPlayerStats.SetStatValue(name, (double) value);
}
public override void StoreStats()
{
this.SaveStats();
this.SaveAchievement();
}
private void SaveStats() => this.GetMyPlayerStats()?.AsyncStoreStats("");
private void SaveAchievement() => this.GetMyPlayerAchievement()?.AsyncStoreAchievement("");
public override void CompleteAchievement(string name) => this.GetMyPlayerAchievement()?.MakeAchievement(name);
}
}