mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-09 07:09:41 -04:00
Fix session modified overflowing after 2 billion (Thanks rdebath, addresses #663)
This commit is contained in:
parent
9f12f21b87
commit
4efa528cc2
1
.gitignore
vendored
1
.gitignore
vendored
@ -18,6 +18,7 @@ bld/
|
|||||||
[Bb]in/
|
[Bb]in/
|
||||||
[Oo]bj/
|
[Oo]bj/
|
||||||
.vs/
|
.vs/
|
||||||
|
*.sdps
|
||||||
|
|
||||||
# Roslyn cache directories
|
# Roslyn cache directories
|
||||||
*.ide/
|
*.ide/
|
||||||
|
@ -91,7 +91,7 @@ namespace MCGalaxy.Commands.Maintenance {
|
|||||||
MessageDataChanged(p, args[0], args[1], args[2]);
|
MessageDataChanged(p, args[0], args[1], args[2]);
|
||||||
} else if (opt == "modified") {
|
} else if (opt == "modified") {
|
||||||
SetInteger(p, args, PlayerData.ColumnBlocks, int.MaxValue, who,
|
SetInteger(p, args, PlayerData.ColumnBlocks, int.MaxValue, who,
|
||||||
v => who.TotalModified = v, type_lo);
|
v => who.SetBaseTotalModified(v), type_lo);
|
||||||
} else if (opt == "drawn") {
|
} else if (opt == "drawn") {
|
||||||
SetInteger(p, args, PlayerData.ColumnDrawn, int.MaxValue, who,
|
SetInteger(p, args, PlayerData.ColumnDrawn, int.MaxValue, who,
|
||||||
v => who.TotalDrawn = v, type_lo);
|
v => who.TotalDrawn = v, type_lo);
|
||||||
|
@ -85,7 +85,7 @@ namespace MCGalaxy.DB {
|
|||||||
if (col.Length == 0) col = p.group.Color;
|
if (col.Length == 0) col = p.group.Color;
|
||||||
p.SetColor(col);
|
p.SetColor(col);
|
||||||
|
|
||||||
p.TotalModified = TotalModified;
|
p.SetBaseTotalModified(TotalModified);
|
||||||
p.TotalDrawn = TotalDrawn;
|
p.TotalDrawn = TotalDrawn;
|
||||||
p.TotalPlaced = TotalPlaced;
|
p.TotalPlaced = TotalPlaced;
|
||||||
p.TotalDeleted = TotalDeleted;
|
p.TotalDeleted = TotalDeleted;
|
||||||
|
@ -136,6 +136,7 @@ namespace MCGalaxy.DB {
|
|||||||
|
|
||||||
public static void EntityLine(Player p, Player who) {
|
public static void EntityLine(Player p, Player who) {
|
||||||
bool hasSkin = !who.SkinName.CaselessEq(who.truename);
|
bool hasSkin = !who.SkinName.CaselessEq(who.truename);
|
||||||
|
// TODO remove hardcoding
|
||||||
bool hasModel = !(who.Model.CaselessEq("humanoid") || who.Model.CaselessEq("human"));
|
bool hasModel = !(who.Model.CaselessEq("humanoid") || who.Model.CaselessEq("human"));
|
||||||
|
|
||||||
if (hasSkin && hasModel) {
|
if (hasSkin && hasModel) {
|
||||||
|
@ -189,7 +189,7 @@ namespace MCGalaxy.Drawing.Ops
|
|||||||
}
|
}
|
||||||
|
|
||||||
lvl.BlockDB.Cache.Add(p, b.X, b.Y, b.Z, op.Flags, old, b.Block);
|
lvl.BlockDB.Cache.Add(p, b.X, b.Y, b.Z, op.Flags, old, b.Block);
|
||||||
p.SessionModified++; p.TotalModified++; p.TotalDrawn++; // increment block stats inline
|
p.TotalModified++; p.TotalDrawn++; // increment block stats inline
|
||||||
|
|
||||||
// Potentially buffer the block change
|
// Potentially buffer the block change
|
||||||
if (op.TotalModified == reloadThreshold) {
|
if (op.TotalModified == reloadThreshold) {
|
||||||
|
@ -325,9 +325,7 @@ namespace MCGalaxy {
|
|||||||
OtherPhysics.DoSpongeRemoved(this, PosToInt(x, y, z), true);
|
OtherPhysics.DoSpongeRemoved(this, PosToInt(x, y, z), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
p.SessionModified++;
|
|
||||||
p.TotalModified++;
|
p.TotalModified++;
|
||||||
|
|
||||||
if (drawn) p.TotalDrawn++;
|
if (drawn) p.TotalDrawn++;
|
||||||
else if (block == Block.Air) p.TotalDeleted++;
|
else if (block == Block.Air) p.TotalDeleted++;
|
||||||
else p.TotalPlaced++;
|
else p.TotalPlaced++;
|
||||||
|
@ -118,10 +118,12 @@ namespace MCGalaxy {
|
|||||||
|
|
||||||
public int money;
|
public int money;
|
||||||
public long TotalModified, TotalDrawn, TotalPlaced, TotalDeleted;
|
public long TotalModified, TotalDrawn, TotalPlaced, TotalDeleted;
|
||||||
public int SessionModified;
|
|
||||||
public int TimesVisited, TimesBeenKicked, TimesDied;
|
public int TimesVisited, TimesBeenKicked, TimesDied;
|
||||||
public int TotalMessagesSent;
|
public int TotalMessagesSent;
|
||||||
|
|
||||||
|
long startModified;
|
||||||
|
public long SessionModified { get { return TotalModified - startModified; } }
|
||||||
|
|
||||||
DateTime startTime;
|
DateTime startTime;
|
||||||
public TimeSpan TotalTime {
|
public TimeSpan TotalTime {
|
||||||
get { return DateTime.UtcNow - startTime; }
|
get { return DateTime.UtcNow - startTime; }
|
||||||
|
@ -413,6 +413,13 @@ namespace MCGalaxy {
|
|||||||
if (spamChecker != null) spamChecker.CheckChatSpam();
|
if (spamChecker != null) spamChecker.CheckChatSpam();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void SetBaseTotalModified(long modified) {
|
||||||
|
long adjust = modified - TotalModified;
|
||||||
|
TotalModified = modified;
|
||||||
|
// adjustment so that SessionModified is unaffected
|
||||||
|
startModified += adjust;
|
||||||
|
}
|
||||||
|
|
||||||
string selTitle;
|
string selTitle;
|
||||||
readonly object selLock = new object();
|
readonly object selLock = new object();
|
||||||
Vec3S32[] selMarks;
|
Vec3S32[] selMarks;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user