<commit_before>﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FreecraftCore.Serializer;

namespace Booma.Proxy
{
	/// <summary>
	/// Command sent by players to the server when the character is entering an operation
	/// that requires it to freeze or has a start and end part of the operation.
	/// Such as dropping an item, dying or chatting with an NPC.
	/// </summary>
	[WireDataContract]
	[SubCommand60(SubCommand60OperationCode.FreezePlayer)]
	public sealed class Sub60PlayerFreezeCommand : BaseSubCommand60, IMessageContextIdentifiable
	{
		/// <summary>
		/// Enumeration of operation types.
		/// According to Sylverant documentation of 0x60 subcommand packets.
		/// </summary>
		public enum FreezeReason : uint //TODO: Is this uint? There are 2 0 bytes afterwards for the field here but not sure
		{
			/// <summary>
			/// Indicates the operation involves dropping an item.
			/// </summary>
			ItemDrop = 0x0384,

			/// <summary>
			/// 
			/// </summary>
			NPCChat = 0xFFFF,
		}

		//Client ID/Lobbyslot
		/// <inheritdoc />
		[WireMember(1)]
		public byte Identifier { get; }

		//TODO: What is this?
		[WireMember(2)]
		public byte Unknown1 { get; }

		/// <summary>
		/// Indicates reason for the reason for the freeze event.
		/// </summary>
		[WireMember(3)]
		public FreezeReason Reason { get; } //4 bytes, last 2 usually 0x0000 but might not be apart of the enum

		//TODO: Is this really a vector4?

		/// <summary>
		/// The position the player with <see cref="Identifier"/> id is at.
		/// Contains the X and Z component of the position.
		/// </summary>
		[WireMember(4)]
		public Vector2<float> Position { get; }<commit_msg>Remove finished TODO from PlayerFreezeCommand<commit_after>﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FreecraftCore.Serializer;

namespace Booma.Proxy
{
	/// <summary>
	/// Command sent by players to the server when the character is entering an operation
	/// that requires it to freeze or has a start and end part of the operation.
	/// Such as dropping an item, dying or chatting with an NPC.
	/// </summary>
	[WireDataContract]
	[SubCommand60(SubCommand60OperationCode.FreezePlayer)]
	public sealed class Sub60PlayerFreezeCommand : BaseSubCommand60, IMessageContextIdentifiable
	{
		/// <summary>
		/// Enumeration of operation types.
		/// According to Sylverant documentation of 0x60 subcommand packets.
		/// </summary>
		public enum FreezeReason : uint //TODO: Is this uint? There are 2 0 bytes afterwards for the field here but not sure
		{
			/// <summary>
			/// Indicates the operation involves dropping an item.
			/// </summary>
			ItemDrop = 0x0384,

			/// <summary>
			/// 
			/// </summary>
			NPCChat = 0xFFFF,
		}

		//Client ID/Lobbyslot
		/// <inheritdoc />
		[WireMember(1)]
		public byte Identifier { get; }

		//TODO: What is this?
		[WireMember(2)]
		public byte Unknown1 { get; }

		/// <summary>
		/// Indicates reason for the reason for the freeze event.
		/// </summary>
		[WireMember(3)]
		public FreezeReason Reason { get; } //4 bytes, last 2 usually 0x0000 but might not be apart of the enum

		/// <summary>
		/// The position the player with <see cref="Identifier"/> id is at.
		/// Contains the X and Z component of the position.
		/// </summary>
		[WireMember(4)]
		public Vector2<float> Position { get; }
{'fraction_non_alphanumeric': 0.11546272120684653, 'fraction_numerical': 0.018856977081520163, 'mean_word_length': 3.037470725995316, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 33, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5455319', 'n_tokens_mistral': 1161, 'n_tokens_neox': 1014, 'n_words': 384}