diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index f6f15fc5..c92688fd 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -4634,7 +4634,7 @@ namespace TShockAPI } if (args.Parameters.Count == 2) int.TryParse(args.Parameters[1], out time); - if (id > 0 && id < Main.maxBuffs) + if (id > 0 && id < Main.maxBuffTypes) { if (time < 0 || time > short.MaxValue) time = 60; @@ -4685,7 +4685,7 @@ namespace TShockAPI } if (args.Parameters.Count == 3) int.TryParse(args.Parameters[2], out time); - if (id > 0 && id < Main.maxBuffs) + if (id > 0 && id < Main.maxBuffTypes) { if (time < 0 || time > short.MaxValue) time = 60; diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 6cd6c1cb..e69c1b15 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -1198,7 +1198,7 @@ namespace TShockAPI { #region Blacklists - WhitelistBuffMaxTime = new int[Main.maxBuffs]; + WhitelistBuffMaxTime = new int[Main.maxBuffTypes]; WhitelistBuffMaxTime[20] = 600; WhitelistBuffMaxTime[0x18] = 1200; WhitelistBuffMaxTime[0x1f] = 120; @@ -3218,7 +3218,7 @@ namespace TShockAPI if (OnPlayerBuffUpdate(id)) return true; - for (int i = 0; i < 10; i++) + for (int i = 0; i < Terraria.Player.maxBuffs; i++) { var buff = args.Data.ReadInt8(); diff --git a/TShockAPI/Net/BaseMsg.cs b/TShockAPI/Net/BaseMsg.cs index 5db8814e..de85ba35 100644 --- a/TShockAPI/Net/BaseMsg.cs +++ b/TShockAPI/Net/BaseMsg.cs @@ -32,12 +32,12 @@ namespace TShockAPI.Net public void PackFull(Stream stream) { long start = stream.Position; - stream.WriteInt32(1); + stream.WriteInt16(0); stream.WriteInt8((byte) ID); Pack(stream); long end = stream.Position; stream.Position = start; - stream.WriteInt32((int) (end - start) - 4); + stream.WriteInt16((short)end); stream.Position = end; } diff --git a/TShockAPI/Net/ProjectileRemoveMsg.cs b/TShockAPI/Net/ProjectileRemoveMsg.cs index 1f7907e6..1c04af16 100644 --- a/TShockAPI/Net/ProjectileRemoveMsg.cs +++ b/TShockAPI/Net/ProjectileRemoveMsg.cs @@ -41,8 +41,7 @@ namespace TShockAPI.Net stream.WriteSingle(0); stream.WriteInt16(0); stream.WriteByte(Owner); - stream.WriteByte(0); - stream.WriteSingle(0); + stream.WriteInt16(0); stream.WriteSingle(0); stream.WriteSingle(0); } diff --git a/TShockAPI/Net/SpawnMsg.cs b/TShockAPI/Net/SpawnMsg.cs index 849e5627..c2a1b3de 100644 --- a/TShockAPI/Net/SpawnMsg.cs +++ b/TShockAPI/Net/SpawnMsg.cs @@ -28,8 +28,8 @@ namespace TShockAPI.Net get { return PacketTypes.PlayerSpawn; } } - public int TileX { get; set; } - public int TileY { get; set; } + public short TileX { get; set; } + public short TileY { get; set; } public byte PlayerIndex { get; set; } public override void Pack(Stream stream) diff --git a/TShockAPI/Net/WorldInfoMsg.cs b/TShockAPI/Net/WorldInfoMsg.cs index 9730b88a..a3985c8f 100644 --- a/TShockAPI/Net/WorldInfoMsg.cs +++ b/TShockAPI/Net/WorldInfoMsg.cs @@ -20,6 +20,7 @@ using System; using System.IO; using System.IO.Streams; using System.Text; +using Terraria; namespace TShockAPI.Net { @@ -58,12 +59,12 @@ namespace TShockAPI.Net public byte MoonPhase { get; set; } public bool BloodMoon { get; set; } public bool Eclipse { get; set; } - public int MaxTilesX { get; set; } - public int MaxTilesY { get; set; } - public int SpawnX { get; set; } - public int SpawnY { get; set; } - public int WorldSurface { get; set; } - public int RockLayer { get; set; } + public short MaxTilesX { get; set; } + public short MaxTilesY { get; set; } + public short SpawnX { get; set; } + public short SpawnY { get; set; } + public short WorldSurface { get; set; } + public short RockLayer { get; set; } public int WorldID { get; set; } public byte MoonType { get; set; } public int TreeX0 { get; set; } @@ -105,50 +106,71 @@ namespace TShockAPI.Net public override void Pack(Stream stream) { - stream.WriteInt32(Time); - stream.WriteBoolean(DayTime); - stream.WriteInt8(MoonPhase); - stream.WriteBoolean(BloodMoon); - stream.WriteBoolean(Eclipse); - stream.WriteInt32(MaxTilesX); - stream.WriteInt32(MaxTilesY); - stream.WriteInt32(SpawnX); - stream.WriteInt32(SpawnY); - stream.WriteInt32(WorldSurface); - stream.WriteInt32(RockLayer); - stream.WriteInt32(WorldID); - stream.WriteByte(MoonType); - stream.WriteInt32(TreeX0); - stream.WriteInt32(TreeX1); - stream.WriteInt32(TreeX2); - stream.WriteByte(TreeStyle0); - stream.WriteByte(TreeStyle1); - stream.WriteByte(TreeStyle2); - stream.WriteByte(TreeStyle3); - stream.WriteInt32(CaveBackX0); - stream.WriteInt32(CaveBackX1); - stream.WriteInt32(CaveBackX2); - stream.WriteByte(CaveBackStyle0); - stream.WriteByte(CaveBackStyle1); - stream.WriteByte(CaveBackStyle2); - stream.WriteByte(CaveBackStyle3); - stream.WriteByte(SetBG0); - stream.WriteByte(SetBG1); - stream.WriteByte(SetBG2); - stream.WriteByte(SetBG3); - stream.WriteByte(SetBG4); - stream.WriteByte(SetBG5); - stream.WriteByte(SetBG6); - stream.WriteByte(SetBG7); - stream.WriteByte(IceBackStyle); - stream.WriteByte(JungleBackStyle); - stream.WriteByte(HellBackStyle); - stream.WriteSingle(WindSpeed); - stream.WriteByte(NumberOfClouds); - stream.WriteInt8((byte)BossFlags); - stream.WriteInt8((byte)BossFlags2); - stream.WriteSingle(Rain); - stream.WriteBytes(Encoding.UTF8.GetBytes(WorldName)); + BinaryWriter writer = new BinaryWriter(stream); + writer.Write(Time); + BitsByte worldinfo = new BitsByte(DayTime, BloodMoon, Eclipse); + writer.Write(worldinfo); + writer.Write(MoonPhase); + writer.Write(MaxTilesX); + writer.Write(MaxTilesY); + writer.Write(SpawnX); + writer.Write(SpawnY); + writer.Write(WorldSurface); + writer.Write(RockLayer); + writer.Write(WorldID); + writer.Write(WorldName); + writer.Write(MoonType); + + writer.Write(SetBG0); + writer.Write(SetBG1); + writer.Write(SetBG2); + writer.Write(SetBG3); + writer.Write(SetBG4); + writer.Write(SetBG5); + writer.Write(SetBG6); + writer.Write(SetBG7); + writer.Write(IceBackStyle); + writer.Write(JungleBackStyle); + writer.Write(HellBackStyle); + writer.Write(WindSpeed); + writer.Write(NumberOfClouds); + + writer.Write(TreeX0); + writer.Write(TreeX1); + writer.Write(TreeX2); + writer.Write(TreeStyle0); + writer.Write(TreeStyle1); + writer.Write(TreeStyle2); + writer.Write(TreeStyle3); + writer.Write(CaveBackX0); + writer.Write(CaveBackX1); + writer.Write(CaveBackX2); + writer.Write(CaveBackStyle0); + writer.Write(CaveBackStyle1); + writer.Write(CaveBackStyle2); + writer.Write(CaveBackStyle3); + + writer.Write(Rain); + + BitsByte bosses1 = new BitsByte((BossFlags & BossFlags.OrbSmashed) == BossFlags.OrbSmashed, + (BossFlags & BossFlags.DownedBoss1) == BossFlags.DownedBoss1, + (BossFlags & BossFlags.DownedBoss2) == BossFlags.DownedBoss2, + (BossFlags & BossFlags.DownedBoss3) == BossFlags.DownedBoss3, + (BossFlags & BossFlags.HardMode) == BossFlags.HardMode, + (BossFlags & BossFlags.DownedClown) == BossFlags.DownedClown, + (BossFlags & BossFlags.ServerSideCharacter) == BossFlags.ServerSideCharacter, + (BossFlags & BossFlags.DownedPlantBoss) == BossFlags.DownedPlantBoss); + writer.Write(bosses1); + + BitsByte bosses2 = new BitsByte((BossFlags2 & BossFlags2.DownedMechBoss1) == BossFlags2.DownedMechBoss1, + (BossFlags2 & BossFlags2.DownedMechBoss2) == BossFlags2.DownedMechBoss2, + (BossFlags2 & BossFlags2.DownedMechBoss3) == BossFlags2.DownedMechBoss3, + (BossFlags2 & BossFlags2.DownedMechBossAny) == BossFlags2.DownedMechBossAny, + (BossFlags2 & BossFlags2.CloudBg) == BossFlags2.CloudBg, + (BossFlags2 & BossFlags2.Crimson) == BossFlags2.Crimson, + (BossFlags2 & BossFlags2.PumpkinMoon) == BossFlags2.PumpkinMoon, + (BossFlags2 & BossFlags2.SnowMoon) == BossFlags2.SnowMoon); + writer.Write(bosses2); } } } \ No newline at end of file diff --git a/TShockAPI/SaveManager.cs b/TShockAPI/SaveManager.cs index de623e83..ede68ee7 100644 --- a/TShockAPI/SaveManager.cs +++ b/TShockAPI/SaveManager.cs @@ -125,12 +125,12 @@ namespace TShockAPI if (task.direct) { OnSaveWorld(new WorldSaveEventArgs()); - WorldFile.realsaveWorld(task.resetTime); + WorldFile.RealSaveWorld(task.resetTime); } else WorldFile.saveWorld(task.resetTime); - TShock.Utils.Broadcast("World saved.", Color.Yellow); - Log.Info(string.Format("World saved at ({0})", Main.worldPathName)); + TShock.Utils.Broadcast("World saved.", Color.Yellow); + Log.Info(string.Format("World saved at ({0})", Main.worldPathName)); } catch (Exception e) { diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index ea04eca2..cb0a8c20 100755 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -525,12 +525,12 @@ namespace TShockAPI DayTime = Main.dayTime, MoonPhase = (byte)Main.moonPhase, BloodMoon = Main.bloodMoon, - MaxTilesX = Main.maxTilesX, - MaxTilesY = Main.maxTilesY, - SpawnX = Main.spawnTileX, - SpawnY = Main.spawnTileY, - WorldSurface = (int)Main.worldSurface, - RockLayer = (int)Main.rockLayer, + MaxTilesX = (short)Main.maxTilesX, + MaxTilesY = (short)Main.maxTilesY, + SpawnX = (short)Main.spawnTileX, + SpawnY = (short)Main.spawnTileY, + WorldSurface = (short)Main.worldSurface, + RockLayer = (short)Main.rockLayer, //Sending a fake world id causes the client to not be able to find a stored spawnx/y. //This fixes the bed spawn point bug. With a fake world id it wont be able to find the bed spawn. WorldID = Main.worldID, @@ -636,8 +636,8 @@ namespace TShockAPI var msg = new SpawnMsg { PlayerIndex = (byte) Index, - TileX = tilex, - TileY = tiley + TileX = (short)tilex, + TileY = (short)tiley }; msg.PackFull(ms); SendRawData(ms.ToArray()); diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 89cd3cff..5618528a 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -41,7 +41,7 @@ using System.Threading.Tasks; namespace TShockAPI { - [ApiVersion(1, 15)] + [ApiVersion(1, 16)] public class TShock : TerrariaPlugin { public static readonly Version VersionNum = Assembly.GetExecutingAssembly().GetName().Version; @@ -1149,8 +1149,8 @@ namespace TShockAPI { if (e.Handled) return; - - PacketTypes type = e.MsgID; + + /*PacketTypes type = e.MsgID; Debug.WriteLine("Recv: {0:X}: {2} ({1:XX})", e.Msg.whoAmI, (byte) type, type); @@ -1174,11 +1174,11 @@ namespace TShockAPI return; } - using (var data = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length)) + using (var data = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length - 1)) { // Exceptions are already handled e.Handled = GetDataHandlers.HandlerGetData(type, player, data); - } + }*/ } private void OnGreetPlayer(GreetPlayerEventArgs args) @@ -1359,12 +1359,12 @@ namespace TShockAPI DayTime = Main.dayTime, MoonPhase = (byte)Main.moonPhase, BloodMoon = Main.bloodMoon, - MaxTilesX = Main.maxTilesX, - MaxTilesY = Main.maxTilesY, - SpawnX = Main.spawnTileX, - SpawnY = Main.spawnTileY, - WorldSurface = (int)Main.worldSurface, - RockLayer = (int)Main.rockLayer, + MaxTilesX = (short)Main.maxTilesX, + MaxTilesY = (short)Main.maxTilesY, + SpawnX = (short)Main.spawnTileX, + SpawnY = (short)Main.spawnTileY, + WorldSurface = (short)Main.worldSurface, + RockLayer = (short)Main.rockLayer, //Sending a fake world id causes the client to not be able to find a stored spawnx/y. //This fixes the bed spawn point bug. With a fake world id it wont be able to find the bed spawn. WorldID = Main.worldID, @@ -1408,7 +1408,7 @@ namespace TShockAPI (NPC.downedMechBoss2 ? BossFlags2.DownedMechBoss2 : BossFlags2.None) | (NPC.downedMechBoss3 ? BossFlags2.DownedMechBoss3 : BossFlags2.None) | (NPC.downedMechBossAny ? BossFlags2.DownedMechBossAny : BossFlags2.None) | - (Main.cloudBGActive == 1f ? BossFlags2.CloudBg : BossFlags2.None) | + (Main.cloudBGActive >= 1f ? BossFlags2.CloudBg : BossFlags2.None) | (WorldGen.crimson ? BossFlags2.Crimson : BossFlags2.None) | (Main.pumpkinMoon ? BossFlags2.PumpkinMoon : BossFlags2.None) | (Main.snowMoon ? BossFlags2.SnowMoon : BossFlags2.None) , diff --git a/TShockAPI/Utils.cs b/TShockAPI/Utils.cs index 93f8db18..5d6a0f73 100644 --- a/TShockAPI/Utils.cs +++ b/TShockAPI/Utils.cs @@ -442,7 +442,7 @@ namespace TShockAPI /// name public string GetBuffName(int id) { - return (id > 0 && id < Main.maxBuffs) ? Main.buffName[id] : "null"; + return (id > 0 && id < Main.maxBuffTypes) ? Main.buffName[id] : "null"; } /// @@ -452,7 +452,7 @@ namespace TShockAPI /// description public string GetBuffDescription(int id) { - return (id > 0 && id < Main.maxBuffs) ? Main.buffTip[id] : "null"; + return (id > 0 && id < Main.maxBuffTypes) ? Main.buffTip[id] : "null"; } /// @@ -463,13 +463,13 @@ namespace TShockAPI public List GetBuffByName(string name) { string nameLower = name.ToLower(); - for (int i = 1; i < Main.maxBuffs; i++) + for (int i = 1; i < Main.maxBuffTypes; i++) { if (Main.buffName[i].ToLower() == nameLower) return new List {i}; } var found = new List(); - for (int i = 1; i < Main.maxBuffs; i++) + for (int i = 1; i < Main.maxBuffTypes; i++) { if (Main.buffName[i].ToLower().StartsWith(nameLower)) found.Add(i); diff --git a/TerrariaServerAPI b/TerrariaServerAPI index 32544b40..330a7f06 160000 --- a/TerrariaServerAPI +++ b/TerrariaServerAPI @@ -1 +1 @@ -Subproject commit 32544b409a0c40f2be57d27071fd97c36dbe73e4 +Subproject commit 330a7f067c5ebd3f5dd9020f5f27a5e323ffdb1a