diff --git a/TShockAPI/DB/BanManager.cs b/TShockAPI/DB/BanManager.cs
index c2fef99e..4e7d1f92 100644
--- a/TShockAPI/DB/BanManager.cs
+++ b/TShockAPI/DB/BanManager.cs
@@ -124,7 +124,7 @@ namespace TShockAPI.DB
{
try
{
- return database.Query("INSERT INTO Bans (IP, Name, Reason, BanningUser, Date, Expiration) VALUES (@0, @1, @2, @3, @4, @5);", ip, name, reason, banner, DateTime.Now.ToString("G"), expiration) != 0;
+ return database.Query("INSERT INTO Bans (IP, Name, Reason, BanningUser, Date, Expiration) VALUES (@0, @1, @2, @3, @4, @5);", ip, name, reason, banner, DateTime.UtcNow.ToString("s"), expiration) != 0;
}
catch (Exception ex)
{
diff --git a/TShockAPI/DB/UserManager.cs b/TShockAPI/DB/UserManager.cs
index c8af324c..8585d907 100644
--- a/TShockAPI/DB/UserManager.cs
+++ b/TShockAPI/DB/UserManager.cs
@@ -17,6 +17,7 @@ along with this program. If not, see .
*/
using System;
+using System.CodeDom.Compiler;
using System.Data;
using System.Collections.Generic;
using System.Linq;
@@ -38,6 +39,7 @@ namespace TShockAPI.DB
new SqlColumn("Username", MySqlDbType.VarChar, 32) {Unique = true},
new SqlColumn("Password", MySqlDbType.VarChar, 128),
new SqlColumn("Usergroup", MySqlDbType.Text),
+ new SqlColumn("Registered", MySqlDbType.Text),
new SqlColumn("LastAccessed", MySqlDbType.Text),
new SqlColumn("KnownIPs", MySqlDbType.Text)
);
@@ -60,8 +62,8 @@ namespace TShockAPI.DB
int ret;
try
{
- ret = database.Query("INSERT INTO Users (Username, Password, UserGroup) VALUES (@0, @1, @2);", user.Name,
- TShock.Utils.HashPassword(user.Password), user.Group);
+ ret = database.Query("INSERT INTO Users (Username, Password, UserGroup, Registered) VALUES (@0, @1, @2, @3);", user.Name,
+ TShock.Utils.HashPassword(user.Password), user.Group, DateTime.UtcNow.ToString("s"));
}
catch (Exception ex)
{
@@ -146,7 +148,7 @@ namespace TShockAPI.DB
{
try
{
- if (database.Query("UPDATE Users SET LastAccessed = @0, KnownIps = @1 WHERE Username = @2;", DateTime.Now.ToString("G"), user.KnownIps, user.Name) == 0)
+ if (database.Query("UPDATE Users SET LastAccessed = @0, KnownIps = @1 WHERE Username = @2;", DateTime.UtcNow.ToString("s"), user.KnownIps, user.Name) == 0)
throw new UserNotExistException(user.Name);
}
catch (Exception ex)
@@ -268,6 +270,7 @@ namespace TShockAPI.DB
user.Group = result.Get("Usergroup");
user.Password = result.Get("Password");
user.Name = result.Get("Username");
+ user.Registered = result.Get("Registered");
user.LastAccessed = result.Get("LastAccessed");
user.KnownIps = result.Get("KnownIps");
return user;
@@ -280,14 +283,16 @@ namespace TShockAPI.DB
public string Name { get; set; }
public string Password { get; set; }
public string Group { get; set; }
+ public string Registered { get; set; }
public string LastAccessed { get; set; }
public string KnownIps { get; set; }
- public User(string name, string pass, string group, string last, string known)
+ public User(string name, string pass, string group, string registered, string last, string known)
{
Name = name;
Password = pass;
Group = group;
+ Registered = registered;
LastAccessed = last;
KnownIps = known;
}
@@ -297,6 +302,7 @@ namespace TShockAPI.DB
Name = "";
Password = "";
Group = "";
+ Registered = "";
LastAccessed = "";
KnownIps = "";
}
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index eff01fa6..8f0f84e3 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -1880,10 +1880,10 @@ namespace TShockAPI
}
else if (action == EditAction.PlaceTile || action == EditAction.PlaceWall)
{
- if (action == EditAction.PlaceTile && TShock.Config.PreventInvalidPlaceStyle && ((editData == 4 && style > 8) ||
- (editData == 13 && style > 4) || (editData == 15 && style > 1) || (editData == 21 && style > 6) ||
- (editData == 82 && style > 5) || (editData == 91 && style > 3) || (editData == 105 && style > 42) ||
- (editData == 135 && style > 3) || (editData == 139 && style > 12) || (editData == 144 && style > 2) ||
+ if (action == EditAction.PlaceTile && TShock.Config.PreventInvalidPlaceStyle && ((editData == 4 && style > 11) ||
+ (editData == 13 && style > 4) || (editData == 15 && style > 17) || (editData == 21 && style > 22) ||
+ (editData == 82 && style > 5) || (editData == 91 && style > 21) || (editData == 105 && style > 49) ||
+ (editData == 135 && style > 6) || (editData == 139 && style > 27) || (editData == 144 && style > 2) ||
(editData == 149 && style > 2)))
{
args.Player.SendTileSquare(tileX, tileY);
diff --git a/TShockAPI/Rest/RestManager.cs b/TShockAPI/Rest/RestManager.cs
index 8d872fe2..c14e38d8 100644
--- a/TShockAPI/Rest/RestManager.cs
+++ b/TShockAPI/Rest/RestManager.cs
@@ -307,7 +307,7 @@ namespace TShockAPI
return RestMissingParam("password");
// NOTE: ip can be blank
- User user = new User(username, password, group, "", "");
+ User user = new User(username, password, group, "", "", "");
try
{
TShock.Users.AddUser(user);
diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs
index 73b5db3b..9701bf93 100644
--- a/TShockAPI/TSPlayer.cs
+++ b/TShockAPI/TSPlayer.cs
@@ -633,7 +633,7 @@ namespace TShockAPI
Main.item[itemid].stack = stack;
Main.item[itemid].owner = Index;
Main.item[itemid].prefix = (byte) prefix;
- Main.item[itemid].noGrabDelay = 1;
+ Main.item[itemid].noGrabDelay = 1;
Main.item[itemid].velocity = Main.player[this.Index].velocity;
NetMessage.SendData((int)PacketTypes.ItemDrop, -1, -1, "", itemid, 0f, 0f, 0f);
NetMessage.SendData((int)PacketTypes.ItemOwner, -1, -1, "", itemid, 0f, 0f, 0f);
diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index 6daa2094..a66b4309 100644
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -1541,9 +1541,10 @@ namespace TShockAPI
Item[] inventory = player.TPlayer.inventory;
Item[] armor = player.TPlayer.armor;
+ Item[] dye = player.TPlayer.dye;
for (int i = 0; i < NetItem.maxNetInventory; i++)
{
- if (i < 49)
+ if (i < NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots))
{
Item item = new Item();
if (inventory[i] != null && inventory[i].netID != 0)
@@ -1560,15 +1561,16 @@ namespace TShockAPI
}
}
}
- else
+ else if(i < (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)))
{
Item item = new Item();
- if (armor[i - 48] != null && armor[i - 48].netID != 0)
+ var index = i - (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots));
+ if (armor[index] != null && armor[index].netID != 0)
{
- item.netDefaults(armor[i - 48].netID);
- item.Prefix(armor[i - 48].prefix);
+ item.netDefaults(armor[index].netID);
+ item.Prefix(armor[index].prefix);
item.AffixName();
- if (armor[i - 48].stack > item.maxStack)
+ if (armor[index].stack > item.maxStack)
{
check = true;
player.SendMessage(
@@ -1577,6 +1579,24 @@ namespace TShockAPI
}
}
}
+ else if (i < (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)))
+ {
+ Item item = new Item();
+ var index = i - (NetItem.maxNetInventory - NetItem.dyeSlots);
+ if (dye[index] != null && dye[index].netID != 0)
+ {
+ item.netDefaults(dye[index].netID);
+ item.Prefix(dye[index].prefix);
+ item.AffixName();
+ if (dye[index].stack > item.maxStack)
+ {
+ check = true;
+ player.SendMessage(
+ String.Format("Stack cheat detected. Remove dye {0} ({1}) and then rejoin", item.name, dye[index].stack),
+ Color.Cyan);
+ }
+ }
+ }
}
return check;