1
1
using HarmonyLib ;
2
2
using System . Collections . Generic ;
3
3
using System . Linq ;
4
- using System ;
5
4
using Mirror ;
6
5
using UnityEngine . SceneManagement ;
7
6
using UnityEngine ;
@@ -39,17 +38,18 @@ private static IEnumerable<CodeInstruction> AddPlayerHook(
39
38
40
39
[ HarmonyPostfix ,
41
40
HarmonyPatch ( typeof ( NetworkServer ) , "AddPlayerForConnection" ,
42
- new Type [ ] { typeof ( NetworkConnectionToClient ) , typeof ( GameObject ) } ) ]
41
+ new System . Type [ ] { typeof ( NetworkConnectionToClient ) , typeof ( GameObject ) } ) ]
43
42
private static void PendingPlayerHook ( NetworkConnectionToClient conn , GameObject player ) {
44
- if ( SceneManager . GetActiveScene ( ) . name != "LobbyMultiplayer" ) {
45
- NetworkRoomManager . PendingPlayer PendingPlayer ;
46
- PendingPlayer . conn = conn ;
47
- PendingPlayer . roomPlayer = player ;
43
+ if ( SceneManager . GetActiveScene ( ) . name == "LobbyMultiplayer" )
44
+ return ;
48
45
49
- MultiplayerRoomManager RoomManager =
50
- ( MultiplayerRoomManager ) NetworkRoomManager . singleton ;
51
- RoomManager . pendingPlayers . Add ( PendingPlayer ) ;
52
- }
46
+ NetworkRoomManager RoomManager = ( NetworkRoomManager ) NetworkRoomManager . singleton ;
47
+ MultiplayerRoomPlayer RoomPlayer = player . GetComponent < MultiplayerRoomPlayer > ( ) ;
48
+ if ( RoomPlayer == null )
49
+ return ;
50
+
51
+ MidroundJoinPlugin . DeleteCharacterOnce [ RoomPlayer . netId ] = true ;
52
+ RoomManager . SceneLoadedForPlayer ( conn , player ) ;
53
53
}
54
54
55
55
[ HarmonyPrefix ,
@@ -60,18 +60,37 @@ private static void FixMovesetEquipmentHook(NetworkConnectionToClient conn,
60
60
roomPlayer . GetComponent < MultiplayerRoomPlayer > ( ) ;
61
61
if ( RoomPlayerComponent . selectedMoveSet != null &&
62
62
( RoomPlayerComponent . selectedEquipment != null &&
63
- RoomPlayerComponent . selectedEquipment . Count > 0 ) ) {
63
+ RoomPlayerComponent . selectedEquipment . Count > 0 ) )
64
64
return ;
65
- }
66
65
67
66
foreach ( MoveSet Set in MoveSetHelpers . MoveSets ) {
68
- MidroundJoinPlugin . Log ! . LogInfo ( Set . name ) ;
69
67
if ( Set . name . Contains ( "Bardiche" ) ) {
70
68
RoomPlayerComponent . selectedMoveSet = Set ;
71
69
RoomPlayerComponent . selectedEquipment = Set . defaultEquipment ;
72
70
break ;
73
71
}
74
72
}
75
73
}
74
+
75
+ [ HarmonyPostfix , HarmonyPatch ( typeof ( PlayerMultiplayerInputManager ) , "Start" ) ]
76
+ private static void FixBrokenCharacterOnMidroundJoin (
77
+ PlayerMultiplayerInputManager __instance , GameObject ___playerCharacter ) {
78
+ if ( __instance . multiplayerRoomPlayer == null )
79
+ return ;
80
+
81
+ NetworkManager NetMan = NetworkManager . singleton ;
82
+ if ( NetMan != null && ( NetMan . mode != NetworkManagerMode . Host &&
83
+ NetMan . mode != NetworkManagerMode . ServerOnly ) )
84
+ return ;
85
+
86
+ if ( ! MidroundJoinPlugin . DeleteCharacterOnce . ContainsKey (
87
+ __instance . multiplayerRoomPlayer . netId ) )
88
+ return ;
89
+
90
+ MidroundJoinPlugin . DeleteCharacterOnce . Remove ( __instance . multiplayerRoomPlayer . netId ) ;
91
+ __instance . HandlePlayerDeath ( ) ;
92
+ Object . Destroy ( ___playerCharacter . transform . Find ( "PlayerModelPhysics" ) . gameObject ) ;
93
+ Object . Destroy ( ___playerCharacter . transform . Find ( "PlayerModelAnimation" ) . gameObject ) ;
94
+ }
76
95
}
77
96
}
0 commit comments