This commit is contained in:
Cai 2026-01-28 17:48:26 +08:00
parent 6159b35e72
commit e2740b6a36
No known key found for this signature in database
GPG key ID: 7D738D40768F4D11
3 changed files with 63 additions and 165 deletions

View file

@ -2589,12 +2589,12 @@ namespace TShockAPI
if (OnPlayerSlot(args.Player, args.Data, plr, slot, stack, prefix, type) || plr != args.Player.Index || slot < 0 || if (OnPlayerSlot(args.Player, args.Data, plr, slot, stack, prefix, type) || plr != args.Player.Index || slot < 0 ||
slot > NetItem.MaxInventory) slot > NetItem.MaxInventory)
return true; return true;
if (args.Player.IgnoreSSCPackets) // if (args.Player.IgnoreSSCPackets)
{ // {
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerSlot rejected ignore ssc packets")); // TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerSlot rejected ignore ssc packets"));
args.Player.SendData(PacketTypes.PlayerSlot, "", args.Player.Index, slot, prefix); // args.Player.SendData(PacketTypes.PlayerSlot, "", args.Player.Index, slot, prefix);
return true; // return true;
} // }
// Garabage? Or will it cause some internal initialization or whatever? // Garabage? Or will it cause some internal initialization or whatever?
var item = new Item(); var item = new Item();
@ -3855,12 +3855,18 @@ namespace TShockAPI
private static bool HandleTeleport(GetDataHandlerArgs args) private static bool HandleTeleport(GetDataHandlerArgs args)
{ {
return false;
BitsByte flag = (BitsByte)args.Data.ReadByte(); BitsByte flag = (BitsByte)args.Data.ReadByte();
short id = args.Data.ReadInt16(); short id = args.Data.ReadInt16();
var x = args.Data.ReadSingle(); Vector2 position = args.Data.ReadVector2();
var y = args.Data.ReadSingle();
byte style = args.Data.ReadInt8(); 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; int type = 0;
bool isNPC = type == 1; bool isNPC = type == 1;
int extraInfo = -1; int extraInfo = -1;
@ -3883,7 +3889,7 @@ namespace TShockAPI
extraInfo = args.Data.ReadInt32(); 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; return true;
//Rod of Discord teleport (usually (may be used by modded clients to teleport)) //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; return false;
} }

View file

@ -257,8 +257,8 @@ namespace TShockAPI
throw new ArgumentNullException("str"); throw new ArgumentNullException("str");
string[] comp = str.Split(','); string[] comp = str.Split(',');
if (comp.Length != 3) if (comp.Length != 4)
throw new FormatException("String does not contain three sections."); throw new FormatException("String does not contain 4 sections.");
int netId = Int32.Parse(comp[0]); int netId = Int32.Parse(comp[0]);
int stack = Int32.Parse(comp[1]); int stack = Int32.Parse(comp[1]);

View file

@ -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, 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); 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++) for (int index2 = 0; index2 < 59; ++index2)
{ NetMessage.TrySendData(5, number: player.Index, number2: (float) (PlayerItemSlotID.Inventory0 + index2));
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); TrySendingItemArray(player.Index, player.TPlayer.armor, PlayerItemSlotID.Armor0);
slot++; TrySendingItemArray(player.Index, player.TPlayer.dye, PlayerItemSlotID.Dye0);
} TrySendingItemArray(player.Index, player.TPlayer.miscEquips, PlayerItemSlotID.Misc0);
for (int k = 0; k < NetItem.ArmorSlots; k++) TrySendingItemArray(player.Index, player.TPlayer.miscDyes, PlayerItemSlotID.MiscDye0);
{ TrySendingItemArray(player.Index, player.TPlayer.bank.item, PlayerItemSlotID.Bank1_0);
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); TrySendingItemArray(player.Index, player.TPlayer.bank2.item, PlayerItemSlotID.Bank2_0);
slot++; NetMessage.TrySendData(5, number: player.Index, number2: (float) PlayerItemSlotID.TrashItem);
} TrySendingItemArray(player.Index, player.TPlayer.bank3.item, PlayerItemSlotID.Bank3_0);
for (int k = 0; k < NetItem.DyeSlots; k++) TrySendingItemArray(player.Index, player.TPlayer.bank4.item, PlayerItemSlotID.Bank4_0);
{ TrySendingItemArray(player.Index, player.TPlayer.Loadouts[0].Armor, PlayerItemSlotID.Loadout1_Armor_0);
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); TrySendingItemArray(player.Index, player.TPlayer.Loadouts[0].Dye, PlayerItemSlotID.Loadout1_Dye_0);
slot++; TrySendingItemArray(player.Index, player.TPlayer.Loadouts[1].Armor, PlayerItemSlotID.Loadout2_Armor_0);
} TrySendingItemArray(player.Index, player.TPlayer.Loadouts[1].Dye, PlayerItemSlotID.Loadout2_Dye_0);
for (int k = 0; k < NetItem.MiscEquipSlots; k++) 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(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++;
}
NetMessage.SendData(4, -1, -1, NetworkText.FromLiteral(player.Name), player.Index, 0f, 0f, 0f, 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(42, -1, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0);
NetMessage.SendData(16, -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 (var index2 = 0; index2 < 59; ++index2)
for (int k = 0; k < NetItem.InventorySlots; k++) NetMessage.TrySendData(5,remoteClient:player.Index, number: player.Index, number2: (PlayerItemSlotID.Inventory0 + index2));
{ TrySendingItemArray(player.Index, player.TPlayer.armor, PlayerItemSlotID.Armor0, player.Index);
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); TrySendingItemArray(player.Index, player.TPlayer.dye, PlayerItemSlotID.Dye0,player.Index);
slot++; TrySendingItemArray(player.Index, player.TPlayer.miscEquips, PlayerItemSlotID.Misc0,player.Index);
} TrySendingItemArray(player.Index, player.TPlayer.miscDyes, PlayerItemSlotID.MiscDye0,player.Index);
for (int k = 0; k < NetItem.ArmorSlots; k++) 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.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); NetMessage.TrySendData(5,remoteClient:player.Index, number: player.Index, number2: PlayerItemSlotID.TrashItem);
slot++; TrySendingItemArray(player.Index, player.TPlayer.bank3.item, PlayerItemSlotID.Bank3_0,player.Index);
} TrySendingItemArray(player.Index, player.TPlayer.bank4.item, PlayerItemSlotID.Bank4_0,player.Index);
for (int k = 0; k < NetItem.DyeSlots; k++) 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);
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); TrySendingItemArray(player.Index, player.TPlayer.Loadouts[1].Armor, PlayerItemSlotID.Loadout2_Armor_0,player.Index);
slot++; 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);
for (int k = 0; k < NetItem.MiscEquipSlots; k++) TrySendingItemArray(player.Index, player.TPlayer.Loadouts[2].Dye, PlayerItemSlotID.Loadout3_Dye_0,player.Index);
{
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++;
}
@ -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));
}
} }
} }