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,107 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using NitroxModel.DataStructures;
using NitroxModel.DataStructures.GameLogic;
using NitroxModel.DataStructures.Unity;
using NitroxModel.DataStructures.Util;
using NitroxModel.Server;
namespace NitroxServer.GameLogic.Players;
[DataContract]
public class PersistedPlayerData
{
[DataMember(Order = 1)]
public string Name { get; set; }
[DataMember(Order = 2)]
public List<NitroxTechType> UsedItems { get; set; } = [];
[DataMember(Order = 3)]
public Optional<NitroxId>[] QuickSlotsBindingIds { get; set; } = [];
[DataMember(Order = 4)]
public Dictionary<string, NitroxId> EquippedItems { get; set; } = [];
[DataMember(Order = 5)]
public ushort Id { get; set; }
[DataMember(Order = 6)]
public NitroxVector3 SpawnPosition { get; set; }
[DataMember(Order = 7)]
public NitroxQuaternion SpawnRotation { get; set; }
[DataMember(Order = 8)]
public PlayerStatsData CurrentStats { get; set; }
[DataMember(Order = 9)]
public NitroxGameMode GameMode { get; set; }
[DataMember(Order = 10)]
public NitroxId SubRootId { get; set; }
[DataMember(Order = 11)]
public Perms Permissions { get; set; }
[DataMember(Order = 12)]
public NitroxId NitroxId { get; set; }
[DataMember(Order = 13)]
public bool IsPermaDeath { get; set; }
/// <summary>
/// Those goals are unlocked individually (e.g. opening PDA, eating, picking up a fire extinguisher for the first time)
/// </summary>
[DataMember(Order = 15)]
public Dictionary<string, float> PersonalCompletedGoalsWithTimestamp { get; set; } = [];
[DataMember(Order = 16)]
public SubnauticaPlayerPreferences PlayerPreferences { get; set; }
public Player ToPlayer()
{
return new Player(Id,
Name,
IsPermaDeath,
null, //no connection/context as this player is not connected.
null,
SpawnPosition,
SpawnRotation,
NitroxId,
Optional.OfNullable(SubRootId),
Permissions,
CurrentStats,
GameMode,
UsedItems,
QuickSlotsBindingIds,
EquippedItems,
PersonalCompletedGoalsWithTimestamp,
PlayerPreferences.PingPreferences,
PlayerPreferences.PinnedTechTypes);
}
public static PersistedPlayerData FromPlayer(Player player)
{
return new PersistedPlayerData
{
Name = player.Name,
UsedItems = player.UsedItems?.ToList(),
QuickSlotsBindingIds = player.QuickSlotsBindingIds,
EquippedItems = new(player.EquippedItems),
Id = player.Id,
SpawnPosition = player.Position,
SpawnRotation = player.Rotation,
CurrentStats = player.Stats,
GameMode = player.GameMode,
SubRootId = player.SubRootId.OrNull(),
Permissions = player.Permissions,
NitroxId = player.GameObjectId,
IsPermaDeath = player.IsPermaDeath,
PersonalCompletedGoalsWithTimestamp = new(player.PersonalCompletedGoalsWithTimestamp),
PlayerPreferences = new(player.PingInstancePreferences.ToDictionary(m => m.Key, m => m.Value), player.PinnedRecipePreferences.ToList())
};
}
}

View File

@@ -0,0 +1,25 @@
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
namespace NitroxServer.GameLogic.Players
{
[DataContract]
public class PlayerData
{
[DataMember(Order = 1)]
public List<PersistedPlayerData> Players = [];
public List<Player> GetPlayers()
{
return Players.Select(playerData => playerData.ToPlayer()).ToList();
}
public static PlayerData From(IEnumerable<Player> players)
{
List<PersistedPlayerData> persistedPlayers = players.Select(PersistedPlayerData.FromPlayer).ToList();
return new PlayerData { Players = persistedPlayers };
}
}
}