Skip to content

Commit dc6aa45

Browse files
authored
Fix gamemode transmission while joining a game (SubnauticaNitrox#1175)
* Fix GameMode transmission while joining a game * minor
1 parent 31f1e49 commit dc6aa45

12 files changed

Lines changed: 51 additions & 67 deletions

File tree

NitroxClient/GameLogic/InitialSync/PlayerInitialSyncProcessor.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
using System;
2-
using System.Collections;
1+
using System.Collections;
32
using NitroxClient.Communication.Abstract;
43
using NitroxClient.GameLogic.InitialSync.Base;
54
using NitroxClient.MonoBehaviours;
65
using NitroxModel.DataStructures;
76
using NitroxModel.DataStructures.GameLogic;
87
using NitroxModel.Logger;
98
using NitroxModel.Packets;
9+
using NitroxModel.Server;
1010
using UnityEngine;
1111

1212
namespace NitroxClient.GameLogic.InitialSync
@@ -36,15 +36,15 @@ public override IEnumerator Process(InitialPlayerSync packet, WaitScreen.ManualW
3636
waitScreenItem.SetProgress(0.75f);
3737
yield return null;
3838

39-
SetPlayerGameMode((GameModeOption)Enum.Parse(typeof(GameModeOption), packet.GameMode));
39+
SetPlayerGameMode(packet.GameMode);
4040
waitScreenItem.SetProgress(1f);
4141
yield return null;
4242
}
4343

4444
private void SetPlayerGameObjectId(NitroxId id)
4545
{
4646
NitroxEntity.SetNewId(Player.mainObject, id);
47-
Log.Info("Received initial sync Player GameObject Id: " + id);
47+
Log.Info($"Received initial sync player GameObject Id: {id}");
4848
}
4949

5050
private void AddStartingItemsToPlayer(bool firstTimeConnecting)
@@ -81,10 +81,10 @@ private void SetPlayerStats(PlayerStatsData statsData)
8181
}
8282
}
8383

84-
private void SetPlayerGameMode(GameModeOption gameMode)
84+
private void SetPlayerGameMode(ServerGameMode gameMode)
8585
{
86-
Log.Info("Recieved initial sync packet with game mode " + gameMode);
87-
GameModeUtils.SetGameMode(gameMode, GameModeOption.None);
86+
Log.Info($"Received initial sync packet with gamemode {gameMode}");
87+
GameModeUtils.SetGameMode((GameModeOption)(int)gameMode, GameModeOption.None);
8888
}
8989
}
9090
}

NitroxModel/Packets/InitialPlayerSync.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using NitroxModel.DataStructures;
55
using NitroxModel.DataStructures.GameLogic;
66
using NitroxModel.DataStructures.Util;
7+
using NitroxModel.Server;
78

