commit
62ff490470
5 changed files with 34 additions and 8 deletions
|
|
@ -3,9 +3,11 @@
|
||||||
This is the rolling changelog for TShock for Terraria. Use past tense when adding new entries; sign your name off when you add or change something. This should primarily be things like user changes, not necessarily codebase changes unless it's really relevant or large.
|
This is the rolling changelog for TShock for Terraria. Use past tense when adding new entries; sign your name off when you add or change something. This should primarily be things like user changes, not necessarily codebase changes unless it's really relevant or large.
|
||||||
|
|
||||||
## Upcoming release
|
## Upcoming release
|
||||||
* Fixed a longstanding issue with SendTileSquare that could result in desyncs and visual errors (@QuiCM)
|
* Fix all rope coils. (@Olink)
|
||||||
* Fixed placement issues with Item Frames, Teleportation Pylons, etc (@QuiCM)
|
* Fixed a longstanding issue with SendTileSquare that could result in desyncs and visual errors. (@QuiCM)
|
||||||
|
* Fixed placement issues with Item Frames, Teleportation Pylons, etc. (@QuiCM)
|
||||||
* Doors are good now for real probably (@QuiCM, @Hakusaro, @Olink)
|
* Doors are good now for real probably (@QuiCM, @Hakusaro, @Olink)
|
||||||
|
* Bump default max damage received cap to 42,000 to accommodate the Empress of Light's instant kill death amount. (@hakusaro, @moisterrific, @Irethia, @Ayrawei)
|
||||||
|
|
||||||
## TShock 4.4.0 (Pre-release 9)
|
## TShock 4.4.0 (Pre-release 9)
|
||||||
* Fixed pet licenses. (@Olink)
|
* Fixed pet licenses. (@Olink)
|
||||||
|
|
@ -34,9 +36,6 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin
|
||||||
* To add this command to your guest group, give them `tshock.synclocalarea`, with `/group addperm guest tshock.synclocalarea`.
|
* To add this command to your guest group, give them `tshock.synclocalarea`, with `/group addperm guest tshock.synclocalarea`.
|
||||||
* This command may be removed at any time in the future (and will likely be removed when send tile square handling is fixed).
|
* This command may be removed at any time in the future (and will likely be removed when send tile square handling is fixed).
|
||||||
* Fixed smart door automatic door desync and deletion issue. (@hakusaro)
|
* Fixed smart door automatic door desync and deletion issue. (@hakusaro)
|
||||||
* Bump default max damage received cap to 42,000 to accommodate the Empress of Light's instant kill death amount. (@hakusaro, @moisterrific, @Irethia, @Ayrawei)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## TShock 4.4.0 (Pre-release 8)
|
## TShock 4.4.0 (Pre-release 8)
|
||||||
* Update for OTAPI 2.0.0.36 and Terraria 1.4.0.4. (@hakusaro, @Patrikkk, @DeathCradle)
|
* Update for OTAPI 2.0.0.36 and Terraria 1.4.0.4. (@hakusaro, @Patrikkk, @DeathCradle)
|
||||||
|
|
|
||||||
|
|
@ -300,6 +300,19 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
args.Player.LastKilledProjectile = 0;
|
args.Player.LastKilledProjectile = 0;
|
||||||
}
|
}
|
||||||
|
else if (CoilTileIds.Contains(editData))
|
||||||
|
{
|
||||||
|
//projectile should be the same X coordinate as all tile places
|
||||||
|
if (!args.Player.RecentlyCreatedProjectiles.Any(p => GetDataHandlers.projectileCreatesTile.ContainsKey(Main.projectile[p.Index].type) &&
|
||||||
|
Math.Abs((int)(Main.projectile[p.Index].position.X / 16f) - tileX) <= Math.Abs(Main.projectile[p.Index].velocity.X) &&
|
||||||
|
GetDataHandlers.projectileCreatesTile[Main.projectile[p.Index].type] == editData))
|
||||||
|
{
|
||||||
|
TShock.Log.ConsoleDebug("Bouncer / OnTileEdit rejected from (inconceivable rope coil) {0} {1} {2}", args.Player.Name, action, editData);
|
||||||
|
args.Player.SendTileSquare(tileX, tileY, 1);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (action == EditAction.PlaceTile || action == EditAction.PlaceWall)
|
else if (action == EditAction.PlaceTile || action == EditAction.PlaceWall)
|
||||||
{
|
{
|
||||||
if ((action == EditAction.PlaceTile && TShock.Config.PreventInvalidPlaceStyle) &&
|
if ((action == EditAction.PlaceTile && TShock.Config.PreventInvalidPlaceStyle) &&
|
||||||
|
|
|
||||||
|
|
@ -3727,7 +3727,20 @@ namespace TShockAPI
|
||||||
{ ProjectileID.EbonsandBallGun, TileID.Ebonsand },
|
{ ProjectileID.EbonsandBallGun, TileID.Ebonsand },
|
||||||
{ ProjectileID.PearlSandBallGun, TileID.Pearlsand },
|
{ ProjectileID.PearlSandBallGun, TileID.Pearlsand },
|
||||||
{ ProjectileID.CrimsandBallGun, TileID.Crimsand },
|
{ ProjectileID.CrimsandBallGun, TileID.Crimsand },
|
||||||
{ ProjectileID.MysticSnakeCoil, TileID.MysticSnakeRope }
|
{ ProjectileID.MysticSnakeCoil, TileID.MysticSnakeRope },
|
||||||
|
{ ProjectileID.RopeCoil, TileID.Rope },
|
||||||
|
{ ProjectileID.SilkRopeCoil, TileID.SilkRope },
|
||||||
|
{ ProjectileID.VineRopeCoil, TileID.VineRope },
|
||||||
|
{ ProjectileID.WebRopeCoil, TileID.WebRope }
|
||||||
|
};
|
||||||
|
|
||||||
|
internal static List<int> CoilTileIds = new List<int>()
|
||||||
|
{
|
||||||
|
TileID.MysticSnakeRope,
|
||||||
|
TileID.Rope,
|
||||||
|
TileID.SilkRope,
|
||||||
|
TileID.VineRope,
|
||||||
|
TileID.WebRope
|
||||||
};
|
};
|
||||||
|
|
||||||
internal static Dictionary<int, LiquidType> projectileCreatesLiquid = new Dictionary<int, LiquidType>
|
internal static Dictionary<int, LiquidType> projectileCreatesLiquid = new Dictionary<int, LiquidType>
|
||||||
|
|
|
||||||
|
|
@ -496,7 +496,7 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
|
|
||||||
var response = NetCreativeUnlocksModule.SerializeItemSacrifice(i, amount);
|
var response = NetCreativeUnlocksModule.SerializeItemSacrifice(i, amount);
|
||||||
NetManager.Instance.SendToClient(response, player.TPlayer.whoAmI);
|
NetManager.Instance.SendToClient(response, player.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1639,7 +1639,8 @@ namespace TShockAPI
|
||||||
if (e.number >= 0 && e.number < Main.projectile.Length)
|
if (e.number >= 0 && e.number < Main.projectile.Length)
|
||||||
{
|
{
|
||||||
var projectile = Main.projectile[e.number];
|
var projectile = Main.projectile[e.number];
|
||||||
if (projectile.active && projectile.owner >= 0 && GetDataHandlers.projectileCreatesLiquid.ContainsKey(projectile.type))
|
if (projectile.active && projectile.owner >= 0 &&
|
||||||
|
(GetDataHandlers.projectileCreatesLiquid.ContainsKey(projectile.type) || GetDataHandlers.projectileCreatesTile.ContainsKey(projectile.type)))
|
||||||
{
|
{
|
||||||
var player = Players[projectile.owner];
|
var player = Players[projectile.owner];
|
||||||
if (player != null)
|
if (player != null)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue