Update GetDataHandlers for new packet stuff.

This commit is contained in:
Zack Piispanen 2014-05-10 14:30:59 -04:00
parent 9a36405df2
commit 1eb40afd1c
4 changed files with 123 additions and 146 deletions

View file

@ -1023,7 +1023,7 @@ namespace TShockAPI
/// <summary>
/// ???
/// </summary>
public byte ID { get; set; }
public short ID { get; set; }
/// <summary>
/// Direction the damage occurred from
/// </summary>
@ -1033,9 +1033,9 @@ namespace TShockAPI
/// </summary>
public short Damage { get; set; }
/// <summary>
/// Is PVP enabled...?
/// Knockback
/// </summary>
public byte PVP { get; set; }
public float Knockback { get; set; }
/// <summary>
/// Critical?
/// </summary>
@ -1046,7 +1046,7 @@ namespace TShockAPI
/// </summary>
public static HandlerList<NPCStrikeEventArgs> 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;

View file

@ -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
}
}

View file

@ -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)

@ -1 +1 @@
Subproject commit c182b14ce29c3ff786aa3a171dd3556cefddba12
Subproject commit cc291878beec01a2bc19953b495a5842cb84cf03