173 lines
5.8 KiB
C#
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);
|
|
}
|
|
}
|