Merge pull request #1499 from koneko-nyan/patch-1
Add region renaming support
This commit is contained in:
commit
51ff8483cd
4 changed files with 106 additions and 0 deletions
|
|
@ -13,6 +13,8 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin
|
|||
* Fixed /time display at the end of Terraria hours (@koneko-nyan)
|
||||
* Added a warning notifying users of the minimum memory required to run TShock (@bartico6)
|
||||
* Added /group rename to allow changing group names (@ColinBohn, @ProfessorXZ)
|
||||
* Added /region rename and OnRegionRenamed hook (@koneko-nyan, @deadsurgeon42)
|
||||
|
||||
|
||||
## TShock 4.3.24
|
||||
* Updated OpenTerraria API to 1.3.5.3 (@DeathCradle)
|
||||
|
|
|
|||
|
|
@ -4554,6 +4554,51 @@ namespace TShockAPI
|
|||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}region resize <region> <u/d/l/r> <amount>", Specifier);
|
||||
break;
|
||||
}
|
||||
case "rename":
|
||||
{
|
||||
if (args.Parameters.Count != 3)
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}region rename <region> <new name>", Specifier);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
string oldName = args.Parameters[1];
|
||||
string newName = args.Parameters[2];
|
||||
|
||||
if (oldName == newName)
|
||||
{
|
||||
args.Player.SendErrorMessage("Error: both names are the same.");
|
||||
break;
|
||||
}
|
||||
|
||||
Region oldRegion = TShock.Regions.GetRegionByName(oldName);
|
||||
|
||||
if (oldRegion == null)
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid region \"{0}\".", oldName);
|
||||
break;
|
||||
}
|
||||
|
||||
Region newRegion = TShock.Regions.GetRegionByName(newName);
|
||||
|
||||
if (newRegion != null)
|
||||
{
|
||||
args.Player.SendErrorMessage("Region \"{0}\" already exists.", newName);
|
||||
break;
|
||||
}
|
||||
|
||||
if(TShock.Regions.RenameRegion(oldName, newName))
|
||||
{
|
||||
args.Player.SendInfoMessage("Region renamed successfully!");
|
||||
}
|
||||
else
|
||||
{
|
||||
args.Player.SendErrorMessage("Failed to rename the region.");
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "tp":
|
||||
{
|
||||
if (!args.Player.HasPermission(Permissions.tp))
|
||||
|
|
@ -4594,6 +4639,7 @@ namespace TShockAPI
|
|||
"define <name> - Defines the region with the given name.",
|
||||
"delete <name> - Deletes the given region.",
|
||||
"name [-u][-z][-p] - Shows the name of the region at the given point.",
|
||||
"rename <region> <new name> - Renames the given region.",
|
||||
"list - Lists all regions.",
|
||||
"resize <region> <u/d/l/r> <amount> - Resizes a region.",
|
||||
"allow <user> <region> - Allows a user to a region.",
|
||||
|
|
|
|||
|
|
@ -401,7 +401,41 @@ namespace TShockAPI.DB
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Renames a region
|
||||
/// </summary>
|
||||
/// <param name="oldName">Name of the region to rename</param>
|
||||
/// <param name="newName">New name of the region</param>
|
||||
/// <returns>true if renamed successfully, false otherwise</returns>
|
||||
public bool RenameRegion(string oldName, string newName)
|
||||
{
|
||||
Region region = null;
|
||||
string worldID = Main.worldID.ToString();
|
||||
|
||||
bool result = false;
|
||||
|
||||
try
|
||||
{
|
||||
int q = database.Query("UPDATE Regions SET RegionName = @0 WHERE RegionName = @1 AND WorldID = @2",
|
||||
newName, oldName, worldID);
|
||||
|
||||
if (q > 0)
|
||||
{
|
||||
region = Regions.First(r => r.Name == oldName && r.WorldID == worldID);
|
||||
region.Name = newName;
|
||||
Hooks.RegionHooks.OnRegionRenamed(region, oldName, newName);
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
TShock.Log.Error(ex.ToString());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes an allowed user from a region
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -110,5 +110,29 @@ namespace TShockAPI.Hooks
|
|||
|
||||
RegionDeleted(new RegionDeletedEventArgs(region));
|
||||
}
|
||||
|
||||
public class RegionRenamedEventArgs
|
||||
{
|
||||
public Region Region { get; private set; }
|
||||
public string OldName { get; private set; }
|
||||
public string NewName { get; private set; }
|
||||
|
||||
public RegionRenamedEventArgs(Region region, string oldName, string newName)
|
||||
{
|
||||
Region = region;
|
||||
OldName = oldName;
|
||||
NewName = newName;
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void RegionRenamedD(RegionRenamedEventArgs args);
|
||||
public static event RegionRenamedD RegionRenamed;
|
||||
public static void OnRegionRenamed(Region region, string oldName, string newName)
|
||||
{
|
||||
if (RegionRenamed == null)
|
||||
return;
|
||||
|
||||
RegionRenamed(new RegionRenamedEventArgs(region, oldName, newName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue