Move OnItemDrop to Bouncer
This commit is contained in:
parent
5cdb38675c
commit
82e2ecb662
2 changed files with 91 additions and 59 deletions
|
|
@ -42,6 +42,7 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
// Setup hooks
|
// Setup hooks
|
||||||
|
|
||||||
|
GetDataHandlers.ItemDrop.Register(OnItemDrop);
|
||||||
GetDataHandlers.PlayerBuff.Register(OnPlayerBuff);
|
GetDataHandlers.PlayerBuff.Register(OnPlayerBuff);
|
||||||
GetDataHandlers.ChestItemChange.Register(OnChestItemChange);
|
GetDataHandlers.ChestItemChange.Register(OnChestItemChange);
|
||||||
GetDataHandlers.NPCHome.Register(OnUpdateNPCHome);
|
GetDataHandlers.NPCHome.Register(OnUpdateNPCHome);
|
||||||
|
|
@ -58,6 +59,96 @@ namespace TShockAPI
|
||||||
GetDataHandlers.TileEdit.Register(OnTileEdit);
|
GetDataHandlers.TileEdit.Register(OnTileEdit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Registered when items fall to the ground to prevent cheating.</summary>
|
||||||
|
/// <param name="sender">The object that triggered the event.</param>
|
||||||
|
/// <param name="args">The packet arguments that the event has.</param>
|
||||||
|
internal void OnItemDrop(object sender, GetDataHandlers.ItemDropEventArgs args)
|
||||||
|
{
|
||||||
|
short id = args.ID;
|
||||||
|
Vector2 pos = args.Position;
|
||||||
|
Vector2 vel = args.Velocity;
|
||||||
|
short stacks = args.Stacks;
|
||||||
|
short prefix = args.Prefix;
|
||||||
|
bool noDelay = args.NoDelay;
|
||||||
|
short type = args.Type;
|
||||||
|
|
||||||
|
// player is attempting to crash clients
|
||||||
|
if (type < -48 || type >= Main.maxItemTypes)
|
||||||
|
{
|
||||||
|
// Causes item duplications. Will be re added later if necessary
|
||||||
|
//args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//make sure the prefix is a legit value
|
||||||
|
if (prefix > PrefixID.Count)
|
||||||
|
{
|
||||||
|
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Item removed, let client do this to prevent item duplication
|
||||||
|
// client side (but only if it passed the range check)
|
||||||
|
if (type == 0)
|
||||||
|
{
|
||||||
|
if (TShock.CheckRangePermission(args.Player, (int)(Main.item[id].position.X / 16f), (int)(Main.item[id].position.Y / 16f)))
|
||||||
|
{
|
||||||
|
// Causes item duplications. Will be re added if necessary
|
||||||
|
//args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TShock.CheckRangePermission(args.Player, (int)(pos.X / 16f), (int)(pos.Y / 16f)))
|
||||||
|
{
|
||||||
|
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// stop the client from changing the item type of a drop but
|
||||||
|
// only if the client isn't picking up the item
|
||||||
|
if (Main.item[id].active && Main.item[id].netID != type)
|
||||||
|
{
|
||||||
|
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Item item = new Item();
|
||||||
|
item.netDefaults(type);
|
||||||
|
if ((stacks > item.maxStack || stacks <= 0) || (TShock.Itembans.ItemIsBanned(EnglishLanguage.GetItemNameById(item.type), args.Player) && !args.Player.HasPermission(Permissions.allowdroppingbanneditems)))
|
||||||
|
{
|
||||||
|
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Remove item ban part of this check
|
||||||
|
if ((Main.ServerSideCharacter) && (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond - args.Player.LoginMS < TShock.ServerSideCharacterConfig.LogonDiscardThreshold))
|
||||||
|
{
|
||||||
|
//Player is probably trying to sneak items onto the server in their hands!!!
|
||||||
|
TShock.Log.ConsoleInfo("Player {0} tried to sneak {1} onto the server!", args.Player.Name, item.Name);
|
||||||
|
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TShock.CheckIgnores(args.Player))
|
||||||
|
{
|
||||||
|
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Handles Buff events.</summary>
|
/// <summary>Handles Buff events.</summary>
|
||||||
/// <param name="sender">The object that triggered the event.</param>
|
/// <param name="sender">The object that triggered the event.</param>
|
||||||
/// <param name="args">The packet arguments that the event has.</param>
|
/// <param name="args">The packet arguments that the event has.</param>
|
||||||
|
|
|
||||||
|
|
@ -2540,65 +2540,6 @@ namespace TShockAPI
|
||||||
if (OnItemDrop(args.Player, id, pos, vel, stacks, prefix, noDelay, type))
|
if (OnItemDrop(args.Player, id, pos, vel, stacks, prefix, noDelay, type))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// player is attempting to crash clients
|
|
||||||
if (type < -48 || type >= Main.maxItemTypes)
|
|
||||||
{
|
|
||||||
// Causes item duplications. Will be re added later if necessary
|
|
||||||
//args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prefix > PrefixID.Count) //make sure the prefix is a legit value
|
|
||||||
{
|
|
||||||
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == 0) //Item removed, let client do this to prevent item duplication client side (but only if it passed the range check)
|
|
||||||
{
|
|
||||||
if (TShock.CheckRangePermission(args.Player, (int)(Main.item[id].position.X / 16f), (int)(Main.item[id].position.Y / 16f)))
|
|
||||||
{
|
|
||||||
// Causes item duplications. Will be re added if necessary
|
|
||||||
//args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TShock.CheckRangePermission(args.Player, (int)(pos.X / 16f), (int)(pos.Y / 16f)))
|
|
||||||
{
|
|
||||||
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Main.item[id].active && Main.item[id].netID != type) //stop the client from changing the item type of a drop but only if the client isn't picking up the item
|
|
||||||
{
|
|
||||||
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Item item = new Item();
|
|
||||||
item.netDefaults(type);
|
|
||||||
if ((stacks > item.maxStack || stacks <= 0) || (TShock.Itembans.ItemIsBanned(EnglishLanguage.GetItemNameById(item.type), args.Player) && !args.Player.HasPermission(Permissions.allowdroppingbanneditems)))
|
|
||||||
{
|
|
||||||
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ((Main.ServerSideCharacter) && (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond - args.Player.LoginMS < TShock.ServerSideCharacterConfig.LogonDiscardThreshold))
|
|
||||||
{
|
|
||||||
//Player is probably trying to sneak items onto the server in their hands!!!
|
|
||||||
TShock.Log.ConsoleInfo("Player {0} tried to sneak {1} onto the server!", args.Player.Name, item.Name);
|
|
||||||
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
if (TShock.CheckIgnores(args.Player))
|
|
||||||
{
|
|
||||||
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue