From e2740b6a36251b0e65393c20aedb430a1c572ab1 Mon Sep 17 00:00:00 2001 From: Cai <13110818005@qq.com> Date: Wed, 28 Jan 2026 17:48:26 +0800 Subject: [PATCH] sync --- TShockAPI/GetDataHandlers.cs | 29 ++++-- TShockAPI/NetItem.cs | 4 +- TShockAPI/PlayerData.cs | 195 ++++++++--------------------------- 3 files changed, 63 insertions(+), 165 deletions(-) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 2d5d7f00..bbc4727e 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -2589,12 +2589,12 @@ namespace TShockAPI if (OnPlayerSlot(args.Player, args.Data, plr, slot, stack, prefix, type) || plr != args.Player.Index || slot < 0 || slot > NetItem.MaxInventory) return true; - if (args.Player.IgnoreSSCPackets) - { - TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerSlot rejected ignore ssc packets")); - args.Player.SendData(PacketTypes.PlayerSlot, "", args.Player.Index, slot, prefix); - return true; - } + // if (args.Player.IgnoreSSCPackets) + // { + // TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerSlot rejected ignore ssc packets")); + // args.Player.SendData(PacketTypes.PlayerSlot, "", args.Player.Index, slot, prefix); + // return true; + // } // Garabage? Or will it cause some internal initialization or whatever? var item = new Item(); @@ -3855,12 +3855,18 @@ namespace TShockAPI private static bool HandleTeleport(GetDataHandlerArgs args) { + return false; BitsByte flag = (BitsByte)args.Data.ReadByte(); short id = args.Data.ReadInt16(); - var x = args.Data.ReadSingle(); - var y = args.Data.ReadSingle(); + Vector2 position = args.Data.ReadVector2(); byte style = args.Data.ReadInt8(); + Console.WriteLine($"--- Packet 65 Debug ---"); + Console.WriteLine($"Raw BitsByte: {((byte)flag).ToString("X2")} (Hex)"); + Console.WriteLine($"Entity ID: {id}"); + Console.WriteLine($"Position: X:{position.X:F2}, Y:{position.Y:F2}"); + Console.WriteLine($"Style: {style}"); + int type = 0; bool isNPC = type == 1; int extraInfo = -1; @@ -3883,7 +3889,7 @@ namespace TShockAPI extraInfo = args.Data.ReadInt32(); } - if (OnTeleport(args.Player, args.Data, id, flag, x, y, style, extraInfo)) + if (OnTeleport(args.Player, args.Data, id, flag, position.X, position.Y, style, extraInfo)) return true; //Rod of Discord teleport (usually (may be used by modded clients to teleport)) @@ -3920,6 +3926,11 @@ namespace TShockAPI } } + if (type == 3) + { + //TODO + } + return false; } diff --git a/TShockAPI/NetItem.cs b/TShockAPI/NetItem.cs index 70c794de..29852d76 100644 --- a/TShockAPI/NetItem.cs +++ b/TShockAPI/NetItem.cs @@ -257,8 +257,8 @@ namespace TShockAPI throw new ArgumentNullException("str"); string[] comp = str.Split(','); - if (comp.Length != 3) - throw new FormatException("String does not contain three sections."); + if (comp.Length != 4) + throw new FormatException("String does not contain 4 sections."); int netId = Int32.Parse(comp[0]); int stack = Int32.Parse(comp[1]); diff --git a/TShockAPI/PlayerData.cs b/TShockAPI/PlayerData.cs index cba60116..04404ab3 100644 --- a/TShockAPI/PlayerData.cs +++ b/TShockAPI/PlayerData.cs @@ -531,166 +531,47 @@ namespace TShockAPI NetMessage.SendData((int)PacketTypes.SyncLoadout, remoteClient: player.Index, number: player.Index, number2: player.TPlayer.CurrentLoadoutIndex); NetMessage.SendData((int)PacketTypes.SyncLoadout, ignoreClient: player.Index, number: player.Index, number2: player.TPlayer.CurrentLoadoutIndex); - float slot = 0f; - for (int k = 0; k < NetItem.InventorySlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].inventory[k].Name), player.Index, slot, (float)Main.player[player.Index].inventory[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.ArmorSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].armor[k].Name), player.Index, slot, (float)Main.player[player.Index].armor[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.DyeSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].dye[k].Name), player.Index, slot, (float)Main.player[player.Index].dye[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.MiscEquipSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].miscEquips[k].Name), player.Index, slot, (float)Main.player[player.Index].miscEquips[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.MiscDyeSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].miscDyes[k].Name), player.Index, slot, (float)Main.player[player.Index].miscDyes[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.PiggySlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].bank.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank.item[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.SafeSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].bank2.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix); - slot++; - } - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].trashItem.Name), player.Index, slot++, (float)Main.player[player.Index].trashItem.prefix); - for (int k = 0; k < NetItem.ForgeSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].bank3.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank3.item[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.VoidSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].bank4.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank4.item[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutArmorSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[0].Armor[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[0].Armor[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutDyeSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[0].Dye[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[0].Dye[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutArmorSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[1].Armor[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[1].Armor[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutDyeSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[1].Dye[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[1].Dye[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutArmorSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[2].Armor[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[2].Armor[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutDyeSlots; k++) - { - NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[1].Dye[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[2].Dye[k].prefix); - slot++; - } + + for (int index2 = 0; index2 < 59; ++index2) + NetMessage.TrySendData(5, number: player.Index, number2: (float) (PlayerItemSlotID.Inventory0 + index2)); + TrySendingItemArray(player.Index, player.TPlayer.armor, PlayerItemSlotID.Armor0); + TrySendingItemArray(player.Index, player.TPlayer.dye, PlayerItemSlotID.Dye0); + TrySendingItemArray(player.Index, player.TPlayer.miscEquips, PlayerItemSlotID.Misc0); + TrySendingItemArray(player.Index, player.TPlayer.miscDyes, PlayerItemSlotID.MiscDye0); + TrySendingItemArray(player.Index, player.TPlayer.bank.item, PlayerItemSlotID.Bank1_0); + TrySendingItemArray(player.Index, player.TPlayer.bank2.item, PlayerItemSlotID.Bank2_0); + NetMessage.TrySendData(5, number: player.Index, number2: (float) PlayerItemSlotID.TrashItem); + TrySendingItemArray(player.Index, player.TPlayer.bank3.item, PlayerItemSlotID.Bank3_0); + TrySendingItemArray(player.Index, player.TPlayer.bank4.item, PlayerItemSlotID.Bank4_0); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[0].Armor, PlayerItemSlotID.Loadout1_Armor_0); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[0].Dye, PlayerItemSlotID.Loadout1_Dye_0); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[1].Armor, PlayerItemSlotID.Loadout2_Armor_0); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[1].Dye, PlayerItemSlotID.Loadout2_Dye_0); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[2].Armor, PlayerItemSlotID.Loadout3_Armor_0); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[2].Dye, PlayerItemSlotID.Loadout3_Dye_0); NetMessage.SendData(4, -1, -1, NetworkText.FromLiteral(player.Name), player.Index, 0f, 0f, 0f, 0); NetMessage.SendData(42, -1, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0); NetMessage.SendData(16, -1, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0); - slot = 0f; - for (int k = 0; k < NetItem.InventorySlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].inventory[k].Name), player.Index, slot, (float)Main.player[player.Index].inventory[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.ArmorSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].armor[k].Name), player.Index, slot, (float)Main.player[player.Index].armor[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.DyeSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].dye[k].Name), player.Index, slot, (float)Main.player[player.Index].dye[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.MiscEquipSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].miscEquips[k].Name), player.Index, slot, (float)Main.player[player.Index].miscEquips[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.MiscDyeSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].miscDyes[k].Name), player.Index, slot, (float)Main.player[player.Index].miscDyes[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.PiggySlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].bank.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank.item[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.SafeSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].bank2.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix); - slot++; - } - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].trashItem.Name), player.Index, slot++, (float)Main.player[player.Index].trashItem.prefix); - for (int k = 0; k < NetItem.ForgeSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].bank3.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank3.item[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.VoidSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].bank4.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank4.item[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutArmorSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[0].Armor[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[0].Armor[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutDyeSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[0].Dye[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[0].Dye[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutArmorSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[1].Armor[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[1].Armor[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutDyeSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[1].Dye[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[1].Dye[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutArmorSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[2].Armor[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[2].Armor[k].prefix); - slot++; - } - for (int k = 0; k < NetItem.LoadoutDyeSlots; k++) - { - NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].Loadouts[2].Dye[k].Name), player.Index, slot, (float)Main.player[player.Index].Loadouts[2].Dye[k].prefix); - slot++; - } + for (var index2 = 0; index2 < 59; ++index2) + NetMessage.TrySendData(5,remoteClient:player.Index, number: player.Index, number2: (PlayerItemSlotID.Inventory0 + index2)); + TrySendingItemArray(player.Index, player.TPlayer.armor, PlayerItemSlotID.Armor0, player.Index); + TrySendingItemArray(player.Index, player.TPlayer.dye, PlayerItemSlotID.Dye0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.miscEquips, PlayerItemSlotID.Misc0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.miscDyes, PlayerItemSlotID.MiscDye0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.bank.item, PlayerItemSlotID.Bank1_0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.bank2.item, PlayerItemSlotID.Bank2_0,player.Index); + NetMessage.TrySendData(5,remoteClient:player.Index, number: player.Index, number2: PlayerItemSlotID.TrashItem); + TrySendingItemArray(player.Index, player.TPlayer.bank3.item, PlayerItemSlotID.Bank3_0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.bank4.item, PlayerItemSlotID.Bank4_0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[0].Armor, PlayerItemSlotID.Loadout1_Armor_0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[0].Dye, PlayerItemSlotID.Loadout1_Dye_0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[1].Armor, PlayerItemSlotID.Loadout2_Armor_0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[1].Dye, PlayerItemSlotID.Loadout2_Dye_0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[2].Armor, PlayerItemSlotID.Loadout3_Armor_0,player.Index); + TrySendingItemArray(player.Index, player.TPlayer.Loadouts[2].Dye, PlayerItemSlotID.Loadout3_Dye_0,player.Index); @@ -733,5 +614,11 @@ namespace TShockAPI } } } + + public static void TrySendingItemArray(int plr, Item[] array, int slotStartIndex,int remoteClient = -1, int ignoreClient = -1) + { + for (int index = 0; index < array.Length; ++index) + NetMessage.TrySendData(5, number: plr, number2: (float) (slotStartIndex + index)); + } } }