Exemplo n.º 1
0
        public static void CheckAccessType(ApiWorldInstance.AccessType accessType)
        {
            switch (accessType)
            {
            case ApiWorldInstance.AccessType.Public:
                SetCloning(PublicCloningSetting.Value);
                break;

            case ApiWorldInstance.AccessType.FriendsOfGuests:
                SetCloning(FriendsPlusCloningSetting.Value);
                break;

            case ApiWorldInstance.AccessType.FriendsOnly:
                SetCloning(FriendsCloningSetting.Value);
                break;

            case ApiWorldInstance.AccessType.InvitePlus:
                SetCloning(InvitePlusCloningSetting.Value);
                break;

            case ApiWorldInstance.AccessType.InviteOnly:
                SetCloning(InviteCloningSetting.Value);
                break;
            }
        }
Exemplo n.º 2
0
 public static void OnInstanceChange(ApiWorldInstance __1)
 {
     if (__1 != null)
     {
         currentAccessType = __1.InstanceType;
     }
 }
Exemplo n.º 3
0
 private IEnumerable <ApiWorldInstance> GetViableInstances(string forUserId, List <string> instanceIdsToIgnore = null, bool excludePublicInstances = false, bool includePublicInstancesOnly = false)
 {
     if (instanceIdsToIgnore == null)
     {
         instanceIdsToIgnore = new List <string>();
     }
     if (worldInstances != null)
     {
         List <ApiWorldInstance> list = new List <ApiWorldInstance>();
         for (int i = 0; i < worldInstances.Count; i++)
         {
             ApiWorldInstance apiWorldInstance = worldInstances[i];
             int num = Mathf.Min(capacity, Mathf.Max(6, Mathf.FloorToInt((float)capacity * 0.66f)));
             ApiWorldInstance.AccessType accessType = apiWorldInstance.GetAccessType();
             string instanceCreator = apiWorldInstance.GetInstanceCreator();
             bool   flag            = accessType == ApiWorldInstance.AccessType.Public || accessType == ApiWorldInstance.AccessType.FriendsOfGuests;
             if (apiWorldInstance.count < capacity && apiWorldInstance.count < num && !instanceIdsToIgnore.Contains(apiWorldInstance.idWithTags) && !instanceIdsToIgnore.Contains(apiWorldInstance.idOnly) && accessType != ApiWorldInstance.AccessType.InviteOnly && accessType != ApiWorldInstance.AccessType.InvitePlus && (flag || !includePublicInstancesOnly) && (!excludePublicInstances || !flag) && (accessType != ApiWorldInstance.AccessType.FriendsOnly || APIUser.IsFriendsWith(instanceCreator)) && (accessType != ApiWorldInstance.AccessType.FriendsOfGuests || (instanceCreator != null && !(instanceCreator != forUserId))))
             {
                 list.Add(apiWorldInstance);
             }
         }
         return(from instance in list
                orderby instance.count descending
                select instance);
     }
     return(new ApiWorldInstance[0]);
 }
