Initialize repository

Added basic info to get in game for like...August 2016 ;-;
It's not much but it's a start
This commit is contained in:
2026-02-27 00:58:13 -08:00
parent 05c35b2a18
commit 387ec7ba89
61 changed files with 1722 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Activities
{
public class CharadesWord(string word, CharadesWordsDifficulty difficulty = CharadesWordsDifficulty.Easy)
{
[JsonPropertyName(name: "Difficulty")] public CharadesWordsDifficulty Difficulty { get; set; } = difficulty;
[JsonPropertyName(name: "EN_US")] public string EN_US { get; set; } = word;
}
}

View File

@@ -0,0 +1,8 @@
namespace RecRoomArchive.Models.API.Activities
{
public enum CharadesWordsDifficulty
{
Easy,
Hard
}
}

View File

@@ -0,0 +1,23 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Avatar
{
/// <summary>
/// The avatar of the player
/// </summary>
public class PlayerAvatar
{
/// <summary>
/// The outfit that the player has on. This includes data like their hair model, torso, hats, glasses, torso, etc...
/// </summary>
[JsonPropertyName(name: "OutfitSelections")] public string OutfitSelections { get; set; } = string.Empty;
/// <summary>
/// The skin color guid of the player
/// </summary>
[JsonPropertyName(name: "SkinColor")] public string SkinColor { get; set; } = string.Empty;
/// <summary>
/// The hair color guid of the player
/// </summary>
[JsonPropertyName(name: "HairColor")] public string HairColor { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,10 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Config
{
public class DailyObjective
{
[JsonPropertyName(name: "type")] public ObjectiveType Type { get; set; }
[JsonPropertyName(name: "score")] public int Score { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Config
{
public class GameConfig
{
[JsonPropertyName(name: "Key")] public required string Key { get; set; }
[JsonPropertyName(name: "Value")] public required string Value { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Config
{
public class LevelProgressionMap(int level, int requiredXp)
{
[JsonPropertyName(name: "Level")] public int Level { get; set; } = level;
[JsonPropertyName(name: "RequiredXp")] public int RequiredXp { get; set; } = requiredXp;
}
}

View File

@@ -0,0 +1,10 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Config
{
public class MatchmakingParams
{
[JsonPropertyName(name: "PreferFullRoomsFrequency")] public float PreferFullRoomsFrequency { get; set; } = 1.0f;
[JsonPropertyName(name: "PreferEmptyRoomsFrequency")] public float PreferEmptyRoomsFrequency { get; set; } = 0.0f;
}
}

View File

@@ -0,0 +1,139 @@
namespace RecRoomArchive.Models.API.Config
{
public enum ObjectiveType
{
Default = -1,
FirstSessionOfDay = 1,
AddAFriend,
PartyUp,
AllOtherChallenges,
LevelUp,
CheerAPlayer,
PointedAtPlayer,
CheerARoom,
SubscribeToPlayer,
DailyObjective1,
DailyObjective2,
DailyObjective3,
AllDailyObjectives,
CompleteAnyDaily,
CompleteAnyWeekly,
OOBE_GoToLockerRoom = 20,
OOBE_GoToActivity,
OOBE_FinishActivity,
NUX_PunchcardObjective = 25,
NUX_AllPunchcardObjectives,
GoToRecCenter = 30,
FinishActivity,
VisitACustomRoom,
CreateACustomRoom,
ScoreBasketInRecCenter = 35,
UploadPhotoToRecNet,
UpdatePlayerBio,
SaveOutfitSlot,
PurchaseClothingItem,
PurchaseNonClothingItem,
DrinkWater,
ColorOnWhiteboard,
SetBasketballSkin,
ThrowBasketball,
PlaceInventionInDorm,
ChangeDormRoomSkin,
ToggleOwnedClothes,
EquipHat,
LoadOutfit,
SaveNewOutfitSlot,
SpawnCamera,
TakeSelfie,
PrintSelfie,
TakePictureOfPlayer,
PrintPictureOfPlayer,
PublishSelfieWithPlayer,
SpawnFoodWithOtherPlayers,
EmoteInRecCenter,
SendRoomChatInRecCenter,
UseFrendotron,
GoToDormRoom,
VisitSpecificRoom,
VisitPublicRRO,
VisitPublicRoomBySource,
FavoriteARoom,
TakePhotoWithFilter,
OpenYourPlayerProfile,
OpenOnlineStatusModal,
ChangeProfilePicture,
ChangePlayerDisplayName,
ChangePlayerDescriptionText,
OpenPlayerPronounsModal,
OpenOtherPlayersProfile,
VisitPlayersPortfolio,
FavoriteAFriend,
CharadesGames = 100,
CharadesWinsPerformer,
CharadesWinsGuesser,
DiscGolfWins = 200,
DiscGolfGames,
DiscGolfHolesUnderPar,
DodgeballWins = 300,
DodgeballGames,
DodgeballHits,
PaddleballGames = 400,
PaddleballWins,
PaddleballScores,
PaintballAnyModeGames = 500,
PaintballAnyModeWins,
PaintballAnyModeHits,
PaintballCTFWins = 600,
PaintballCTFGames,
PaintballCTFHits,
PaintballFlagCaptures,
PaintballTeamBattleWins = 700,
PaintballTeamBattleGames,
PaintballTeamBattleHits,
PaintballFreeForAllWins = 710,
PaintballFreeForAllGames,
PaintballFreeForAllHits,
SoccerWins = 800,
SoccerGames,
SoccerGoals,
BowlingGames = 900,
BowlingWins,
BowlingStrike,
QuestGames = 1000,
QuestWins,
QuestPlayerRevives,
QuestEnemyKills,
QuestGames_Goblin1 = 1010,
QuestWins_Goblin1,
QuestPlayerRevives_Goblin1,
QuestEnemyKills_Goblin1,
QuestGames_Goblin2 = 1020,
QuestWins_Goblin2,
QuestPlayerRevives_Goblin2,
QuestEnemyKills_Goblin2,
QuestGames_Scifi1 = 1030,
QuestWins_Scifi1,
QuestPlayerRevives_Scifi1,
QuestEnemyKills_Scifi1,
QuestGames_Pirate1 = 1040,
QuestWins_Pirate1,
QuestPlayerRevives_Pirate1,
QuestEnemyKills_Pirate1,
QuestGames_Dracula1 = 1050,
QuestWins_Dracula1,
QuestPlayerRevives_Dracula1,
QuestEnemyKills_Dracula1,
ArenaGames = 2000,
ArenaWins,
ArenaPlayerRevives,
ArenaHeroTags,
ArenaBotTags,
RecRoyaleGames = 3000,
RecRoyaleWins,
RecRoyaleTags,
StuntRunnerGames = 4000,
StuntRunnerWins,
RecRallyGames = 5000,
RecRallyWins
}
}

View File

@@ -0,0 +1,10 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Config
{
public class PhotonConfig
{
[JsonPropertyName(name: "CloudRegion")] public string CloudRegion { get; set; } = "us";
[JsonPropertyName(name: "CrcCheckEnabled")] public bool CrcCheckEnabled { get; set; } = true;
}
}

View File

@@ -0,0 +1,16 @@
using System.Text.Json.Serialization;
using System.Xml.Linq;
namespace RecRoomArchive.Models.API.Config
{
public class RecRoomConfig
{
[JsonPropertyName(name: "MessageOfTheDay")] public string MessageOfTheDay { get; set; } = string.Empty;
[JsonPropertyName(name: "CdnBaseUri")] public string CdnBaseUri { get; set; } = string.Empty;
[JsonPropertyName(name: "MatchmakingParams")] public required MatchmakingParams MatchmakingParams { get; set; }
[JsonPropertyName(name: "LevelProgressionMaps")] public required List<LevelProgressionMap> LevelProgressionMaps { get; set; }
[JsonPropertyName(name: "DailyObjectives")] public required DailyObjective[][] DailyObjectives { get; set; }
[JsonPropertyName(name: "PhotonConfig")] public required PhotonConfig PhotonConfig { get; set; }
[JsonPropertyName(name: "ConfigTable")] public required List<GameConfig> ConfigTable { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
namespace RecRoomArchive.Models.API.Messages
{
public enum GameInviteResponseDetails
{
Declined,
Accepted,
ComeToMe,
GiveMe2,
GiveMe5,
GiveMe10
}
}

View File

@@ -0,0 +1,9 @@
namespace RecRoomArchive.Models.API.Messages
{
public enum MessageType
{
GameInvite,
GameInviteResponse,
GameJoinFailed
}
}

View File

@@ -0,0 +1,21 @@
namespace RecRoomArchive.Models.API.Platform
{
/// <summary>
/// The types of platforms that Rec Room has support for...as a mask!
/// </summary>
[Flags]
public enum PlatformMask
{
None = 0,
Steam = 1,
Oculus = 2,
PlayStation = 4,
Xbox = 8,
RecNet = 16,
IOS = 32,
GooglePlay = 64,
Standalone = 128,
Pico = 256,
All = -1
}
}

View File

@@ -0,0 +1,19 @@
namespace RecRoomArchive.Models.API.Platform
{
/// <summary>
/// The types of platforms that Rec Room has support for
/// </summary>
public enum PlatformType
{
All = -1,
Steam,
Oculus,
PlayStation,
Xbox,
RecNet,
IOS,
GooglePlay,
Standalone,
Pico
}
}

View File

@@ -0,0 +1,16 @@
using RecRoomArchive.Models.API.Platform;
namespace RecRoomArchive.Models.API.PlatformLogin.Requests
{
public class BaseLoginRequest
{
public required PlatformType Platform { get; set; }
public required string PlatformId { get; set; }
public string? Name { get; set; }
public required long ClientTimestamp { get; set; }
public required string DeviceId { get; set; }
public required long BuildTimestamp { get; set; }
public required string AuthParams { get; set; }
public required string Verify { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.PlatformLogin.Responses
{
public class BaseLoginResponse
{
[JsonPropertyName(name: "Token")]
public string Token { get; set; } = string.Empty;
[JsonPropertyName(name: "PlayerId")]
public ulong PlayerId { get; set; }
}
}

View File

@@ -0,0 +1,44 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Players
{
/// <summary>
/// Extensions of data used in August 2016 Rec Room
/// </summary>
public class AugustProfile : BaseProfile
{
public AugustProfile(BaseProfile baseProfile)
{
Id = baseProfile.Id;
Username = baseProfile.Username;
DisplayName = baseProfile.DisplayName;
XP = baseProfile.XP;
Level = baseProfile.Level;
Reputation = baseProfile.Reputation;
Developer = baseProfile.Developer;
Bio = baseProfile.Bio;
RegistrationStatus = baseProfile.RegistrationStatus;
CanReceiveInvites = baseProfile.CanReceiveInvites;
ProfileImageName = baseProfile.ProfileImageName;
JuniorProfile = baseProfile.JuniorProfile;
ForceJuniorImages = baseProfile.ForceJuniorImages;
PendingJunior = baseProfile.PendingJunior;
HasBirthday = baseProfile.HasBirthday;
HasEmail = baseProfile.HasEmail;
AvoidJuniors = baseProfile.AvoidJuniors;
}
/// <summary>
/// Used in early versions of Rec Room from 2016 as the players DisplayName
/// </summary>
[JsonPropertyName(name: "Name")] public string Name => DisplayName;
/// <summary>
/// The SteamID of the local player, used in 2016
/// </summary>
[JsonPropertyName(name: "SteamID")] public ulong SteamID { get; set; }
/// <summary>
/// The..gender?? of the local player, this isn't used by Rec Room at all so I'm guessing whoever made their webmanager just added this to add it
/// </summary>
[JsonPropertyName(name: "Gender")] public string Gender { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,84 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Players
{
/// <summary>
/// The profile of the player from 2016-2019
/// </summary>
public class BaseProfile
{
/// <summary>
/// The unique id of the player
/// </summary>
[JsonPropertyName(name: "Id")] public ulong Id { get; set; }
/// <summary>
/// The username of the player. This usually doesn't show up in game until around 2017...
/// </summary>
[JsonPropertyName(name: "Username")] public string Username { get; set; } = string.Empty;
/// <summary>
/// The display name of the player, this is what's most commonly used in game and is seen on the players nametag
/// </summary>
[JsonPropertyName(name: "DisplayName")] public string DisplayName { get; set; } = string.Empty;
/// <summary>
/// The XP of the player, this determines how much XP is required until the next level up but because this is a local server, who gaf
/// </summary>
[JsonPropertyName(name: "XP")] public int XP { get; set; } = 0;
/// <summary>
/// The level of the player, usually in a range from 1-30 or 1-50 depending on your time period
/// </summary>
[JsonPropertyName(name: "Level")] public int Level { get; set; } = 1;
/// <summary>
/// The internal reputation of the player, reputation works in mysterious ways so I'm not too sure about this one...
/// </summary>
[JsonPropertyName(name: "Reputation")] public float Reputation { get; set; } = 1.0f;
/// <summary>
/// If the player has a verified email on their Rec Room account (which they always will)
/// </summary>
[JsonPropertyName(name: "Verified")] public bool Verified => RegistrationStatus == RegistrationStatus.Registered;
/// <summary>
/// If the player is a developer of Rec Room (they always will be)
/// </summary>
[JsonPropertyName(name: "Developer")] public bool Developer { get; set; } = true;
/// <summary>
/// The bio of the player, I need to find what build this is added in so I can add it to its model...
/// </summary>
[JsonPropertyName(name: "Bio")] public string Bio { get; set; } = string.Empty;
/// <summary>
/// The registration status of the player, determined by if they have an email
/// </summary>
[JsonPropertyName(name: "RegistrationStatus")] public RegistrationStatus RegistrationStatus { get; set; } = RegistrationStatus.Registered;
/// <summary>
/// If the local player is allowed to recieve invites (junior restriction?)
/// </summary>
[JsonPropertyName(name: "CanReceiveInvites")] public bool CanReceiveInvites { get; set; } = true;
/// <summary>
/// The image name of the player
/// </summary>
[JsonPropertyName(name: "ProfileImageName")] public string ProfileImageName { get; set; } = "DefaultProfileImage";
/// <summary>
/// If the player is allowed to recieve invites (junior restriction?)
/// </summary>
[JsonPropertyName(name: "JuniorProfile")] public bool JuniorProfile { get; set; } = false;
/// <summary>
/// If the player is forced to only see alt images like a junior player
/// </summary>
[JsonPropertyName(name: "ForceJuniorImages")] public bool ForceJuniorImages { get; set; } = false;
/// <summary>
/// If the player is about to become a junior
/// </summary>
[JsonPropertyName(name: "PendingJunior")] public bool PendingJunior { get; set; } = false;
/// <summary>
/// If the player has a birthday on their account
/// </summary>
[JsonPropertyName(name: "HasBirthday")] public bool HasBirthday { get; set; } = true;
/// <summary>
/// If the player has an email on their account
/// </summary>
[JsonPropertyName(name: "HasEmail")] public bool HasEmail { get; set; } = true;
/// <summary>
/// If the player perfers to not matchmake with junior players, can be null
/// </summary>
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull), JsonPropertyName(name: "AvoidJuniors")] public bool? AvoidJuniors { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Players
{
public class BlockDurationDTO
{
[JsonPropertyName(name: "BlockedDuration")] public int BlockedDuration { get; set; } = 0;
}
}

View File

@@ -0,0 +1,9 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Players
{
public class PhoneNumberDTO
{
[JsonPropertyName(name: "PhoneNumber")] public string PhoneNumber { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,21 @@
namespace RecRoomArchive.Models.API.Players
{
/// <summary>
/// The status of the players registration to Rec Room
/// </summary>
public enum RegistrationStatus
{
/// <summary>
/// This player has no email entered for Rec Room and may be prompted to enter one
/// </summary>
Unregistered,
/// <summary>
/// This player has a pending email from Rec Room that they have not accepted yet
/// </summary>
PendingEmailVerification,
/// <summary>
/// This player has a verified Rec Room Profile!
/// </summary>
Registered
}
}

View File

@@ -0,0 +1,19 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.API.Setting
{
/// <summary>
/// The players local settings and preferences
/// </summary>
public class Setting
{
/// <summary>
/// The key of the setting (ex: DebugGuiEnabled)
/// </summary>
[JsonPropertyName(name: "Key")] public required string Key { get; set; }
/// <summary>
/// The value related to the key (ex: true)
/// </summary>
[JsonPropertyName(name: "Value")] public required string Value { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System.Text.Json.Serialization;
namespace RecRoomArchive.Models.Common
{
public class OkResponse
{
public static OkResponse Ok(string? message = null) => new() { Success = true, Message = message };
public static OkResponse Fail(string message) => new() { Success = false, Message = message };
[JsonPropertyName("Success")] public bool Success { get; set; }
[JsonPropertyName("Message")] public string? Message { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>