binary wouldn't auto merge
Merge remote branch 'origin' into general-devel Conflicts: TerrariaServerBins/TerrariaServer.exe
This commit is contained in:
commit
e961bdd71c
7 changed files with 196 additions and 25 deletions
|
|
@ -2025,7 +2025,7 @@ namespace TShockAPI
|
|||
|
||||
try
|
||||
{
|
||||
TShock.Groups.UpdateGroup(groupName, newParentGroupName, group.Permissions, group.ChatColor);
|
||||
TShock.Groups.UpdateGroup(groupName, newParentGroupName, group.Permissions, group.ChatColor, group.Suffix, group.Prefix);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(newParentGroupName))
|
||||
args.Player.SendSuccessMessage("Parent of group \"{0}\" set to \"{1}\".", groupName, newParentGroupName);
|
||||
|
|
@ -2047,6 +2047,146 @@ namespace TShockAPI
|
|||
}
|
||||
#endregion
|
||||
return;
|
||||
case "suffix":
|
||||
#region Suffix
|
||||
{
|
||||
if (args.Parameters.Count < 2)
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /group suffix <group name> [new suffix]");
|
||||
return;
|
||||
}
|
||||
|
||||
string groupName = args.Parameters[1];
|
||||
Group group = TShock.Groups.GetGroupByName(groupName);
|
||||
if (group == null)
|
||||
{
|
||||
args.Player.SendErrorMessage("No such group \"{0}\".", groupName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.Parameters.Count > 2)
|
||||
{
|
||||
string newSuffix = string.Join(" ", args.Parameters.Skip(2));
|
||||
|
||||
try
|
||||
{
|
||||
TShock.Groups.UpdateGroup(groupName, group.ParentName, group.Permissions, group.ChatColor, newSuffix, group.Prefix);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(newSuffix))
|
||||
args.Player.SendSuccessMessage("Suffix of group \"{0}\" set to \"{1}\".", groupName, newSuffix);
|
||||
else
|
||||
args.Player.SendSuccessMessage("Removed suffix of group \"{0}\".", groupName);
|
||||
}
|
||||
catch (GroupManagerException ex)
|
||||
{
|
||||
args.Player.SendErrorMessage(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(group.Suffix))
|
||||
args.Player.SendSuccessMessage("Suffix of \"{0}\" is \"{1}\".", group.Name, group.Suffix);
|
||||
else
|
||||
args.Player.SendSuccessMessage("Group \"{0}\" has no suffix.", group.Name);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
return;
|
||||
case "prefix":
|
||||
#region Suffix
|
||||
{
|
||||
if (args.Parameters.Count < 2)
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /group prefix <group name> [new prefix]");
|
||||
return;
|
||||
}
|
||||
|
||||
string groupName = args.Parameters[1];
|
||||
Group group = TShock.Groups.GetGroupByName(groupName);
|
||||
if (group == null)
|
||||
{
|
||||
args.Player.SendErrorMessage("No such group \"{0}\".", groupName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.Parameters.Count > 2)
|
||||
{
|
||||
string newPrefix = string.Join(" ", args.Parameters.Skip(2));
|
||||
|
||||
try
|
||||
{
|
||||
TShock.Groups.UpdateGroup(groupName, group.ParentName, group.Permissions, group.ChatColor, group.Suffix, newPrefix);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(newPrefix))
|
||||
args.Player.SendSuccessMessage("Prefix of group \"{0}\" set to \"{1}\".", groupName, newPrefix);
|
||||
else
|
||||
args.Player.SendSuccessMessage("Removed prefix of group \"{0}\".", groupName);
|
||||
}
|
||||
catch (GroupManagerException ex)
|
||||
{
|
||||
args.Player.SendErrorMessage(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(group.Prefix))
|
||||
args.Player.SendSuccessMessage("Prefix of \"{0}\" is \"{1}\".", group.Name, group.Prefix);
|
||||
else
|
||||
args.Player.SendSuccessMessage("Group \"{0}\" has no prefix.", group.Name);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
return;
|
||||
case "color":
|
||||
#region Suffix
|
||||
{
|
||||
if (args.Parameters.Count < 2 || args.Parameters.Count > 3)
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /group color <group name> [new color(000,000,000)]");
|
||||
return;
|
||||
}
|
||||
|
||||
string groupName = args.Parameters[1];
|
||||
Group group = TShock.Groups.GetGroupByName(groupName);
|
||||
if (group == null)
|
||||
{
|
||||
args.Player.SendErrorMessage("No such group \"{0}\".", groupName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.Parameters.Count == 3)
|
||||
{
|
||||
string newColor = args.Parameters[2];
|
||||
|
||||
String[] parts = newColor.Split(',');
|
||||
byte r;
|
||||
byte g;
|
||||
byte b;
|
||||
if (parts.Length == 3 && byte.TryParse(parts[0], out r) && byte.TryParse(parts[1], out g) && byte.TryParse(parts[2], out b))
|
||||
{
|
||||
try
|
||||
{
|
||||
TShock.Groups.UpdateGroup(groupName, group.ParentName, group.Permissions, newColor, group.Suffix, group.Prefix);
|
||||
|
||||
args.Player.SendSuccessMessage("Color of group \"{0}\" set to \"{1}\".", groupName, newColor);
|
||||
}
|
||||
catch (GroupManagerException ex)
|
||||
{
|
||||
args.Player.SendErrorMessage(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid syntax for color, expected \"rrr,ggg,bbb\"");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
args.Player.SendSuccessMessage("Color of \"{0}\" is \"{1}\".", group.Name, group.ChatColor);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
return;
|
||||
case "del":
|
||||
#region Delete group
|
||||
{
|
||||
|
|
@ -3695,31 +3835,27 @@ namespace TShockAPI
|
|||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
if (!int.TryParse(args.Parameters[0], out radius))
|
||||
{
|
||||
radius = Convert.ToInt32(args.Parameters[0]);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
args.Player.SendErrorMessage(
|
||||
"Please either enter the keyword \"all\", or the block radius you wish to delete all items from.");
|
||||
args.Player.SendErrorMessage("Invalid block radius.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
for (int i = 0; i < 200; i++)
|
||||
for (int i = 0; i < 400; i++)
|
||||
{
|
||||
if (
|
||||
(Math.Sqrt(Math.Pow(Main.item[i].position.X - args.Player.X, 2) +
|
||||
Math.Pow(Main.item[i].position.Y - args.Player.Y, 2)) < radius*16) && (Main.item[i].active))
|
||||
if ((Main.item[i].position.X - args.Player.X) * (Main.item[i].position.X - args.Player.X) +
|
||||
(Main.item[i].position.Y - args.Player.Y) * (Main.item[i].position.Y - args.Player.Y) <= radius * radius * 256
|
||||
&& (Main.item[i].active))
|
||||
{
|
||||
Main.item[i].active = false;
|
||||
NetMessage.SendData(0x15, -1, -1, "", i, 0f, 0f, 0f, 0);
|
||||
TSPlayer.All.SendData(PacketTypes.ItemDrop, "", i);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
args.Player.SendSuccessMessage("All " + count + " items within a radius of " + radius + " have been deleted.");
|
||||
args.Player.SendSuccessMessage("Deleted {0} item(s) within a radius of {1}.", count, radius);
|
||||
}
|
||||
|
||||
private static void Heal(CommandArgs args)
|
||||
|
|
@ -3746,7 +3882,7 @@ namespace TShockAPI
|
|||
}
|
||||
else if (!args.Player.RealPlayer)
|
||||
{
|
||||
args.Player.SendErrorMessage("You cant heal yourself!");
|
||||
args.Player.SendErrorMessage("You can't heal yourself!");
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
|
@ -3951,7 +4087,7 @@ namespace TShockAPI
|
|||
}
|
||||
else if (!args.Player.RealPlayer)
|
||||
{
|
||||
args.Player.SendErrorMessage("You cant god mode a non player!");
|
||||
args.Player.SendErrorMessage("You can't god mode a non player!");
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ namespace TShockAPI.DB
|
|||
/// <param name="parentname">parent of group</param>
|
||||
/// <param name="permissions">permissions</param>
|
||||
/// <param name="chatcolor">chatcolor</param>
|
||||
public void UpdateGroup(string name, string parentname, string permissions, string chatcolor)
|
||||
public void UpdateGroup(string name, string parentname, string permissions, string chatcolor, string suffix, string prefix)
|
||||
{
|
||||
Group group = GetGroupByName(name);
|
||||
if (group == null)
|
||||
|
|
@ -210,13 +210,17 @@ namespace TShockAPI.DB
|
|||
|
||||
// Ensure any group validation is also persisted to the DB.
|
||||
var newGroup = new Group(name, parent, chatcolor, permissions);
|
||||
string query = "UPDATE GroupList SET Parent=@0, Commands=@1, ChatColor=@2 WHERE GroupName=@3";
|
||||
if (database.Query(query, parentname, newGroup.Permissions, string.Format("{0},{1},{2}", newGroup.R, newGroup.G, newGroup.B), name) != 1)
|
||||
newGroup.Prefix = prefix;
|
||||
newGroup.Suffix = suffix;
|
||||
string query = "UPDATE GroupList SET Parent=@0, Commands=@1, ChatColor=@2, Suffix=@3, Prefix=@4 WHERE GroupName=@5";
|
||||
if (database.Query(query, parentname, newGroup.Permissions, newGroup.ChatColor, suffix, prefix, name) != 1)
|
||||
throw new GroupManagerException(string.Format("Failed to update group \"{0}\".", name));
|
||||
|
||||
group.ChatColor = chatcolor;
|
||||
group.Permissions = permissions;
|
||||
group.Parent = parent;
|
||||
group.Prefix = prefix;
|
||||
group.Suffix = suffix;
|
||||
}
|
||||
|
||||
#if COMPAT_SIGS
|
||||
|
|
|
|||
|
|
@ -1774,6 +1774,30 @@ namespace TShockAPI
|
|||
tile.type = 1;
|
||||
changed = true;
|
||||
}
|
||||
// Purify crimson grass
|
||||
else if (tile.type == 199 && newtile.Type == 2)
|
||||
{
|
||||
tile.type = 2;
|
||||
changed = true;
|
||||
}
|
||||
// Purify crimstone
|
||||
else if (tile.type == 203 && newtile.Type == 1)
|
||||
{
|
||||
tile.type = 1;
|
||||
changed = true;
|
||||
}
|
||||
// Purify crimson grass vine -- might not be needed
|
||||
else if (tile.type == 205 && newtile.Type == 52)
|
||||
{
|
||||
tile.type = 53;
|
||||
changed = true;
|
||||
}
|
||||
// Purify crimsand
|
||||
else if (tile.type == 234 && newtile.Type == 53)
|
||||
{
|
||||
tile.type = 53;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1901,9 +1925,9 @@ namespace TShockAPI
|
|||
return true;
|
||||
}
|
||||
|
||||
byte[] rightClickKill = new byte[] { 4, 13, 33, 49, 50, 128};
|
||||
byte[] breakableTiles = new byte[] { 4, 13, 33, 49, 50, 127, 128, 163};
|
||||
Item selectedItem = args.TPlayer.inventory[args.TPlayer.selectedItem];
|
||||
if (type == 0 && Main.tile[tileX, tileY].type != 127 && !Main.tileCut[Main.tile[tileX, tileY].type] && !rightClickKill.Contains(Main.tile[tileX, tileY].type))
|
||||
if (type == 0 && !Main.tileCut[Main.tile[tileX, tileY].type] && !breakableTiles.Contains(Main.tile[tileX, tileY].type))
|
||||
{
|
||||
// If the tile is an axe tile and they aren't selecting an axe, they're hacking.
|
||||
if (Main.tileAxe[Main.tile[tileX, tileY].type] && (selectedItem.axe == 0 && selectedItem.explosive == 0 && args.Player.RecentFuse == 0))
|
||||
|
|
|
|||
|
|
@ -70,11 +70,11 @@ namespace TShockAPI
|
|||
|
||||
/// <summary>
|
||||
/// The chat color of the group.
|
||||
/// Returns "255255255", sets "255,255,255"
|
||||
/// Returns "255,255,255", sets "255,255,255"
|
||||
/// </summary>
|
||||
public string ChatColor
|
||||
{
|
||||
get { return string.Format("{0}{1}{2}", R.ToString("X2"), G.ToString("X2"), B.ToString("X2")); }
|
||||
get { return string.Format("{0},{1},{2}", R.ToString("D3"), G.ToString("D3"), B.ToString("D3")); }
|
||||
set
|
||||
{
|
||||
if (null != value)
|
||||
|
|
|
|||
|
|
@ -719,7 +719,7 @@ namespace TShockAPI
|
|||
var permissions = (null == parameters["permissions"]) ? group.Permissions : parameters["permissions"];
|
||||
try
|
||||
{
|
||||
TShock.Groups.UpdateGroup(group.Name, parent, permissions, chatcolor);
|
||||
TShock.Groups.UpdateGroup(group.Name, parent, permissions, chatcolor, group.Suffix, group.Prefix);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -252,6 +252,7 @@ namespace TShockAPI
|
|||
ServerApi.Hooks.WorldSave.Register(this, SaveManager.Instance.OnSaveWorld);
|
||||
ServerApi.Hooks.WorldChristmasCheck.Register(this, OnXmasCheck);
|
||||
ServerApi.Hooks.NetNameCollision.Register(this, NetHooks_NameCollision);
|
||||
TShockAPI.Hooks.PlayerHooks.PlayerPreLogin += OnPlayerPreLogin;
|
||||
TShockAPI.Hooks.PlayerHooks.PlayerPostLogin += OnPlayerLogin;
|
||||
|
||||
GetDataHandlers.InitGetDataHandler();
|
||||
|
|
@ -365,6 +366,12 @@ namespace TShockAPI
|
|||
Users.UpdateLogin(u);
|
||||
}
|
||||
|
||||
private void OnPlayerPreLogin(Hooks.PlayerPreLoginEventArgs args)
|
||||
{
|
||||
if (args.Player.IsLoggedIn)
|
||||
args.Player.SaveServerCharacter();
|
||||
}
|
||||
|
||||
private void NetHooks_NameCollision(NameCollisionEventArgs args)
|
||||
{
|
||||
string ip = TShock.Utils.GetRealIP(Netplay.serverSock[args.Who].tcpClient.Client.RemoteEndPoint.ToString());
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue