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" ;
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 [ ] ;
TradeTax : number ;
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-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-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-02 04:59:21 -07:00
authorGuildName ? : "" ;
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-02 04:59:21 -07:00
Ruler = 1 , // Clan: Change hierarchy. Alliance: 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-02 04:59:21 -07:00
Promoter = 8 , // Clan: Promote and demote members. Alliance: 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-01 02:28:24 -07:00
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 ;
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 ;
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 [ ] ;
}
export interface IDojoComponentClient {
id : 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 ;
2024-05-16 01:34:38 +02:00
}
2024-06-06 16:55:37 +02:00
export interface IDojoComponentDatabase
2025-03-06 21:24:25 -08:00
extends Omit < IDojoComponentClient , "id" | "pi" | "CompletionTime" | "DestructionTime" | "Decos" > {
2024-05-16 01:34:38 +02:00
_id : 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-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 [ ] ;
Name? : string ; // for teleporters
RegularCredits? : number ;
MiscItems? : IMiscItem [ ] ;
CompletionTime? : IMongoDate ;
2025-03-06 21:24:25 -08:00
RushPlatinum? : number ;
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 ;
}
// TODO: Alliance chat permissions
// TODO: POST /api/addToAlliance.php: {"clanName":"abc"}
// TODO: GET /api/divvyAllianceVault.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0&allianceId=000000000000000000000069&credits=1
// TODO: GET /api/divvyAllianceVault.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0&allianceId=000000000000000000000069&credits=0
// TODO: GET /api/removeFromAlliance.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0
// TODO: GET /api/setAllianceGuildPermissions.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=000000000000000000000042&perms=2
// TODO: Handle alliance in setGuildMotd