Hi
Sometimes while changing levels Hud.Game.Me.ParagonTotalExp is ZERO for a while and then valid value can be read.
This is annoying as I have to wait for values to stabilize.
I have noticed this before in some other plugins that "flash" invalid data on screen before they get correct values.
Arkahr NoGemsPlugin is a good example.
Code to re-produce this (you should get the idea what goes wrong):
Code:
class LevelTimeTracker : BasePlugin, INewAreaHandler, IInGameTopPainter, IMonsterKilledHandler
{
double CurrentQuestProgress;
bool waitParagonTotalExp;
public LevelTimeTracker() { Enabled = true; }
public void OnNewArea(bool newGame, ISnoArea area)
{
if (newGame && CurrentQuestProgress != 0)
{
logData(area, "abort");
CurrentQuestProgress = 0;
}
waitParagonTotalExp = Hud.Game.Me.ParagonTotalExp == 0;
logData(area, "new");
}
public void OnMonsterKilled(IMonster monster)
{
if (monster.IsElite && monster.Rarity == ActorRarity.Boss)
{
logData(Hud.Game.Me.SnoArea, "boss");
}
}
public void PaintTopInGame(ClipState clipState)
{
// Sanity checks as changing level causes sometimes this to be temporarily zero.
if (Hud.Game.Me.ParagonTotalExp == 0)
{
waitParagonTotalExp = true;
logData(Hud.Game.Me.SnoArea, "glitch");
return;
}
if (waitParagonTotalExp)
{
waitParagonTotalExp = false;
logData(Hud.Game.Me.SnoArea, "new2");
}
if (Hud.Game.CurrentQuestProgress != CurrentQuestProgress)
{
if (CurrentQuestProgress == 0 && Hud.Game.CurrentQuestProgress > 0)
{
logData(Hud.Game.Me.SnoArea, "r-start");
}
else if (Hud.Game.CurrentQuestProgress == Hud.Game.MaxQuestProgress)
{
logData(Hud.Game.Me.SnoArea, "r-end");
}
else if (CurrentQuestProgress > 0 && Hud.Game.CurrentQuestProgress == 0)
{
logData(Hud.Game.Me.SnoArea, "r-bonus");
}
CurrentQuestProgress = Hud.Game.CurrentQuestProgress;
}
}
void logData(ISnoArea area, string reason)
{
var game = Hud.Game;
var player = game.Me;
Hud.Debug(new StringBuilder("\t|level|")
.Append(game.SpecialArea).Append("|")
.Append(area.IsTown).Append("|")
.Append(area.IsRandom).Append("|")
.Append(area.Sno).Append("|")
.Append(area.NameEnglish).Append("|")
.Append("game").Append("|")
.AppendFormat("{0:0}", game.CurrentGameTick / 60).Append("|")
.Append(game.GameDifficulty.ToString().ToUpper()).Append("|")
.Append(player.InGreaterRiftRank).Append("|")
.AppendFormat("{0:0}", CurrentQuestProgress).Append("|")
.AppendFormat("{0:0}", game.CurrentQuestProgress).Append("|")
.Append("player").Append("|")
.Append(player.CurrentLevelParagon).Append("|")
.Append(ValueToString(player.ParagonTotalExp, ValueFormat.LongNumber)).Append("|")
.Append(ValueToString(player.BonusPoolRemaining, ValueFormat.LongNumber)).Append("|")
.Append(ValueToString(player.Materials.Gold, ValueFormat.LongNumber)).Append("|")
.Append(ValueToString(player.Materials.DeathsBreath, ValueFormat.LongNumber)).Append("|")
.Append(reason).Append("|")
.ToString());
}
}
Example log:
Code:
2019.03.21 21.36.11.276 2019.03.21 21.36.13.1726 |level|None|True|False|332339|New Tristram|game|6009|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|new|
2019.03.21 21.36.11.278 2019.03.21 21.36.13.1746 >>>>: NEW GAME
2019.03.21 21.36.11.949 2019.03.21 21.36.13.8459 |level|None|True|False|332339|New Tristram|game|6009|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.005 2019.03.21 21.36.13.9019 |level|None|True|False|332339|New Tristram|game|6009|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.057 2019.03.21 21.36.13.9540 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.058 2019.03.21 21.36.13.9550 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.076 2019.03.21 21.36.13.9730 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.077 2019.03.21 21.36.13.9740 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.093 2019.03.21 21.36.13.9900 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.094 2019.03.21 21.36.13.9910 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.112 2019.03.21 21.36.14.0080 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.113 2019.03.21 21.36.14.0100 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.130 2019.03.21 21.36.14.0270 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.131 2019.03.21 21.36.14.0280 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.147 2019.03.21 21.36.14.0440 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.148 2019.03.21 21.36.14.0450 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.12.165 2019.03.21 21.36.14.0620 |level|None|True|False|332339|New Tristram|game|6010|T13|0|0|0|player|1005|10.6tr|9.2bn|8.4bn|13k|new2|
2019.03.21 21.36.35.003 2019.03.21 21.36.36.8996 |level|None|True|False|168314|Hidden Camp|game|3|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|new|
2019.03.21 21.36.35.004 2019.03.21 21.36.36.9011 >>>>: NEW GAME
2019.03.21 21.36.35.114 2019.03.21 21.36.37.0112 |level|None|True|False|168314|Hidden Camp|game|3|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|
2019.03.21 21.36.35.116 2019.03.21 21.36.37.0122 |level|None|True|False|168314|Hidden Camp|game|3|T13|0|0|0|player|1005|0|9.2bn|8.4bn|13k|glitch|