asd gatya
This commit is contained in:
31
Main.cs
31
Main.cs
@@ -35,6 +35,37 @@ namespace KCM
|
||||
|
||||
public static string PlayerSteamID => SteamUser.GetSteamID().ToString();
|
||||
|
||||
// K&C mod loader entrypoint
|
||||
public void Preload(KCModHelper modHelper)
|
||||
{
|
||||
helper = modHelper;
|
||||
|
||||
try
|
||||
{
|
||||
EnsureNetworking();
|
||||
|
||||
if (harmony == null)
|
||||
harmony = HarmonyInstance.Create("com.kcm.mod");
|
||||
|
||||
harmony.PatchAll(Assembly.GetExecutingAssembly());
|
||||
|
||||
try
|
||||
{
|
||||
new PrefabManager().PreScriptLoad(modHelper);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log("Prefab preload failed");
|
||||
Log(ex);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log("Preload failed");
|
||||
Log(ex);
|
||||
}
|
||||
}
|
||||
|
||||
void Awake()
|
||||
{
|
||||
Log("KCM Awake");
|
||||
|
||||
125
UI/MultiplayerMenuInjector.cs
Normal file
125
UI/MultiplayerMenuInjector.cs
Normal file
@@ -0,0 +1,125 @@
|
||||
using Harmony;
|
||||
using I2.Loc;
|
||||
using Riptide.Demos.Steam.PlayerHosted;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace KCM.UI
|
||||
{
|
||||
[HarmonyPatch(typeof(GameState), "SetNewMode")]
|
||||
public static class MultiplayerMenuInjector
|
||||
{
|
||||
private static bool injected;
|
||||
|
||||
public static void Postfix()
|
||||
{
|
||||
try
|
||||
{
|
||||
EnsureInjected();
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Main.Log("MultiplayerMenuInjector failed");
|
||||
Main.Log(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private static void EnsureInjected()
|
||||
{
|
||||
if (injected)
|
||||
return;
|
||||
|
||||
if (GameState.inst == null || GameState.inst.mainMenuMode == null)
|
||||
return;
|
||||
|
||||
GameObject mainMenuUi = GameState.inst.mainMenuMode.mainMenuUI;
|
||||
if (mainMenuUi == null)
|
||||
return;
|
||||
|
||||
Transform buttonContainer = mainMenuUi.transform.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer");
|
||||
if (buttonContainer == null)
|
||||
return;
|
||||
|
||||
if (buttonContainer.Find("KCM_Multiplayer") != null)
|
||||
{
|
||||
injected = true;
|
||||
return;
|
||||
}
|
||||
|
||||
Button template = mainMenuUi.transform.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/New")?.GetComponent<Button>();
|
||||
if (template == null)
|
||||
return;
|
||||
|
||||
Button button = Object.Instantiate(template, buttonContainer);
|
||||
button.name = "KCM_Multiplayer";
|
||||
|
||||
foreach (Localize loc in button.GetComponentsInChildren<Localize>())
|
||||
Object.Destroy(loc);
|
||||
|
||||
button.onClick = new Button.ButtonClickedEvent();
|
||||
|
||||
TextMeshProUGUI label = button.GetComponentInChildren<TextMeshProUGUI>();
|
||||
if (label != null)
|
||||
label.text = "Multiplayer";
|
||||
|
||||
int insertIndex = template.transform.GetSiblingIndex() + 1;
|
||||
button.transform.SetSiblingIndex(insertIndex);
|
||||
|
||||
button.onClick.AddListener(OpenServerBrowser);
|
||||
|
||||
injected = true;
|
||||
Main.Log("Injected Multiplayer menu button");
|
||||
}
|
||||
|
||||
private static void OpenServerBrowser()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Ensure Steam + lobby manager exist
|
||||
_ = KCMSteamManager.Instance;
|
||||
|
||||
LobbyManager lobbyManager = Object.FindObjectOfType<LobbyManager>();
|
||||
if (lobbyManager == null)
|
||||
{
|
||||
GameObject go = new GameObject("KCM_LobbyManager");
|
||||
Object.DontDestroyOnLoad(go);
|
||||
lobbyManager = go.AddComponent<LobbyManager>();
|
||||
}
|
||||
|
||||
// Ensure prefabs loaded
|
||||
if (PrefabManager.serverBrowserPrefab == null || PrefabManager.serverLobbyPrefab == null)
|
||||
{
|
||||
if (Main.helper != null)
|
||||
new PrefabManager().PreScriptLoad(Main.helper);
|
||||
}
|
||||
|
||||
// Ensure UI initialized
|
||||
KCM.ServerBrowser browser = Object.FindObjectOfType<KCM.ServerBrowser>();
|
||||
if (browser == null)
|
||||
{
|
||||
GameObject go = new GameObject("KCM_ServerBrowser");
|
||||
Object.DontDestroyOnLoad(go);
|
||||
browser = go.AddComponent<KCM.ServerBrowser>();
|
||||
}
|
||||
|
||||
browser.EnsureUi();
|
||||
|
||||
if (KCM.ServerBrowser.serverLobbyRef != null)
|
||||
KCM.ServerBrowser.serverLobbyRef.SetActive(false);
|
||||
|
||||
if (KCM.ServerBrowser.serverBrowserRef != null)
|
||||
KCM.ServerBrowser.serverBrowserRef.SetActive(true);
|
||||
|
||||
if (GameState.inst != null && GameState.inst.mainMenuMode != null)
|
||||
GameState.inst.mainMenuMode.mainMenuUI.SetActive(false);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Main.Log("Failed opening server browser");
|
||||
Main.Log(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user