void OnInventoryItemReceived(ref HookContext ctx, ref HookArgs.InventoryItemReceived args) { #if TDSMSever if (Server.ItemRejections.Count > 0) { if (args.Item != null) { if (Server.ItemRejections.Contains(args.Item.name) || Server.ItemRejections.Contains(args.Item.type.ToString())) { if (!String.IsNullOrEmpty(args.Item.name)) { ctx.SetKick(args.Item.name + " is not allowed on this server."); } else { ctx.SetKick("Item type " + args.Item.type.ToString() + " is not allowed on this server."); } } } } #endif }
public override void Process(int whoAmI, byte[] readBuffer, int length, int num) { int playerIndex = readBuffer[num++]; if (playerIndex != whoAmI) { NetPlay.slots[whoAmI].Kick("Cheating detected (INVENTORY_DATA forgery)."); return; } var player = Main.players[whoAmI]; var ctx = new HookContext { Connection = NetPlay.slots[whoAmI].conn, Sender = player, Player = player, }; var args = new HookArgs.InventoryItemReceived { InventorySlot = readBuffer[num++], Amount = readBuffer[num++], Prefix = readBuffer[num++], NetID = BitConverter.ToInt16(readBuffer, num), //Name = Networking.StringCache.FindOrMake (new ArraySegment<Byte> (readBuffer, num, length - 4)), }; HookPoints.InventoryItemReceived.Invoke(ref ctx, ref args); if (ctx.CheckForKick()) { return; } if (ctx.Result == HookResult.IGNORE) { return; } var itemName = args.Name; var inventorySlot = args.InventorySlot; var stack = args.Amount; //if (args.NetID < 0) return; // FIXME var item = Item.netDefaults(args.NetID); item.SetPrefix(args.Prefix); item.Stack = stack; if (inventorySlot < Player.MAX_INVENTORY) { player.inventory[inventorySlot] = item; } else { player.armor[inventorySlot - Player.MAX_INVENTORY] = item; } if (ctx.Result != HookResult.CONTINUE) { if (Server.RejectedItemsContains(item.Name) || Server.RejectedItemsContains(item.Type.ToString())) { player.Kick(((item.Name.Length > 0) ? item.Name : item.Type.ToString()) + " is not allowed on this server."); } } NetMessage.SendData(5, -1, whoAmI, item.Name, playerIndex, (float)inventorySlot, args.Prefix); }
public override void Process(int whoAmI, byte[] readBuffer, int length, int num) { int playerIndex = ReadByte(readBuffer); if (playerIndex != whoAmI && Entry.EnableCheatProtection) { Terraria.Netplay.Clients[whoAmI].Kick("Cheating detected (INVENTORY_DATA forgery)."); return; } //TODO Implement the item banning if (playerIndex == Main.myPlayer && !Main.ServerSideCharacter) { return; } var player = Main.player[whoAmI]; var ctx = new HookContext { Connection = (Terraria.Netplay.Clients[whoAmI] as ServerSlot).conn, Sender = player, Player = player }; var args = new HookArgs.InventoryItemReceived { InventorySlot = (int)ReadByte(readBuffer), Amount = (int)ReadInt16(readBuffer), Prefix = (int)ReadByte(readBuffer), NetID = (int)ReadInt16(readBuffer), //Name = Networking.StringCache.FindOrMake (new ArraySegment<Byte> (readBuffer, num, length - 4)), }; args.SetItem(); HookPoints.InventoryItemReceived.Invoke(ref ctx, ref args); if (ctx.CheckForKick()) { return; } if (ctx.Result == HookResult.IGNORE) { return; } lock (player) { if (args.InventorySlot < 59) { player.inventory[args.InventorySlot] = new Item(); player.inventory[args.InventorySlot].netDefaults(args.NetID); player.inventory[args.InventorySlot].stack = args.Amount; player.inventory[args.InventorySlot].Prefix(args.Prefix); if (playerIndex == Main.myPlayer && args.InventorySlot == 58) { Main.mouseItem = player.inventory[args.InventorySlot].Clone(); } } else { if (args.InventorySlot >= 75 && args.InventorySlot <= 82) { int num7 = args.InventorySlot - 58 - 17; player.dye[num7] = new Item(); player.dye[num7].netDefaults(args.NetID); player.dye[num7].stack = args.Amount; player.dye[num7].Prefix(args.Prefix); } else { int num8 = args.InventorySlot - 58 - 1; player.armor[num8] = new Item(); player.armor[num8].netDefaults(args.NetID); player.armor[num8].stack = args.Amount; player.armor[num8].Prefix(args.Prefix); } } if (playerIndex == whoAmI) { NewNetMessage.SendData((int)Packet.INVENTORY_DATA, -1, whoAmI, String.Empty, playerIndex, (float)args.InventorySlot, (float)args.Prefix, 0f, 0); } return; } }