Skip to content
This repository was archived by the owner on Sep 16, 2022. It is now read-only.

Commit 5b4843f

Browse files
committed
New mod: VSeeFace Extension
Settings changes detection Another friend checks Code cleanup
1 parent af8eb07 commit 5b4843f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1110
-310
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Merged set of MelonLoader mods for VRChat.
1010
* [Kinect Tracking Extension (ml_kte)](../../tree/master/ml_kte)
1111
* [Hip Tracker Rotator (ml_htr)](../../tree/master/ml_htr)
1212
* [Panorama Screenshot (ml_ps)](../../tree/master/ml_ps)
13+
* [VSeeFace Extension (ml_vsf)](../../tree/master/ml_vsf)
1314

1415
# Notes
1516
* Usage of mods breaks ToS of VRChat and can lead to ban. Use at your own risk.

ml_abp/InteractedPlayer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ void RebuildParameters()
142142
break;
143143
}
144144
}
145-
if(l_skip) continue;
145+
if(l_skip)
146+
continue;
146147

147148
if(m_useCustomTargets && (l_transforms != null) && (l_param.field_Public_AvatarParameter_0 != null) && l_param.field_Public_AvatarParameter_0.field_Private_String_0.StartsWith("_ProximityTarget"))
148149
{

ml_abp/Main.cs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public override void OnApplicationStart()
3030
if(VRChatUtilityKit.Utilities.VRCUtils.IsUIXPresent)
3131
{
3232
m_menuSettings = UIExpansionKit.API.ExpansionKitApi.CreateCustomQuickMenuPage(UIExpansionKit.API.LayoutDescription.WideSlimList);
33-
((UIExpansionKit.API.ICustomShowableLayoutedMenu)m_menuSettings).AddSimpleButton("Disable bones proximity from everyone in room", this.OnDisableAll);
33+
((UIExpansionKit.API.ICustomShowableLayoutedMenu)m_menuSettings).AddSimpleButton("Disable bones proximity for everyone in room", this.OnDisableAll);
3434
((UIExpansionKit.API.ICustomShowableLayoutedMenu)m_menuSettings).AddSimpleButton("Close", this.OnMenuClose);
3535
UIExpansionKit.API.ExpansionKitApi.GetExpandedMenu(UIExpansionKit.API.ExpandedMenu.QuickMenu).AddSimpleButton("Avatar bones proximity", this.OnMenuShow);
3636
UIExpansionKit.API.ExpansionKitApi.GetExpandedMenu(UIExpansionKit.API.ExpandedMenu.UserQuickMenu).AddSimpleButton("Toggle bones proximity", this.OnProximityToggle, (GameObject p_obj) =>
@@ -55,26 +55,29 @@ public override void OnPreferencesSaved()
5555
{
5656
Settings.ReloadSettings();
5757

58-
if(m_update && (m_localInteracted != null))
58+
if(m_update && (m_localInteracted != null) && Settings.IsAnyEntryUpdated())
5959
{
60-
// Remove or add component on friends
61-
foreach(VRC.Player l_remotePlayer in Utils.GetFriendsInInstance())
60+
if(Settings.IsFriendsEntryUpdated())
6261
{
63-
InteracterPlayer l_component = l_remotePlayer.GetComponent<InteracterPlayer>();
64-
if(l_component != null)
62+
// Remove or add component on friends
63+
foreach(VRC.Player l_remotePlayer in Utils.GetFriendsInInstance())
6564
{
66-
if(!Settings.AllowFriends)
65+
InteracterPlayer l_component = l_remotePlayer.GetComponent<InteracterPlayer>();
66+
if(l_component != null)
6767
{
68-
m_localInteracted.RemoveInteracter(l_component);
69-
Object.Destroy(l_component);
68+
if(!Settings.AllowFriends)
69+
{
70+
m_localInteracted.RemoveInteracter(l_component);
71+
Object.Destroy(l_component);
72+
}
7073
}
71-
}
72-
else
73-
{
74-
if(Settings.AllowFriends)
74+
else
7575
{
76-
l_component = l_remotePlayer.gameObject.AddComponent<InteracterPlayer>();
77-
m_localInteracted.AddInteracter(l_component);
76+
if(Settings.AllowFriends)
77+
{
78+
l_component = l_remotePlayer.gameObject.AddComponent<InteracterPlayer>();
79+
m_localInteracted.AddInteracter(l_component);
80+
}
7881
}
7982
}
8083
}

ml_abp/MethodsResolver.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ public static void ResolveMethods()
3333
// VRC.Player VRC.PlayerManager.GetPlayer(string userId)
3434
if(ms_getPlayerById == null)
3535
{
36-
var l_methodsList = typeof(VRC.PlayerManager).GetMethods().Where(m =>
37-
m.Name.StartsWith("Method_Public_Static_Player_String_") && (m.ReturnType == typeof(VRC.Player)) && (m.GetParameters().Count() == 1) &&
38-
XrefScanner.UsedBy(m).Where(x => (x.Type == XrefType.Method) && (x.TryResolve()?.DeclaringType == typeof(VRC.Management.ModerationManager))).Any() &&
36+
var l_methodsList = typeof(VRC.PlayerManager).GetMethods().Where(m =>
37+
m.Name.StartsWith("Method_Public_Static_Player_String_") && (m.ReturnType == typeof(VRC.Player)) && (m.GetParameters().Count() == 1) &&
38+
XrefScanner.UsedBy(m).Where(x => (x.Type == XrefType.Method) && (x.TryResolve()?.DeclaringType == typeof(VRC.Management.ModerationManager))).Any() &&
3939
XrefScanner.UsedBy(m).Where(x => (x.Type == XrefType.Method) && (x.TryResolve()?.DeclaringType == typeof(VRC.UI.PageUserInfo))).Any()
4040
);
4141

ml_abp/Properties/AssemblyInfo.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
using System.Reflection;
22

33
[assembly: AssemblyTitle("AvatarBonesProximity")]
4-
[assembly: AssemblyVersion("1.2.13")]
5-
[assembly: AssemblyFileVersion("1.2.13")]
4+
[assembly: AssemblyVersion("1.3.0")]
5+
[assembly: AssemblyFileVersion("1.3.0")]
66

7-
[assembly: MelonLoader.MelonInfo(typeof(ml_abp.AvatarBonesProximity), "AvatarBonesProximity", "1.2.13", "SDraw", "https://github.com/SDraw/ml_mods")]
7+
[assembly: MelonLoader.MelonInfo(typeof(ml_abp.AvatarBonesProximity), "AvatarBonesProximity", "1.3.0", "SDraw", "https://github.com/SDraw/ml_mods")]
88
[assembly: MelonLoader.MelonGame("VRChat", "VRChat")]
99
[assembly: MelonLoader.MelonAdditionalDependencies("VRChatUtilityKit", "UIExpansionKit")]
1010
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]

ml_abp/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ MelonLoader mod for VRChat that brings additional avatar parameters for proximit
55
* Install [latest MelonLoader](https://github.com/LavaGang/MelonLoader)
66
* Install [latest UIExpansionKit](https://github.com/knah/VRCMods)
77
* Install [latest VRChatUtilityKit](https://github.com/SleepyVRC/Mods)
8-
* Get [latest release DLL](../../../releases/latest)
9-
* Put `ml_abp.dll` in `Mods` folder of game
8+
* Get [latest release DLL](../../../releases/latest):
9+
* Put `ml_abp.dll` in `Mods` folder of game
1010

1111
# Usage
1212
## Settings

ml_abp/Settings.cs

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
{
33
static class Settings
44
{
5+
static MelonLoader.MelonPreferences_Entry<bool> ms_friendsEntry = null;
6+
7+
static bool ms_settingsUpdated = false;
8+
static bool ms_setingsUpdatedFriends = false; // Separated because components aren't that cheap
9+
510
static bool ms_allowFriends = true;
611
static float ms_proximityDistance = 0.25f;
712
static float ms_playersDistance = 5f;
@@ -10,17 +15,21 @@ static class Settings
1015
public static void LoadSettings()
1116
{
1217
MelonLoader.MelonPreferences.CreateCategory("ABP", "Avatar Bones Proximity");
13-
MelonLoader.MelonPreferences.CreateEntry("ABP", "AllowFriends", true, "Allow proximity check for friends");
14-
MelonLoader.MelonPreferences.CreateEntry("ABP", "ProximityDistance", 0.25f, "Proximity distance to bones");
15-
MelonLoader.MelonPreferences.CreateEntry("ABP", "PlayersDistance", 5f, "Proximity distance to players");
16-
MelonLoader.MelonPreferences.CreateEntry("ABP", "CustomTargets", ms_customTargets, "Use custom proximity targets (avatar reload required)");
18+
19+
ms_friendsEntry = MelonLoader.MelonPreferences.CreateEntry("ABP", "AllowFriends", true, "Allow proximity check for friends");
20+
ms_friendsEntry.OnValueChanged += OnAnyEntryUpdate;
21+
ms_friendsEntry.OnValueChanged += OnFriendsEntryUpdate;
22+
23+
MelonLoader.MelonPreferences.CreateEntry("ABP", "ProximityDistance", 0.25f, "Proximity distance to bones").OnValueChanged += OnAnyEntryUpdate;
24+
MelonLoader.MelonPreferences.CreateEntry("ABP", "PlayersDistance", 5f, "Proximity distance to players").OnValueChanged += OnAnyEntryUpdate;
25+
MelonLoader.MelonPreferences.CreateEntry("ABP", "CustomTargets", ms_customTargets, "Use custom proximity targets (avatar reload required)").OnValueChanged += OnAnyEntryUpdate;
1726

1827
ReloadSettings();
1928
}
2029

2130
public static void ReloadSettings()
2231
{
23-
ms_allowFriends = MelonLoader.MelonPreferences.GetEntryValue<bool>("ABP", "AllowFriends");
32+
ms_allowFriends = ms_friendsEntry.Value;
2433

2534
ms_proximityDistance = UnityEngine.Mathf.Clamp(MelonLoader.MelonPreferences.GetEntryValue<float>("ABP", "ProximityDistance"), 0.000001f, float.MaxValue);
2635
MelonLoader.MelonPreferences.SetEntryValue("ABP", "ProximityDistance", ms_proximityDistance);
@@ -29,6 +38,22 @@ public static void ReloadSettings()
2938
ms_customTargets = MelonLoader.MelonPreferences.GetEntryValue<bool>("ABP", "CustomTargets");
3039
}
3140

41+
static void OnAnyEntryUpdate<T>(T p_oldValue, T p_newValue) => ms_settingsUpdated = true;
42+
public static bool IsAnyEntryUpdated()
43+
{
44+
bool l_result = ms_settingsUpdated;
45+
ms_settingsUpdated = false;
46+
return l_result;
47+
}
48+
49+
static void OnFriendsEntryUpdate(bool p_oldValue, bool p_newValue) => ms_setingsUpdatedFriends = true;
50+
public static bool IsFriendsEntryUpdated()
51+
{
52+
bool l_result = ms_setingsUpdatedFriends;
53+
ms_setingsUpdatedFriends = false;
54+
return l_result;
55+
}
56+
3257
public static bool AllowFriends
3358
{
3459
get => ms_allowFriends;

ml_abp/Utils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static bool IsFriend(VRC.Player p_player)
3030
{
3131
bool l_result = false;
3232
if(p_player.field_Private_APIUser_0 != null)
33-
l_result = p_player.field_Private_APIUser_0.isFriend;
33+
l_result = VRC.Core.APIUser.IsFriendsWith(p_player.field_Private_APIUser_0.id);
3434
if(p_player.field_Private_VRCPlayerApi_0 != null)
3535
l_result = (l_result && !p_player.field_Private_VRCPlayerApi_0.isLocal);
3636
return l_result;

ml_abp/ml_abp.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@
110110
<HintPath>F:\games\Steam\steamapps\common\VRChat\MelonLoader\Managed\VRCSDK3A.dll</HintPath>
111111
<Private>False</Private>
112112
</Reference>
113-
<Reference Include="VRCSDKBase, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
113+
<Reference Include="VRCSDKBase, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
114+
<SpecificVersion>False</SpecificVersion>
114115
<Private>False</Private>
115116
</Reference>
116117
</ItemGroup>

ml_alg/Main.cs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,26 +64,29 @@ public override void OnPreferencesSaved()
6464
{
6565
Settings.ReloadSettings();
6666

67-
if(m_update && (m_localLiftedPlayer != null))
67+
if(m_update && (m_localLiftedPlayer != null) && Settings.IsAnyEntryUpdated())
6868
{
69-
// Remove or add component on friends
70-
foreach(VRC.Player l_remotePlayer in Utils.GetFriendsInInstance())
69+
if(Settings.IsFriendsEntryUpdated())
7170
{
72-
LifterPlayer l_component = l_remotePlayer.GetComponent<LifterPlayer>();
73-
if(l_component != null)
71+
// Remove or add component on friends
72+
foreach(VRC.Player l_remotePlayer in Utils.GetFriendsInInstance())
7473
{
75-
if(!Settings.AllowFriends)
74+
LifterPlayer l_component = l_remotePlayer.GetComponent<LifterPlayer>();
75+
if(l_component != null)
7676
{
77-
m_localLiftedPlayer.UnassignRemoteLifter(l_component);
78-
Object.Destroy(l_component);
77+
if(!Settings.AllowFriends)
78+
{
79+
m_localLiftedPlayer.UnassignRemoteLifter(l_component);
80+
Object.Destroy(l_component);
81+
}
7982
}
80-
}
81-
else
82-
{
83-
if(Settings.AllowFriends)
83+
else
8484
{
85-
l_component = l_remotePlayer.gameObject.AddComponent<LifterPlayer>();
86-
l_component.AddLifted(m_localLiftedPlayer);
85+
if(Settings.AllowFriends)
86+
{
87+
l_component = l_remotePlayer.gameObject.AddComponent<LifterPlayer>();
88+
l_component.AddLifted(m_localLiftedPlayer);
89+
}
8790
}
8891
}
8992
}

0 commit comments

Comments
 (0)