6 Commits

Author SHA1 Message Date
Alex ad286b687d improve docs 2026-07-14 23:54:50 -07:00
Alex d3b8dd9dfb misc 2026-07-14 23:33:40 -07:00
Alex a39667f6c0 remove joke func. that kills the long-deprecated "Leaderboard Player Count" mod; clean up logging 2026-07-14 23:33:05 -07:00
Alex 4d855203f6 chore: update settings.json 2026-07-14 00:23:12 -07:00
Alex e02e25f98a fix unity crashing on start 2026-07-13 22:51:02 -07:00
msk 2f7fe60cd6 add discord contact in the Thunderstore readme 2023-11-13 16:15:45 -08:00
10 changed files with 88 additions and 132 deletions
+5
View File
@@ -0,0 +1,5 @@
{
"recommendations": [
"ms-dotnettools.csdevkit"
]
}
+2 -1
View File
@@ -1,3 +1,4 @@
{
"omnisharp.useModernNet": false
"omnisharp.useModernNet": false,
"dotnet.preferCSharpExtension": true
}
+3 -3
View File
@@ -13,7 +13,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
PackageName: TNH_Quality_of_Life_Improvements
Author: muskit
Version: 1.2.5
Version: 1.2.6
Icon: {fileID: 2800000, guid: af542f3f6d6914f4e96d0326e8b296cc, type: 3}
ReadMe: {fileID: 102900000, guid: efa2d6091ed77bd4b879a74bd81d6cbc, type: 3}
WebsiteURL: https://github.com/muskit/TNH-Quality-of-Life-Improvements
@@ -26,5 +26,5 @@ MonoBehaviour:
ApplyHarmonyPatches: 1
BuildItems:
- {fileID: 11400000, guid: ccaff18373cd99848b344316974e6d46, type: 2}
BuildAction: 2
OutputProfile: C:/Users/Alex/AppData/Roaming/r2modmanPlus-local/H3VR/profiles/dev
BuildAction: 1
OutputProfile: C:/ModsThunderstore/H3VR/profiles/TNH QoL Dev
+55
View File
@@ -0,0 +1,55 @@
## Changelog
1.2.6
* Remove the "Leaderboard Player Count" mod killer
1.2.5
* [TNH] Change initialization approach to cover errors in both Atlas/WurstMod-based maps
1.2.4
* [TNH] Fix errors occurring in Atlas-based maps
* Update MeatKit (now on Unity 5.6.7f1!)
1.2.3
* Added button in wrist menu to toggle HP counter (thanks PutterMyBancakes for the suggestion!)
* [TNH] Made the search time for deprecated Leaderboard mod based on day of year as an input of the sin()
1.2.2
* When aiming around the HP counter, its opacity can now change to a player setting
* Increased size of hide-HP aiming region
* [TNH] Decreased search time for deprecated Leaderboard mod
1.2.1
* [TNH] Changed leaderboard player count message for unavailability with TNHTweaker
**1.2.0**
* HP counter text can now be hidden completely
* Added HP counter fading when pointing a firearm towards it, allowing better visiblity
* Shrunk borders of health counter's background
1.1.3
* [TNH] Fixed wrist stats still trying to look at the camera in the game over area, resulting in weird rotations
1.1.2
* [TNH] Wrist stats can now tilt towards the camera, making it less awkward to read
1.1.1
* Fixed wave counter text not showing up during a hold
**1.1.0**
* [TNH] Added win/lose count on hold counter
* [TNH] Added enemy waves counter (substitutes token counter during hold if enabled)
* [TNH] Added token numerical representation to shop
* [TNH] Extra info from this mod now shows in game over
* Added expiration indicators to Health Crystals
* Health readability now applies outside of Take and Hold
1.0.1
* Fixed the in-play improvements only applying to Classic Hallways map (whoops!!)
* Added option to enable/disable showing player count of online leaderboards
* Added option to enable/disable HP text opacity/shadow change
* (Surprisingly, the HP text normally doesn't have full opacity)
* Searching for the deprecated TNH Leaderboards Player Count mod to kill now stops after 120s
**1.0.0**
* Initial release!
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 59291b514bf8a814690c9d4b60f494ce
timeCreated: 1784097793
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
+3 -39
View File
@@ -70,11 +70,6 @@ public static AssetBundle bundle;
// Take and Hold modifications
private static InPlay playInstance;
// Searching for old leaderboards player count mod to disable
private float lpcSearchTime;
private bool lpcStopSearching = false;
private float lpcModSearchTimeEnd;
public static FVRHealthBar hpDisplay;
// toggle HP visibility from wrist menu
@@ -91,7 +86,7 @@ public static AssetBundle bundle;
private IEnumerator SceneChangedCoroutine()
{
Destroy(playInstance);
for (int i = 0; i < 11; ++i)
for (int i = 1; i <= 10; ++i)
{
// TNH patches
if (GameObject.Find("_GameManager") != null || FindObjectOfType<TNH_Manager>() != null)
@@ -101,11 +96,8 @@ public static AssetBundle bundle;
playerCamera = GameObject.FindGameObjectWithTag("MainCamera");
break;
}
else
{
Logger.LogInfo(String.Format("Couldn't find a TNH game. Trying again...({0}/10)", i+1));
yield return new WaitForEndOfFrame();
}
// Logger.LogInfo(String.Format("Couldn't find a TNH game. Checking again...({0}/10)", i));
yield return new WaitForEndOfFrame();
}
if (playInstance == null)
@@ -162,7 +154,6 @@ public static AssetBundle bundle;
public MeatKitPlugin(): base()
{
harmony = new Harmony("muskit.TNHQualityOfLifeImprovements");
lpcSearchTime = 30f + 30f * Mathf.Sin(System.DateTime.Today.DayOfYear / 365f); // lolz
}
// You are free to edit this method, however please ensure LoadAssets is still called somewhere inside it.
@@ -245,9 +236,6 @@ public static AssetBundle bundle;
HealthExpireIndicationType.Flashing,
"Add a visual indication on the Health Crystal's despawn timer.");
// calculate end time to search for my deprecated Leaderboard
lpcModSearchTimeEnd = Time.time + lpcSearchTime;
wmbHPToggle = new WristMenuButton("Toggle HP Display", ToggleHPVisibility);
RunPatches();
@@ -296,30 +284,6 @@ public static AssetBundle bundle;
hpDisplay.gameObject.SetActive(hpDisplayEnabled);
}
/// <summary>
/// Its only purpose: to kill the deprecated TNH Leaderboard Player Count mod.
/// </summary>
private void Update()
{
if (lpcStopSearching)
return;
foreach (var plugin in Chainloader.PluginInfos)
{
if (plugin.Key == "me.muskit.tnhLeaderboardPlayerCount")
{
Logger.LogWarning("TNH Leaderboard Player Count mod detected. Destroying it to avoid interference.");
Destroy(plugin.Value.Instance);
lpcStopSearching = true;
}
}
if (Time.realtimeSinceStartup >= lpcModSearchTimeEnd)
{
Logger.LogInfo(string.Format("Stopping search for TNH Leaderboard Player Count mod after {0} seconds.", lpcSearchTime));
lpcStopSearching = true;
}
}
// DO NOT CHANGE OR REMOVE THIS METHOD. It's contents will be overwritten when building your package.
private void LoadAssets()
+7 -59
View File
@@ -2,7 +2,7 @@
Ever got frustrated checking your HP against a bright ceiling in TNH?
Have you forgotten how many Holds you're playing for, so you don't know if you should spend all your tokens?
And... wait, which hold are you on again?
**This mod adds quality of life improvements to the *Take and Hold* experience that help with these questions, and then some.**
**This mod adds quality of life improvements to the *Take and Hold* experience by addressing various little issues such as these.**
## Features
* Health counter toggle
@@ -10,68 +10,16 @@ And... wait, which hold are you on again?
* Health counter fade/hide when aiming around it
* Token, hold, and wave counter on radar hand
* Player count for online leaderboards; see how you stack up!
* Disabled if [*TakeAndHoldTweaker*](https://h3vr.thunderstore.io/package/devyndamonster/TakeAndHoldTweaker/) is installed
* Doesn't work with [*TakeAndHoldTweaker*](https://h3vr.thunderstore.io/package/devyndamonster/TakeAndHoldTweaker/)
* Numerical representation of tokens at item stations
* Expiration indication for health crystals (configurable to multiple types)
* ...and possibly more!
Toggle and customize these features in your mod manager's *Config editor*.
Toggle and customize these features in your mod manager's *Config editor* or *Wrist Menu > Mod Panel* in-game.
**This mod will not disqualify you from Steam or TNHTweaker leaderboards.**
**Unless *Take and Hold* has an anti-modding mechanism, this mod SHOULD NOT disqualify you from Steam or TNHTweaker leaderboards.**
For any issues/ideas, please create an issue at the GitHub repository (linked on Thunderstore page).
If you have any issues, please contact me on Discord (@muskit) by DM'ing or pinging me in one of the modding servers.
You can also create an issue ticket at the [GitHub repository](https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements).
## Changelog
1.2.5
* [TNH] Change initialization approach to cover errors in both Atlas/WurstMod-based maps
1.2.4
* [TNH] Fix errors occurring in Atlas-based maps
* Update MeatKit (now on Unity 5.6.7f1!)
1.2.3
* Added button in wrist menu to toggle HP counter (thanks PutterMyBancakes for the suggestion!)
* [TNH] Made the search time for deprecated Leaderboard mod based on day of year as an input of the sin()
1.2.2
* When aiming around the HP counter, its opacity can now change to a player setting
* Increased size of hide-HP aiming region
* [TNH] Decreased search time for deprecated Leaderboard mod
1.2.1
* [TNH] Changed leaderboard player count message for unavailability with TNHTweaker
**1.2.0**
* HP counter text can now be hidden completely
* Added HP counter fading when pointing a firearm towards it, allowing better visiblity
* Shrunk borders of health counter's background
1.1.3
* [TNH] Fixed wrist stats still trying to look at the camera in the game over area, resulting in weird rotations
1.1.2
* [TNH] Wrist stats can now tilt towards the camera, making it less awkward to read
1.1.1
* Fixed wave counter text not showing up during a hold
**1.1.0**
* [TNH] Added win/lose count on hold counter
* [TNH] Added enemy waves counter (substitutes token counter during hold if enabled)
* [TNH] Added token numerical representation to shop
* [TNH] Extra info from this mod now shows in game over
* Added expiration indicators to Health Crystals
* Health readability now applies outside of Take and Hold
1.0.1
* Fixed the in-play improvements only applying to Classic Hallways map (whoops!!)
* Added option to enable/disable showing player count of online leaderboards
* Added option to enable/disable HP text opacity/shadow change
* (Surprisingly, the HP text normally doesn't have full opacity)
* Searching for the deprecated TNH Leaderboards Player Count mod to kill now stops after 120s
**1.0.0**
* Initial release!
**NOTE: [*TNH Leaderboard Player Count*](https://h3vr.thunderstore.io/package/muskit/TNH_Leaderboard_Player_Count/) has been merged with this mod. If installed, please remove that mod as it lacks features and is no longer supported.**
**NOTE: [*TNH Leaderboard Player Count*](https://h3vr.thunderstore.io/package/muskit/TNH_Leaderboard_Player_Count/) has been merged with this mod. If for some ungodly reason you have it installed (delisted in 2022), please uninstall that as it WILL conflict with this mod.**
+3 -16
View File
@@ -1,6 +1,5 @@
using System;
using System.Reflection;
using BepInEx.Bootstrap;
using UnityEngine;
using UnityEngine.UI;
using FistVR;
@@ -15,26 +14,21 @@ namespace TNHQoLImprovements
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)
public void Init(TNH_ScoreDisplay tnhScore, Text scoreLabel)
{
if (initialized)
return;
// don't run with TNHTweaker installed
this.gObjLoading = gObjLoading;
var loadedAssemblies = System.AppDomain.CurrentDomain.GetAssemblies();
if (Array.Exists<Assembly>(loadedAssemblies, x => x.GetName().Name == "TakeAndHoldTweaker"))
{
tnhTweakerInstalled = true;
this.gObjLoading.transform.GetChild(0).GetComponent<Text>().text = "<color=lightblue><size=30>Online leaderboards player count unavailable for TNHTweaker.</size></color>";
this.gObjLoading.SetActive(true);
return;
}
@@ -42,9 +36,6 @@ namespace TNHQoLImprovements
this.lblGlobalScores = scoreLabel;
this.lblGlobalScores.resizeTextForBestFit = true;
this.lblGlobalScores.horizontalOverflow = HorizontalWrapMode.Overflow;
loadingStr = gObjLoading.GetComponentInChildren<Text>().text;
initialized = true;
}
@@ -71,20 +62,16 @@ namespace TNHQoLImprovements
lblGlobalScores.text = "Global Scores: <color=lightblue>(" + playerCountText + " players)</color>";
curID = id;
gObjLoading.SetActive(false);
}
catch (KeyNotFoundException e)
{
lblGlobalScores.text = "Global Scores:";
gObjLoading.GetComponentInChildren<Text>().text = loadingStr;
gObjLoading.SetActive(true);
curID = null;
}
catch (Exception e)
{
gObjLoading.GetComponentInChildren<Text>().text = string.Format("<color=lightblue><size=30>Unknown error occured trying to retrieve online player count.</size></color>\n" +
"<color=red>{0}</color>", e);
gObjLoading.SetActive(true);
MeatKitPlugin.Logger.LogWarning("Unknown error occurred trying to retrieve online player count.");
MeatKitPlugin.Logger.LogWarning(e);
}
}
}
+1 -13
View File
@@ -8,7 +8,6 @@ namespace TNHQoLImprovements
{
public static class LeaderboardPlayerCountPatch
{
private static GameObject gObjLoading;
private static Text uiGlobalText;
public static void Patch(Harmony harmony)
@@ -22,29 +21,18 @@ namespace TNHQoLImprovements
public static void Setup(TNH_ScoreDisplay __instance)
{
GameObject gObjLeaderboard = null;
gObjLoading = GameObject.Instantiate(MeatKitPlugin.bundle.LoadAsset<GameObject>("PlayerCount_LoadingText"));
if (__instance.gameObject.name == "_MainMenu") // lobby
{
gObjLeaderboard = __instance.transform.GetChild(3).gameObject; // MainMenuCanvas_RightFar
gObjLoading.transform.SetParent(gObjLeaderboard.transform, false);
gObjLoading.GetComponent<RectTransform>().pivot = new Vector2(0, 1);
gObjLoading.transform.localPosition = new Vector3(520, 380, 0);
gObjLoading.transform.GetChild(0).GetComponent<Text>().alignment = TextAnchor.UpperLeft;
}
if (__instance.gameObject.name == "_FinalScoreDisplay(Clone)") // game over room
{
gObjLeaderboard = __instance.transform.GetChild(0).gameObject; // ScoreCanvas_PastScores
gObjLoading.transform.SetParent(gObjLeaderboard.transform, false);
gObjLoading.GetComponent<RectTransform>().pivot = new Vector2(1, 1);
gObjLoading.transform.localPosition = new Vector3(-520, 380, 0);
gObjLoading.transform.GetChild(0).GetComponent<Text>().alignment = TextAnchor.UpperRight;
}
uiGlobalText = gObjLeaderboard.transform.GetChild(0).GetChild(2).GetComponent<Text>();
gObjLoading.transform.rotation = gObjLeaderboard.transform.rotation;
gObjLoading.transform.GetChild(0).GetComponent<Text>().font = uiGlobalText.font;
var playerCountComponent = gObjLeaderboard.AddComponent<LeaderboardPlayerCount>();
playerCountComponent.Init(__instance, uiGlobalText, gObjLoading);
playerCountComponent.Init(__instance, uiGlobalText);
}
}
}
+1 -1
View File
@@ -238,7 +238,7 @@ PlayerSettings:
m_BuildTargetGraphicsAPIs: []
m_BuildTargetVRSettings:
- m_BuildTarget: Standalone
m_Enabled: 1
m_Enabled: 0
m_Devices:
- Oculus
- OpenVR