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