/// <inheritdoc />
 /// <summary>
 /// </summary>
 public void OnPeersDisconnected(string[] participantIds)
 {
     foreach (var participantId in participantIds)
     {
         OnPlayerLeft?.Invoke(participantId);
     }
 }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        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));
                }
            }
        }
Exemple #4
0
        /// <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);
            }
        }
Exemple #5
0
    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);
        }
    }
Exemple #6
0
        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();
 }
Exemple #8
0
 public void OnPlayerDestroyed(IPlayerDestroyedEvent evt)
 {
     OnPlayerLeft?.Invoke(evt);
 }