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);
        }
Beispiel #2
0
        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;
                }
            }
        }