Added region allowed users. May require setting up regions again

This commit is contained in:
Twitchy 2011-06-23 08:06:11 +12:00
parent 2e752ca2d0
commit 640382d898
4 changed files with 112 additions and 4 deletions

View file

@ -1149,12 +1149,44 @@ namespace TShockAPI
args.Player.SendMessage("Cleared temp area", Color.Yellow); args.Player.SendMessage("Cleared temp area", Color.Yellow);
break; break;
} }
case "allow":
{
if (args.Parameters.Count > 2)
{
string playerName = args.Parameters[1];
string regionName = "";
for (int i = 2; i < args.Parameters.Count; i++)
{
if (regionName == "")
{
regionName = args.Parameters[2];
}
else
{
regionName = regionName + " " + args.Parameters[i];
}
}
if (RegionManager.AddNewUser(regionName, playerName))
{
args.Player.SendMessage("Added user " + playerName + " to " + regionName, Color.Yellow);
RegionManager.WriteSettings();
}
else
args.Player.SendMessage("Region " + regionName + " not found", Color.Red);
}
else
args.Player.SendMessage("Invalid syntax! Proper syntax: /region allow [name] [region]", Color.Red);
break;
}
case "help": case "help":
default: default:
{ {
args.Player.SendMessage("Avialable region commands:", Color.Green); args.Player.SendMessage("Avialable region commands:", Color.Green);
args.Player.SendMessage("/region set [1/2] /region define [name] /region protect [name] [true/false]", Color.Yellow); args.Player.SendMessage("/region set [1/2] /region define [name] /region protect [name] [true/false]", Color.Yellow);
args.Player.SendMessage("/region delete [name] /region clear (temporary region)", Color.Yellow); args.Player.SendMessage("/region delete [name] /region clear (temporary region)", Color.Yellow);
args.Player.SendMessage("/region allow [name] [regionname]", Color.Yellow);
break; break;
} }
} }

View file

