first commit
This commit is contained in:
107
NitroxServer/GameLogic/Players/PersistedPlayerData.cs
Normal file
107
NitroxServer/GameLogic/Players/PersistedPlayerData.cs
Normal 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())
|
||||
};
|
||||
}
|
||||
}
|
25
NitroxServer/GameLogic/Players/PlayerData.cs
Normal file
25
NitroxServer/GameLogic/Players/PlayerData.cs
Normal 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 };
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user