From 2c5933d402ce3b92adacf333f0c76b7fd25bdbb7 Mon Sep 17 00:00:00 2001 From: Cai <13110818005@qq.com> Date: Wed, 28 Jan 2026 19:20:20 +0800 Subject: [PATCH] sync --- TShockAPI/GetDataHandlers.cs | 54 ++++++++++++++++++------------------ TShockAPI/PlayerData.cs | 3 +- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index bbc4727e..91967c57 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -867,13 +867,15 @@ namespace TShockAPI /// /// Context of where the player is spawning from. /// + public int Team { get; set; } + public PlayerSpawnContext SpawnContext { get; set; } } /// /// PlayerSpawn - When a player spawns /// public static HandlerList PlayerSpawn = new HandlerList(); - private static bool OnPlayerSpawn(TSPlayer player, MemoryStream data, byte pid, int spawnX, int spawnY, int respawnTimer, int numberOfDeathsPVE, int numberOfDeathsPVP, PlayerSpawnContext spawnContext) + private static bool OnPlayerSpawn(TSPlayer player, MemoryStream data, byte pid, int spawnX, int spawnY, int respawnTimer, int numberOfDeathsPVE, int numberOfDeathsPVP, int team, PlayerSpawnContext spawnContext) { if (PlayerSpawn == null) return false; @@ -888,6 +890,7 @@ namespace TShockAPI RespawnTimer = respawnTimer, NumberOfDeathsPVE = numberOfDeathsPVE, NumberOfDeathsPVP = numberOfDeathsPVP, + Team = team, SpawnContext = spawnContext }; PlayerSpawn.Invoke(null, args); @@ -2725,18 +2728,22 @@ namespace TShockAPI return true; } + + + byte player = args.Data.ReadInt8(); short spawnX = args.Data.ReadInt16(); short spawnY = args.Data.ReadInt16(); int respawnTimer = args.Data.ReadInt32(); short numberOfDeathsPVE = args.Data.ReadInt16(); short numberOfDeathsPVP = args.Data.ReadInt16(); + var team = args.Data.ReadByte(); PlayerSpawnContext context = (PlayerSpawnContext)args.Data.ReadByte(); if (args.Player.State >= (int)ConnectionState.RequestingWorldData && !args.Player.FinishedHandshake) args.Player.FinishedHandshake = true; //If the player has requested world data before sending spawn player, they should be at the obvious ClientRequestedWorldData state. Also only set this once to remove redundant updates. - if (OnPlayerSpawn(args.Player, args.Data, player, spawnX, spawnY, respawnTimer, numberOfDeathsPVE, numberOfDeathsPVP, context)) + if (OnPlayerSpawn(args.Player, args.Data, player, spawnX, spawnY, respawnTimer,numberOfDeathsPVE, numberOfDeathsPVP,team, context)) return true; if (!Main.ServerSideCharacter || context != PlayerSpawnContext.SpawningIntoWorld) @@ -2764,6 +2771,7 @@ namespace TShockAPI args.Player.initialSpawn = true; args.Player.initialServerSpawnX = args.TPlayer.SpawnX; args.Player.initialServerSpawnY = args.TPlayer.SpawnY; + args.Player.TPlayer.dead = false; // initial client spawn point, do not use this to spawn the player // we only use it to detect if the spawnpoint has changed during this session @@ -3466,14 +3474,18 @@ namespace TShockAPI private static bool HandlePlayerBuffList(GetDataHandlerArgs args) { + + + + var id = args.Data.ReadInt8(); if (OnPlayerBuffUpdate(args.Player, args.Data, id)) return true; - - for (int i = 0; i < Terraria.Player.maxBuffs; i++) + int buff; + int buffIndex = 0; + while ((buff = args.Data.ReadUInt16()) > 0) { - var buff = args.Data.ReadUInt16(); if (buff == 10 && TShock.Config.Settings.DisableInvisPvP && args.TPlayer.hostile) buff = 0; @@ -3484,15 +3496,17 @@ namespace TShockAPI buff = 0; } - args.TPlayer.buffType[i] = buff; - if (args.TPlayer.buffType[i] > 0) + args.TPlayer.buffType[buffIndex] = buff; + if (args.TPlayer.buffType[buffIndex] > 0) { - args.TPlayer.buffTime[i] = 60; + args.TPlayer.buffTime[buffIndex] = 60; } else { - args.TPlayer.buffTime[i] = 0; + args.TPlayer.buffTime[buffIndex] = 0; } + + buffIndex++; } TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerBuffList handled event and sent data {0}", args.Player.Name)); @@ -3855,39 +3869,25 @@ namespace TShockAPI private static bool HandleTeleport(GetDataHandlerArgs args) { - return false; BitsByte flag = (BitsByte)args.Data.ReadByte(); short id = args.Data.ReadInt16(); 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; bool getPositionFromTarget = false; if (flag[0]) - { - type = 1; - } + type += 1; if (flag[1]) - { - type = 2; - } + type += 2; if (flag[2]) - { getPositionFromTarget = true; - } if (flag[3]) - { extraInfo = args.Data.ReadInt32(); - } + if (getPositionFromTarget) + position = Main.player[id].position; if (OnTeleport(args.Player, args.Data, id, flag, position.X, position.Y, style, extraInfo)) return true; diff --git a/TShockAPI/PlayerData.cs b/TShockAPI/PlayerData.cs index 04404ab3..de2ba57f 100644 --- a/TShockAPI/PlayerData.cs +++ b/TShockAPI/PlayerData.cs @@ -617,8 +617,9 @@ 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)); + NetMessage.TrySendData(5, number: plr, number2: (float) (slotStartIndex + index),remoteClient: remoteClient, ignoreClient: ignoreClient); } } }