@ -216,7 +216,7 @@ namespace TShockAPI
return true; return true;
} }
} }
if (!args.Player.Group.HasPermission("editspawn") && RegionManager.InProtectedArea(x, y)) if (!args.Player.Group.HasPermission("editspawn") && RegionManager.InProtectedArea(x, y, args.Player.Name))
{ {
args.Player.SendMessage("Region protected from changes.", Color.Red); args.Player.SendMessage("Region protected from changes.", Color.Red);
args.Player.SendTileSquare(x, y); args.Player.SendTileSquare(x, y);

View file

@ -25,6 +25,20 @@ namespace TShockAPI
return true; return true;
} }
public static bool AddNewUser(string regionName, string name)
{
foreach (Region nametest in Regions)
{
if (regionName.ToLower() == nametest.RegionName.ToLower())
{
nametest.RegionAllowedUsers.Add(name.ToLower());
Console.WriteLine(nametest.RegionName);
return true;
}
}
return false;
}
public static bool DeleteRegion(string name) public static bool DeleteRegion(string name)
{ {
foreach (Region nametest in Regions) foreach (Region nametest in Regions)
@ -53,18 +67,45 @@ namespace TShockAPI
return false; return false;
} }
public static bool InProtectedArea(int X, int Y) public static bool InProtectedArea(int X, int Y, string name)
{ {
foreach(Region region in Regions) foreach(Region region in Regions)
{ {
if (X >= region.RegionArea.Left && X <= region.RegionArea.Right && Y >= region.RegionArea.Top && Y <= region.RegionArea.Bottom && region.DisableBuild && Main.worldName == region.WorldRegionName) if (X >= region.RegionArea.Left && X <= region.RegionArea.Right && Y >= region.RegionArea.Top && Y <= region.RegionArea.Bottom && region.DisableBuild && Main.worldName == region.WorldRegionName && (!AllowedUser(region.RegionName, name.ToLower()) || region.RegionAllowedUsers.Count == 0))
{ {
Console.WriteLine(region.RegionName);
return true; return true;
} }
} }
return false; return false;
} }
public static int GetRegionIndex(string regionName)
{
for(int i = 0; i< Regions.Count;i++)
{
if(Regions[i].RegionName == regionName)
return i;
}
return -1;
}
public static bool AllowedUser(string regionName, string playerName)
{
int ID = -1;
if ((ID = GetRegionIndex(regionName)) != -1)
{
for (int i = 0; i < Regions[ID].RegionAllowedUsers.Count; i++)
{
if (Regions[ID].RegionAllowedUsers[i].ToLower() == playerName.ToLower())
{
return true;
}
}
}
return false;
}
public static void WriteSettings() public static void WriteSettings()
{ {
try try
@ -88,6 +129,11 @@ namespace TShockAPI
settingsw.WriteElementString("Point2Y", region.RegionArea.Height.ToString()); settingsw.WriteElementString("Point2Y", region.RegionArea.Height.ToString());
settingsw.WriteElementString("Protected", region.DisableBuild.ToString()); settingsw.WriteElementString("Protected", region.DisableBuild.ToString());
settingsw.WriteElementString("WorldName", region.WorldRegionName); settingsw.WriteElementString("WorldName", region.WorldRegionName);
settingsw.WriteElementString("AllowedUserCount", region.RegionAllowedUsers.Count.ToString());
for (int i = 0; i < region.RegionAllowedUsers.Count; i++)
{
settingsw.WriteElementString("User", region.RegionAllowedUsers[i]);
}
settingsw.WriteEndElement(); settingsw.WriteEndElement();
} }
@ -132,6 +178,7 @@ namespace TShockAPI
int height = 0; int height = 0;
bool state = true; bool state = true;
string worldname = null; string worldname = null;
int playercount = 0;
settingr.Read(); settingr.Read();
if (settingr.Value != "" || settingr.Value != null) if (settingr.Value != "" || settingr.Value != null)
@ -188,7 +235,34 @@ namespace TShockAPI
else else
Log.Warn("Worldname for region " + name + " is empty"); Log.Warn("Worldname for region " + name + " is empty");
Console.WriteLine(settingr.Value);
settingr.Read();
settingr.Read();
settingr.Read();
if (settingr.Value != "" || settingr.Value != null)
Int32.TryParse(settingr.Value, out playercount);
else
Log.Warn("Playercount for region " + name + " is empty");
AddRegion(x, y, width, height, name, worldname); AddRegion(x, y, width, height, name, worldname);
if (playercount > 0)
{
for (int i = 0; i < playercount; i++)
{
settingr.Read();
settingr.Read();
settingr.Read();
if (settingr.Value != "" || settingr.Value != null)
{
int ID = RegionManager.GetRegionIndex(name);
Regions[ID].RegionAllowedUsers.Add(settingr.Value);
}
else
Log.Warn("Playername " + i + " for region " + name + " is empty");
}
}
} }
break; break;
} }
@ -212,6 +286,7 @@ namespace TShockAPI
public string RegionName { get; set; } public string RegionName { get; set; }
public bool DisableBuild { get; set; } public bool DisableBuild { get; set; }
public string WorldRegionName { get; set; } public string WorldRegionName { get; set; }
public List<string> RegionAllowedUsers = new List<string>();
public Region(Rectangle region, string name, bool disablebuild, string worldname) public Region(Rectangle region, string name, bool disablebuild, string worldname)
{ {

View file

@ -139,7 +139,8 @@
</PreBuildEvent> </PreBuildEvent>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<PostBuildEvent>"$(SolutionDir)\myass.bat"</PostBuildEvent> <PostBuildEvent>
</PostBuildEvent>
</PropertyGroup> </PropertyGroup>
<ProjectExtensions> <ProjectExtensions>
<VisualStudio> <VisualStudio>