Skip to content

Commit

Permalink
Rename args, craft invalid packet to indicate cancelled before Pryaxi…
Browse files Browse the repository at this point in the history
  • Loading branch information
sgkoishi committed Jan 10, 2023
1 parent aeb6b36 commit 32284e6
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 37 deletions.
4 changes: 2 additions & 2 deletions src/DebugPacket.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ private void Hook_DebugPacket_SendData(On.Terraria.NetMessage.orig_SendData orig
orig(msgType, remoteClient, ignoreClient, text, number, number2, number3, number4, number5, number6, number7);
}

private void Hook_DebugPacket_SendBytes(object? sender, OTAPI.Hooks.NetMessage.SendBytesEventArgs e)
private void Hook_DebugPacket_SendBytes(object? sender, OTAPI.Hooks.NetMessage.SendBytesEventArgs args)
{
if (this.config.DebugPacket.BytesOut)
{
TShockAPI.TShock.Log.ConsoleInfo($"[DbgPkt] O ->{e.RemoteClient} {(PacketTypes) e.Data[e.Offset + 2]} {e.Result != OTAPI.HookResult.Cancel} {BitConverter.ToString(e.Data, e.Offset, e.Size)}");
TShockAPI.TShock.Log.ConsoleInfo($"[DbgPkt] O ->{args.RemoteClient} {(PacketTypes) args.Data[args.Offset + 2]} {args.Result != OTAPI.HookResult.Cancel} {BitConverter.ToString(args.Data, args.Offset, args.Size)}");
}
}

Expand Down
10 changes: 5 additions & 5 deletions src/Ghost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@ private bool Hook_PlayerActive(Func<TSPlayer, bool> orig, TSPlayer player)
return state == null ? orig(player) : !state.Value;
}

