11using HarmonyLib ;
2+ using System . Collections . Generic ;
3+ using System . Linq ;
4+ using System . Reflection . Emit ;
5+ using UnityEngine ;
26
37namespace MultiplayerExtensions . HarmonyPatches
48{
@@ -8,32 +12,83 @@ namespace MultiplayerExtensions.HarmonyPatches
812 [ HarmonyPatch ( typeof ( NetworkConfigSO ) , "masterServerEndPoint" , MethodType . Getter ) ]
913 internal class GetMasterServerEndPointPatch
1014 {
11- [ HarmonyAfter ( "mod.serverbrowser" ) ]
15+ [ HarmonyAfter ( "mod.serverbrowser" , "com.Python.BeatTogether" ) ]
1216 [ HarmonyPriority ( Priority . Last ) ]
1317 internal static void Postfix ( NetworkConfigSO __instance , ref MasterServerEndPoint __result )
1418 {
15- if ( __result != null )
16- {
17- MasterServerInfo info = new MasterServerInfo ( __result ) ;
18- if ( MPState . CurrentMasterServer . Equals ( info ) )
19- return ;
20- MPState . CurrentMasterServer = info ;
21- MPEvents . RaiseMasterServerChanged ( __instance , info ) ;
22- }
19+ if ( MPState . CurrentMasterServer . Equals ( __result ) )
20+ return ;
21+ MPState . CurrentMasterServer = new MasterServerInfo ( __result . hostName , __result . port , __instance . masterServerStatusUrl ) ;
22+ MPEvents . RaiseMasterServerChanged ( __instance , MPState . CurrentMasterServer ) ;
2323 }
2424 }
2525
26+ /// <summary>
27+ /// For retrieving the currently used Master Server Status URL.
28+ /// </summary>
2629 [ HarmonyPatch ( typeof ( MultiplayerSettingsPanelController ) , "SetLobbyCode" , MethodType . Normal ) ]
2730 internal class SetLobbyCodePatch
28- {
29- [ HarmonyAfter ( "mod.serverbrowser" ) ]
31+ {
32+ [ HarmonyAfter ( "mod.serverbrowser" , "com.Python.BeatTogether" ) ]
3033 [ HarmonyPriority ( Priority . Last ) ]
31- public static void Postfix ( MultiplayerSettingsPanelController __instance , string code )
34+ internal static void Postfix ( MultiplayerSettingsPanelController __instance , string code )
3235 {
3336 if ( code == MPState . LastRoomCode )
3437 return ;
3538 MPState . LastRoomCode = code ;
3639 MPEvents . RaiseRoomCodeChanged ( __instance , code ) ;
3740 }
3841 }
42+
43+ [ HarmonyPatch ( typeof ( ConnectedPlayerManager ) , "FlushReliableQueue" , MethodType . Normal ) ]
44+ internal class UpdateReliableFrequencyPatch
45+ {
46+ private static float nextTime = 0f ;
47+ private static float frequency = 0.1f ;
48+
49+ internal static bool Prefix ( )
50+ {
51+ if ( Time . time > nextTime )
52+ {
53+ nextTime = Time . time + frequency ;
54+ return true ;
55+ }
56+ return false ;
57+ }
58+ }
59+
60+ [ HarmonyPatch ( typeof ( ConnectedPlayerManager ) , "FlushUnreliableQueue" , MethodType . Normal ) ]
61+ internal class UpdateUnreliableFrequencyPatch
62+ {
63+ private static float nextTime = 0f ;
64+ private static float frequency = 0.1f ;
65+
66+ internal static bool Prefix ( )
67+ {
68+ if ( Time . time > nextTime )
69+ {
70+ nextTime = Time . time + frequency ;
71+ return true ;
72+ }
73+ return false ;
74+ }
75+ }
76+
77+ //Make this work with harmony manager
78+ [ HarmonyPatch ( typeof ( ConnectedPlayerManager ) , "SendUnreliable" , MethodType . Normal ) ]
79+ internal class RemoveByteLimitPatch
80+ {
81+ internal static IEnumerable < CodeInstruction > Transpiler ( IEnumerable < CodeInstruction > instructions )
82+ {
83+ var codes = instructions . ToList ( ) ;
84+ for ( int i = 0 ; i < codes . Count ; i ++ )
85+ {
86+ if ( codes [ i ] . opcode == OpCodes . Ble_S )
87+ {
88+ codes [ i ] = new CodeInstruction ( OpCodes . Br_S , codes [ i ] . operand ) ;
89+ }
90+ }
91+ return codes . AsEnumerable ( ) ;
92+ }
93+ }
3994}
0 commit comments