89
namespace NitroxModel.Packets
910
{
@@ -27,7 +28,7 @@ public class InitialPlayerSync : Packet, IShortString
2728
public PlayerStatsData PlayerStatsData { get; }
2829
public List<InitialRemotePlayerData> RemotePlayerData { get; }
2930
public List<Entity> GlobalRootEntities { get; }
30-
public string GameMode { get; }
31+
public ServerGameMode GameMode { get; }
3132
public Perms Permissions { get; }
3233

3334
public InitialPlayerSync(NitroxId playerGameObjectId,
@@ -47,7 +48,7 @@ public InitialPlayerSync(NitroxId playerGameObjectId,
4748
PlayerStatsData playerStatsData,
4849
IEnumerable<InitialRemotePlayerData> remotePlayerData,
4950
IEnumerable<Entity> globalRootEntities,
50-
string gameMode,
51+
ServerGameMode gameMode,
5152
Perms perms)
5253
{
5354
EscapePodsData = escapePodsData.ToList();
@@ -73,15 +74,12 @@ public InitialPlayerSync(NitroxId playerGameObjectId,
7374

7475
public override string ToString()
7576
{
76-
return "[InitialPlayerSync - EquippedItems: " + EquippedItems + " BasePieces: " + BasePieces + " Vehicles: " + Vehicles + " InventoryItems: " + InventoryItems + " PDAData: " + PDAData + " StoryGoalData: " + StoryGoalData + "]";
77+
return $"[InitialPlayerSync - GameMode: {GameMode}, EquippedItems: {EquippedItems} BasePieces: {BasePieces} Vehicles: {Vehicles} InventoryItems: {InventoryItems} PDAData: {PDAData} StoryGoalData: {StoryGoalData}]";
7778
}
7879

7980
public string ToShortString()
8081
{
81-
return $"Equipped items count: {EquippedItems.Count}\n" +
82-
$"Base pieces count: {BasePieces.Count}\n" +
83-
$"Vehicles count: {Vehicles.Count}\n" +
84-
$"Inventory items count: {InventoryItems.Count}";
82+
return $"Equipped items count: {EquippedItems.Count}\n, Base pieces count: {BasePieces.Count}\n, Vehicles count: {Vehicles.Count}\n, Inventory items count: {InventoryItems.Count}";
8583
}
8684
}
8785
}

NitroxModel/Server/ServerConfig.cs

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ namespace NitroxModel.Server
77
{
88
public class ServerConfig
99
{
10+
private readonly ServerConfigItem<ServerGameMode> gameModeSetting;
1011
private readonly ServerConfigItem<bool> disableConsoleSetting, disableAutoSaveSetting;
1112
private readonly ServerConfigItem<int> portSetting, saveIntervalSetting, maxConnectionsSetting;
12-
private readonly ServerConfigItem<string> saveNameSetting, serverPasswordSetting, adminPasswordSetting, gameModeSetting, serverSerializerMode;
13+
private readonly ServerConfigItem<string> saveNameSetting, serverPasswordSetting, adminPasswordSetting, serverSerializerMode;
1314
private readonly ServerConfigItem<float> oxygenSetting, maxOxygenSetting, healthSetting, foodSetting, waterSetting, infectionSetting;
1415

1516
public ServerConfig() : this(
@@ -21,12 +22,12 @@ public ServerConfig() : this(
2122
savename: "world",
2223
serverpassword: string.Empty,
2324
adminpassword: StringHelper.GenerateRandomString(12),
24-
gamemodeSetting: ServerGameMode.SURVIVAL,
25+
gamemode: ServerGameMode.SURVIVAL,
2526
serverserializermode: ServerSerializerMode.PROTOBUF
2627
)
2728
{ }
2829

29-
public ServerConfig(int port, int saveinterval, int maxconnection, bool disableconsole, bool disableautosave, string savename, string serverpassword, string adminpassword, ServerGameMode gamemodeSetting, ServerSerializerMode serverserializermode)
30+
public ServerConfig(int port, int saveinterval, int maxconnection, bool disableconsole, bool disableautosave, string savename, string serverpassword, string adminpassword, ServerGameMode gamemode, ServerSerializerMode serverserializermode)
3031
{
3132
portSetting = new ServerConfigItem<int>("Port", port);
3233
saveIntervalSetting = new ServerConfigItem<int>("SaveInterval", saveinterval);
@@ -36,7 +37,7 @@ public ServerConfig(int port, int saveinterval, int maxconnection, bool disablec
3637
saveNameSetting = new ServerConfigItem<string>("SaveName", savename);
3738
serverPasswordSetting = new ServerConfigItem<string>("ServerPassword", serverpassword);
3839
adminPasswordSetting = new ServerConfigItem<string>("AdminPassword", adminpassword);
39-
gameModeSetting = new ServerConfigItem<string>("GameMode", gamemodeSetting.GetAttribute<DescriptionAttribute>().Description);
40+
gameModeSetting = new ServerConfigItem<ServerGameMode>("GameMode", gamemode);
4041
serverSerializerMode = new ServerConfigItem<string>("ServerSerializerMode", serverserializermode.ToString());
4142

4243
//We don't want to custom those values for now
@@ -159,7 +160,7 @@ public string AdminPassword
159160
}
160161
}
161162

162-
public string GameMode
163+
public ServerGameMode GameModeEnum
163164
{
164165
get
165166
{
@@ -168,20 +169,10 @@ public string GameMode
168169

169170
set
170171
{
171-
Validate.IsFalse(string.IsNullOrWhiteSpace(value), "Gamemode can't be an empty string");
172-
Validate.IsTrue(Enum.IsDefined(typeof(ServerGameMode), value.ToUpper()), "Gamemode doesn't exists");
173172
gameModeSetting.Value = value;
174173
}
175174
}
176175

177-
public ServerGameMode GameModeEnum
178-
{
179-
set
180-
{
181-
GameMode = value.GetAttribute<DescriptionAttribute>().Description.ToString();
182-
}
183-
}
184-
185176
public ServerSerializerMode SerializerModeEnum
186177
{
187178
get
@@ -200,9 +191,6 @@ public ServerSerializerMode SerializerModeEnum
200191
public PlayerStatsData DefaultPlayerStats => new PlayerStatsData(oxygenSetting.Value, maxOxygenSetting.Value, healthSetting.Value, foodSetting.Value, waterSetting.Value, infectionSetting.Value);
201192
#endregion
202193

203-
public bool IsGameMode(string gamemode)
204-
{
205-
return GameMode == gamemode;
206-
}
194+
public bool IsHardcore => GameModeEnum == ServerGameMode.HARDCORE;
207195
}
208196
}

NitroxModel/Server/ServerConfigItem.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,10 @@ public ServerConfigItem(string itemName, T defaultValue)
5656
return;
5757
}
5858

59-
// Enum members are assumed to be Titlecased
59+
// Enum members are assumed to be uppercased
6060
if (typeof(T).IsEnum)
6161
{
62-
text = text.ToLower();
63-
text = char.ToUpper(text[0]) + text.Substring(1);
62+
text = text.ToUpper();
6463
}
6564

6665
value = (T)converter.ConvertFromString(text);
Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
using System.ComponentModel;
2-
3-
namespace NitroxModel.Server
1+
namespace NitroxModel.Server
42
{
53
public enum ServerGameMode
64
{
7-
[Description("Survival")]
85
SURVIVAL = 0,
9-
[Description("Freedom")]
106
FREEDOM = 2,
11-
[Description("Hardcore")]
127
HARDCORE = 257,
13-
[Description("Creative")]
148
CREATIVE = 1790,
159
}
1610
}

NitroxServer-Subnautica/App.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<add key="MaxConnections" value="100" />
55
<add key="Port" value="11000" />
66
<add key="SaveInterval" value="120000" />
7-
<add key="GameMode" value="Survival" />
7+
<add key="GameMode" value="SURVIVAL" />
88
<add key="SaveFileSerializer" value="PROTOBUF" />
99
<add key="DisableConsole" value="false" />
1010
<add key="DisableAutoSave" value="false" />

NitroxServer-Subnautica/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private static void Main(string[] args)
5757
try
5858
{
5959
server = NitroxServiceLocator.LocateService<Server>();
60-
Log.Info($"Loaded save\n{server.SaveSummary}");
60+
6161
if (!server.Start())
6262
{
6363
Log.Error("Unable to start server.");

NitroxServer/Communication/Packets/Processors/PlayerDeathEventProcessor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public PlayerDeathEventProcessor(PlayerManager playerManager, ServerConfig serve
1818

1919
public override void Process(PlayerDeathEvent packet, Player player)
2020
{
21-
if(serverConfig.IsGameMode("Hardcore"))
21+
if(serverConfig.IsHardcore)
2222
{
2323
player.IsPermaDeath = true;
2424
PlayerKicked playerKicked = new PlayerKicked("Permanent death from hardcore mode");

NitroxServer/GameLogic/PlayerManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public MultiplayerSessionReservation ReservePlayerContext(
6666
string playerName = authenticationContext.Username;
6767
Player player;
6868
allPlayersByName.TryGetValue(playerName, out player);
69-
if ((player?.IsPermaDeath == true) && serverConfig.IsGameMode("Hardcore"))
69+
if ((player?.IsPermaDeath == true) && serverConfig.IsHardcore)
7070
{
7171
MultiplayerSessionReservationState rejectedState = MultiplayerSessionReservationState.REJECTED | MultiplayerSessionReservationState.HARDCORE_PLAYER_DEAD;
7272
return new MultiplayerSessionReservation(correlationId, rejectedState);

NitroxServer/Serialization/World/World.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using NitroxServer.GameLogic;
1+
using NitroxModel.Server;
2+
using NitroxServer.GameLogic;
23
using NitroxServer.GameLogic.Bases;
34
using NitroxServer.GameLogic.Entities;
45
using NitroxServer.GameLogic.Entities.Spawning;
@@ -21,6 +22,6 @@ public class World
2122
public VehicleManager VehicleManager { get; set; }
2223
public InventoryManager InventoryManager { get; set; }
2324
public GameData GameData { get; set; }
24-
public string GameMode { get; set; }
25+
public ServerGameMode GameMode { get; set; }
2526
}
2627
}

0 commit comments

Comments
 (0)