2024-05-16 01:34:38 +02:00
|
|
|
import { Types } from "mongoose";
|
|
|
|
import { IOid, IMongoDate } from "@/src/types/commonTypes";
|
2025-03-06 21:24:25 -08:00
|
|
|
import { IFusionTreasure, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes";
|
2025-04-04 06:02:40 -07:00
|
|
|
import { IPictureFrameInfo } from "./shipTypes";
|
2024-05-16 01:34:38 +02:00
|
|
|
|
2025-03-10 16:40:40 -07:00
|
|
|
export interface IGuildClient {
|
|
|
|
_id: IOid;
|
|
|
|
Name: string;
|
|
|
|
MOTD: string;
|
|
|
|
LongMOTD?: ILongMOTD;
|
|
|
|
Members: IGuildMemberClient[];
|
2025-03-15 03:21:40 -07:00
|
|
|
Ranks: IGuildRank[];
|
2025-03-10 16:40:40 -07:00
|
|
|
Tier: number;
|
|
|
|
Vault: IGuildVault;
|
2025-03-16 04:32:11 -07:00
|
|
|
ActiveDojoColorResearch: string;
|
2025-03-10 16:40:40 -07:00
|
|
|
Class: number;
|
|
|
|
XP: number;
|
|
|
|
IsContributor: boolean;
|
|
|
|
NumContributors: number;
|
|
|
|
CeremonyResetDate?: IMongoDate;
|
2025-04-02 04:59:21 -07:00
|
|
|
CrossPlatformEnabled?: boolean;
|
|
|
|
AutoContributeFromVault?: boolean;
|
|
|
|
AllianceId?: IOid;
|
2025-03-10 16:40:40 -07:00
|
|
|
}
|
|
|
|
|
2025-03-08 01:44:30 -08:00
|
|
|
export interface IGuildDatabase {
|
|
|
|
_id: Types.ObjectId;
|
2024-05-04 15:42:25 +02:00
|
|
|
Name: string;
|
2025-03-09 07:47:32 -07:00
|
|
|
MOTD: string;
|
|
|
|
LongMOTD?: ILongMOTD;
|
2025-03-13 02:14:29 -07:00
|
|
|
Ranks: IGuildRank[];
|
2025-03-15 03:21:40 -07:00
|
|
|
TradeTax: number;
|
2025-03-21 05:19:53 -07:00
|
|
|
Tier: number;
|
2025-03-31 04:14:00 -07:00
|
|
|
Emblem?: boolean;
|
2025-04-03 10:39:16 -07:00
|
|
|
AutoContributeFromVault?: boolean;
|
2025-04-02 04:59:21 -07:00
|
|
|
AllianceId?: Types.ObjectId;
|
2024-05-04 15:42:25 +02:00
|
|
|
|
2025-03-03 05:46:16 -08:00
|
|
|
DojoComponents: IDojoComponentDatabase[];
|
2024-12-23 23:12:21 +01:00
|
|
|
DojoCapacity: number;
|
|
|
|
DojoEnergy: number;
|
2025-03-08 01:44:30 -08:00
|
|
|
|
2025-03-06 21:24:25 -08:00
|
|
|
VaultRegularCredits?: number;
|
|
|
|
VaultPremiumCredits?: number;
|
|
|
|
VaultMiscItems?: IMiscItem[];
|
|
|
|
VaultShipDecorations?: ITypeCount[];
|
|
|
|
VaultFusionTreasures?: IFusionTreasure[];
|
2025-04-11 06:54:07 -07:00
|
|
|
VaultDecoRecipes?: ITypeCount[];
|
2025-03-08 01:44:30 -08:00
|
|
|
|
2025-01-03 09:06:50 +01:00
|
|
|
TechProjects?: ITechProjectDatabase[];
|
2025-03-16 04:32:11 -07:00
|
|
|
ActiveDojoColorResearch: string;
|
2025-03-08 01:44:30 -08:00
|
|
|
|
|
|
|
Class: number;
|
|
|
|
XP: number;
|
|
|
|
ClaimedXP?: string[]; // track rooms and decos that have already granted XP
|
|
|
|
CeremonyClass?: number;
|
|
|
|
CeremonyEndo?: number;
|
|
|
|
CeremonyContributors?: Types.ObjectId[];
|
|
|
|
CeremonyResetDate?: Date;
|
2025-03-12 01:08:15 -07:00
|
|
|
|
2025-03-14 02:07:08 -07:00
|
|
|
RoomChanges?: IGuildLogRoomChange[];
|
2025-03-16 08:16:11 -07:00
|
|
|
TechChanges?: IGuildLogEntryContributable[];
|
|
|
|
RosterActivity?: IGuildLogEntryRoster[];
|
2025-03-13 10:46:08 -07:00
|
|
|
ClassChanges?: IGuildLogEntryNumber[];
|
2024-05-04 15:42:25 +02:00
|
|
|
}
|
2024-05-16 01:34:38 +02:00
|
|
|
|
2025-03-09 07:47:32 -07:00
|
|
|
export interface ILongMOTD {
|
|
|
|
message: string;
|
|
|
|
authorName: string;
|
2025-04-03 10:38:37 -07:00
|
|
|
authorGuildName?: string;
|
2025-03-09 07:47:32 -07:00
|
|
|
}
|
|
|
|
|
2025-03-13 02:14:29 -07:00
|
|
|
// 32 seems to be reserved
|
|
|
|
export enum GuildPermission {
|
2025-04-04 15:18:10 -07:00
|
|
|
Ruler = 1, // Clan: Change hierarchy. Alliance (Creator only): Kick clans.
|
2025-03-13 02:14:29 -07:00
|
|
|
Advertiser = 8192,
|
2025-04-02 04:59:21 -07:00
|
|
|
Recruiter = 2, // Send invites (Clans & Alliances)
|
2025-03-13 02:14:29 -07:00
|
|
|
Regulator = 4, // Kick members
|
2025-04-04 15:18:10 -07:00
|
|
|
Promoter = 8, // Clan: Promote and demote members. Alliance (Creator only): Change clan permissions.
|
2025-03-13 02:14:29 -07:00
|
|
|
Architect = 16, // Create and destroy rooms
|
|
|
|
Decorator = 1024, // Create and destroy decos
|
2025-04-02 04:59:21 -07:00
|
|
|
Treasurer = 64, // Clan: Contribute from vault and edit tax rate. Alliance: Divvy vault.
|
2025-03-13 02:14:29 -07:00
|
|
|
Tech = 128, // Queue research
|
2025-04-02 04:59:21 -07:00
|
|
|
ChatModerator = 512, // (Clans & Alliances)
|
2025-03-13 02:14:29 -07:00
|
|
|
Herald = 2048, // Change MOTD
|
|
|
|
Fabricator = 4096 // Replicate research
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface IGuildRank {
|
|
|
|
Name: string;
|
|
|
|
Permissions: number;
|
|
|
|
}
|
|
|
|
|
2025-03-10 16:40:40 -07:00
|
|
|
export interface IGuildMemberDatabase {
|
|
|
|
accountId: Types.ObjectId;
|
|
|
|
guildId: Types.ObjectId;
|
|
|
|
status: number;
|
|
|
|
rank: number;
|
2025-04-01 02:28:24 -07:00
|
|
|
RequestMsg?: string;
|
|
|
|
RequestExpiry?: Date;
|
2025-03-27 03:33:08 -07:00
|
|
|
RegularCreditsContributed?: number;
|
|
|
|
PremiumCreditsContributed?: number;
|
|
|
|
MiscItemsContributed?: IMiscItem[];
|
|
|
|
ShipDecorationsContributed?: ITypeCount[];
|
2025-03-10 16:40:40 -07:00
|
|
|
}
|
|
|
|
|
2025-04-18 11:16:43 -07:00
|
|
|
export interface IFriendInfo {
|
2025-03-10 16:40:40 -07:00
|
|
|
_id: IOid;
|
|
|
|
DisplayName?: string;
|
2025-04-01 02:28:24 -07:00
|
|
|
PlatformNames?: string[];
|
|
|
|
PlatformAccountId?: string;
|
2025-04-18 11:16:43 -07:00
|
|
|
Status?: number;
|
2025-03-10 16:40:40 -07:00
|
|
|
ActiveAvatarImageType?: string;
|
2025-04-01 02:28:24 -07:00
|
|
|
LastLogin?: IMongoDate;
|
2025-03-10 16:40:40 -07:00
|
|
|
PlayerLevel?: number;
|
2025-04-01 02:28:24 -07:00
|
|
|
Suffix?: number;
|
|
|
|
Note?: string;
|
|
|
|
Favorite?: boolean;
|
|
|
|
NewRequest?: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
// GuildMemberInfo
|
|
|
|
export interface IGuildMemberClient extends IFriendInfo {
|
|
|
|
Rank: number;
|
|
|
|
Joined?: IMongoDate;
|
|
|
|
RequestExpiry?: IMongoDate;
|
|
|
|
RegularCreditsContributed?: number;
|
|
|
|
PremiumCreditsContributed?: number;
|
|
|
|
MiscItemsContributed?: IMiscItem[];
|
|
|
|
ConsumablesContributed?: ITypeCount[];
|
|
|
|
ShipDecorationsContributed?: ITypeCount[];
|
2025-03-10 16:40:40 -07:00
|
|
|
}
|
|
|
|
|
2025-03-06 21:24:25 -08:00
|
|
|
export interface IGuildVault {
|
|
|
|
DojoRefundRegularCredits?: number;
|
|
|
|
DojoRefundMiscItems?: IMiscItem[];
|
|
|
|
DojoRefundPremiumCredits?: number;
|
|
|
|
ShipDecorations?: ITypeCount[];
|
|
|
|
FusionTreasures?: IFusionTreasure[];
|
|
|
|
DecoRecipes?: ITypeCount[]; // Event Trophies
|
|
|
|
}
|
|
|
|
|
2024-05-16 01:34:38 +02:00
|
|
|
export interface IDojoClient {
|
|
|
|
_id: IOid; // ID of the guild
|
|
|
|
Name: string;
|
|
|
|
Tier: number;
|
2025-04-06 10:18:33 -07:00
|
|
|
TradeTax?: number;
|
2024-05-16 01:34:38 +02:00
|
|
|
FixedContributions: boolean;
|
|
|
|
DojoRevision: number;
|
2025-03-06 21:24:25 -08:00
|
|
|
AllianceId?: IOid;
|
|
|
|
Vault?: IGuildVault;
|
|
|
|
Class?: number; // Level
|
2024-05-16 01:34:38 +02:00
|
|
|
RevisionTime: number;
|
|
|
|
Energy: number;
|
|
|
|
Capacity: number;
|
|
|
|
DojoRequestStatus: number;
|
2025-03-06 21:24:25 -08:00
|
|
|
ContentURL?: string;
|
|
|
|
GuildEmblem?: boolean;
|
2024-05-16 01:34:38 +02:00
|
|
|
DojoComponents: IDojoComponentClient[];
|
2025-04-06 10:18:33 -07:00
|
|
|
NumContributors?: number;
|
|
|
|
CeremonyResetDate?: IMongoDate;
|
2024-05-16 01:34:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface IDojoComponentClient {
|
|
|
|
id: IOid;
|
2025-04-07 05:30:00 -07:00
|
|
|
SortId?: IOid;
|
2024-12-23 23:12:21 +01:00
|
|
|
pf: string; // Prefab (.level)
|
2024-05-16 01:34:38 +02:00
|
|
|
ppf: string;
|
2024-06-06 16:55:37 +02:00
|
|
|
pi?: IOid; // Parent ID. N/A to root.
|
2025-02-12 14:06:48 -08:00
|
|
|
op?: string; // Name of the door within this room that leads to its parent. N/A to root.
|
|
|
|
pp?: string; // Name of the door within the parent that leads to this room. N/A to root.
|
2025-02-11 20:11:31 -08:00
|
|
|
Name?: string;
|
|
|
|
Message?: string;
|
2024-06-06 16:55:37 +02:00
|
|
|
RegularCredits?: number; // "Collecting Materials" state: Number of credits that were donated.
|
|
|
|
MiscItems?: IMiscItem[]; // "Collecting Materials" state: Resources that were donated.
|
|
|
|
CompletionTime?: IMongoDate;
|
2025-03-04 10:33:38 -08:00
|
|
|
RushPlatinum?: number;
|
|
|
|
DestructionTime?: IMongoDate;
|
2025-03-05 23:54:47 -08:00
|
|
|
Decos?: IDojoDecoClient[];
|
2024-06-06 16:55:37 +02:00
|
|
|
DecoCapacity?: number;
|
2025-04-07 05:30:00 -07:00
|
|
|
PaintBot?: IOid;
|
|
|
|
PendingColors?: number[];
|
|
|
|
Colors?: number[];
|
|
|
|
PendingLights?: number[];
|
|
|
|
Lights?: number[];
|
2025-04-08 03:06:06 -07:00
|
|
|
Settings?: string;
|
2024-05-16 01:34:38 +02:00
|
|
|
}
|
|
|
|
|
2024-06-06 16:55:37 +02:00
|
|
|
export interface IDojoComponentDatabase
|
2025-04-07 05:30:00 -07:00
|
|
|
extends Omit<
|
|
|
|
IDojoComponentClient,
|
|
|
|
"id" | "SortId" | "pi" | "CompletionTime" | "DestructionTime" | "Decos" | "PaintBot"
|
|
|
|
> {
|
2024-05-16 01:34:38 +02:00
|
|
|
_id: Types.ObjectId;
|
2025-04-10 07:15:27 -07:00
|
|
|
SortId?: Types.ObjectId;
|
2024-06-06 16:55:37 +02:00
|
|
|
pi?: Types.ObjectId;
|
|
|
|
CompletionTime?: Date;
|
2025-03-14 02:07:08 -07:00
|
|
|
CompletionLogPending?: boolean;
|
2025-03-05 23:54:47 -08:00
|
|
|
DestructionTime?: Date;
|
|
|
|
Decos?: IDojoDecoDatabase[];
|
2025-04-07 05:30:00 -07:00
|
|
|
PaintBot?: Types.ObjectId;
|
2025-03-25 15:12:09 -07:00
|
|
|
Leaderboard?: IDojoLeaderboardEntry[];
|
2025-03-05 23:54:47 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface IDojoDecoClient {
|
|
|
|
id: IOid;
|
|
|
|
Type: string;
|
|
|
|
Pos: number[];
|
|
|
|
Rot: number[];
|
2025-04-23 11:36:57 -07:00
|
|
|
Scale?: number;
|
2025-03-05 23:54:47 -08:00
|
|
|
Name?: string; // for teleporters
|
2025-04-04 06:02:40 -07:00
|
|
|
Sockets?: number;
|
2025-03-05 23:54:47 -08:00
|
|
|
RegularCredits?: number;
|
|
|
|
MiscItems?: IMiscItem[];
|
|
|
|
CompletionTime?: IMongoDate;
|
2025-03-06 21:24:25 -08:00
|
|
|
RushPlatinum?: number;
|
2025-04-04 06:02:40 -07:00
|
|
|
PictureFrameInfo?: IPictureFrameInfo;
|
2025-04-07 05:30:00 -07:00
|
|
|
Pending?: boolean;
|
2025-03-05 23:54:47 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface IDojoDecoDatabase extends Omit<IDojoDecoClient, "id" | "CompletionTime"> {
|
|
|
|
_id: Types.ObjectId;
|
|
|
|
CompletionTime?: Date;
|
2024-05-16 01:34:38 +02:00
|
|
|
}
|
2025-01-03 09:06:50 +01:00
|
|
|
|
2025-03-06 21:24:25 -08:00
|
|
|
// A common subset of the database representation of rooms & decos.
|
|
|
|
export interface IDojoContributable {
|
|
|
|
RegularCredits?: number;
|
|
|
|
MiscItems?: IMiscItem[];
|
|
|
|
CompletionTime?: Date;
|
|
|
|
RushPlatinum?: number;
|
|
|
|
}
|
|
|
|
|
2025-01-03 09:06:50 +01:00
|
|
|
export interface ITechProjectClient {
|
|
|
|
ItemType: string;
|
|
|
|
ReqCredits: number;
|
|
|
|
ReqItems: IMiscItem[];
|
|
|
|
State: number; // 0 = pending, 1 = complete
|
|
|
|
CompletionDate?: IMongoDate;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ITechProjectDatabase extends Omit<ITechProjectClient, "CompletionDate"> {
|
|
|
|
CompletionDate?: Date;
|
|
|
|
}
|
2025-03-12 01:08:15 -07:00
|
|
|
|
2025-03-16 08:16:11 -07:00
|
|
|
export interface IGuildLogEntryContributable {
|
|
|
|
dateTime?: Date;
|
2025-03-12 07:59:20 -07:00
|
|
|
entryType: number;
|
|
|
|
details: string;
|
|
|
|
}
|
|
|
|
|
2025-03-16 08:16:11 -07:00
|
|
|
export interface IGuildLogRoomChange extends IGuildLogEntryContributable {
|
2025-03-14 02:07:08 -07:00
|
|
|
componentId: Types.ObjectId;
|
|
|
|
}
|
|
|
|
|
2025-03-16 08:16:11 -07:00
|
|
|
export interface IGuildLogEntryRoster {
|
|
|
|
dateTime: Date;
|
|
|
|
entryType: number;
|
|
|
|
details: string;
|
|
|
|
}
|
|
|
|
|
2025-03-13 10:46:08 -07:00
|
|
|
export interface IGuildLogEntryNumber {
|
2025-03-12 01:08:15 -07:00
|
|
|
dateTime: Date;
|
|
|
|
entryType: number;
|
|
|
|
details: number;
|
|
|
|
}
|
2025-03-25 15:12:09 -07:00
|
|
|
|
|
|
|
export interface IDojoLeaderboardEntry {
|
|
|
|
s: number; // score
|
|
|
|
r: number; // rank
|
|
|
|
n: string; // displayName
|
|
|
|
}
|
2025-03-31 04:14:00 -07:00
|
|
|
|
|
|
|
export interface IGuildAdInfoClient {
|
|
|
|
_id: IOid; // Guild ID
|
|
|
|
CrossPlatformEnabled: boolean;
|
|
|
|
Emblem?: boolean;
|
|
|
|
Expiry: IMongoDate;
|
|
|
|
Features: number;
|
|
|
|
GuildName: string;
|
|
|
|
MemberCount: number;
|
|
|
|
OriginalPlatform: number;
|
|
|
|
RecruitMsg: string;
|
|
|
|
Tier: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface IGuildAdDatabase {
|
|
|
|
GuildId: Types.ObjectId;
|
|
|
|
Emblem?: boolean;
|
|
|
|
Expiry: Date;
|
|
|
|
Features: number;
|
|
|
|
GuildName: string;
|
|
|
|
MemberCount: number;
|
|
|
|
RecruitMsg: string;
|
|
|
|
Tier: number;
|
|
|
|
}
|
2025-04-02 04:59:21 -07:00
|
|
|
|
|
|
|
export interface IAllianceClient {
|
|
|
|
_id: IOid;
|
|
|
|
Name: string;
|
|
|
|
MOTD?: ILongMOTD;
|
|
|
|
LongMOTD?: ILongMOTD;
|
|
|
|
Emblem?: boolean;
|
|
|
|
CrossPlatformEnabled?: boolean;
|
|
|
|
Clans: IAllianceMemberClient[];
|
|
|
|
OriginalPlatform?: number;
|
2025-04-02 13:26:44 -07:00
|
|
|
AllianceVault?: IGuildVault;
|
2025-04-02 04:59:21 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface IAllianceDatabase {
|
|
|
|
_id: Types.ObjectId;
|
|
|
|
Name: string;
|
|
|
|
MOTD?: ILongMOTD;
|
|
|
|
LongMOTD?: ILongMOTD;
|
|
|
|
Emblem?: boolean;
|
2025-04-02 13:26:44 -07:00
|
|
|
VaultRegularCredits?: number;
|
2025-04-02 04:59:21 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface IAllianceMemberClient {
|
|
|
|
_id: IOid;
|
|
|
|
Name: string;
|
|
|
|
Tier: number;
|
|
|
|
Pending: boolean;
|
|
|
|
Emblem?: boolean;
|
|
|
|
Permissions: number;
|
|
|
|
MemberCount: number;
|
|
|
|
ClanLeader?: string;
|
|
|
|
ClanLeaderId?: IOid;
|
|
|
|
OriginalPlatform?: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface IAllianceMemberDatabase {
|
|
|
|
allianceId: Types.ObjectId;
|
|
|
|
guildId: Types.ObjectId;
|
|
|
|
Pending: boolean;
|
|
|
|
Permissions: number;
|
|
|
|
}
|