first commit

This commit is contained in:
2025-07-06 00:23:46 +02:00
commit 38f50c8819
1788 changed files with 112878 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
using System;
using System.ComponentModel;
using System.Text;
namespace NitroxModel.MultiplayerSession
{
[Flags]
public enum MultiplayerSessionReservationState
{
RESERVED = 0,
REJECTED = 1 << 0,
[Description("The player name is already in use. Please try again with a different name.")]
UNIQUE_PLAYER_NAME_CONSTRAINT_VIOLATED = 1 << 1,
// These are all intended for future use. Maybe YAGNI, but this is where we should look to expand upon server reservations
[Description("The server is currently at capacity. Please try again later.")]
SERVER_PLAYER_CAPACITY_REACHED = 1 << 2,
[Description("The password that you provided for the server is incorrect.")]
AUTHENTICATION_FAILED = 1 << 3,
[Description("The server is using hardcore gamemode, player is dead.")]
HARDCORE_PLAYER_DEAD = 1 << 4,
[Description("Another user is currently joining the server.")]
ENQUEUED_IN_JOIN_QUEUE = 1 << 5,
[Description("The player name is invalid, It must not contain any space or doubtful characters\n Allowed characters : A-Z a-z 0-9 _ . -\nLength : [3, 25]")]
INCORRECT_USERNAME = 1 << 6
}
public static class MultiplayerSessionReservationStateExtensions
{
public static bool HasStateFlag(this MultiplayerSessionReservationState currentState, MultiplayerSessionReservationState checkedState)
{
return (currentState & checkedState) == checkedState;
}
public static string Describe(this MultiplayerSessionReservationState currentState)
{
StringBuilder descriptionBuilder = new();
foreach (string reservationStateName in Enum.GetNames(typeof(MultiplayerSessionReservationState)))
{
MultiplayerSessionReservationState reservationState = (MultiplayerSessionReservationState)Enum.Parse(typeof(MultiplayerSessionReservationState), reservationStateName);
if (currentState.HasStateFlag(reservationState))
{
DescriptionAttribute descriptionAttribute = reservationState.GetAttribute<DescriptionAttribute>();
if (!string.IsNullOrEmpty(descriptionAttribute?.Description))
{
descriptionBuilder.AppendLine(descriptionAttribute.Description);
}
}
}
return descriptionBuilder.ToString();
}
}
}