using System; using System.Reflection; using BepInEx.Bootstrap; using UnityEngine; using UnityEngine.UI; using FistVR; using RUST.Steamworks; using System.Collections.Generic; namespace TNHQoLImprovements { public class LeaderboardPlayerCount : MonoBehaviour { private bool initialized = false; private bool tnhTweakerInstalled = false; private string curID; private string loadingStr; private TNH_ScoreDisplay scoreDisplay; private Text lblGlobalScores; private GameObject gObjLoading; #region INITIALIZATION public void Init(TNH_ScoreDisplay tnhScore, Text scoreLabel, GameObject gObjLoading) { if (initialized) return; this.scoreDisplay = tnhScore; this.lblGlobalScores = scoreLabel; this.lblGlobalScores.resizeTextForBestFit = true; this.lblGlobalScores.horizontalOverflow = HorizontalWrapMode.Overflow; this.gObjLoading = gObjLoading; loadingStr = gObjLoading.GetComponentInChildren().text; var loadedAssemblies = System.AppDomain.CurrentDomain.GetAssemblies(); if (Array.Exists(loadedAssemblies, x => x.GetName().Name == "TakeAndHoldTweaker")) { tnhTweakerInstalled = true; this.gObjLoading.transform.GetChild(0).GetComponent().text = "Online player count is incompatible with TNHTweaker."; this.gObjLoading.SetActive(true); } initialized = true; } #endregion #region UPDATE private void Update() { if (!initialized || tnhTweakerInstalled) return; string newID = scoreDisplay.m_curSequenceID; if (newID != curID) UpdatePlayerCountDisplay(newID); } private void UpdatePlayerCountDisplay(string id) { try { string playerCountText = Steamworks.SteamUserStats .GetLeaderboardEntryCount(HighScoreManager.Leaderboards[id]) .ToString("N0"); lblGlobalScores.text = "Global Scores: (" + playerCountText + " players)"; curID = id; gObjLoading.SetActive(false); } catch (KeyNotFoundException e) { lblGlobalScores.text = "Global Scores:"; gObjLoading.GetComponentInChildren().text = loadingStr; gObjLoading.SetActive(true); curID = null; } catch (Exception e) { gObjLoading.GetComponentInChildren().text = string.Format("Unknown error occured trying to retrieve online player count.\n\n" + "{0}", e); gObjLoading.SetActive(true); } } } #endregion }