/// <inheritdoc /> /// <summary> /// </summary> public void OnPeersDisconnected(string[] participantIds) { foreach (var participantId in participantIds) { OnPlayerLeft?.Invoke(participantId); } }
/// <summary> /// Handles the player left message /// </summary> /// <param name="inMsg">The message to decode</param> private void HandlePlayerLeft(NetIncomingMessage inMsg) { byte playerId = inMsg.ReadByte(); string reason = inMsg.ReadString(); Player left = myKnownPlayers[playerId]; myKnownPlayers[playerId] = null; OnPlayerLeft?.Invoke(this, left, reason); }
public void Update() { List <Player> newPlayers; List <Food> newFood; CheckSurroundingCells(out newPlayers, out newFood); for (int i = 0; i < ContainedPlayers.Count; i++) { Player player = ContainedPlayers[i]; if (!PlayerIsIn(player)) { ContainedPlayers.Remove(player); OnPlayerLeft?.Invoke(this, new PlayerLeftEventArgs(ContainedPlayers, ContainedFood, player.Id)); } } }
/// <summary> /// Handles the player kicked message /// </summary> /// <param name="inMsg">The message to decode</param> private void HandlePlayerKicked(NetIncomingMessage inMsg) { byte playerId = inMsg.ReadByte(); string reason = inMsg.ReadString(); if (playerId != myPlayerId) { OnPlayerKicked?.Invoke(this, myKnownPlayers[playerId], reason); OnPlayerLeft?.Invoke(this, myKnownPlayers[playerId], reason); myKnownPlayers[playerId] = null; } else { myConnectedServer = null; OnKicked?.Invoke(this, reason); } }
private void Client_OnEventAction(EventData photonEvent) { int actorNr = 0; if (photonEvent.Parameters.ContainsKey(ParameterCode.ActorNr)) { actorNr = (int)photonEvent[ParameterCode.ActorNr]; } Player player = null; if (actorNr > 0) { client.CurrentRoom.Players.TryGetValue(actorNr, out player); } switch (photonEvent.Code) { case EventCode.Join: OnPlayerJoined?.Invoke(player.ID); break; case EventCode.Leave: OnPlayerLeft?.Invoke(actorNr); break; } if (photonEvent.Parameters.ContainsKey(ParameterCode.CustomEventContent)) { object data = photonEvent[ParameterCode.CustomEventContent]; if (data is byte[] dataBuffer) { LastReceivedMessageSize = dataBuffer.Length; } OnEventData?.Invoke(photonEvent.Code, player.ID, data); HandleDataEvents(photonEvent.Code, player, data); } }
private static void OnUiManagerInit() { var field0 = NetworkManager.field_Internal_Static_NetworkManager_0.field_Internal_VRCEventDelegate_1_Player_0; var field1 = NetworkManager.field_Internal_Static_NetworkManager_0.field_Internal_VRCEventDelegate_1_Player_1; field0.field_Private_HashSet_1_UnityAction_1_T_0.Add(new Action <Player>((player) => { if (player != null) { OnPlayerJoined?.DelegateSafeInvoke(player); } })); field1.field_Private_HashSet_1_UnityAction_1_T_0.Add(new Action <Player>((player) => { if (player != null) { OnPlayerLeft?.DelegateSafeInvoke(player); } })); VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(APIUser).GetMethod("LocalAddFriend"), null, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnFriend), BindingFlags.NonPublic | BindingFlags.Static))); VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(APIUser).GetMethod("UnfriendUser"), null, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnUnfriend), BindingFlags.NonPublic | BindingFlags.Static))); VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(RoomManager).GetMethod("Method_Public_Static_Boolean_ApiWorld_ApiWorldInstance_String_Int32_0"), null, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnInstanceChange), BindingFlags.NonPublic | BindingFlags.Static))); VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(NetworkManager).GetMethod("OnMasterClientSwitched"), new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnMasterChange), BindingFlags.NonPublic | BindingFlags.Static))); VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(NetworkManager).GetMethod("OnLeftRoom"), new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnRoomLeave), BindingFlags.NonPublic | BindingFlags.Static))); VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(NetworkManager).GetMethod("OnJoinedRoom"), new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnRoomJoin), BindingFlags.NonPublic | BindingFlags.Static))); VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(VRCAvatarManager).GetMethods().First(mb => mb.Name.StartsWith("Method_Private_Boolean_GameObject_String_Single_String_")), null, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnAvatarChange), BindingFlags.NonPublic | BindingFlags.Static))); VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(VRCPlayer).GetMethods().First(mb => mb.Name.StartsWith("Awake")), null, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnPlayerAwake), BindingFlags.NonPublic | BindingFlags.Static))); foreach (MethodInfo method in typeof(ModerationManager).GetMethods().Where(mb => mb.Name.StartsWith("Method_Private_ApiPlayerModeration_String_String_ModerationType_"))) { VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(method, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnPlayerModerationSend1), BindingFlags.NonPublic | BindingFlags.Static))); } foreach (MethodInfo method in typeof(ModerationManager).GetMethods().Where(mb => mb.Name.StartsWith("Method_Private_Void_String_ModerationType_Action_1_ApiPlayerModeration_Action_1_String_"))) { VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(method, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnPlayerModerationSend2), BindingFlags.NonPublic | BindingFlags.Static))); } VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(ModerationManager).GetMethod("Method_Private_Void_String_ModerationType_0"), new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnPlayerModerationRemove), BindingFlags.NonPublic | BindingFlags.Static))); foreach (MethodInfo method in typeof(AvatarLoadingBar).GetMethods().Where(mb => mb.Name.Contains("Method_Public_Void_Single_Int64_"))) { VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(method, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnAvatarDownloadProgress), BindingFlags.NonPublic | BindingFlags.Static))); } VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(typeof(FriendsListManager).GetMethod("Method_Private_Void_String_0"), new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnUnfriend), BindingFlags.NonPublic | BindingFlags.Static))); MethodInfo onSetupFlagsReceivedMethod = typeof(VRCPlayer).GetMethods().First(mi => mi.ReturnType.IsEnum && mi.GetParameters().Length == 1 && mi.GetParameters()[0].ParameterType == typeof(Il2CppSystem.Collections.Hashtable) && XrefUtils.CheckStrings(mi, "Failed to read showSocialRank for {0}")); VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(onSetupFlagsReceivedMethod, null, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnSetupFlagsReceive), BindingFlags.NonPublic | BindingFlags.Static))); foreach (MethodInfo socialRankChangeMethod in typeof(ProfileWingMenu).GetMethods().Where(method => method.Name.StartsWith("Method_Private_Void_Boolean_"))) { VRChatUtilityKitMod.Instance.HarmonyInstance.Patch(socialRankChangeMethod, null, new HarmonyMethod(typeof(NetworkEvents).GetMethod(nameof(OnShowSocialRankChange), BindingFlags.NonPublic | BindingFlags.Static))); } }
/// <summary> /// Processes player leaving the room. /// </summary> public void OnLeftRoom() { //Because we do not know our id anymore. OnPlayerLeft?.Invoke("-1"); OnOpponentDisconnected?.Invoke(); }
public void OnPlayerDestroyed(IPlayerDestroyedEvent evt) { OnPlayerLeft?.Invoke(evt); }