diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index e47f124a..ebbb07c4 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -2058,7 +2058,7 @@ namespace TShockAPI args.Player.SendSuccessMessage("Warp added: " + warpName); foreach (TSPlayer tsplr in TShock.Players) { - if (tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.managewarp)) + if (tsplr != null && tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.managewarp)) tsplr.SendRaptorWarp(TShock.Warps.FindWarp(warpName)); } } @@ -2082,8 +2082,8 @@ namespace TShockAPI args.Player.SendSuccessMessage("Warp deleted: " + warpName); foreach (TSPlayer tsplr in TShock.Players) { - if (tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.managewarp)) - tsplr.SendRaptorWarpDeletion(TShock.Warps.FindWarp(warpName)); + if (tsplr != null && tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.managewarp)) + tsplr.SendRaptorWarpDeletion(warpName); } } else @@ -3032,7 +3032,7 @@ namespace TShockAPI foreach (TSPlayer tsplr in TShock.Players) { - if (tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.manageregion)) + if (tsplr != null && tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.manageregion)) tsplr.SendRaptorRegion(TShock.Regions.GetRegionByName(regionName)); } } @@ -3086,8 +3086,8 @@ namespace TShockAPI args.Player.SendInfoMessage("Deleted region \"{0}\".", regionName); foreach (TSPlayer tsplr in TShock.Players) { - if (tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.manageregion)) - tsplr.SendRaptorRegionDelete(TShock.Regions.GetRegionByName(regionName)); + if (tsplr != null && tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.manageregion)) + tsplr.SendRaptorRegionDelete(regionName); } } else @@ -3442,7 +3442,7 @@ namespace TShockAPI args.Player.SendMessage("Region Resized Successfully!", Color.Yellow); foreach (TSPlayer tsplr in TShock.Players) { - if (tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.manageregion)) + if (tsplr != null && tsplr.IsRaptor && tsplr.Group.HasPermission(Permissions.manageregion)) tsplr.SendRaptorRegion(TShock.Regions.GetRegionByName(args.Parameters[1])); } TShock.Regions.ReloadAllRegions(); diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 056e3f9c..1acebf6c 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -3410,7 +3410,7 @@ namespace TShockAPI int height = args.Data.ReadInt32(); string regionName = args.Data.ReadString(); - if (TShock.Regions.GetRegionByName(regionName).Area == Rectangle.Empty) + if (TShock.Regions.GetRegionByName(regionName) == null) { TShock.Regions.AddRegion(x, y, width, height, regionName, args.Player.UserAccountName, Main.worldID.ToString()); Log.Info("{0} added region \"{1}\".", args.Player.UserAccountName, regionName); diff --git a/TShockAPI/Group.cs b/TShockAPI/Group.cs index 32d8272d..94077fb9 100644 --- a/TShockAPI/Group.cs +++ b/TShockAPI/Group.cs @@ -235,6 +235,12 @@ namespace TShockAPI negatedpermissions.Add(permission); permissions.Remove(permission); // Ensure we don't have conflicting definitions for a permissions } + + for (int i = 0; i < TShock.Players.Length; i++) + { + if (TShock.Players[i] != null && TShock.Players[i].IsRaptor) + TShock.Players[i].SendRaptorPermissions(); + } } /// @@ -254,6 +260,12 @@ namespace TShockAPI permissions.Add(permission); negatedpermissions.Remove(permission); // Ensure we don't have conflicting definitions for a permissions } + + for (int i = 0; i < TShock.Players.Length; i++) + { + if (TShock.Players[i] != null && TShock.Players[i].IsRaptor) + TShock.Players[i].SendRaptorPermissions(); + } } /// @@ -281,6 +293,11 @@ namespace TShockAPI return; } permissions.Remove(permission); + for (int i = 0; i < TShock.Players.Length; i++) + { + if (TShock.Players[i] != null && TShock.Players[i].IsRaptor && TShock.Players[i].Group == this) + TShock.Players[i].SendRaptorPermissions(); + } } /// diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index b78e9639..48173545 100755 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -960,9 +960,9 @@ namespace TShockAPI } /// /// Sends a region deletion to the player. - /// The region. + /// The region name. /// - public void SendRaptorRegionDelete(Region region) + public void SendRaptorRegionDelete(string regionName) { if (!IsRaptor) return; @@ -980,7 +980,7 @@ namespace TShockAPI writer.Write((byte)PacketTypes.Placeholder); writer.Write((byte)RaptorPacketTypes.RegionDelete); - writer.Write(region.Name); + writer.Write(regionName); length = (int)writer.BaseStream.Position; writer.BaseStream.Position = 0; @@ -1029,9 +1029,9 @@ namespace TShockAPI } /// /// Sends a warp deletion to the player. - /// The warp. + /// The warp name. /// - public void SendRaptorWarpDeletion(Warp warp) + public void SendRaptorWarpDeletion(string warpName) { if (!IsRaptor) return; @@ -1049,7 +1049,7 @@ namespace TShockAPI writer.Write((byte)PacketTypes.Placeholder); writer.Write((byte)RaptorPacketTypes.WarpDelete); - writer.Write(warp.WarpName); + writer.Write(warpName); length = (int)writer.BaseStream.Position; writer.BaseStream.Position = 0; diff --git a/TerrariaServerBins/TerrariaServer.exe b/TerrariaServerBins/TerrariaServer.exe index 0127042c..f4cb8f2c 100644 Binary files a/TerrariaServerBins/TerrariaServer.exe and b/TerrariaServerBins/TerrariaServer.exe differ