public static void HandleUnlockDoor(CommandArgs args) { if (args.Parameters.Count > 1) { args.Player.SendMessage("Incorrect syntax! Correct syntax: /unlockdoors <region>", Color.Red); return; } Region region = null; if (args.Parameters.Count > 0) { region = TShock.Regions.GetRegionByName(args.Parameters[0]); } else { if (!args.Player.RealPlayer) { args.Player.SendMessage("You must be logged in to use this without a parameter.", Color.Red); return; } var regions = TShock.Regions.InAreaRegionName(args.Player.TileX, args.Player.TileY); if (regions.Count > 1) { args.Player.SendMessage("You cannot unlock doors in overlapping regions.", Color.Red); } else if (regions.Count == 0) { region = null; } else { region = TShock.Regions.GetRegionByName(regions[0]); } } if (region == null) { args.Player.SendMessage("No region found with that query.", Color.Red); return; } if (!args.Player.Group.HasPermission(Permissions.editspawn) && !TShock.Regions.CanBuild(args.Player.TileX, args.Player.TileY, args.Player) && TShock.Regions.InArea(args.Player.TileX, args.Player.TileY)) { args.Player.SendMessage(string.Format("You do not have permission to build in region {0}", args.Parameters[0]), Color.Red); } else { RegionHelperManager regionHelper = new RegionHelperManager(TShock.DB); regionHelper.UnlockRegion(region.Name); args.Player.SendMessage(string.Format("Region {0} doors are now unlocked.", region.Name), Color.Green); } }
private void NetHooks_GetData(GetDataEventArgs e) { var player = Players[e.Msg.whoAmI]; PacketTypes type = e.MsgID; if (type == PacketTypes.PlayerDamage) { if (player == null) { e.Handled = true; return; } if (player.IsInvincible) { if (player.Player.TPlayer.statLife < player.Player.TPlayer.statLifeMax) { int deficit = player.Player.TPlayer.statLifeMax - player.Player.TPlayer.statLife; int heartNum = (deficit / 20) + 4; var heart = TShock.Utils.GetItemById(58); for (int i = 0; i < heartNum; i++) { player.Player.GiveItem(heart.type, heart.name, heart.width, heart.height, 1); } } } } else if (type == PacketTypes.DoorUse) { if (player == null) { e.Handled = false; return; } using (MemoryStream ms = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length)) { bool closed = ms.ReadBoolean(); int x = ms.ReadInt32(); int y = ms.ReadInt32(); RegionHelperManager regionHelper = new RegionHelperManager(TShock.DB); if (!player.Player.Group.HasPermission(Permissions.editspawn) && !TShock.Regions.CanBuild(x, y, player.Player) && TShock.Regions.InArea(x, y) && regionHelper.GetRegionHelperByRegion(TShock.Regions.InAreaRegionName(x, y)).ContainsProperty(r => r.IsLocked)) { int size = 10; NetMessage.SendData((int)PacketTypes.DoorUse, -1, -1, "", 1, x, y); TSPlayer.All.SendTileSquare(x, y, size); WorldGen.RangeFrame(x, y, x + size, y + size); int warpX = player.Player.TileX > x ? player.Player.TileX + 3 : player.Player.TileX - 3; player.Player.Teleport(warpX, player.Player.TileY + 3); player.Player.SendMessage(string.Format("Doors in region name: {0} are locked.", string.Join(", ", TShock.Regions.InAreaRegionName(x, y))), Color.Red); e.Handled = true; } } } else if (type == PacketTypes.PlayerUpdate) { using (MemoryStream ms = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length)) { if (player.PrisonRecord != null) { if (!player.PrisonRecord.Released && player.PrisonRecord.Until <= DateTime.Now) { CommandHandlers.ReleaseFromPrison(new CommandArgs("releaseprisoner", null, new List <string>() { player.Player.UserAccountName })); player.PrisonRecord = null; } else { var plr = ms.ReadInt8(); var control = ms.ReadInt8(); var item = ms.ReadInt8(); var pos = new Vector2(ms.ReadSingle(), ms.ReadSingle()); var vel = new Vector2(ms.ReadSingle(), ms.ReadSingle()); var warp = TShock.Warps.FindWarp(Config.PrisonWarp); float tilex; float tiley; if (warp.WarpPos != Vector2.Zero) { tilex = (int)(warp.WarpPos.X); tiley = (int)(warp.WarpPos.Y); } else { tilex = Main.spawnTileX; tiley = Main.spawnTileY; } float distance = Vector2.Distance(new Vector2((pos.X / 16f), (pos.Y / 16f)), new Vector2(tilex, tiley)); if (distance > TShock.Config.MaxRangeForDisabled) { if (warp.WarpPos != Vector2.Zero) { player.Player.Teleport((int)warp.WarpPos.X, (int)warp.WarpPos.Y + 3); } else { player.Player.Spawn(); } TimeSpan remaining = player.PrisonRecord.Until - DateTime.Now; player.Player.SendMessage(string.Format("You are still serving your prison sentence. {0} hour(s) {1} minute(s) remain.", (int)remaining.TotalHours, remaining.Minutes), Color.Yellow); } } } else { if (player.Player.Group.Name == Config.PrisonGroup) { CommandHandlers.ReleaseFromPrison(new CommandArgs("releaseprisoner", null, new List <string>() { player.Player.UserAccountName })); } } } } }