Exemplo n.º 4
0
 public static string GetAccessName(ApiWorldInstance.AccessType accessType)
 {
     return(accessType switch
     {
         ApiWorldInstance.AccessType.Public => "Public",
         ApiWorldInstance.AccessType.FriendsOfGuests => "Friends+",
         ApiWorldInstance.AccessType.FriendsOnly => "Friends Only",
         ApiWorldInstance.AccessType.InviteOnly => "Invite Only",
         ApiWorldInstance.AccessType.InvitePlus => "Invite+",
         ApiWorldInstance.AccessType.Counter => "Coun... wait wut?",
         _ => throw new ArgumentOutOfRangeException(nameof(accessType), accessType, "what the f**k happened?")
     });
Exemplo n.º 5
0
        public static void HandleInvite(Notification notification)
        {
            currentNotification = notification;
            worldId             = notification.details["worldId"].ToString().Split(':')[0];

            // hmm it gets sent but it's not included when accepting an invite.....
            if (notification.details.ContainsKey("instanceId"))
            {
                string[] instanceIdDetails = notification.details["instanceId"].ToString().Split(':');
                instanceIdWithTags = instanceIdDetails.Length > 0 ? instanceIdDetails[1] : instanceIdDetails[0];
            }
            else
            {
                instanceIdWithTags = notification.details["worldId"].ToString().Split(':')[1];
            }

            ApiWorldInstance.AccessType accessType = Utilities.GetAccessType(instanceIdWithTags);

            var    worldName    = notification.details["worldName"].ToString();
            string instanceType = Utilities.GetAccessName(accessType);

            switch (accessType)
            {
            case ApiWorldInstance.AccessType.Public:
            case ApiWorldInstance.AccessType.FriendsOfGuests:
            case ApiWorldInstance.AccessType.InvitePlus:
                Utilities.ShowPopupWindow(
                    Localization.GetTitle(notification.senderUsername, worldName, instanceType),
                    Localization.GetPublicPopup(notification.senderUsername, worldName, instanceType),
                    Localization.GetJoinButton(),
                    JoinYourself,
                    Localization.GetDropPortalButton(),
                    DropPortal);
                break;

            case ApiWorldInstance.AccessType.FriendsOnly:
            case ApiWorldInstance.AccessType.InviteOnly:
                Utilities.ShowPopupWindow(
                    Localization.GetTitle(notification.senderUsername, worldName, instanceType),
                    Localization.GetPrivatePopup(notification.senderUsername, worldName, instanceType),
                    Localization.GetJoinButton(),
                    JoinYourself);
                break;

            default:
                Utilities.ShowAlert("Error Getting AccessType", "Did you accept a message?");
                break;
            }
        }
Exemplo n.º 6
0
        public static void RoomChanged(string worldName, string roomId, ApiWorldInstance.AccessType accessType, int maxPlayers)
        {
            if (!running)
            {
                return;
            }
            if (!roomId.Equals(""))
            {
                if (accessType == ApiWorldInstance.AccessType.InviteOnly || accessType == ApiWorldInstance.AccessType.InvitePlus)
                {
                    presence.state   = "In a private world";
                    presence.partyId = "";
                }
                else
                {
                    string accessString = " [Unknown]";
                    if (accessType == ApiWorldInstance.AccessType.FriendsOfGuests)
                    {
                        accessString = " [Friends+]";
                    }
                    else if (accessType == ApiWorldInstance.AccessType.FriendsOnly)
                    {
                        accessString = " [Friends]";
                    }
                    else if (accessType == ApiWorldInstance.AccessType.Public)
                    {
                        accessString = "";
                    }

                    presence.state    = "in " + worldName + accessString;
                    presence.partyId  = roomId;
                    presence.partyMax = maxPlayers;
                }
            }
            else
            {
                presence.state    = "Not in a world";
                presence.partyId  = "";
                presence.partyMax = 0;
            }

            DiscordRpc.UpdatePresence(ref presence);
        }
Exemplo n.º 7
0
        public static void HandleInvite(Notification notification)
        {
            currentNotification = notification;
            worldId             = notification.details["worldId"].ToString().Split(':')[0];

            // Whenever vrchat moves away from keeping both same and actually do keep instance as instance only
            string[] instanceIdDetails = notification.details["instanceId"].ToString().Split(':');
            instanceIdWithTags = instanceIdDetails.Length > 0 ? instanceIdDetails[1] : instanceIdDetails[0];

            ApiWorldInstance.AccessType accessType = Utilities.GetAccessType(instanceIdWithTags);

            var    worldName    = notification.details["worldName"].ToString();
            string instanceType = Utilities.GetAccessName(accessType);

            switch (accessType)
            {
            case ApiWorldInstance.AccessType.Public:
            case ApiWorldInstance.AccessType.FriendsOfGuests:
            case ApiWorldInstance.AccessType.InvitePlus:
                Utilities.ShowPopupWindow(
                    Localization.GetTitle(notification.senderUsername, worldName, instanceType),
                    Localization.GetPublicPopup(notification.senderUsername, worldName, instanceType),
                    Localization.GetJoinButton(),
                    JoinYourself,
                    Localization.GetDropPortalButton(),
                    DropPortal);
                break;

            case ApiWorldInstance.AccessType.FriendsOnly:
            case ApiWorldInstance.AccessType.InviteOnly:
                Utilities.ShowPopupWindow(
                    Localization.GetTitle(notification.senderUsername, worldName, instanceType),
                    Localization.GetPrivatePopup(notification.senderUsername, worldName, instanceType),
                    Localization.GetJoinButton(),
                    JoinYourself);
                break;

            default:
                Utilities.ShowAlert("Error Getting AccessType", "Did you accept a message?");
                break;
            }
        }
Exemplo n.º 8
0
        // Token: 0x06000C5F RID: 3167 RVA: 0x000204F4 File Offset: 0x0001E6F4
        public static string GetWorldInstanceType(ApiWorldInstance.AccessType accessType)
        {
            string result;

            switch (accessType)
            {  //les info de room
            case ApiWorldInstance.AccessType.Public:
                result = "Public";
                break;

            case ApiWorldInstance.AccessType.FriendsOfGuests:
                result = "Friends of Guests";
                break;

            case ApiWorldInstance.AccessType.FriendsOnly:
                result = "Friends Only";
                break;

            case ApiWorldInstance.AccessType.InviteOnly:
                result = "Invite Only";
                break;

            case ApiWorldInstance.AccessType.InvitePlus:
                result = "Invite+";
                break;

            case ApiWorldInstance.AccessType.Counter:
                result = "Counter";
                break;

            default:
                result = "none";
                break;
            }
            return(result);
        }
Exemplo n.º 9
0
        public static string RoomChanged(string worldName, string worldAndRoomId, string roomIdWithTags, ApiWorldInstance.AccessType accessType, int maxPlayers)
        {
            if (!running)
            {
                return(null);
            }
            if (!worldAndRoomId.Equals(""))
            {
                if (accessType == ApiWorldInstance.AccessType.InviteOnly || accessType == ApiWorldInstance.AccessType.InvitePlus)
                {
                    presence.state   = "In a private world";
                    presence.partyId = "";
                    if (ModPrefs.GetBool("vrctools", "allowdiscordjoinrequests") && (accessType == ApiWorldInstance.AccessType.InvitePlus))
                    {
                        presence.joinSecret = GenerateRandomString(127);
                    }
                }
                else
                {
                    string accessString = " [Unknown]";
                    if (accessType == ApiWorldInstance.AccessType.FriendsOfGuests)
                    {
                        accessString = " [Friends+]";
                    }
                    else if (accessType == ApiWorldInstance.AccessType.FriendsOnly)
                    {
                        accessString = " [Friends]";
                    }
                    else if (accessType == ApiWorldInstance.AccessType.Public)
                    {
                        accessString = "";
                    }

                    presence.state          = "in " + worldName + accessString;
                    presence.partyId        = worldAndRoomId;
                    presence.partyMax       = maxPlayers;
                    presence.startTimestamp = (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

                    if (ModPrefs.GetBool("vrctools", "allowdiscordjoinrequests"))
                    {
                        presence.joinSecret = GenerateRandomString(127);
                    }
                }
            }
            else
            {
                presence.state          = "Not in a world";
                presence.partyId        = "";
                presence.partyMax       = 0;
                presence.startTimestamp = 0;
                presence.joinSecret     = "";
            }

            DiscordRpc.UpdatePresence(ref presence);
            return(presence.joinSecret);
        }
Exemplo n.º 10
0
        // Token: 0x06000C5B RID: 3163 RVA: 0x0001FF5C File Offset: 0x0001E15C
        public static void OnThisUpdate()
        {
            bool flag = RoomManagerBase.currentRoom != null;

            if (flag)
            {
                ApiWorld currentRoom = RoomManagerBase.currentRoom;
                DiscordInfo.thisScene = default(Scene);
                bool flag2 = DiscordInfo.currentWorld != currentRoom;
                if (flag2)
                {
                    DiscordInfo.currentWorld = RoomManagerBase.currentRoom;
                    ApiWorldInstance            currentWorldInstance = RoomManagerBase.currentWorldInstance;
                    ApiWorldInstance.AccessType accessType           = currentWorldInstance.GetAccessType();
                    int  count = currentWorldInstance.users.Count;
                    bool flag3 = accessType == ApiWorldInstance.AccessType.Public;
                    if (flag3)
                    {       //info 1
                        DiscordInfo.ResetTime();
                        DiscordInfo.Presence.details        = DiscordInfo.GetWorldName();
                        DiscordInfo.Presence.state          = "In a " + DiscordInfo.GetWorldInstanceType(accessType) + " Lobby";
                        DiscordInfo.Presence.startTimestamp = DiscordInfo.timestamp;
                        DiscordInfo.Presence.largeImageKey  = "default_logo";
                        DiscordInfo.Presence.largeImageText = "VRChat";
                        DiscordInfo.Presence.smallImageKey  = "public_img";
                        DiscordInfo.Presence.smallImageText = "Using TurtleGangClient";
                        DiscordInfo.PlayerCount();
                        DiscordRich.UpdatePresence(DiscordInfo.Presence);
                        return;
                    }
                    bool flag4 = accessType == ApiWorldInstance.AccessType.InvitePlus;
                    if (flag4)
                    {       //info 2
                        DiscordInfo.ResetTime();
                        DiscordInfo.Presence.details        = DiscordInfo.GetWorldName();
                        DiscordInfo.Presence.state          = "In a " + DiscordInfo.GetWorldInstanceType(accessType) + " Lobby";
                        DiscordInfo.Presence.startTimestamp = DiscordInfo.timestamp;
                        DiscordInfo.Presence.largeImageKey  = "default_logo";
                        DiscordInfo.Presence.largeImageText = "VRChat";
                        DiscordInfo.Presence.smallImageKey  = "inviteplus_img";
                        DiscordInfo.Presence.smallImageText = "Using TurtleGangClient";
                        DiscordInfo.PlayerCount();
                        DiscordRich.UpdatePresence(DiscordInfo.Presence);
                        return;
                    }
                    bool flag5 = accessType == ApiWorldInstance.AccessType.InviteOnly;
                    if (flag5)
                    {       //info 3
                        DiscordInfo.ResetTime();
                        DiscordInfo.Presence.details        = DiscordInfo.GetWorldName();
                        DiscordInfo.Presence.state          = "In a " + DiscordInfo.GetWorldInstanceType(accessType) + " Lobby";
                        DiscordInfo.Presence.startTimestamp = DiscordInfo.timestamp;
                        DiscordInfo.Presence.largeImageKey  = "default_logo";
                        DiscordInfo.Presence.largeImageText = "VRChat";
                        DiscordInfo.Presence.smallImageKey  = "inviteonly_img";
                        DiscordInfo.Presence.smallImageText = "Using TurtleGangClient";
                        DiscordInfo.PlayerCount();
                        DiscordRich.UpdatePresence(DiscordInfo.Presence);
                        return;
                    }
                    bool flag6 = accessType == ApiWorldInstance.AccessType.FriendsOfGuests;
                    if (flag6)
                    {       //info 4
                        DiscordInfo.ResetTime();
                        DiscordInfo.Presence.details        = DiscordInfo.GetWorldName();
                        DiscordInfo.Presence.state          = "In a " + DiscordInfo.GetWorldInstanceType(accessType) + " Lobby";
                        DiscordInfo.Presence.startTimestamp = DiscordInfo.timestamp;
                        DiscordInfo.Presence.largeImageKey  = "default_logo";
                        DiscordInfo.Presence.largeImageText = "VRChat";
                        DiscordInfo.Presence.smallImageKey  = "friendofguests_img";
                        DiscordInfo.Presence.smallImageText = "Using TurtleGangClient";
                        DiscordInfo.PlayerCount();
                        DiscordRich.UpdatePresence(DiscordInfo.Presence);
                        return;
                    }
                    bool flag7 = accessType == ApiWorldInstance.AccessType.FriendsOnly;
                    if (flag7)
                    {       //info 5
                        DiscordInfo.ResetTime();
                        DiscordInfo.Presence.details        = DiscordInfo.GetWorldName();
                        DiscordInfo.Presence.state          = "In a " + DiscordInfo.GetWorldInstanceType(accessType) + " Lobby";
                        DiscordInfo.Presence.startTimestamp = DiscordInfo.timestamp;
                        DiscordInfo.Presence.largeImageKey  = "default_logo";
                        DiscordInfo.Presence.largeImageText = "VRChat";
                        DiscordInfo.Presence.smallImageKey  = "friendsonly_img";
                        DiscordInfo.Presence.smallImageText = "Using TurtleGangClient";
                        DiscordInfo.PlayerCount();
                        DiscordRich.UpdatePresence(DiscordInfo.Presence);
                        return;
                    }
                    bool flag8 = accessType == ApiWorldInstance.AccessType.Counter;
                    if (flag8)
                    {       //info 6
                        DiscordInfo.ResetTime();
                        DiscordInfo.Presence.details        = DiscordInfo.GetWorldName();
                        DiscordInfo.Presence.state          = "In a " + DiscordInfo.GetWorldInstanceType(accessType) + " Lobby";
                        DiscordInfo.Presence.startTimestamp = DiscordInfo.timestamp;
                        DiscordInfo.Presence.largeImageKey  = "default_logo";
                        DiscordInfo.Presence.largeImageText = "VRChat";
                        DiscordInfo.Presence.smallImageKey  = "counter_img";
                        DiscordInfo.Presence.smallImageText = "Using TurtleGangClient";
                        DiscordInfo.PlayerCount();
                        DiscordRich.UpdatePresence(DiscordInfo.Presence);
                        return;
                    }
                }
                bool flag9 = DiscordInfo.currentWorld != null;
                if (flag9)
                { //nb de gens la room ?
                    DiscordInfo.Presence.partySize = PlayerManager.GetAllPlayers().Length;
                    DiscordInfo.Presence.partyMax  = DiscordInfo.currentWorld.capacity;
                    DiscordRich.UpdatePresence(DiscordInfo.Presence);
                }
                else
                { //idk
                    DiscordInfo.Presence.partySize = 0;
                    DiscordInfo.Presence.partyMax  = 0;
                    DiscordRich.UpdatePresence(DiscordInfo.Presence);
                }
            }
            else
            {
                Scene activeScene = SceneManager.GetActiveScene();
                bool  flag10      = DiscordInfo.thisScene != activeScene;
                if (flag10)
                {
                    DiscordInfo.thisScene = activeScene;
                    Scene scene  = DiscordInfo.thisScene; //nom de scene idk ?
                    bool  flag11 = DiscordInfo.thisScene.name == "ui";
                    if (flag11)
                    {
                        //info 7
                        DiscordInfo.ResetTime();
                        DiscordInfo.Presence.details        = "In Loading Screen";
                        DiscordInfo.Presence.state          = string.Empty;
                        DiscordInfo.Presence.startTimestamp = DiscordInfo.timestamp;
                        DiscordInfo.Presence.partySize      = 0;
                        DiscordInfo.Presence.partyMax       = 0;
                        DiscordInfo.Presence.largeImageKey  = "default_logo";
                        DiscordInfo.Presence.largeImageText = "VRChat";
                        DiscordInfo.Presence.smallImageKey  = "loading_img";
                        DiscordInfo.Presence.smallImageText = "Using TurtleGangClient";
                        DiscordRich.UpdatePresence(DiscordInfo.Presence);
                        return;
                    }
                }
            }
            DiscordRich.RunCallbacks();
        }
Exemplo n.º 11
0
        public void PutInstance(ApiWorldInstance inst, Action success, Action <string> error = null)
        {
            string idWithTags = inst.idWithTags;
            int    num        = -1;

            for (int i = 0; i < mWorldInstances.Count; i++)
            {
                if (mWorldInstances[i].idWithTags == idWithTags)
                {
                    mWorldInstances[i] = inst;
                }
            }
            bool newInstance = num == -1;
            Dictionary <string, object> dictionary = new Dictionary <string, object>();

            if (newInstance)
            {
                dictionary["id"] = inst.idWithTags;
                ApiWorldInstance.AccessType accessType = inst.GetAccessType();
                if (accessType == ApiWorldInstance.AccessType.InviteOnly)
                {
                    dictionary["private"] = inst.instanceCreator;
                }
                else
                {
                    dictionary["private"] = "false";
                }
                if (accessType == ApiWorldInstance.AccessType.FriendsOnly)
                {
                    dictionary["friends"] = inst.instanceCreator;
                }
                else
                {
                    dictionary["friends"] = "false";
                }
            }
            dictionary["name"] = inst.instanceName;
            string tagString = inst.GetTagString();

            if (tagString != null)
            {
                dictionary["tags"] = tagString;
            }
            ApiDictContainer apiDictContainer = new ApiDictContainer();

            apiDictContainer.OnSuccess = delegate(ApiContainer c)
            {
                Dictionary <string, object> responseDictionary = (c as ApiDictContainer).ResponseDictionary;
                if (newInstance && responseDictionary != null)
                {
                    mWorldInstances.Add(new ApiWorldInstance(this, responseDictionary, c.DataTimestamp));
                }
                if (success != null)
                {
                    success();
                }
            };
            apiDictContainer.OnError = delegate(ApiContainer c)
            {
                if (error != null)
                {
                    error(c.Error);
                }
            };
            ApiDictContainer responseContainer = apiDictContainer;

            API.SendPutRequest("worlds/" + base.id + "/" + idWithTags, responseContainer, dictionary);
        }