Merge pull request #1266 from ProfessorXZ/general-devel

Fixes #1255
This commit is contained in:
Rodrigo 2016-08-01 12:43:12 +01:00 committed by GitHub
commit e5349d95c9
2 changed files with 37 additions and 5 deletions

View file

@ -4,7 +4,15 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin
## Upcoming Changes
* API: Fixed chat line breaks when using chat tags and long strings of text (@ProfessorXZ)
* The setdungeon command correctly uses tshock.world.setdungeon as its permission (@OnsenManju)
* Fixed clients being able to "Catch" and remove NPCs (@ProfessorXZ)
* Fixed clients being able to remove other players' portals (@ProfessorXZ)
* Fixed possible client crashes caused by invalid item netIDs (@ProfessorXZ)
* Fixed players being able to bypass permission checks when placing Tile Entities (@ProfessorXZ)
* Fixed players being able to bypass permission checks when placing items in Item Frames (@ProfessorXZ)
* Fixed a bug involving Item Frames which allowed players to duplicate items (@ProfessorXZ)
* Fixed an issue allowing clients to teleport NPCs to arbitrary locations (@ProfessorXZ)
## TShock 4.3.17

View file

@ -1255,6 +1255,7 @@ namespace TShockAPI
{ PacketTypes.MassWireOperation, HandleMassWireOperation },
{ PacketTypes.GemLockToggle, HandleGemLockToggle },
{ PacketTypes.CatchNPC, HandleCatchNpc },
{ PacketTypes.NpcTeleportPortal, HandleNpcTeleportPortal },
{ PacketTypes.KillPortal, HandleKillPortal },
{ PacketTypes.PlaceTileEntity, HandlePlaceTileEntity },
{ PacketTypes.PlaceItemFrame, HandlePlaceItemFrame },
@ -4089,7 +4090,30 @@ namespace TShockAPI
if (Main.npc[npcID]?.catchItem == 0)
{
Main.npc[npcID].active = true;
NetMessage.SendData(23, -1, -1, "", npcID);
NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, "", npcID);
return true;
}
return false;
}
private static bool HandleNpcTeleportPortal(GetDataHandlerArgs args)
{
var npcIndex = args.Data.ReadByte();
var portalColorIndex = args.Data.ReadInt16();
var newPosition = new Vector2(args.Data.ReadSingle(), args.Data.ReadSingle());
var velocity = new Vector2(args.Data.ReadSingle(), args.Data.ReadSingle());
var projectile = Main.projectile.FirstOrDefault(p => p.position.X == newPosition.X && p.position.Y == newPosition.Y); // Check for projectiles at this location
if (projectile == null || !projectile.active)
{
NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, "", npcIndex);
return true;
}
if (projectile.type != ProjectileID.PortalGunGate)
{
NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, "", npcIndex);
return true;
}
@ -4154,25 +4178,25 @@ namespace TShockAPI
if (TShock.CheckIgnores(args.Player))
{
NetMessage.SendData(86, -1, -1, "", itemFrame.ID, 0, 1);
NetMessage.SendData((int)PacketTypes.UpdateTileEntity, -1, -1, "", itemFrame.ID, 0, 1);
return true;
}
if (TShock.CheckTilePermission(args.Player, x, y))
{
NetMessage.SendData(86, -1, -1, "", itemFrame.ID, 0, 1);
NetMessage.SendData((int)PacketTypes.UpdateTileEntity, -1, -1, "", itemFrame.ID, 0, 1);
return true;
}
if (TShock.CheckRangePermission(args.Player, x, y))
{
NetMessage.SendData(86, -1, -1, "", itemFrame.ID, 0, 1);
NetMessage.SendData((int)PacketTypes.UpdateTileEntity, -1, -1, "", itemFrame.ID, 0, 1);
return true;
}
if (itemFrame.item?.netID == args.TPlayer.inventory[args.TPlayer.selectedItem]?.netID)
{
NetMessage.SendData(86, -1, -1, "", itemFrame.ID, 0, 1);
NetMessage.SendData((int)PacketTypes.UpdateTileEntity, -1, -1, "", itemFrame.ID, 0, 1);
return true;
}