From 1eb40afd1c25a4e1f5b205967de79d0d631473c9 Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Sat, 10 May 2014 14:30:59 -0400 Subject: [PATCH] Update GetDataHandlers for new packet stuff. --- TShockAPI/GetDataHandlers.cs | 160 +++++++++++++++++++---------------- TShockAPI/Net/NetTile.cs | 103 ++++++++-------------- TShockAPI/TShock.cs | 4 +- TerrariaServerAPI | 2 +- 4 files changed, 123 insertions(+), 146 deletions(-) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index e69c1b15..cf2401d7 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -1023,7 +1023,7 @@ namespace TShockAPI /// /// ??? /// - public byte ID { get; set; } + public short ID { get; set; } /// /// Direction the damage occurred from /// @@ -1033,9 +1033,9 @@ namespace TShockAPI /// public short Damage { get; set; } /// - /// Is PVP enabled...? + /// Knockback /// - public byte PVP { get; set; } + public float Knockback { get; set; } /// /// Critical? /// @@ -1046,7 +1046,7 @@ namespace TShockAPI /// public static HandlerList NPCStrike; - private static bool OnNPCStrike(byte id, byte dir, short dmg, byte pvp, byte crit) + private static bool OnNPCStrike(short id, byte dir, short dmg, float knockback, byte crit) { if (NPCStrike == null) return false; @@ -1056,7 +1056,7 @@ namespace TShockAPI ID = id, Direction = dir, Damage = dmg, - PVP = pvp, + Knockback = knockback, Critical = crit, }; NPCStrike.Invoke(null, args); @@ -1379,8 +1379,9 @@ namespace TShockAPI private static bool HandlePlayerInfo(GetDataHandlerArgs args) { var playerid = args.Data.ReadInt8(); + var male = args.Data.ReadByte() == 0; var hair = args.Data.ReadInt8(); - var male = args.Data.ReadBoolean(); + string name = args.Data.ReadString(); byte hairDye = args.Data.ReadInt8(); BitsByte hideVisual = args.Data.ReadInt8(); Color hairColor = new Color(args.Data.ReadInt8(), args.Data.ReadInt8(), args.Data.ReadInt8()); @@ -1391,7 +1392,6 @@ namespace TShockAPI Color pantsColor = new Color(args.Data.ReadInt8(), args.Data.ReadInt8(), args.Data.ReadInt8()); Color shoeColor = new Color(args.Data.ReadInt8(), args.Data.ReadInt8(), args.Data.ReadInt8()); var difficulty = args.Data.ReadInt8(); - string name = Encoding.UTF8.GetString(args.Data.ReadBytes((int) (args.Data.Length - args.Data.Position - 1))); if (OnPlayerInfo(playerid, hair, male, difficulty, name)) { @@ -1508,7 +1508,7 @@ namespace TShockAPI if (!args.Player.RequiresPassword) return true; - string password = Encoding.UTF8.GetString(args.Data.ReadBytes((int) (args.Data.Length - args.Data.Position - 1))); + string password = args.Data.ReadString(); if (Hooks.PlayerHooks.OnPlayerPreLogin(args.Player, args.Player.Name, password)) return true; @@ -1621,8 +1621,8 @@ namespace TShockAPI return false; var size = args.Data.ReadInt16(); - var tileX = args.Data.ReadInt32(); - var tileY = args.Data.ReadInt32(); + var tileX = args.Data.ReadInt16(); + var tileY = args.Data.ReadInt16(); if (OnSendTileSquare(size, tileX, tileY)) return true; @@ -1782,8 +1782,8 @@ namespace TShockAPI private static bool HandleTile(GetDataHandlerArgs args) { EditAction action = (EditAction)args.Data.ReadInt8(); - var tileX = args.Data.ReadInt32(); - var tileY = args.Data.ReadInt32(); + var tileX = args.Data.ReadInt16(); + var tileY = args.Data.ReadInt16(); try { @@ -2177,11 +2177,14 @@ namespace TShockAPI private static bool HandlePlayerUpdate(GetDataHandlerArgs args) { var plr = args.Data.ReadInt8(); - var control = args.Data.ReadInt8(); + var control = (BitsByte)args.Data.ReadInt8(); + var pulley = (BitsByte)args.Data.ReadInt8(); var item = args.Data.ReadInt8(); var pos = new Vector2(args.Data.ReadSingle(), args.Data.ReadSingle()); - var vel = new Vector2(args.Data.ReadSingle(), args.Data.ReadSingle()); - byte pulley = args.Data.ReadInt8(); + var vel = Vector2.Zero; + if(pulley[2]) + vel = new Vector2(args.Data.ReadSingle(), args.Data.ReadSingle()); + if (OnPlayerUpdate(plr, control, item, pos, vel, pulley)) return true; @@ -2264,11 +2267,11 @@ namespace TShockAPI args.Player.LastNetPosition = pos; } - if ((control & 32) == 32) + if (control[5]) { if (TShock.Itembans.ItemIsBanned(args.TPlayer.inventory[item].name, args.Player)) { - control -= 32; + control[5] = false; args.Player.Disable("Using banned item"); args.Player.SendMessage( string.Format("You cannot use {0} on this server. Your actions are being ignored.", @@ -2297,8 +2300,8 @@ namespace TShockAPI args.TPlayer.selectedItem = item; args.TPlayer.position = pos; - args.TPlayer.velocity = vel; args.TPlayer.oldVelocity = args.TPlayer.velocity; + args.TPlayer.velocity = vel; args.TPlayer.fallStart = (int) (pos.Y/16f); args.TPlayer.controlUp = false; args.TPlayer.controlDown = false; @@ -2306,38 +2309,42 @@ namespace TShockAPI args.TPlayer.controlRight = false; args.TPlayer.controlJump = false; args.TPlayer.controlUseItem = false; - args.TPlayer.pulley = pulley != 0; - args.TPlayer.pulleyDir = pulley; + args.TPlayer.pulley = pulley[0]; + if(pulley[0]) + args.TPlayer.pulleyDir = (byte)(pulley[1] ? 2 : 1); args.TPlayer.direction = -1; - if ((control & 1) == 1) + if (control[0]) { args.TPlayer.controlUp = true; } - if ((control & 2) == 2) + if (control[1]) { args.TPlayer.controlDown = true; } - if ((control & 4) == 4) + if (control[2]) { args.TPlayer.controlLeft = true; } - if ((control & 8) == 8) + if (control[3]) { args.TPlayer.controlRight = true; } - if ((control & 16) == 16) + if (control[4]) { args.TPlayer.controlJump = true; } - if ((control & 32) == 32) + if (control[5]) { args.TPlayer.controlUseItem = true; } - if ((control & 64) == 64) + if (control[6]) { args.TPlayer.direction = 1; } - + else + { + args.TPlayer.direction = -1; + } if (args.Player.Confused && TShock.Config.ServerSideCharacter && args.Player.IsLoggedIn) @@ -2385,7 +2392,19 @@ namespace TShockAPI var dmg = args.Data.ReadInt16(); var owner = args.Data.ReadInt8(); var type = args.Data.ReadInt16(); + var bits = (BitsByte) args.Data.ReadInt8(); owner = (byte)args.Player.Index; + float[] ai = new float[Projectile.maxAI]; + + for (int i = 0; i < Projectile.maxAI; i++) + { + if (bits[i]) + ai[i] = args.Data.ReadSingle(); + else + ai[i] = 0f; + } + + var index = TShock.Utils.SearchProjectile(ident, owner); if (OnNewProjectile(ident, pos, vel, knockback, dmg, owner, type, index)) @@ -2527,10 +2546,10 @@ namespace TShockAPI private static bool HandlePlayerKillMe(GetDataHandlerArgs args) { var id = args.Data.ReadInt8(); - var direction = args.Data.ReadInt8(); + var direction = (byte)(args.Data.ReadInt8() - 1); var dmg = args.Data.ReadInt16(); var pvp = args.Data.ReadInt8() == 0; - + var text = args.Data.ReadString(); if (dmg > 20000) //Abnormal values have the potential to cause infinite loops in the server. { TShock.Utils.ForceKick(args.Player, "Crash Exploit Attempt", true); @@ -2546,14 +2565,7 @@ namespace TShockAPI if (OnKillMe(id, direction, dmg, pvp)) return true; - int textlength = (int)(args.Data.Length - args.Data.Position - 1); - string deathtext = ""; - if (textlength > 0) - { - deathtext = Encoding.UTF8.GetString(args.Data.ReadBytes(textlength)); - } - - if (deathtext.Length > 500) + if (text.Length > 500) { TShock.Utils.Kick(TShock.Players[id], "Crash attempt", true); return true; @@ -2576,8 +2588,8 @@ namespace TShockAPI private static bool HandleLiquidSet(GetDataHandlerArgs args) { - int tileX = args.Data.ReadInt32(); - int tileY = args.Data.ReadInt32(); + int tileX = args.Data.ReadInt16(); + int tileY = args.Data.ReadInt16(); byte amount = args.Data.ReadInt8(); byte type = args.Data.ReadInt8(); @@ -2699,6 +2711,7 @@ namespace TShockAPI int flag = args.Data.ReadByte(); int tileX = args.Data.ReadInt16(); int tileY = args.Data.ReadInt16(); + int style = args.Data.ReadInt16(); if (OnTileKill(tileX, tileY)) return true; @@ -2734,8 +2747,8 @@ namespace TShockAPI private static bool HandleSpawn(GetDataHandlerArgs args) { var player = args.Data.ReadInt8(); - var spawnx = args.Data.ReadInt32(); - var spawny = args.Data.ReadInt32(); + var spawnx = args.Data.ReadInt16(); + var spawny = args.Data.ReadInt16(); if (OnPlayerSpawn(player, spawnx, spawny)) return true; @@ -2784,8 +2797,8 @@ namespace TShockAPI private static bool HandleChestOpen(GetDataHandlerArgs args) { - var x = args.Data.ReadInt32(); - var y = args.Data.ReadInt32(); + var x = args.Data.ReadInt16(); + var y = args.Data.ReadInt16(); if (OnChestOpen(x, y, args.Player)) return true; @@ -2811,8 +2824,13 @@ namespace TShockAPI private static bool HandleChestActive(GetDataHandlerArgs args) { var id = args.Data.ReadInt16(); - var x = args.Data.ReadInt32(); - var y = args.Data.ReadInt32(); + var x = args.Data.ReadInt16(); + var y = args.Data.ReadInt16(); + var b = args.Data.ReadInt8(); + var name = ""; + + if (b <= 20) + name = args.Data.ReadString(); args.Player.ActiveChest = id; @@ -2870,8 +2888,9 @@ namespace TShockAPI private static bool HandleSign(GetDataHandlerArgs args) { var id = args.Data.ReadInt16(); - var x = args.Data.ReadInt32(); - var y = args.Data.ReadInt32(); + var x = args.Data.ReadInt16(); + var y = args.Data.ReadInt16(); + var text = args.Data.ReadString(); if (OnSignEvent(id, x, y)) return true; @@ -2978,7 +2997,7 @@ namespace TShockAPI var vel = new Vector2(args.Data.ReadSingle(), args.Data.ReadSingle()); var stacks = args.Data.ReadInt16(); var prefix = args.Data.ReadInt8(); - var noDelay = args.Data.ReadBoolean(); + var noDelay = args.Data.ReadInt8() == 1; var type = args.Data.ReadInt16(); if (OnItemDrop(id, pos, vel, stacks, prefix, noDelay, type)) @@ -3047,10 +3066,12 @@ namespace TShockAPI private static bool HandlePlayerDamage(GetDataHandlerArgs args) { var id = args.Data.ReadInt8(); - var direction = args.Data.ReadInt8(); + var direction = (byte)(args.Data.ReadInt8() - 1); var dmg = args.Data.ReadInt16(); - var pvp = args.Data.ReadBoolean(); - var crit = args.Data.ReadBoolean(); + var text = args.Data.ReadString(); + var bits = (BitsByte)args.Data.ReadInt8(); + var pvp = bits[0]; + var crit = bits[1]; if (dmg > 12000) //Abnormal values have the potential to cause infinite loops in the server. { //12000 because Skely Prime Head does 10339 or some bs during the day. @@ -3062,17 +3083,6 @@ namespace TShockAPI if (OnPlayerDamage(id, direction, dmg, pvp, crit)) return true; - int textlength = (int) (args.Data.Length - args.Data.Position - 1); - string deathtext = ""; - if (textlength > 0) - { - deathtext = Encoding.UTF8.GetString(args.Data.ReadBytes(textlength)); - /*if (!TShock.Utils.ValidString(deathtext)) - { - return true; - }*/ - } - if (id >= Main.maxPlayers || TShock.Players[id] == null) { return true; @@ -3124,13 +3134,13 @@ namespace TShockAPI private static bool HandleNpcStrike(GetDataHandlerArgs args) { - var id = args.Data.ReadInt8(); - var direction = args.Data.ReadInt8(); + var id = args.Data.ReadInt16(); var dmg = args.Data.ReadInt16(); - var pvp = args.Data.ReadInt8(); + var knockback = args.Data.ReadSingle(); + var direction = (byte)(args.Data.ReadInt8() - 1); var crit = args.Data.ReadInt8(); - if (OnNPCStrike(id, direction, dmg, pvp, crit)) + if (OnNPCStrike(id, direction, dmg, knockback, crit)) return true; if (Main.npc[id] == null) @@ -3283,6 +3293,7 @@ namespace TShockAPI case 245: case 262: case 266: + case 370: spawnboss = true; break; } @@ -3332,8 +3343,8 @@ namespace TShockAPI private static bool HandlePaintTile(GetDataHandlerArgs args) { - var x = args.Data.ReadInt32(); - var y = args.Data.ReadInt32(); + var x = args.Data.ReadInt16(); + var y = args.Data.ReadInt16(); var t = args.Data.ReadInt8(); if (x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY || t > Main.numTileColors) @@ -3370,8 +3381,8 @@ namespace TShockAPI private static bool HandlePaintWall(GetDataHandlerArgs args) { - var x = args.Data.ReadInt32(); - var y = args.Data.ReadInt32(); + var x = args.Data.ReadInt16(); + var y = args.Data.ReadInt16(); var t = args.Data.ReadInt8(); if (x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY || t > Main.numTileColors) @@ -3408,7 +3419,7 @@ namespace TShockAPI private static bool HandleTeleport(GetDataHandlerArgs args) { - var flag = args.Data.ReadInt8(); + var flag = (BitsByte)args.Data.ReadInt8(); var id = args.Data.ReadInt16(); var x = args.Data.ReadSingle(); var y = args.Data.ReadSingle(); @@ -3580,8 +3591,9 @@ namespace TShockAPI private static bool HandleDoorUse(GetDataHandlerArgs e) { var Close = e.Data.ReadByte(); - var X = e.Data.ReadInt32(); - var Y = e.Data.ReadInt32(); + var X = e.Data.ReadInt16(); + var Y = e.Data.ReadInt16(); + var dir = e.Data.ReadByte() == 0 ? -1 : 1; if (X >= Main.tile.GetLength(0) || Y >= Main.tile.GetLength(1) || X < 0 || Y < 0) // Check for out of range return true; diff --git a/TShockAPI/Net/NetTile.cs b/TShockAPI/Net/NetTile.cs index b526acba..8faa4725 100644 --- a/TShockAPI/Net/NetTile.cs +++ b/TShockAPI/Net/NetTile.cs @@ -101,61 +101,58 @@ namespace TShockAPI.Net public void Pack(Stream stream) { - var flags = TileFlags.None; + var bits = new BitsByte(); if ((Active) && (!Inactive)) - flags |= TileFlags.Active; - - if (Lighted) - flags |= TileFlags.Lighted; + bits[0] = true; if (HasWall) - flags |= TileFlags.Wall; + bits[2] = true; if (HasLiquid) - flags |= TileFlags.Liquid; + bits[3] = true; if (Wire) - flags |= TileFlags.Wire; + bits[4] = true; if (IsHalf) - flags |= TileFlags.HalfBrick; + bits[5] = true; if (IsActuator) - flags |= TileFlags.Actuator; + bits[6] = true; if (Inactive) { - flags |= TileFlags.Inactive; + bits[7] = true; } - stream.WriteInt8((byte) flags); + stream.WriteInt8((byte) bits); - var flags2 = TileFlags2.None; + bits = new BitsByte(); if ((Wire2)) - flags2 |= TileFlags2.Wire2; + bits[0] = true; if (Wire3) - flags2 |= TileFlags2.Wire3; + bits[1] = true; if (HasColor) - flags2 |= TileFlags2.Color; + bits[2] = true; if (HasWallColor) - flags2 |= TileFlags2.WallColor; + bits[3] = true; if (Slope) - flags2 |= TileFlags2.Slope; + bits[4] = true; if (Slope2) - flags2 |= TileFlags2.Slope2; + bits[5] = true; if (Slope3) - flags2 |= TileFlags2.Slope3; + bits[6] = true; - stream.WriteInt8((byte)flags2); + stream.WriteInt8((byte)bits); if (HasColor) { @@ -189,26 +186,26 @@ namespace TShockAPI.Net public void Unpack(Stream stream) { - var flags = (TileFlags) stream.ReadInt8(); - var flags2 = (TileFlags2)stream.ReadInt8(); + var flags = (BitsByte) stream.ReadInt8(); + var flags2 = (BitsByte)stream.ReadInt8(); - Wire2 = flags2.HasFlag(TileFlags2.Wire2); - Wire3 = flags2.HasFlag(TileFlags2.Wire3); - Slope = flags2.HasFlag(TileFlags2.Slope); - Slope2 = flags2.HasFlag(TileFlags2.Slope2); - Slope3 = flags2.HasFlag(TileFlags2.Slope3); + Wire2 = flags2[0]; + Wire3 = flags2[1]; + Slope = flags2[4]; + Slope2 = flags2[5]; + Slope3 = flags2[6]; - if (flags2.HasFlag(TileFlags2.Color)) + if (flags2[2]) { TileColor = stream.ReadInt8(); } - if (flags2.HasFlag(TileFlags2.WallColor)) + if (flags2[3]) { WallColor = stream.ReadInt8(); } - Active = flags.HasFlag(TileFlags.Active); + Active = flags[0]; if (Active) { Type = stream.ReadUInt16(); @@ -219,63 +216,31 @@ namespace TShockAPI.Net } } - if (flags.HasFlag(TileFlags.Lighted)) - { - Lighted = true; - } - - if (flags.HasFlag(TileFlags.Wall)) + if (flags[2]) { Wall = stream.ReadInt8(); } - if (flags.HasFlag(TileFlags.Liquid)) + if (flags[3]) { Liquid = stream.ReadInt8(); LiquidType = stream.ReadInt8(); } - if (flags.HasFlag(TileFlags.Wire)) + if (flags[4]) Wire = true; - if (flags.HasFlag(TileFlags.HalfBrick)) + if (flags[5]) IsHalf = true; - if (flags.HasFlag(TileFlags.Actuator)) + if (flags[6]) IsActuator = true; - if (flags.HasFlag(TileFlags.Inactive)) + if (flags[7]) { Inactive = true; Active = false; } } } - - [Flags] - public enum TileFlags : byte - { - None = 0, - Active = 1, - Lighted = 2, - Wall = 4, - Liquid = 8, - Wire = 16, - HalfBrick = 32, - Actuator = 64, - Inactive = 128 - } - - [Flags] - public enum TileFlags2 : byte - { - None = 0, - Wire2 = 1, - Wire3 = 2, - Color = 4, - WallColor = 8, - Slope = 16, - Slope2 = 32, - Slope3 = 64 - } } diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 5618528a..f486329b 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1150,7 +1150,7 @@ 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); @@ -1178,7 +1178,7 @@ namespace TShockAPI { // Exceptions are already handled e.Handled = GetDataHandlers.HandlerGetData(type, player, data); - }*/ + } } private void OnGreetPlayer(GreetPlayerEventArgs args) diff --git a/TerrariaServerAPI b/TerrariaServerAPI index c182b14c..cc291878 160000 --- a/TerrariaServerAPI +++ b/TerrariaServerAPI @@ -1 +1 @@ -Subproject commit c182b14ce29c3ff786aa3a171dd3556cefddba12 +Subproject commit cc291878beec01a2bc19953b495a5842cb84cf03