This repository has been archived by the owner on May 20, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathVRCheatAvatarfileImporter.cs
129 lines (120 loc) · 5.74 KB
/
VRCheatAvatarfileImporter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using UnityEngine;
using VRC.Core;
using VRCModLoader;
using VRCModNetwork;
using VRCTools;
namespace AvatarFav
{
class VRCheatAvatarfileImporter
{
private static Dictionary<string, string> savedAvatars = new Dictionary<string, string>();
private static int importedAvatars = 0;
public static bool Importing { get; private set; }
public static IEnumerator ImportAvatarfile()
{
VRCUiPopupManagerUtils.ShowPopup("AvatarFav", "Reading avatar list file...");
FileInfo[] files = new DirectoryInfo(Environment.CurrentDirectory).GetFiles("Avatars.txt", SearchOption.AllDirectories);
VRCModLogger.Log("[VRCheatAvatarfileImporter] Found " + files.Length + " Avatars.txt");
if (files.Length > 0)
{
// Load all avatarIds
foreach(FileInfo fi in files)
{
string[] array = File.ReadAllLines(fi.FullName);
for (int i = 0; i < array.Length; i++)
{
string[] array2 = array[i].Split(new char[] { '|' });
if (array2.Length >= 3)
{
if (!savedAvatars.ContainsKey(array2[1]))
savedAvatars.Add(array2[1], array2[0]);
}
}
}
// Add all avatars to the favorite list
importedAvatars = 0;
int avatarsDone = 0;
Importing = true;
foreach (KeyValuePair<string, string> avatarIdAndName in savedAvatars)
{
VRCUiPopupManagerUtils.ShowPopup("AvatarFav", "Adding avatar " + avatarsDone + "/" + savedAvatars.Count);
yield return AddAvatarToList(avatarIdAndName.Key, avatarIdAndName.Value);
avatarsDone++;
}
Importing = false;
VRCUiPopupManagerUtils.ShowPopup("AvatarFav", "Imported " + importedAvatars + " new public avatars from the list (" + importedAvatars + "/" + savedAvatars.Count + " avatars)", "Close", () => VRCUiPopupManagerUtils.GetVRCUiPopupManager().HideCurrentPopup());
}
else VRCUiPopupManagerUtils.ShowPopup("AvatarFav", "Error: Unable to find any Avatars.txt file in your game directory", "Close", () => VRCUiPopupManagerUtils.GetVRCUiPopupManager().HideCurrentPopup());
}
private static IEnumerator AddAvatarToList(string avatarId, string avatarName)
{
bool found = false;
foreach (string avatarfavId in AvatarFavMod.favoriteAvatarList)
{
if (avatarfavId == avatarId)
{
found = true;
VRCModLogger.LogError("[VRCheatAvatarfileImporter] Avatar " + avatarName + " already exist in list");
break;
}
}
if (!found)
{
using (WWW avtrRequest = new WWW(API.GetApiUrl() + "avatars/" + avatarId + "?apiKey=" + AvatarFavMod.GetApiKey()))
{
yield return avtrRequest;
int rc = WebRequestsUtils.GetResponseCode(avtrRequest);
if (rc == 200)
{
string uuid = APIUser.CurrentUser?.id ?? "";
SerializableApiAvatar aa = null;
try
{
aa = JsonConvert.DeserializeObject<SerializableApiAvatar>(avtrRequest.text);
}
catch (Exception e)
{
VRCModLogger.LogError("[VRCheatAvatarfileImporter] Unable to add the avatar " + avatarName + ": Unable to parse the API response. " + e);
}
if (aa != null)
{
if (aa.authorId != uuid)
{
if (aa.releaseStatus == "public")
{
VRCModLogger.Log("[VRCheatAvatarfileImporter] Adding avatar " + avatarName + " to the database");
yield return AddAvatar(avatarId, avatarName);
}
else VRCModLogger.Log("[VRCheatAvatarfileImporter] Unable to add the avatar " + avatarName + ": This avatar is not public anymore (private)");
}
else VRCModLogger.Log("[VRCheatAvatarfileImporter] Unable to add the avatar " + avatarName + ": This avatar is own avatar");
}
}
else VRCModLogger.Log("[VRCheatAvatarfileImporter] Unable to add the avatar " + avatarName + ": This avatar is not public anymore (deleted)");
}
}
}
private static IEnumerator AddAvatar(string id, string name)
{
bool done = false;
VRCModNetworkManager.SendRPC("slaynash.avatarfav.addavatar", id, () =>
{
VRCModLogger.Log("[VRCheatAvatarfileImporter] Avatar " + name + " successfully added");
importedAvatars++;
done = true;
}, (error) =>
{
VRCModLogger.Log("[VRCheatAvatarfileImporter] Unable to add the avatar " + name + ": VRCMNW Server returned error: " + error);
done = true;
});
while (!done) yield return null;
}
}
}