Regions are now UserID based.

This commit is contained in:
Lucas Nicodemus 2011-07-21 12:25:57 -06:00
parent d4665e5860
commit cd018fed8d
5 changed files with 52 additions and 10 deletions

View file

@ -312,6 +312,7 @@ namespace TShockAPI
{
args.Player.Group = Tools.GetGroup(exr[1]);
args.Player.UserAccountName = args.Parameters[0];
args.Player.UserID = TShock.Users.GetUserID(args.Player.UserAccountName);
args.Player.IsLoggedIn = true;
args.Player.SendMessage("Authenticated as " + args.Parameters[0] + " successfully.", Color.LimeGreen);
Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user: " + args.Parameters[0]);
@ -1286,7 +1287,7 @@ namespace TShockAPI
foreach (Region r in TShock.Regions.Regions)
{
args.Player.SendMessage(r.RegionName + ": P: " + r.DisableBuild + " X: " + r.RegionArea.X + " Y: " + r.RegionArea.Y + " W: " + r.RegionArea.Width + " H: " + r.RegionArea.Height );
foreach (string s in r.RegionAllowedIDs)
foreach (int s in r.RegionAllowedIDs)
{
args.Player.SendMessage(r.RegionName + ": " + s);
}

View file

@ -222,7 +222,21 @@ namespace TShockAPI.DB
string[] SplitIDs = MergedIDs.Split(',');
Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldID.ToString());
r.RegionAllowedIDs = SplitIDs;
r.RegionAllowedIDs = new int[SplitIDs.Length];
try
{
for (int i = 0; i < SplitIDs.Length; i++)
{
r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]);
}
} catch (Exception e)
{
Log.Error("Your database contains invalid UserIDs (they should be ints).");
Log.Error("A lot of things will fail because of this. You must manually delete and re-create the allowed field.");
Log.Error(e.Message);
continue;
}
Regions.Add(r);
}
reader.Close();
@ -363,7 +377,7 @@ namespace TShockAPI.DB
public bool AddNewUser(string regionName, String userName)
{
string MergedIDs = string.Empty;
try
{
@ -372,7 +386,7 @@ namespace TShockAPI.DB
com.CommandText = "SELECT * FROM Regions WHERE RegionName=@name AND WorldID=@worldid";
com.AddParameter("@name", regionName);
com.AddParameter("@worldid", Main.worldID.ToString());
string MergedIDs = string.Empty;
using (var reader = com.ExecuteReader())
{
if (reader.Read())
@ -380,9 +394,9 @@ namespace TShockAPI.DB
}
if (MergedIDs == string.Empty)
MergedIDs = userName;
MergedIDs = Convert.ToString(TShock.Users.GetUserID(userName));
else
MergedIDs = MergedIDs + "," + userName;
MergedIDs = MergedIDs + "," + Convert.ToString(TShock.Users.GetUserID(userName));
com.Parameters.Clear();
com.CommandText = "UPDATE Regions SET UserIds=@ids WHERE RegionName=@name AND WorldID=@worldid";
com.AddParameter("@ids", MergedIDs);
@ -435,7 +449,7 @@ namespace TShockAPI.DB
public string RegionName { get; set; }
public int DisableBuild { get; set; }
public string RegionWorldID { get; set; }
public string[] RegionAllowedIDs { get; set; }
public int[] RegionAllowedIDs { get; set; }
public Region(Rectangle region, string name, int disablebuild, string RegionWorldIDz)
{
@ -476,7 +490,7 @@ namespace TShockAPI.DB
for (int i = 0; i < RegionAllowedIDs.Length; i++)
{
if (RegionAllowedIDs[i] == ply.UserAccountName)
if (RegionAllowedIDs[i] == ply.UserID)
{
return true;
}

View file

@ -193,6 +193,32 @@ namespace TShockAPI.DB
return returndata;
}
public int GetUserID(string username)
{
try
{
using (var com = database.CreateCommand())
{
com.CommandText = "SELECT * FROM Users WHERE Username=@name";
com.AddParameter("@name", username.ToLower());
using (var reader = com.ExecuteReader())
{
if (reader.Read())
{
return reader.Get<int>("ID");
}
reader.Close();
}
}
}
catch (Exception ex)
{
Log.ConsoleError("FetchHashedPasswordAndGroup SQL returned an error: " + ex.ToString());
}
return -1;
}
/// <summary>
/// Returns a Group for a ip from the database
/// </summary>

View file

@ -35,5 +35,5 @@ using System.Runtime.InteropServices;
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.3.4.0720")]
[assembly: AssemblyFileVersion("2.3.4.0720")]
[assembly: AssemblyVersion("2.3.4.0721")]
[assembly: AssemblyFileVersion("2.3.4.0721")]

View file

@ -50,6 +50,7 @@ namespace TShockAPI
public string UserAccountName { get; set; }
public bool HasBeenSpammedWithBuildMessage = false;
public bool IsLoggedIn = false;
public int UserID = -1;
Player FakePlayer = null;
public bool RealPlayer