Skip to content

Commit

Permalink
Fix placed/deleted overflowing at 33 million, up it to 66 million
Browse files Browse the repository at this point in the history
  • Loading branch information
UnknownShadow200 committed Mar 19, 2020
1 parent 97b26b0 commit 4dfef64
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 14 deletions.
25 changes: 14 additions & 11 deletions MCGalaxy/Database/PlayerData.cs
Expand Up @@ -122,12 +122,12 @@ public class PlayerData {
data.Kicks = record.GetInt(ColumnKicked);
data.Messages = record.GetInt(ColumnMessages);

long blocks = record.GetLong(ColumnTotalBlocks);
long cuboided = record.GetLong(ColumnTotalCuboided);
data.TotalModified = blocks & LowerBitsMask;
data.TotalPlaced = blocks >> LowerBits;
data.TotalDrawn = cuboided & LowerBitsMask;
data.TotalDeleted = cuboided >> LowerBits;
long blocks = record.GetLong(ColumnTotalBlocks);
long drawn = record.GetLong(ColumnTotalCuboided);
data.TotalModified = UnpackLo(blocks);
data.TotalPlaced = UnpackHi(blocks);
data.TotalDrawn = UnpackLo(drawn);
data.TotalDeleted = UnpackHi(drawn);
return data;
}
internal static object Read(IDataRecord record, object arg) { return Parse(record); }
Expand Down Expand Up @@ -166,12 +166,15 @@ public class PlayerData {
}


internal static long BlocksPacked(long placed, long modified) {
return placed << LowerBits | modified;
internal static long UnpackHi(long value) {
// unsigned shift right
return (long)((ulong)value >> LowerBits);
}

internal static long CuboidPacked(long deleted, long drawn) {
return deleted << LowerBits | drawn;
internal static long UnpackLo(long value) {
return value & LowerBitsMask;
}
internal static long Pack(long hi, long lo) {
return hi << LowerBits | lo;
}

public const int LowerBits = 38;
Expand Down
6 changes: 3 additions & 3 deletions MCGalaxy/Player/Player.cs
Expand Up @@ -141,13 +141,13 @@ public partial class Player : Entity, IDisposable {

// Player disconnected before SQL data was retrieved
if (!gotSQLData) return;
long blocks = PlayerData.BlocksPacked(TotalPlaced, TotalModified);
long cuboided = PlayerData.CuboidPacked(TotalDeleted, TotalDrawn);
long blocks = PlayerData.Pack(TotalPlaced, TotalModified);
long drawn = PlayerData.Pack(TotalDeleted, TotalDrawn);
Database.Backend.UpdateRows("Players", "IP=@0, LastLogin=@1, totalLogin=@2, totalDeaths=@3, Money=@4, " +
"totalBlocks=@5, totalCuboided=@6, totalKicked=@7, TimeSpent=@8, Messages=@9", "WHERE Name=@10",
ip, LastLogin.ToString(Database.DateFormat),
TimesVisited, TimesDied, money, blocks,
cuboided, TimesBeenKicked, (long)TotalTime.TotalSeconds, TotalMessagesSent, name);
drawn, TimesBeenKicked, (long)TotalTime.TotalSeconds, TotalMessagesSent, name);
}

public bool CanUse(Command cmd) { return group.Commands.Contains(cmd); }
Expand Down

0 comments on commit 4dfef64

Please sign in to comment.