Merge branch 'master' of https://github.com/Regalis11/Barotrauma into develop

This commit is contained in:
EvilFactory
2024-03-28 14:26:18 -03:00
271 changed files with 13174 additions and 3021 deletions
@@ -54,7 +54,7 @@ namespace Barotrauma.Networking
private DateTime refreshMasterTimer;
private readonly TimeSpan refreshMasterInterval = new TimeSpan(0, 0, 60);
private bool registeredToMaster;
private bool registeredToSteamMaster;
private DateTime roundStartTime;
@@ -123,7 +123,7 @@ namespace Barotrauma.Networking
public NetworkConnection OwnerConnection { get; private set; }
private readonly Option<int> ownerKey;
private readonly Option<SteamId> ownerSteamId;
private readonly Option<P2PEndpoint> ownerEndpoint;
public GameServer(
string name,
@@ -135,7 +135,7 @@ namespace Barotrauma.Networking
bool attemptUPnP,
int maxPlayers,
Option<int> ownerKey,
Option<SteamId> ownerSteamId)
Option<P2PEndpoint> ownerEndpoint)
{
if (name.Length > NetConfig.ServerNameMaxLength)
{
@@ -153,7 +153,7 @@ namespace Barotrauma.Networking
this.ownerKey = ownerKey;
this.ownerSteamId = ownerSteamId;
this.ownerEndpoint = ownerEndpoint;
entityEventManager = new ServerEntityEventManager(this);
}
@@ -168,16 +168,18 @@ namespace Barotrauma.Networking
OnInitializationComplete,
GameMain.Instance.CloseServer,
OnOwnerDetermined);
if (ownerSteamId.TryUnwrap(out var steamId))
if (ownerEndpoint.TryUnwrap(out var endpoint))
{
Log("Using SteamP2P networking.", ServerLog.MessageType.ServerMessage);
serverPeer = new SteamP2PServerPeer(steamId, ownerKey.Fallback(0), ServerSettings, callbacks);
Log("Using P2P networking.", ServerLog.MessageType.ServerMessage);
serverPeer = new P2PServerPeer(endpoint, ownerKey.Fallback(0), ServerSettings, callbacks);
}
else
{
Log("Using Lidgren networking. Manual port forwarding may be required. If players cannot connect to the server, you may want to use the in-game hosting menu (which uses SteamP2P networking and does not require port forwarding).", ServerLog.MessageType.ServerMessage);
Log("Using Lidgren networking. Manual port forwarding may be required. If players cannot connect to the server, you may want to use the in-game hosting menu (which uses Steamworks and EOS networking and does not require port forwarding).", ServerLog.MessageType.ServerMessage);
serverPeer = new LidgrenServerPeer(ownerKey, ServerSettings, callbacks);
registeredToSteamMaster = SteamManager.CreateServer(this, ServerSettings.IsPublic);
Eos.EosSessionManager.UpdateOwnedSession(Option.None, ServerSettings);
}
FileSender = new FileSender(serverPeer, MsgConstants.MTU);
@@ -190,15 +192,7 @@ namespace Barotrauma.Networking
VoipServer = new VoipServer(serverPeer);
if (serverPeer is LidgrenServerPeer)
{
#if USE_STEAM
registeredToMaster = SteamManager.CreateServer(this, ServerSettings.IsPublic);
#endif
}
GameMain.LuaCs.Initialize();
Log("Server started", ServerLog.MessageType.ServerMessage);
GameMain.NetLobbyScreen.Select();
@@ -658,20 +652,23 @@ namespace Barotrauma.Networking
updateTimer = DateTime.Now + UpdateInterval;
}
if (registeredToMaster && (DateTime.Now > refreshMasterTimer || ServerSettings.ServerDetailsChanged))
if (DateTime.Now > refreshMasterTimer || ServerSettings.ServerDetailsChanged)
{
if (GameSettings.CurrentConfig.UseSteamMatchmaking)
if (registeredToSteamMaster)
{
bool refreshSuccessful = SteamManager.RefreshServerDetails(this);
if (GameSettings.CurrentConfig.VerboseLogging)
{
Log(refreshSuccessful ?
"Refreshed server info on the server list." :
"Refreshing server info on the server list failed.", ServerLog.MessageType.ServerMessage);
"Refreshed server info on the Steam server list." :
"Refreshing server info on the Steam server list failed.", ServerLog.MessageType.ServerMessage);
}
}
refreshMasterTimer = DateTime.Now + refreshMasterInterval;
Eos.EosSessionManager.UpdateOwnedSession(Option.None, ServerSettings);
ServerSettings.ServerDetailsChanged = false;
refreshMasterTimer = DateTime.Now + refreshMasterInterval;
}
}
@@ -3082,8 +3079,6 @@ namespace Barotrauma.Networking
client.WaitForNextRoundRespawn = null;
client.InGame = false;
if (client.AccountId.TryUnwrap<SteamId>(out var steamId)) { SteamManager.StopAuthSession(steamId); }
var previousPlayer = previousPlayers.Find(p => p.MatchesClient(client));
if (previousPlayer == null)
{
@@ -3416,7 +3411,7 @@ namespace Barotrauma.Networking
msg.WriteByte((byte)ServerPacketHeader.FILE_TRANSFER);
msg.WriteByte((byte)FileTransferMessageType.Cancel);
msg.WriteByte((byte)transfer.ID);
serverPeer.Send(msg, transfer.Connection, DeliveryMethod.ReliableOrdered);
serverPeer.Send(msg, transfer.Connection, DeliveryMethod.Reliable);
}
public void UpdateVoteStatus(bool checkActiveVote = true)
@@ -3602,13 +3597,13 @@ namespace Barotrauma.Networking
}
}
public void IncrementStat(Character character, Identifier achievementIdentifier, int amount)
public void IncrementStat(Character character, AchievementStat stat, int amount)
{
foreach (Client client in connectedClients)
{
if (client.Character == character)
{
IncrementStat(client, achievementIdentifier, amount);
IncrementStat(client, stat, amount);
return;
}
}
@@ -3622,19 +3617,17 @@ namespace Barotrauma.Networking
IWriteMessage msg = new WriteOnlyMessage();
msg.WriteByte((byte)ServerPacketHeader.ACHIEVEMENT);
msg.WriteIdentifier(achievementIdentifier);
msg.WriteInt32(0);
serverPeer.Send(msg, client.Connection, DeliveryMethod.Reliable);
}
public void IncrementStat(Client client, Identifier achievementIdentifier, int amount)
public void IncrementStat(Client client, AchievementStat stat, int amount)
{
if (client.GivenAchievements.Contains(achievementIdentifier)) { return; }
IWriteMessage msg = new WriteOnlyMessage();
msg.WriteByte((byte)ServerPacketHeader.ACHIEVEMENT);
msg.WriteIdentifier(achievementIdentifier);
msg.WriteInt32(amount);
msg.WriteByte((byte)ServerPacketHeader.ACHIEVEMENT_STAT);
INetSerializableStruct incrementedStat = new NetIncrementedStat(stat, amount);
incrementedStat.Write(msg);
serverPeer.Send(msg, client.Connection, DeliveryMethod.Reliable);
}
@@ -3642,7 +3635,7 @@ namespace Barotrauma.Networking
public void SendTraitorMessage(WriteOnlyMessage msg, Client client)
{
if (client == null) { return; };
serverPeer.Send(msg, client.Connection, DeliveryMethod.ReliableOrdered);
serverPeer.Send(msg, client.Connection, DeliveryMethod.Reliable);
}
public void UpdateCheatsEnabled()