private void Hook_Ghost_SendBytes(object? sender, OTAPI.Hooks.NetMessage.SendBytesEventArgs e)
private void Hook_Ghost_SendBytes(object? sender, OTAPI.Hooks.NetMessage.SendBytesEventArgs args)
{
if (e.Data[2] != (int) PacketTypes.PlayerActive)
if (args.Data[2] != (int) PacketTypes.PlayerActive)
{
return;
}

var playerIndex = e.Data[3];
if (e.RemoteClient != playerIndex)
var playerIndex = args.Data[3];
if (args.RemoteClient != playerIndex)
{
var state = TShockAPI.TShock.Players[playerIndex]?.GetData<bool?>(Consts.DataKey.Ghost);
if (state == null)
{
return;
}
e.Data[4] = (byte) (!state).GetHashCode();
args.Data[4] = (byte) (!state).GetHashCode();
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/HideCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ public partial class Plugin : TerrariaPlugin
{
private List<Command> _hiddenCommands = new();

private void Hook_HideCommand_PlayerCommand(PlayerCommandEventArgs e)
private void Hook_HideCommand_PlayerCommand(PlayerCommandEventArgs args)
{
var hc = this._hiddenCommands.FindAll(c => c.HasAlias(e.CommandName) && c.CanRun(e.Player));
var hc = this._hiddenCommands.FindAll(c => c.HasAlias(args.CommandName) && c.CanRun(args.Player));
if (hc.Count > 0)
{
var ecl = (List<Command>) e.CommandList;
var ecl = (List<Command>) args.CommandList;
ecl.AddRange(hc.Except(Commands.ChatCommands));
}
var hidden = Commands.ChatCommands.FindAll(c => this.config.HideCommands.Any(h => c.HasAlias(h)));
Expand Down
12 changes: 6 additions & 6 deletions src/Mitigations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,9 @@ internal static bool HandleInventorySlotPE(byte player, Span<byte> data)
}
}

private void Hook_Mitigation_GetData(object? sender, OTAPI.Hooks.MessageBuffer.GetDataEventArgs e)
private void Hook_Mitigation_GetData(object? sender, OTAPI.Hooks.MessageBuffer.GetDataEventArgs args)
{
if (e.Result == OTAPI.HookResult.Cancel)
if (args.Result == OTAPI.HookResult.Cancel)
{
return;
}
Expand All @@ -97,15 +97,15 @@ private void Hook_Mitigation_GetData(object? sender, OTAPI.Hooks.MessageBuffer.G
return;
}

switch (e.PacketId)
switch (args.PacketId)
{
case (int) PacketTypes.PlayerSlot:
if (mitigation.InventorySlotPE)
{
var index = e.Instance.whoAmI;
if (Mitigations.HandleInventorySlotPE((byte) index, e.Instance.readBuffer.AsSpan(e.ReadOffset, e.Length - 1)))
var index = args.Instance.whoAmI;
if (Mitigations.HandleInventorySlotPE((byte) index, args.Instance.readBuffer.AsSpan(args.ReadOffset, args.Length - 1)))
{
e.Result = OTAPI.HookResult.Cancel;
args.Result = OTAPI.HookResult.Cancel;
this.Statistics.MitigationSlotPE++;
var player = TShockAPI.TShock.Players[index];
if (player == null)
Expand Down
30 changes: 16 additions & 14 deletions src/Modded.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,40 +4,40 @@ namespace Chireiden.TShock.Omni;

public partial class Plugin : TerrariaPlugin
{
private void Hook_Modded_GetData(object? sender, OTAPI.Hooks.MessageBuffer.GetDataEventArgs e)
private void Hook_Modded_GetData(object? sender, OTAPI.Hooks.MessageBuffer.GetDataEventArgs args)
{
if (e.Result == OTAPI.HookResult.Cancel)
if (args.Result == OTAPI.HookResult.Cancel)
{
return;
}

var whoAmI = e.Instance.whoAmI;
var whoAmI = args.Instance.whoAmI;
var state = Terraria.Netplay.Clients[whoAmI].State;
var flag = false;
if (state == -1)
{
if (e.PacketId != (byte) PacketTypes.PasswordSend)
if (args.PacketId != (byte) PacketTypes.PasswordSend)
{
flag = true;
}
}
else if (state == 0)
{
if (e.PacketId != (byte) PacketTypes.ConnectRequest)
if (args.PacketId != (byte) PacketTypes.ConnectRequest)
{
flag = true;
}
}
else if (state < 10)
{
if (e.PacketId > (byte) PacketTypes.PlayerSpawn
&& e.PacketId != (byte) PacketTypes.SocialHandshake
&& e.PacketId != (byte) PacketTypes.PlayerHp
&& e.PacketId != (byte) PacketTypes.PlayerMana
&& e.PacketId != (byte) PacketTypes.PlayerBuff
&& e.PacketId != (byte) PacketTypes.PasswordSend
&& e.PacketId != (byte) PacketTypes.ClientUUID
&& e.PacketId != (byte) PacketTypes.SyncLoadout)
if (args.PacketId > (byte) PacketTypes.PlayerSpawn
&& args.PacketId != (byte) PacketTypes.SocialHandshake
&& args.PacketId != (byte) PacketTypes.PlayerHp
&& args.PacketId != (byte) PacketTypes.PlayerMana
&& args.PacketId != (byte) PacketTypes.PlayerBuff
&& args.PacketId != (byte) PacketTypes.PasswordSend
&& args.PacketId != (byte) PacketTypes.ClientUUID
&& args.PacketId != (byte) PacketTypes.SyncLoadout)
{
flag = true;
}
Expand All @@ -49,7 +49,9 @@ private void Hook_Modded_GetData(object? sender, OTAPI.Hooks.MessageBuffer.GetDa
// Stop handling any data
Terraria.Netplay.Clients[whoAmI].PendingTermination = true;
Terraria.Netplay.Clients[whoAmI].PendingTerminationApproved = true;
e.Result = OTAPI.HookResult.Cancel;
args.Result = OTAPI.HookResult.Cancel;
// FIXME: TSAPI is not respecting args.Result, so we have to craft invalid packet.
args.PacketId = byte.MaxValue;
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/PermissionRestrict.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ private void Hook_Permission_SyncLoadout(object? sender, OTAPI.Hooks.MessageBuff
}

args.Result = OTAPI.HookResult.Cancel;
// TSAPI is not respecting args.Result, so we have to craft invalid packet. Switch to Loadout 255 when only 3.
// FIXME: TSAPI is not respecting args.Result, so we have to craft invalid packet. Switch to Loadout 255 when only 3.
args.Instance.readBuffer[args.ReadOffset + 1] = 255;
Terraria.NetMessage.TrySendData((int) PacketTypes.SyncLoadout, -1, -1, null, args.Instance.whoAmI, player.TPlayer.CurrentLoadoutIndex);
}
Expand Down
12 changes: 6 additions & 6 deletions src/Wildcard.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@ namespace Chireiden.TShock.Omni;

public partial class Plugin : TerrariaPlugin
{
private void Hook_Wildcard_PlayerCommand(PlayerCommandEventArgs e)
private void Hook_Wildcard_PlayerCommand(PlayerCommandEventArgs args)
{
for (var i = 0; i < e.Parameters.Count; i++)
for (var i = 0; i < args.Parameters.Count; i++)
{
var arg = e.Parameters[i];
var arg = args.Parameters[i];
if (this.config.PlayerWildcardFormat.Contains(arg))
{
e.Handled = true;
args.Handled = true;
foreach (var player in Utils.ActivePlayers)
{
var newargs = e.Parameters.ToList();
var newargs = args.Parameters.ToList();
newargs[i] = player.Name;
TShockAPI.Commands.HandleCommand(player, Utils.ToCommand(e.CommandPrefix, e.CommandName, newargs));
TShockAPI.Commands.HandleCommand(player, Utils.ToCommand(args.CommandPrefix, args.CommandName, newargs));
}
return;
}
Expand Down

0 comments on commit 32284e6

Please sign in to comment.