public override void Process(ClientConnection conn, byte[] readBuffer, int length, int num) { if (conn.State == SlotState.ACCEPTED) { SlotManager.Schedule(conn, conn.DesiredQueue); return; } int whoAmI = conn.SlotIndex; if (Terraria.Netplay.Clients[whoAmI].State() == SlotState.ASSIGNING_SLOT) { Terraria.Netplay.Clients[whoAmI].SetState(SlotState.SENDING_WORLD); } var ctx = new HookContext() { Connection = conn, Player = conn.Player }; var args = new HookArgs.WorldRequestMessage() { SpawnX = Main.spawnTileX, SpawnY = Main.spawnTileY }; HookPoints.WorldRequestMessage.Invoke(ref ctx, ref args); //NewNetMessage.SendData(7, whoAmI); var msg = NewNetMessage.PrepareThreadInstance(); msg.WorldData(args.SpawnX, args.SpawnY); msg.Send(whoAmI); }
void OnWorldRequest(ref HookContext ctx, ref HookArgs.WorldRequestMessage args) { var player = ctx.Player; if (properties.RememberPlayerPositions && player != null && !String.IsNullOrEmpty(player.AuthenticatedAs)) { Vector2 pos; if (SpawnPositions.TryGetValue(player.AuthenticatedAs, out pos)) { args.SpawnX = (int)pos.X; args.SpawnY = (int)pos.Y; } } }