Files
2026-10-16 23:33:13 -07:00

372 lines
26 KiB
C#

using Microsoft.EntityFrameworkCore;
using RadicadeServer.DB;
using RadicadeServer.RecNet.Accounts.Local;
using RadicadeServer.RecNet.Accounts;
using RadicadeServer.RecNet.Auth.Cached;
using RadicadeServer.RecNet.Auth;
using RadicadeServer.RecNet;
using RadicadeServer.RecNet.Config;
using RadicadeServer.RecNet.Enums;
using RadicadeServer.RecNet.Leveling;
using RadicadeServer.RecNet.Moderation;
using RadicadeServer.RecNet.Rooms;
using RadicadeServer.Extensions;
using System;
using RadicadeServer.RecNet.Enums.Players;
using RadicadeServer.RecNet.Enums.Rooms;
using RadicadeServer.RecNet.Progression;
namespace RadicadeServer.Utils
{
public static class FirstTimeUtils
{
public const string AutoMicMutingConfig = "{\"MicSpamVolumeThreshold\":1.125,\"MicVolumeSampleInterval\":0.25,\"MicVolumeSampleRollingWindowLength\":7,\"MicSpamSamplePercentageForWarning\":0.8,\"MicSpamSamplePercentageForWarningToEnd\":0.2,\"MicSpamSamplePercentageForForceMute\":0.8,\"MicSpamSamplePercentageForForceMuteToEnd\":0.2,\"MicSpamWarningStateVolumeMultiplier\":0.25}";
public const string StorefrontConfig = "{\"MinPlayerLevelForGifting\":1,\"LatestStoreBadgeDateTime\":\"2025-11-13T17:27:21.5641043Z\"}";
public const string LevelProgressionMap = "[{\"Level\":0,\"RequiredXp\":0,\"GiftDropId\":null},{\"Level\":1,\"RequiredXp\":10,\"GiftDropId\":3288},{\"Level\":2,\"RequiredXp\":10,\"GiftDropId\":3293},{\"Level\":3,\"RequiredXp\":10,\"GiftDropId\":3288},{\"Level\":4,\"RequiredXp\":20,\"GiftDropId\":3293},{\"Level\":5,\"RequiredXp\":20,\"GiftDropId\":3288},{\"Level\":6,\"RequiredXp\":20,\"GiftDropId\":3293},{\"Level\":7,\"RequiredXp\":20,\"GiftDropId\":3288},{\"Level\":8,\"RequiredXp\":20,\"GiftDropId\":3293},{\"Level\":9,\"RequiredXp\":20,\"GiftDropId\":3288},{\"Level\":10,\"RequiredXp\":20,\"GiftDropId\":3293},{\"Level\":11,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":12,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":13,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":14,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":15,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":16,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":17,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":18,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":19,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":20,\"RequiredXp\":45,\"GiftDropId\":3293},{\"Level\":21,\"RequiredXp\":115,\"GiftDropId\":3293},{\"Level\":22,\"RequiredXp\":115,\"GiftDropId\":3292},{\"Level\":23,\"RequiredXp\":115,\"GiftDropId\":3293},{\"Level\":24,\"RequiredXp\":115,\"GiftDropId\":3292},{\"Level\":25,\"RequiredXp\":115,\"GiftDropId\":3293},{\"Level\":26,\"RequiredXp\":115,\"GiftDropId\":3292},{\"Level\":27,\"RequiredXp\":115,\"GiftDropId\":3293},{\"Level\":28,\"RequiredXp\":115,\"GiftDropId\":3292},{\"Level\":29,\"RequiredXp\":115,\"GiftDropId\":3293},{\"Level\":30,\"RequiredXp\":115,\"GiftDropId\":3292},{\"Level\":31,\"RequiredXp\":360,\"GiftDropId\":3291},{\"Level\":32,\"RequiredXp\":360,\"GiftDropId\":3292},{\"Level\":33,\"RequiredXp\":360,\"GiftDropId\":3292},{\"Level\":34,\"RequiredXp\":360,\"GiftDropId\":3292},{\"Level\":35,\"RequiredXp\":360,\"GiftDropId\":3291},{\"Level\":36,\"RequiredXp\":360,\"GiftDropId\":3292},{\"Level\":37,\"RequiredXp\":360,\"GiftDropId\":3292},{\"Level\":38,\"RequiredXp\":360,\"GiftDropId\":3292},{\"Level\":39,\"RequiredXp\":360,\"GiftDropId\":3292},{\"Level\":40,\"RequiredXp\":360,\"GiftDropId\":3291},{\"Level\":41,\"RequiredXp\":1080,\"GiftDropId\":3291},{\"Level\":42,\"RequiredXp\":1080,\"GiftDropId\":3291},{\"Level\":43,\"RequiredXp\":1080,\"GiftDropId\":3291},{\"Level\":44,\"RequiredXp\":1080,\"GiftDropId\":3291},{\"Level\":45,\"RequiredXp\":1080,\"GiftDropId\":3291},{\"Level\":46,\"RequiredXp\":1080,\"GiftDropId\":3291},{\"Level\":47,\"RequiredXp\":1080,\"GiftDropId\":3291},{\"Level\":48,\"RequiredXp\":1080,\"GiftDropId\":3291},{\"Level\":49,\"RequiredXp\":1080,\"GiftDropId\":3291},{\"Level\":50,\"RequiredXp\":1080,\"GiftDropId\":3290},{\"Level\":51,\"RequiredXp\":270,\"GiftDropId\":33363},{\"Level\":52,\"RequiredXp\":270,\"GiftDropId\":3292},{\"Level\":53,\"RequiredXp\":297,\"GiftDropId\":33462},{\"Level\":54,\"RequiredXp\":297,\"GiftDropId\":3291},{\"Level\":55,\"RequiredXp\":297,\"GiftDropId\":18152},{\"Level\":56,\"RequiredXp\":356,\"GiftDropId\":3292},{\"Level\":57,\"RequiredXp\":356,\"GiftDropId\":33466},{\"Level\":58,\"RequiredXp\":356,\"GiftDropId\":3291},{\"Level\":59,\"RequiredXp\":356,\"GiftDropId\":3314},{\"Level\":60,\"RequiredXp\":356,\"GiftDropId\":3290},{\"Level\":61,\"RequiredXp\":428,\"GiftDropId\":3292},{\"Level\":62,\"RequiredXp\":428,\"GiftDropId\":33338},{\"Level\":63,\"RequiredXp\":428,\"GiftDropId\":3292},{\"Level\":64,\"RequiredXp\":428,\"GiftDropId\":33463},{\"Level\":65,\"RequiredXp\":428,\"GiftDropId\":4463},{\"Level\":66,\"RequiredXp\":428,\"GiftDropId\":3291},{\"Level\":67,\"RequiredXp\":428,\"GiftDropId\":3880},{\"Level\":68,\"RequiredXp\":428,\"GiftDropId\":3292},{\"Level\":69,\"RequiredXp\":428,\"GiftDropId\":33464},{\"Level\":70,\"RequiredXp\":428,\"GiftDropId\":33329},{\"Level\":71,\"RequiredXp\":556,\"GiftDropId\":3292},{\"Level\":72,\"RequiredXp\":556,\"GiftDropId\":3025},{\"Level\":73,\"RequiredXp\":556,\"GiftDropId\":3291},{\"Level\":74,\"RequiredXp\":556,\"GiftDropId\":33305},{\"Level\":75,\"RequiredXp\":556,\"GiftDropId\":33467},{\"Level\":76,\"RequiredXp\":556,\"GiftDropId\":3292},{\"Level\":77,\"RequiredXp\":556,\"GiftDropId\":33465},{\"Level\":78,\"RequiredXp\":556,\"GiftDropId\":3291},{\"Level\":79,\"RequiredXp\":556,\"GiftDropId\":33202},{\"Level\":80,\"RequiredXp\":556,\"GiftDropId\":33051},{\"Level\":81,\"RequiredXp\":778,\"GiftDropId\":3291},{\"Level\":82,\"RequiredXp\":778,\"GiftDropId\":33335},{\"Level\":83,\"RequiredXp\":778,\"GiftDropId\":3292},{\"Level\":84,\"RequiredXp\":778,\"GiftDropId\":33281},{\"Level\":85,\"RequiredXp\":778,\"GiftDropId\":33203},{\"Level\":86,\"RequiredXp\":778,\"GiftDropId\":3291},{\"Level\":87,\"RequiredXp\":778,\"GiftDropId\":33468}]";
public const string DailyObjectives = "[[{\"type\":1030,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":1033,\"score\":10,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":2000,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null}],[{\"type\":601,\"score\":2,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":32,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":6,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null}],[{\"type\":301,\"score\":2,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":302,\"score\":2,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":6,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null}],[{\"type\":701,\"score\":2,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":702,\"score\":20,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":32,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null}],[{\"type\":1010,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":1013,\"score\":10,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":6,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null}],[{\"type\":500,\"score\":2,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":502,\"score\":20,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":2000,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null}],[{\"type\":1020,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":1023,\"score\":10,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null},{\"type\":32,\"score\":1,\"xp\":200,\"descriptionOverride\":null,\"tooltipOverride\":null}]]";
public const string NamedImages = "[{\"FriendlyImageName\":\"DormRoomBucket\",\"ImageName\":\"n/67gesMhbOkCd3-qO1cKkIg\",\"StartTime\":\"2018-09-27T18:00:00Z\",\"EndTime\":\"2222-02-22T22:22:00Z\"},{\"FriendlyImageName\":\"ControlSchemeTutorial_Creator\",\"ImageName\":\"n/877acd69ecf44493a21021fadb5f77e4\",\"StartTime\":\"2023-05-23T00:12:00Z\",\"EndTime\":\"2030-05-23T00:12:00Z\"},{\"FriendlyImageName\":\"UI_Menu_Token_Image_10\",\"ImageName\":\"n/54094cbd9d0b455fb949266d1679a834\",\"StartTime\":\"2025-06-02T07:00:00Z\",\"EndTime\":\"2099-06-02T07:00:00Z\"},{\"FriendlyImageName\":\"UI_Menu_Token_Image_25\",\"ImageName\":\"n/4e4e496810ae4bbcb61564c34df450b6\",\"StartTime\":\"2025-06-02T07:00:00Z\",\"EndTime\":\"2099-06-02T07:00:00Z\"},{\"FriendlyImageName\":\"UI_Menu_Token_Image_50\",\"ImageName\":\"n/ca1c08334a7a422b941ef2987b636edf\",\"StartTime\":\"2025-06-02T07:00:00Z\",\"EndTime\":\"2099-06-02T07:00:00Z\"},{\"FriendlyImageName\":\"UI_Menu_Token_Image_100\",\"ImageName\":\"n/979ea0d3d9e9487cb7ca56c37c7ece6b\",\"StartTime\":\"2025-06-02T07:00:00Z\",\"EndTime\":\"2099-06-02T07:00:00Z\"},{\"FriendlyImageName\":\"MintFloatieBetterThumbnail\",\"ImageName\":\"n/23998eb5a1714dcc94a97b9b6ea82d50\",\"StartTime\":\"2025-07-02T23:24:00Z\",\"EndTime\":\"2026-07-02T23:24:00Z\"},{\"FriendlyImageName\":\"IceCreamHatBetterThumbnail\",\"ImageName\":\"n/aec858dad86b42238338da60a5071dc2\",\"StartTime\":\"2025-07-02T23:25:00Z\",\"EndTime\":\"2026-07-02T23:25:00Z\"},{\"FriendlyImageName\":\"IceCreamShirtBetterThumbnail\",\"ImageName\":\"n/55a94ecff89543b0bef248bc1b232906\",\"StartTime\":\"2025-07-02T23:25:00Z\",\"EndTime\":\"2026-07-02T23:25:00Z\"},{\"FriendlyImageName\":\"IceCreamPantsBetterThumbnail\",\"ImageName\":\"n/3cd34681c224408e9f1a8d29ed3efd66\",\"StartTime\":\"2025-07-02T23:26:00Z\",\"EndTime\":\"2026-07-02T23:26:00Z\"},{\"FriendlyImageName\":\"IceCreamGlovesBetterThumbnail\",\"ImageName\":\"n/a68d8ae9938045ee895028f0be46e141\",\"StartTime\":\"2025-07-02T23:26:00Z\",\"EndTime\":\"2026-07-02T23:26:00Z\"}]";
public static readonly string LoadingScreen = LoadingScreenImages.Tips.ToJson();
public const string GiftDropStoreItems = "[{\"PurchasableItemId\":2597201,\"Type\":0,\"IsFeatured\":true,\"Prices\":[{\"CurrencyType\":2,\"Price\":100}],\"GiftDrops\":[{\"GiftDropId\":0,\"ItemSetId\":0,\"ItemSetFriendlyName\":\"rawdata\",\"FriendlyName\":\"rawdata\",\"Tooltip\":\"rawdata\",\"IsQuery\":false,\"Unique\":false,\"SubscribersOnly\":false,\"ConsumableItemDesc\":\"\",\"AvatarItemDesc\":\"274cb9b2-2f59-47ea-9a8d-a5b656d148c6,,,\",\"AvatarItemType\":0,\"EquipmentPrefabName\":\"\",\"EquipmentModificationGuid\":\"\",\"CurrencyType\":0,\"Currency\":0,\"Xp\":0,\"Platform\":0,\"PlatformsToSpawnOn\":0,\"Context\":0,\"Rarity\":0}]}]";
public const string CommunityBoard = "{\"FeaturedPlayer\":{\"Id\":1,\"TitleOverride\":\"Community Star\",\"UrlOverride\":\"\"},\"FeaturedRoomGroup\":{\"FeaturedRoomGroupId\":1,\"Name\":\"Top Picks\",\"Rooms\":[{\"RoomId\":2,\"RoomName\":\"Rec Center\",\"ImageName\":\"\"},{\"RoomId\":4,\"RoomName\":\"Golden Trophy\",\"ImageName\":\"\"}]},\"CurrentAnnouncement\":{\"Message\":\"Welcome to Radicade!\",\"MoreInfoUrl\":\"\"},\"InstagramImages\":null,\"Videos\":null}";
public const string CurrentFeatured = "{\"FeaturedRoomGroupId\":0,\"Name\":\"RecRoomOriginals\",\"Rooms\":[{\"RoomId\":2,\"RoomName\":\"RecCenter\",\"ImageName\":\"RecCenter\"}]}";
private static Dictionary<string, string> Images = new();
private static void ParseImagesFile()
{
if (!File.Exists(DBConfig.DefaultImagesFile))
{
return;
}
string readFile = File.ReadAllText(DBConfig.DefaultImagesFile);
string[] keys = readFile.Split('\n', StringSplitOptions.RemoveEmptyEntries);
foreach (var key in keys)
{
if (key.StartsWith("#")) continue;
if (string.IsNullOrEmpty(key)) continue;
string[] values = key.Split('=', 2, StringSplitOptions.TrimEntries);
if (values.Length != 2) continue;
Images[values[0]] = values[1];
}
}
public async static Task DownloadImages()
{
if (Images.Count == 0)
ParseImagesFile();
HttpClient httpClient = new HttpClient
{
Timeout = TimeSpan.FromSeconds(30)
};
foreach (var image in Images.Keys)
{
string filePath = Path.Join(DBConfig.CDNImages, image);
string url = Images[image];
if (File.Exists(filePath)) continue;
using var response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
if (!response.IsSuccessStatusCode)
{
continue;
}
await using var stream = await response.Content.ReadAsStreamAsync();
await using var fileStream = File.Create(filePath);
await stream.CopyToAsync(fileStream);
}
httpClient.Dispose();
}
public async static Task AddCoach(this RecDBContext ctx)
{
Profile profile = new Profile();
profile.platforms = 1;
profile.username = "Coach";
profile.profileImage = "default";
profile.displayName = profile.username;
profile.isJunior = false;
profile.createdAt = DateTime.Now;
await ctx.Profiles.AddAsync(profile);
await ctx.SaveChangesAsync();
PlayerAvatar playerAvatar = new PlayerAvatar();
playerAvatar.Avatar = DBConfig.DefaultAvatar;
playerAvatar.Outfits = "[]";
playerAvatar.AccountId = profile.accountId;
Reputation reputation = new Reputation();
reputation.AccountId = profile.accountId;
PlayerSettings settings = new PlayerSettings();
settings.AccountId = profile.accountId;
settings.Settings = DBConfig.DefaultSettings2023;
ProgressionData progression = new ProgressionData();
progression.PlayerId = profile.accountId;
progression.XP = 0;
progression.Level = 99;
progression.Progress = new ProgressionJson().ToJson();
RealPresence presence = new RealPresence();
presence.playerId = profile.accountId;
presence.deviceClass = DeviceClass.Unknown;
presence.statusVisibility = StatusVisibility.Public;
presence.vRMovementMode = VRMovementModes.TELEPORT;
presence.roomInstance = null;
presence.LoginLock = null;
Currency currency = new Currency();
currency.AccountId = profile.accountId;
PlayerUnlocks unlocks = new PlayerUnlocks();
unlocks.AccountId = profile.accountId;
CachedLogin cachedLogin = new CachedLogin();
cachedLogin.accountId = profile.accountId;
cachedLogin.platform = Platforms.All;
cachedLogin.platformId = "0";
cachedLogin.lastLoginTime = DateTime.Now;
PlayerData playerData = new PlayerData();
playerData.AccountId = profile.accountId;
playerData.Phone = "";
playerData.Birthday = DateTime.MinValue;
playerData.Parent = null;
playerData.AppVersion = DBConfig.GameVersion;
playerData.DeviceClass = DeviceClass.Unknown;
playerData.NameChanges = 99;
playerData.Email = "";
playerData.Hashword = "";
playerData.JuniorState = JuniorState.BasedOnBirthday;
playerData.Visibility = StatusVisibility.Public;
await ctx.CachedLogins.AddAsync(cachedLogin);
await ctx.Avatars.AddAsync(playerAvatar);
await ctx.Reputations.AddAsync(reputation);
await ctx.PlayerSettings.AddAsync(settings);
await ctx.Presences.AddAsync(presence);
await ctx.Currency.AddAsync(currency);
await ctx.Unlocks.AddAsync(unlocks);
await ctx.Players.AddAsync(playerData);
await ctx.Progression.AddAsync(progression);
await ctx.SaveChangesAsync();
}
public async static Task AddServerConfig(this RecDBContext ctx)
{
await ctx.ServerConfig.AddAsync(new ServerConfigVal("AccountCreate.RequireSteamTicket", "false"));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("WhitelistOnly", "false"));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("SteamWhitelist", ""));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("Announcement", "[]"));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("NamedImages", NamedImages));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("LoadingScreenTipData", LoadingScreen));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("CommunityBoard", CommunityBoard));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("CurrentFeaturedRooms", CurrentFeatured));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("Filters", "rro"));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("CharadesWords", "Dog;Cat;Bird;Fish;Monkey;Elephant;Dinosaur;Robot;Superhero;Pirate;Cowboy;Astronaut;Chef;Doctor;Police Officer;Firefighter;Teacher;Baby;Zombie;Ghost;Brushing Teeth;Taking a Shower;Eating Spaghetti;Making a Sandwich;Riding a Bike;Swimming;Running;Sleeping;Dancing;Singing;Fishing;Cooking;Driving a Car;Flying a Plane;Basketball;Soccer;Guitar;Taking a Selfie;Opening a Present;Walking a Dog;Chicken;LEGO;Banana Peel;Bees;Fly;Elevator;Phone;Jar;Spider;Dinosaur;Invisible Enemy;Wind;Mosquito;Falling;Reflection;Sneaking;Glass Door;Carrying Boxes;Revolving Door;Floor Is Lava;Magician;Detective;Ninja;Vampire;Werewolf;King;Queen;Knight;Scientist;Construction Worker;Photographer;Rock Star;News Reporter;Secret Agent;Treasure Hunter;Time Traveler;Supervillain;Circus Performer;Archaeologist;Lifeguard;Raccoon;Penguin;Pizza;Grandma;Alien;Wi-Fi;Police Officer;Superhero;Job;Horse;Fish;Ghost;Vampire;Monkey;Astronaut;Wizard;Shark;Tiny Door"));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("CharadesAprilFoolsWords", "Prank;Joke;Fool;Trick;Clown;Jester;Comedian;Confetti;Balloon;Pie;Banana;Chicken;Spider;Bug;Snake;Mustache;Disguise;Mask;Costume;Surprise;Laughter;Sneak;Hide;Scare;Troll;Mischief;Chaos;Fake;Lie;Trap;Decoy;Magic;Wizard;Detective;Thief;Rubber Chicken;Whoopee Cushion;Whistle;Air Horn;Party;Celebration;Secret;Shock;Confusion;Scream;Giggle;Smile;Prankster;Foolish;Trickster;Gotcha;April Fools"));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("Icebreakers", "Favorite Game;First Game;Favorite Room;Funniest Gaming Moment;Dream Game Feature;Favorite Platform;Favorite Game Genre;Worst Game;Favorite Soundtrack;Favorite Video Game World;Favorite Food;Weirdest Food;Favorite Animal;Weirdest Dream;Dream Skill;Useless Talent;Favorite Meal;Favorite Movie;Favorite TV Show;Favorite Song;Favorite Holiday;Morning Person;Night Owl;Dream Vacation;Dream Job;Favorite Season;Favorite Hobby;Favorite Sport;Favorite Color;Favorite Memory;Flying;Invisibility;Unlimited Money;Free Time;Underwater;Space;Internet;Video Games;Rewind;Pause;Future;Past;Luck;Intelligence;Theme Park;Video Game;Tiny Version;Giant Version;Loading Screen;Username;NPC;Avatar;Food Name;Superpower;Aliens;Pet;Dumbest Argument;Dream House;Dream Car;Favorite Character;Favorite YouTuber;Favorite Musician;Favorite Book;Favorite App;Favorite Website;Favorite Holiday;Favorite Game Character;Favorite Snack;Favorite Drink;Favorite Place;Favorite School Subject;Favorite Sport;Favorite Meme;Favorite Emoji;Favorite Childhood Game;Dream Pet;Dream Superpower;Dream Adventure;Best Friend;Biggest Fear;Hidden Talent;Bucket List;Perfect Day;Favorite Weather;Favorite Time of Day;Favorite Season;Favorite Number;Favorite Letter;Favorite Fruit;Favorite Candy;Favorite Restaurant;Favorite Pizza Topping;Favorite Ice Cream;Favorite Cereal;Favorite Breakfast;Favorite Fast Food;Favorite Dessert;Favorite Vegetable;Favorite Cartoon;Favorite Superhero;Favorite Villain;Favorite Movie Character;Favorite Game Developer"));
await ctx.ServerConfig.AddAsync(new ServerConfigVal("HighRanks", "1"));
}
public async static Task AddConfig(this RecDBContext ctx)
{
MainConfig mainConfig = new MainConfig();
mainConfig.ShareBaseUrl = DBConfig.NameServer.WWW + "{0}";
mainConfig.CdnBaseUri = DBConfig.NameServer.CDN;
mainConfig.LevelProgressionMaps = LevelProgressionMap;
mainConfig.AutoMicMutingConfig = AutoMicMutingConfig;
mainConfig.StorefrontConfig = StorefrontConfig;
mainConfig.DailyObjectives = DailyObjectives;
mainConfig.ServerMaintenance = "{\"StartsInMinutes\":0}";
mainConfig.RoomKeyConfig = "{\"MaxKeysPerRoom\":500}";
mainConfig.RoomCurrencyConfig = "{}";
mainConfig.GiftDropStoreItems = GiftDropStoreItems;
mainConfig.FUCKYOUMICROSOFT = Guid.NewGuid().ToString();
await ctx.Config.AddAsync(mainConfig);
}
public async static Task AddDefaultRooms(this RecDBContext ctx)
{
await AddDormRoom(ctx);
await DefaultRooms.EnsureAsync(ctx);
}
public async static Task AddDormRoom(this RecDBContext ctx)
{
SubRoom dormSubRoom = new SubRoom();
dormSubRoom.DataBlob = "";
dormSubRoom.IsSandbox = true;
dormSubRoom.MaxPlayers = 20;
dormSubRoom.Accessibility = RecNet.Enums.Accessibility.Private;
dormSubRoom.Name = "Home";
dormSubRoom.UnitySceneId = "76d98498-60a1-430c-ab76-b54a29b7a163";
dormSubRoom.DataBlob = "";
RoomStats roomStats = new RoomStats();
RoomData dormRoom = new RoomData();
dormRoom.Name = "DormRoom";
dormRoom.ImageName = DormRoomImageName;
dormRoom.Description = "Your private room.";
dormRoom.CreatorAccountId = 1;
dormRoom.IsRRO = true;
dormRoom.IsDorm = true;
dormRoom.Accessibility = RecNet.Enums.Accessibility.Private;
dormRoom.CreatedAt = DateTime.Now;
dormRoom.State = RoomState.Active;
dormRoom.CloningAllowed = true;
dormRoom.Tags = StringTools.CreateTagString(new List<ItemTag> { new ItemTag { Type = TagType.General, Tag = "dormroom" } });
await ctx.Rooms.AddAsync(dormRoom);
await ctx.SaveChangesAsync();
dormSubRoom.RoomId = dormRoom.RoomId;
roomStats.RoomId = dormRoom.RoomId;
await ctx.SubRooms.AddAsync(dormSubRoom);
await ctx.RoomStats.AddAsync(roomStats);
await ctx.SaveChangesAsync();
}
public const string DormRoomImageName = "Dorm";
public async static Task NormalizeDormRoomImagesAsync(this RecDBContext ctx)
{
var unsetNames = new[] { "", "default.png", DBConfig.DefaultRoomImage };
var dorms = await ctx.Rooms.Where(room => room.IsDorm).ToListAsync();
var missing = dorms
.Where(room => unsetNames.Any(unset => string.Equals(unset, room.ImageName?.Trim() ?? string.Empty, StringComparison.OrdinalIgnoreCase)))
.ToList();
if (missing.Count == 0)
return;
foreach (var dorm in missing)
dorm.ImageName = DormRoomImageName;
await ctx.SaveChangesAsync();
}
public async static Task AddGameConfigs(this RecDBContext ctx)
{
await ctx.GameConfig.AddAsync(new ConfigVal("Screens.ForceVerification", "1"));
await ctx.GameConfig.AddAsync(new ConfigVal("SafePlaySFXAudioSourceSounds", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("Backtrace.config", "0|0.05|0|20|50|1|0|0|1000"));
await ctx.GameConfig.AddAsync(new ConfigVal("Backtrace.enabledLikelihood", "1.0|1.0|1.0|1.0|1.0|1.0|1.0|1.0"));
await ctx.GameConfig.AddAsync(new ConfigVal("RRUI.UseRRUIHomeScreen", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("RRUI.UseNewProfile", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("UseRRUIEventsScreen", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("ClickOnName.MaxRaycastDistance", "5"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.ScreenSharing.CompressionQualityMultiplier", "1.0"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.ScreenSharing.RefreshHzMultiplier", "30.0"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.ScreenSharing.ResolutionMultiplier", "1.0"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.ScreenSharing.EnableZipCompression", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.ScreenSharing.MaxFragmentBytes", "15360"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.UseDeveloperMode", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.Circuits.MaxChipResources", "3000"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.Persistence.MaxCloudVariables", "100"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.EnableRRUIConfigMenu", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.ForbiddenSavedSpawnableTools", ""));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.RoomSavingEnabled", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.InventionSavingEnabled", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.MaxChipsVisible", "5000"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.MaxChipsUnculled", "200"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.IgnoreInkCost", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.Persistence.Enabled", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.Persistence.AutosaveIntervalSeconds", "300"));
await ctx.GameConfig.AddAsync(new ConfigVal("UGC.EnableInventionsInBetaRooms", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("Rendering.DisableSrpBatcher", ""));
await ctx.GameConfig.AddAsync(new ConfigVal("splitTestSoftOverrides", ""));
await ctx.GameConfig.AddAsync(new ConfigVal("RoomDetails.PhotoRollEnabled", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("runningNetworkTimeout", "30"));
await ctx.GameConfig.AddAsync(new ConfigVal("loadingNetworkTimeout", "180"));
await ctx.GameConfig.AddAsync(new ConfigVal("SynchronizedField.RemoveDefaultEntries", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("Rewards.SelectionTimeout", "1800"));
await ctx.GameConfig.AddAsync(new ConfigVal("Rewards.UseRewardSelection", "true"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Creative.Query", "^CreativeCampus | ^RecRoomGallery"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Creative.Title", "Creative Campus"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Featured.Query", "#featured"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Featured.Title", "Featured"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Quests.Query", "#quest #rro"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Quests.Title", "QUESTS"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Shooters.Query", "#import"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Shooters.Title", "Import Rooms!"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Sports.Query", "#sport #rro | #pvp #rro"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.Sports.Title", "SPORTS & PVP"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.StuntRunner.Query", "#stuntrunner #community"));
await ctx.GameConfig.AddAsync(new ConfigVal("Door.StuntRunner.Title", "COMMUNITY"));
}
}
}