diff --git a/APIServer.cs b/APIServer.cs index ca91381..59ab044 100644 --- a/APIServer.cs +++ b/APIServer.cs @@ -191,10 +191,26 @@ namespace server { s = ModerationBlockDetails; } - if (Url == "messages/v2/get") + if (Url == "messages/v2/get") { - s = + s = BracketResponse; } + if (Url == "relationships/v2/get") + { + s = BracketResponse; + } + if (Url == "avatar/v2") + { + s = File.ReadAllText("SaveData\\avatar.txt"); + } + if (Url == "avatar/v2/set") + { + File.WriteAllText("SaveData\\avatar.txt", text); + } + if (Url == "settings/v2") + { + + } Console.WriteLine("API Response: " + s); byte[] bytes = Encoding.UTF8.GetBytes(s); response.ContentLength64 = (long)bytes.Length; @@ -212,12 +228,13 @@ namespace server File.WriteAllText("crashdump.txt", Convert.ToString(ex4)); } } - public static ulong CachedPlayerID = 1; public static ulong CachedPlatformID = 10000; - public static string VersionCheckResponse = "{\"ValidVersion\":true}"; + public static string BlankResponse = ""; public static string BracketResponse = "[]"; + + public static string VersionCheckResponse = "{\"ValidVersion\":true}"; public static string ModerationBlockDetails = "{\"ReportCategory\":0,\"Duration\":0,\"GameSessionId\":0,\"Message\":\"\"}"; public static string ImagesV2Named = "[{\"FriendlyImageName\":\"DormRoomBucket\",\"ImageName\":\"OpenRec\",\"StartTime\":\"2021-12-27T21:27:38.1880175-08:00\",\"EndTime\":\"2043-12-27T21:27:38.1880399-08:00\"}"; diff --git a/Config.cs b/Config.cs index f91e418..83869bf 100644 --- a/Config.cs +++ b/Config.cs @@ -8,7 +8,6 @@ namespace api { class Config { - public static void setup() { Console.WriteLine("Setting up..."); @@ -28,7 +27,7 @@ namespace api Console.WriteLine("Done!"); Console.Clear(); } - + public static gamesessions.GameSessions.SessionInstance localGameSession; public static Objective[][] dailyObjectives = new Objective[][] { new Objective[] diff --git a/GameSessions.cs b/GameSessions.cs new file mode 100644 index 0000000..64ded3b --- /dev/null +++ b/GameSessions.cs @@ -0,0 +1,330 @@ +using System; +using Newtonsoft.Json; +using api; +using server; + +namespace gamesessions +{ + // Token: 0x02000020 RID: 32 + public class GameSessions + { + // Token: 0x060000BE RID: 190 RVA: 0x00004C08 File Offset: 0x00002E08 + public static string JoinRandom(string jsonData) + { + + GameSessions.JoinRandomRequest joinRandomRequest = JsonConvert.DeserializeObject(jsonData); + if (Config.localGameSession == null) + { + Config.localGameSession = new GameSessions.SessionInstance + { + GameSessionId = 2842L, + RegionId = "au", + RoomId = joinRandomRequest.ActivityLevelIds[0], + RecRoomId = null, + EventId = null, + CreatorPlayerId = (long?)APIServer.CachedPlayerID, + Name = "OpenRec", + ActivityLevelId = joinRandomRequest.ActivityLevelIds[0], + Private = false, + Sandbox = false, + SupportsScreens = true, + SupportsVR = true, + GameInProgress = false, + MaxCapacity = 20, + IsFull = false + }; + } + else + { + Config.localGameSession.RoomId = joinRandomRequest.ActivityLevelIds[0]; + Config.localGameSession.ActivityLevelId = joinRandomRequest.ActivityLevelIds[0]; + Config.localGameSession.Sandbox = false; + } + return JsonConvert.SerializeObject(new GameSessions.JoinResult + { + Result = 0, + GameSession = Config.localGameSession + }); + } + + // Token: 0x060000BF RID: 191 RVA: 0x0000254B File Offset: 0x0000074B + public static string StatusSession() + { + return JsonConvert.SerializeObject(new GameSessions.PlayerStatus + { + PlayerId = APIServer.CachedPlayerID, + IsOnline = true, + InScreenMode = false, + GameSession = Config.localGameSession + }); + } + + // Token: 0x060000C0 RID: 192 RVA: 0x00004D24 File Offset: 0x00002F24 + public static string Create(string jsonData) + { + Console.WriteLine("[API][GameSession] Creating Room..."); + GameSessions.CreateRequest createRequest = JsonConvert.DeserializeObject(jsonData); + if (Config.localGameSession == null) + { + Config.localGameSession = new GameSessions.SessionInstance + { + GameSessionId = 2842L, + RegionId = "au", + RoomId = createRequest.ActivityLevelIds, + RecRoomId = null, + EventId = null, + CreatorPlayerId = (long?)APIServer.CachedPlayerID, + Name = "Dorm Room", + ActivityLevelId = createRequest.ActivityLevelIds, + Private = true, + Sandbox = true, + SupportsScreens = true, + SupportsVR = true, + GameInProgress = false, + MaxCapacity = 20, + IsFull = false + }; + } + else + { + Config.localGameSession.RoomId = createRequest.ActivityLevelIds; + Config.localGameSession.ActivityLevelId = createRequest.ActivityLevelIds; + Config.localGameSession.Sandbox = createRequest.IsSandbox; + } + return JsonConvert.SerializeObject(new GameSessions.JoinResult + { + Result = 0, + GameSession = Config.localGameSession + }); + } + + // Token: 0x060000C1 RID: 193 RVA: 0x0000257B File Offset: 0x0000077B + public static GameSessions.PlayerStatus StatusSessionInstance() + { + return new GameSessions.PlayerStatus + { + PlayerId = APIServer.CachedPlayerID, + IsOnline = true, + InScreenMode = false, + GameSession = Config.localGameSession + }; + } + + // Token: 0x02000021 RID: 33 + public enum JoinResultIDs + { + // Token: 0x0400005E RID: 94 + Success, + // Token: 0x0400005F RID: 95 + NoSuchGame, + // Token: 0x04000060 RID: 96 + PlayerNotOnline, + // Token: 0x04000061 RID: 97 + InsufficientSpace, + // Token: 0x04000062 RID: 98 + EventNotStarted, + // Token: 0x04000063 RID: 99 + EventAlreadyFinished, + // Token: 0x04000064 RID: 100 + EventCreatorNotReady, + // Token: 0x04000065 RID: 101 + BlockedFromRoom, + // Token: 0x04000066 RID: 102 + ProfileLocked, + // Token: 0x04000067 RID: 103 + NoBirthday, + // Token: 0x04000068 RID: 104 + MarkedForDelete, + // Token: 0x04000069 RID: 105 + JuniorNotAllowed, + // Token: 0x0400006A RID: 106 + Banned, + // Token: 0x0400006B RID: 107 + NoSuchRoom = 20, + // Token: 0x0400006C RID: 108 + RoomCreatorNotReady, + // Token: 0x0400006D RID: 109 + RoomIsNotActive, + // Token: 0x0400006E RID: 110 + RoomBlockedByCreator, + // Token: 0x0400006F RID: 111 + RoomBlockingCreator, + // Token: 0x04000070 RID: 112 + RoomIsPrivate + } + + // Token: 0x02000022 RID: 34 + public class PlayerStatus + { + // Token: 0x1700003F RID: 63 + // (get) Token: 0x060000C3 RID: 195 RVA: 0x000025A6 File Offset: 0x000007A6 + // (set) Token: 0x060000C4 RID: 196 RVA: 0x000025AE File Offset: 0x000007AE + public ulong PlayerId { get; set; } + + // Token: 0x17000040 RID: 64 + // (get) Token: 0x060000C5 RID: 197 RVA: 0x000025B7 File Offset: 0x000007B7 + // (set) Token: 0x060000C6 RID: 198 RVA: 0x000025BF File Offset: 0x000007BF + public bool IsOnline { get; set; } + + // Token: 0x17000041 RID: 65 + // (get) Token: 0x060000C7 RID: 199 RVA: 0x000025C8 File Offset: 0x000007C8 + // (set) Token: 0x060000C8 RID: 200 RVA: 0x000025D0 File Offset: 0x000007D0 + public bool InScreenMode { get; set; } + + // Token: 0x17000042 RID: 66 + // (get) Token: 0x060000C9 RID: 201 RVA: 0x000025D9 File Offset: 0x000007D9 + // (set) Token: 0x060000CA RID: 202 RVA: 0x000025E1 File Offset: 0x000007E1 + public GameSessions.SessionInstance GameSession { get; set; } + } + + // Token: 0x02000023 RID: 35 + public class SessionInstance + { + // Token: 0x17000043 RID: 67 + // (get) Token: 0x060000CC RID: 204 RVA: 0x000025EA File Offset: 0x000007EA + // (set) Token: 0x060000CD RID: 205 RVA: 0x000025F2 File Offset: 0x000007F2 + public long GameSessionId { get; set; } + + // Token: 0x17000044 RID: 68 + // (get) Token: 0x060000CE RID: 206 RVA: 0x000025FB File Offset: 0x000007FB + // (set) Token: 0x060000CF RID: 207 RVA: 0x00002603 File Offset: 0x00000803 + public string RegionId { get; set; } + + // Token: 0x17000045 RID: 69 + // (get) Token: 0x060000D0 RID: 208 RVA: 0x0000260C File Offset: 0x0000080C + // (set) Token: 0x060000D1 RID: 209 RVA: 0x00002614 File Offset: 0x00000814 + public string RoomId { get; set; } + + // Token: 0x17000046 RID: 70 + // (get) Token: 0x060000D2 RID: 210 RVA: 0x0000261D File Offset: 0x0000081D + // (set) Token: 0x060000D3 RID: 211 RVA: 0x00002625 File Offset: 0x00000825 + public long? EventId { get; set; } + + // Token: 0x17000047 RID: 71 + // (get) Token: 0x060000D4 RID: 212 RVA: 0x0000262E File Offset: 0x0000082E + // (set) Token: 0x060000D5 RID: 213 RVA: 0x00002636 File Offset: 0x00000836 + public long? RecRoomId { get; set; } + + // Token: 0x17000048 RID: 72 + // (get) Token: 0x060000D6 RID: 214 RVA: 0x0000263F File Offset: 0x0000083F + // (set) Token: 0x060000D7 RID: 215 RVA: 0x00002647 File Offset: 0x00000847 + public long? CreatorPlayerId { get; set; } + + // Token: 0x17000049 RID: 73 + // (get) Token: 0x060000D8 RID: 216 RVA: 0x00002650 File Offset: 0x00000850 + // (set) Token: 0x060000D9 RID: 217 RVA: 0x00002658 File Offset: 0x00000858 + public string Name { get; set; } + + // Token: 0x1700004A RID: 74 + // (get) Token: 0x060000DA RID: 218 RVA: 0x00002661 File Offset: 0x00000861 + // (set) Token: 0x060000DB RID: 219 RVA: 0x00002669 File Offset: 0x00000869 + public string ActivityLevelId { get; set; } + + // Token: 0x1700004B RID: 75 + // (get) Token: 0x060000DC RID: 220 RVA: 0x00002672 File Offset: 0x00000872 + // (set) Token: 0x060000DD RID: 221 RVA: 0x0000267A File Offset: 0x0000087A + public bool Private { get; set; } + + // Token: 0x1700004C RID: 76 + // (get) Token: 0x060000DE RID: 222 RVA: 0x00002683 File Offset: 0x00000883 + // (set) Token: 0x060000DF RID: 223 RVA: 0x0000268B File Offset: 0x0000088B + public bool Sandbox { get; set; } + + // Token: 0x1700004D RID: 77 + // (get) Token: 0x060000E0 RID: 224 RVA: 0x00002694 File Offset: 0x00000894 + // (set) Token: 0x060000E1 RID: 225 RVA: 0x0000269C File Offset: 0x0000089C + public bool SupportsVR { get; set; } + + // Token: 0x1700004E RID: 78 + // (get) Token: 0x060000E2 RID: 226 RVA: 0x000026A5 File Offset: 0x000008A5 + // (set) Token: 0x060000E3 RID: 227 RVA: 0x000026AD File Offset: 0x000008AD + public bool SupportsScreens { get; set; } + + // Token: 0x1700004F RID: 79 + // (get) Token: 0x060000E4 RID: 228 RVA: 0x000026B6 File Offset: 0x000008B6 + // (set) Token: 0x060000E5 RID: 229 RVA: 0x000026BE File Offset: 0x000008BE + public bool GameInProgress { get; set; } + + // Token: 0x17000050 RID: 80 + // (get) Token: 0x060000E6 RID: 230 RVA: 0x000026C7 File Offset: 0x000008C7 + // (set) Token: 0x060000E7 RID: 231 RVA: 0x000026CF File Offset: 0x000008CF + public int MaxCapacity { get; set; } + + // Token: 0x17000051 RID: 81 + // (get) Token: 0x060000E8 RID: 232 RVA: 0x000026D8 File Offset: 0x000008D8 + // (set) Token: 0x060000E9 RID: 233 RVA: 0x000026E0 File Offset: 0x000008E0 + public bool IsFull { get; set; } + } + + // Token: 0x02000024 RID: 36 + public class JoinRandomRequest + { + // Token: 0x17000052 RID: 82 + // (get) Token: 0x060000EB RID: 235 RVA: 0x000026E9 File Offset: 0x000008E9 + // (set) Token: 0x060000EC RID: 236 RVA: 0x000026F1 File Offset: 0x000008F1 + public string[] ActivityLevelIds { get; set; } + + // Token: 0x17000053 RID: 83 + // (get) Token: 0x060000ED RID: 237 RVA: 0x000026FA File Offset: 0x000008FA + // (set) Token: 0x060000EE RID: 238 RVA: 0x00002702 File Offset: 0x00000902 + public ulong[] ExpectedPlayerIds { get; set; } + + // Token: 0x17000054 RID: 84 + // (get) Token: 0x060000EF RID: 239 RVA: 0x0000270B File Offset: 0x0000090B + // (set) Token: 0x060000F0 RID: 240 RVA: 0x00002713 File Offset: 0x00000913 + public GameSessions.RegionPing[] RegionPings { get; set; } + } + + // Token: 0x02000025 RID: 37 + public class CreateRequest + { + // Token: 0x17000055 RID: 85 + // (get) Token: 0x060000F2 RID: 242 RVA: 0x0000271C File Offset: 0x0000091C + // (set) Token: 0x060000F3 RID: 243 RVA: 0x00002724 File Offset: 0x00000924 + public string ActivityLevelIds { get; set; } + + // Token: 0x17000056 RID: 86 + // (get) Token: 0x060000F4 RID: 244 RVA: 0x0000272D File Offset: 0x0000092D + // (set) Token: 0x060000F5 RID: 245 RVA: 0x00002735 File Offset: 0x00000935 + public ulong[] ExpectedPlayerIds { get; set; } + + // Token: 0x17000057 RID: 87 + // (get) Token: 0x060000F6 RID: 246 RVA: 0x0000273E File Offset: 0x0000093E + // (set) Token: 0x060000F7 RID: 247 RVA: 0x00002746 File Offset: 0x00000946 + public GameSessions.RegionPing[] RegionPings { get; set; } + + // Token: 0x17000058 RID: 88 + // (get) Token: 0x060000F8 RID: 248 RVA: 0x0000274F File Offset: 0x0000094F + // (set) Token: 0x060000F9 RID: 249 RVA: 0x00002757 File Offset: 0x00000957 + public bool IsSandbox { get; set; } + } + + // Token: 0x02000026 RID: 38 + public class RegionPing + { + // Token: 0x17000059 RID: 89 + // (get) Token: 0x060000FB RID: 251 RVA: 0x00002760 File Offset: 0x00000960 + // (set) Token: 0x060000FC RID: 252 RVA: 0x00002768 File Offset: 0x00000968 + public string Region { get; set; } + + // Token: 0x1700005A RID: 90 + // (get) Token: 0x060000FD RID: 253 RVA: 0x00002771 File Offset: 0x00000971 + // (set) Token: 0x060000FE RID: 254 RVA: 0x00002779 File Offset: 0x00000979 + public int Ping { get; set; } + } + + // Token: 0x02000027 RID: 39 + private class JoinResult + { + // Token: 0x1700005B RID: 91 + // (get) Token: 0x06000100 RID: 256 RVA: 0x00002782 File Offset: 0x00000982 + // (set) Token: 0x06000101 RID: 257 RVA: 0x0000278A File Offset: 0x0000098A + public int Result { get; set; } + + // Token: 0x1700005C RID: 92 + // (get) Token: 0x06000102 RID: 258 RVA: 0x00002793 File Offset: 0x00000993 + // (set) Token: 0x06000103 RID: 259 RVA: 0x0000279B File Offset: 0x0000099B + public GameSessions.SessionInstance GameSession { get; set; } + } + } +} diff --git a/Notification.cs b/Notification.cs index e8146e5..59e2c86 100644 --- a/Notification.cs +++ b/Notification.cs @@ -1,75 +1,98 @@ using System; using System.Collections.Generic; using Newtonsoft.Json; +using gamesessions; namespace ws { - // Token: 0x02000029 RID: 41 + // Token: 0x0200002A RID: 42 public class Notification { - // Token: 0x06000104 RID: 260 RVA: 0x00004EF4 File Offset: 0x000030F4 + // Token: 0x0600010B RID: 267 public static string ProcessRequest(string jsonData) - { + { + Dictionary dictionary = JsonConvert.DeserializeObject>(jsonData); string result; + if (dictionary.ContainsKey("api")) + { + string text = (string)dictionary["api"]; + string text2 = text; + if (text2 != null) + { + if (text2 == "playerSubscriptions/v1/update") + { + Console.WriteLine("WebSocket.cs game client sent presence update."); + return JsonConvert.SerializeObject(Notification.Reponse.createResponse(12, GameSessions.StatusSessionInstance())); + } + if (text2 == "heartbeat2") + { + Console.WriteLine("WebSocket.cs heartbeat 2 sent by game client."); + return JsonConvert.SerializeObject(Notification.Reponse.createResponse(4, GameSessions.StatusSessionInstance())); + } + } + Console.WriteLine("WebSocket.cs unknown API call: " + text); + result = ""; + } + else { result = jsonData; } return result; } - // Token: 0x0200002A RID: 42 + // Token: 0x0200002B RID: 43 public enum ResponseResult { - // Token: 0x04000091 RID: 145 - RelationshipChanged = 1, // Token: 0x04000092 RID: 146 - MessageReceived, + RelationshipChanged = 1, // Token: 0x04000093 RID: 147 - MessageDeleted, + MessageReceived, // Token: 0x04000094 RID: 148 - PresenceHeartbeatResponse, + MessageDeleted, // Token: 0x04000095 RID: 149 - SubscriptionListUpdated = 9, + PresenceHeartbeatResponse, // Token: 0x04000096 RID: 150 - SubscriptionUpdateProfile = 11, + SubscriptionListUpdated = 9, // Token: 0x04000097 RID: 151 - SubscriptionUpdatePresence, + SubscriptionUpdateProfile = 11, // Token: 0x04000098 RID: 152 - SubscriptionUpdateGameSession, + SubscriptionUpdatePresence, // Token: 0x04000099 RID: 153 - SubscriptionUpdateRoom, + SubscriptionUpdateGameSession, // Token: 0x0400009A RID: 154 - ModerationQuitGame = 20, + SubscriptionUpdateRoom, // Token: 0x0400009B RID: 155 - ModerationUpdateRequired, + ModerationQuitGame = 20, // Token: 0x0400009C RID: 156 - ModerationKick, + ModerationUpdateRequired, // Token: 0x0400009D RID: 157 - ModerationKickAttemptFailed, + ModerationKick, // Token: 0x0400009E RID: 158 - GiftPackageReceived = 30, + ModerationKickAttemptFailed, // Token: 0x0400009F RID: 159 - ProfileJuniorStatusUpdate = 40, + GiftPackageReceived = 30, // Token: 0x040000A0 RID: 160 - RelationshipsInvalid = 50, + ProfileJuniorStatusUpdate = 40, // Token: 0x040000A1 RID: 161 + RelationshipsInvalid = 50, + // Token: 0x040000A2 RID: 162 StorefrontBalanceAdd = 60 } - // Token: 0x0200002B RID: 43 + // Token: 0x0200002C RID: 44 public class Reponse { - // Token: 0x1700005C RID: 92 - // (get) Token: 0x06000106 RID: 262 RVA: 0x000027DA File Offset: 0x000009DA - // (set) Token: 0x06000107 RID: 263 RVA: 0x000027E2 File Offset: 0x000009E2 + // Token: 0x1700005F RID: 95 + // (get) Token: 0x0600010D RID: 269 + // (set) Token: 0x0600010E RID: 270 public int Id { get; set; } - // Token: 0x1700005D RID: 93 - // (get) Token: 0x06000108 RID: 264 RVA: 0x000027EB File Offset: 0x000009EB - // (set) Token: 0x06000109 RID: 265 RVA: 0x000027F3 File Offset: 0x000009F3 + // Token: 0x17000060 RID: 96 + // (get) Token: 0x0600010F RID: 271 + // (set) Token: 0x06000110 RID: 272 public object Msg { get; set; } - // Token: 0x0600010A RID: 266 RVA: 0x00004FC0 File Offset: 0x000031C0 + // Token: 0x06000111 RID: 273 public static Notification.Reponse createResponse(int id, object msg) { return new Notification.Reponse diff --git a/Program.cs b/Program.cs index 9394870..eae0694 100644 --- a/Program.cs +++ b/Program.cs @@ -10,13 +10,13 @@ namespace start { static void Main(string[] args) { - Config.setup(); + Setup.setup(); goto Start; Start: Console.WriteLine("OpenRec - Open source RecNet server software."); Console.WriteLine("Made and provided by RecRoom 2016."); - Console.WriteLine("Download source code here: https://github.com/recroom2016/OpenRec."); + Console.WriteLine("Download source code here: https://github.com/recroom2016/OpenRec"); Console.WriteLine("Discord: https://discord.gg/daC8QUhnFP" + Environment.NewLine); Console.WriteLine("1) Modify Settings" + Environment.NewLine + "2) Modify Profile" + Environment.NewLine + "3) Start Server"); string readline = Console.ReadLine(); @@ -33,7 +33,7 @@ namespace start if (readline3 == "1") { Console.Clear(); - Console.WriteLine("Current Username: " + File.ReadAllText("SaveData\\Profile\\username.txt)")); + Console.WriteLine("Current Username: " + File.ReadAllText("SaveData\\Profile\\username.txt")); Console.WriteLine("New Username: "); string newusername = Console.ReadLine(); File.WriteAllText("SaveData\\Profile\\username.txt)", newusername); diff --git a/Setting.cs b/Setting.cs new file mode 100644 index 0000000..4748c1c --- /dev/null +++ b/Setting.cs @@ -0,0 +1,18 @@ +using System; + +namespace api +{ + // Token: 0x0200003D RID: 61 + internal class Setting + { + // Token: 0x170000AC RID: 172 + // (get) Token: 0x060001C8 RID: 456 RVA: 0x00002D5B File Offset: 0x00000F5B + // (set) Token: 0x060001C9 RID: 457 RVA: 0x00002D63 File Offset: 0x00000F63 + public string Key { get; set; } + + // Token: 0x170000AD RID: 173 + // (get) Token: 0x060001CA RID: 458 RVA: 0x00002D6C File Offset: 0x00000F6C + // (set) Token: 0x060001CB RID: 459 RVA: 0x00002D74 File Offset: 0x00000F74 + public string Value { get; set; } + } +} \ No newline at end of file diff --git a/Settings.cs b/Settings.cs new file mode 100644 index 0000000..92c738b --- /dev/null +++ b/Settings.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Newtonsoft.Json; + +namespace api +{ + // Token: 0x0200003C RID: 60 + internal class Settings + { + // Token: 0x060001C1 RID: 449 RVA: 0x00002D10 File Offset: 0x00000F10 + public static string GetPlayerSettings() + { + if (Settings.playerSettings == null) + { + if (File.Exists(Settings.SettingsPath)) + { + Settings.playerSettings = Settings.LoadSettings(); + } + else + { + Settings.playerSettings = Settings.CreateDefaultSettings(); + } + } + return JsonConvert.SerializeObject(Settings.playerSettings); + } + + // Token: 0x060001C2 RID: 450 RVA: 0x000061FC File Offset: 0x000043FC + public static void SetPlayerSettings(string jsonData) + { + if (jsonData == "") + { + Console.WriteLine("[Settings][Set] Json Data is empty."); + return; + } + Setting setting = JsonConvert.DeserializeObject(jsonData); + for (int i = 0; i < Settings.playerSettings.Count; i++) + { + if (Settings.playerSettings[i].Key == setting.Key) + { + Settings.playerSettings[i].Value = setting.Value; + Settings.SaveSettings(Settings.playerSettings); + return; + } + } + Settings.playerSettings.Add(new Setting + { + Key = setting.Key, + Value = setting.Value + }); + Settings.SaveSettings(Settings.playerSettings); + } + + // Token: 0x060001C3 RID: 451 RVA: 0x000062AC File Offset: 0x000044AC + public static List CreateDefaultSettings() + { + return new List + { + new Setting + { + Key = "MOD_BLOCKED_TIME", + Value = 0f.ToString() + }, + new Setting + { + Key = "MOD_BLOCKED_DURATION", + Value = 0f.ToString() + }, + new Setting + { + Key = "PlayerSessionCount", + Value = 0f.ToString() + }, + new Setting + { + Key = "ShowRoomCenter", + Value = 1f.ToString() + }, + new Setting + { + Key = "QualitySettings", + Value = 3.ToString() + }, + new Setting + { + Key = "Recroom.OOBE", + Value = 100.ToString() + }, + new Setting + { + Key = "VoiceFilter", + Value = 0f.ToString() + }, + new Setting + { + Key = "VIGNETTED_TELEPORT_ENABLED", + Value = 0f.ToString() + }, + new Setting + { + Key = "CONTINUOUS_ROTATION_MODE", + Value = 0f.ToString() + }, + new Setting + { + Key = "ROTATION_INCREMENT", + Value = 0f.ToString() + }, + new Setting + { + Key = "ROTATE_IN_PLACE_ENABLED", + Value = 0f.ToString() + }, + new Setting + { + Key = "TeleportBuffer", + Value = 0f.ToString() + }, + new Setting + { + Key = "VoiceChat", + Value = 0f.ToString() + }, + new Setting + { + Key = "PersonalBubble", + Value = 0f.ToString() + }, + new Setting + { + Key = "ShowNames", + Value = 1f.ToString() + }, + new Setting + { + Key = "H.264 plugin", + Value = 1f.ToString() + } + }; + } + + // Token: 0x060001C4 RID: 452 RVA: 0x00006548 File Offset: 0x00004748 + public static List LoadSettings() + { + List list = new List(); + using (BinaryReader binaryReader = new BinaryReader(File.Open(Settings.SettingsPath, FileMode.Open))) + { + while (binaryReader.BaseStream.Position != binaryReader.BaseStream.Length) + { + Setting item = new Setting + { + Key = binaryReader.ReadString(), + Value = binaryReader.ReadString() + }; + list.Add(item); + } + } + return list; + } + + // Token: 0x060001C5 RID: 453 RVA: 0x000065C8 File Offset: 0x000047C8 + public static void SaveSettings(List settings) + { + using (BinaryWriter binaryWriter = new BinaryWriter(File.Create("SaveData\\"))) + { + foreach (Setting setting in settings) + { + binaryWriter.Write(setting.Key); + binaryWriter.Write(setting.Value); + } + } + } + + // Token: 0x040000F0 RID: 240 + private static List playerSettings; + + // Token: 0x040000F1 RID: 241 + public static string SettingsPath = + "PlayerSettings.dat"; + } +} diff --git a/Setup.cs b/Setup.cs new file mode 100644 index 0000000..bae89d6 --- /dev/null +++ b/Setup.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Net; + +namespace start +{ + class Setup + { + public static void setup() + { + Console.WriteLine("Setting up..."); + Directory.CreateDirectory("SaveData\\Profile\\"); + if (!(File.Exists("SaveData\\avatar.txt"))) + { + File.WriteAllText("SaveData\\avatar.txt", new WebClient().DownloadString("https://raw.githubusercontent.com/recroom2016/OpenRec/master/Download/avatar.txt")); + } + else if (File.ReadAllText("SaveData\\avatar.txt") == "") + { + File.WriteAllText("SaveData\\avatar.txt", new WebClient().DownloadString("https://raw.githubusercontent.com/recroom2016/OpenRec/master/Download/avatar.txt")); + } + if (!(File.Exists("SaveData\\Profile\\username.txt"))) + { + File.WriteAllText("SaveData\\Profile\\username.txt", "DefaultUsername"); + } + if (!(File.Exists("SaveData\\profileimage.png"))) + { + File.WriteAllBytes("SaveData\\profileimage.png", new WebClient().DownloadData("https://github.com/OpenRecRoom/OpenRec/raw/main/profileimage.png")); + } + Console.WriteLine("Done!"); + Console.Clear(); + } + } +} diff --git a/WebSocket.cs b/WebSocket.cs index 6d79805..67242b2 100644 --- a/WebSocket.cs +++ b/WebSocket.cs @@ -24,7 +24,7 @@ namespace ws // Token: 0x06000013 RID: 19 RVA: 0x0000209D File Offset: 0x0000029D protected override void OnMessage(MessageEventArgs e) { - Console.WriteLine("WebSocket.cs called for. Not yet implemented."); + Console.WriteLine("WebSocket.cs called for."); base.Send(Notification.ProcessRequest(e.Data)); } }