r2mods/ilspy_dump/ror2_csproj/RoR2/SteamworksInviteManager.cs

156 lines
4.3 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using System;
using System.Globalization;
using Facepunch.Steamworks;
using JetBrains.Annotations;
using RoR2.Networking;
using UnityEngine;
namespace RoR2;
internal static class SteamworksInviteManager
{
private const string rpConnect = "connect";
private const string rpStatus = "status";
private static void SetKeyValue([NotNull] string key, [CanBeNull] string value)
{
Client.Instance.User.SetRichPresence(key, value);
}
private static void OnNetworkStart()
{
string text = null;
PlatformID platformID = PlatformID.nil;
PlatformID platformID2 = PlatformID.nil;
string[] commandLineArgs = Environment.GetCommandLineArgs();
for (int i = 0; i < commandLineArgs.Length - 1; i++)
{
switch (commandLineArgs[i].ToLower(CultureInfo.InvariantCulture))
{
case "+connect":
{
if (AddressPortPair.TryParse(commandLineArgs[i + 1], out var addressPortPair))
{
text = addressPortPair.address + ":" + addressPortPair.port;
}
break;
}
case "+connect_steamworks_p2p":
{
if (PlatformID.TryParse(commandLineArgs[i + 1], out var result2))
{
platformID = result2;
}
break;
}
case "+steam_lobby_join":
{
if (PlatformID.TryParse(commandLineArgs[i + 1], out var result))
{
platformID2 = result;
}
break;
}
}
}
if (platformID2 != PlatformID.nil)
{
Console.instance.SubmitCmd(null, "steam_lobby_join " + platformID2.value);
}
else if (platformID != PlatformID.nil)
{
Console.instance.SubmitCmd(null, "connect_steamworks_p2p " + platformID.value);
}
else if (text != null)
{
Console.instance.SubmitCmd(null, "connect " + text);
}
}
private static void OnLobbyChanged()
{
if (PlatformSystems.lobbyManager.isInLobby)
{
SetKeyValue("connect", "+steam_lobby_join " + PlatformSystems.lobbyManager.GetLobbyID());
}
else
{
SetKeyValue("connect", null);
}
}
private static void OnInvitedToGame(SteamFriend steamFriend, string connectString)
{
Debug.LogFormat("OnGameRichPresenceJoinRequested connectString=\"{0}\" steamFriend=\"{1}\"", connectString, steamFriend.Name);
string[] array = connectString.Split(' ');
if (array.Length < 2)
{
return;
}
if (array[0] == "+connect_steamworks_p2p" && PlatformID.TryParse(array[1], out var result))
{
if (!PlatformSystems.lobbyManager.ownsLobby)
{
PlatformSystems.lobbyManager.LeaveLobby();
}
QuitConfirmationHelper.IssueQuitCommand(null, "connect_steamworks_p2p " + result.value);
}
if (!(array[0] == "+steam_lobby_join"))
{
return;
}
if (!(PlatformSystems.lobbyManager as PCLobbyManager).CheckLobbyIdValidity(array[1]))
{
if (PlatformSystems.ShouldUseEpicOnlineSystems)
{
PCLobbyManager.ShowEnableCrossPlayPopup(isLobbyCrossplay: false);
}
else
{
PCLobbyManager.ShowEnableCrossPlayPopup(isLobbyCrossplay: true);
}
return;
}
bool shouldUseEpicOnlineSystems = PlatformSystems.ShouldUseEpicOnlineSystems;
if (PlatformID.TryParse(array[1], out var result2) || shouldUseEpicOnlineSystems)
{
if (!PlatformSystems.lobbyManager.ownsLobby)
{
PlatformSystems.lobbyManager.LeaveLobby();
}
string text = (shouldUseEpicOnlineSystems ? array[1] : result2.value.ToString());
QuitConfirmationHelper.IssueQuitCommand(null, "steam_lobby_join " + text);
}
}
private static void OnGameServerChangeRequested(string address, string password)
{
Debug.LogFormat("OnGameServerChangeRequested address=\"{0}\"", address);
if (!PlatformSystems.lobbyManager.ownsLobby)
{
PlatformSystems.lobbyManager.LeaveLobby();
}
string consoleCmd = $"cl_password \"{Util.EscapeQuotes(password)}\"; connect \"{Util.EscapeQuotes(address)}\"";
QuitConfirmationHelper.IssueQuitCommand(null, consoleCmd);
}
private static void SetupCallbacks()
{
NetworkManagerSystem.onStartGlobal += OnNetworkStart;
LobbyManager lobbyManager = PlatformSystems.lobbyManager;
lobbyManager.onLobbyChanged = (Action)Delegate.Combine(lobbyManager.onLobbyChanged, new Action(OnLobbyChanged));
if (Client.Instance != null)
{
Client.Instance.Friends.OnInvitedToGame += OnInvitedToGame;
Client.Instance.Friends.OnGameServerChangeRequested = OnGameServerChangeRequested;
}
}
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void Init()
{
SteamworksClientManager.onLoaded += SetupCallbacks;
}
}