diff --git a/src/nitro/communication/NitroMessages.ts b/src/nitro/communication/NitroMessages.ts
index 1282ed59..bdad1335 100644
--- a/src/nitro/communication/NitroMessages.ts
+++ b/src/nitro/communication/NitroMessages.ts
@@ -1,5 +1,5 @@
 import { IMessageConfiguration } from '../../core/communication/messages/IMessageConfiguration';
-import { AchievementNotificationMessageEvent, ActivityPointNotificationMessageEvent, AddJukeboxDiskComposer, ApproveNameMessageComposer, AvailabilityTimeMessageEvent, BadgeReceivedEvent, BonusRareInfoMessageEvent, CatalogApproveNameResultEvent, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClubGiftNotificationEvent, FigureUpdateEvent, FurnitureGuildInfoComposer, GetBonusRareInfoMessageComposer, GetInterstitialMessageComposer, GetJukeboxPlayListMessageComposer, GetNowPlayingMessageComposer, GetOfficialSongIdMessageComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetUserSongDisksMessageComposer, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelWillCloseInMinutesEvent, InfoFeedEnableMessageEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, MaintenanceStatusMessageEvent, MysteryBoxKeysEvent, NowPlayingMessageEvent, OfficialSongIdMessageEvent, PetExperienceEvent, PetMountComposer, PetSupplementComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, RemoveAllRightsMessageComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RoomAdErrorEvent, RoomUnitGiveHandItemPetComposer, SellablePetPalettesEvent, TogglePetBreedingComposer, TogglePetRidingComposer, TraxSongInfoMessageEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UsePetProductComposer, UserSongDisksInventoryMessageEvent, WardrobeMessageEvent } from './messages';
+import { AchievementNotificationMessageEvent, ActivityPointNotificationMessageEvent, AddJukeboxDiskComposer, ApproveNameMessageComposer, AvailabilityTimeMessageEvent, BadgeReceivedEvent, BonusRareInfoMessageEvent, CatalogApproveNameResultEvent, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClubGiftNotificationEvent, FigureUpdateEvent, FurnitureGuildInfoComposer, GetBonusRareInfoMessageComposer, GetInterstitialMessageComposer, GetJukeboxPlayListMessageComposer, GetNowPlayingMessageComposer, GetOfficialSongIdMessageComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetUserSongDisksMessageComposer, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelWillCloseInMinutesEvent, InfoFeedEnableMessageEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, MaintenanceStatusMessageEvent, MysteryBoxKeysEvent, NowPlayingMessageEvent, OfficialSongIdMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer, PetExperienceEvent, PetMountComposer, PetSupplementComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, RemoveAllRightsMessageComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RoomAdErrorEvent, RoomUnitGiveHandItemPetComposer, SellablePetPalettesEvent, TogglePetBreedingComposer, TogglePetRidingComposer, TraxSongInfoMessageEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UsePetProductComposer, UserSongDisksInventoryMessageEvent, WardrobeMessageEvent } from './messages';
 import { AvailabilityStatusMessageEvent } from './messages/incoming/availability/AvailabilityStatusMessageEvent';
 import { CfhSanctionMessageEvent, CfhTopicsInitEvent, SanctionStatusEvent } from './messages/incoming/callforhelp';
 import { CameraPublishStatusMessageEvent } from './messages/incoming/camera/CameraPublishStatusMessageEvent';
@@ -858,6 +858,10 @@ export class NitroMessages implements IMessageConfiguration
         this._composers.set(OutgoingHeader.CHANGE_USERNAME, ChangeUserNameMessageComposer);
         this._composers.set(OutgoingHeader.CHECK_USERNAME, CheckUserNameMessageComposer);
 
+        // CAMPAIGN
+        this._composers.set(OutgoingHeader.OPEN_CAMPAIGN_CALENDAR_DOOR, OpenCampaignCalendarDoorComposer);
+        this._composers.set(OutgoingHeader.OPEN_CAMPAIGN_CALENDAR_DOOR_STAFF, OpenCampaignCalendarDoorAsStaffComposer);
+
         // AUTHENTICATION
         this._composers.set(OutgoingHeader.AUTHENTICATION, AuthenticationMessageComposer);
 
diff --git a/src/nitro/communication/messages/outgoing/OutgoingHeader.ts b/src/nitro/communication/messages/outgoing/OutgoingHeader.ts
index fa6ca251..db91c160 100644
--- a/src/nitro/communication/messages/outgoing/OutgoingHeader.ts
+++ b/src/nitro/communication/messages/outgoing/OutgoingHeader.ts
@@ -281,4 +281,6 @@ export class OutgoingHeader
     public static GET_INTERSTITIAL                 = 2519;
     public static CHANGE_USERNAME                  = 2977;
     public static CHECK_USERNAME                   = 3950;
+    public static OPEN_CAMPAIGN_CALENDAR_DOOR_STAFF= 3889;
+    public static OPEN_CAMPAIGN_CALENDAR_DOOR      = 2257;
 }
diff --git a/src/nitro/communication/messages/outgoing/campaign/OpenCampaignCalendarDoorAsStaffComposer.ts b/src/nitro/communication/messages/outgoing/campaign/OpenCampaignCalendarDoorAsStaffComposer.ts
new file mode 100644
index 00000000..d07748a6
--- /dev/null
+++ b/src/nitro/communication/messages/outgoing/campaign/OpenCampaignCalendarDoorAsStaffComposer.ts
@@ -0,0 +1,21 @@
+import { IMessageComposer } from '../../../../../core';
+
+export class OpenCampaignCalendarDoorAsStaffComposer implements IMessageComposer<ConstructorParameters<typeof OpenCampaignCalendarDoorAsStaffComposer>>
+{
+    private _data: ConstructorParameters<typeof OpenCampaignCalendarDoorAsStaffComposer>;
+
+    constructor(k: string, _arg_2: number)
+    {
+        this._data = [ k, _arg_2 ];
+    }
+
+    dispose(): void
+    {
+        this._data = null;
+    }
+
+    public getMessageArray()
+    {
+        return this._data;
+    }
+}
diff --git a/src/nitro/communication/messages/outgoing/campaign/OpenCampaignCalendarDoorComposer.ts b/src/nitro/communication/messages/outgoing/campaign/OpenCampaignCalendarDoorComposer.ts
new file mode 100644
index 00000000..3f798bf6
--- /dev/null
+++ b/src/nitro/communication/messages/outgoing/campaign/OpenCampaignCalendarDoorComposer.ts
@@ -0,0 +1,21 @@
+import { IMessageComposer } from '../../../../../core';
+
+export class OpenCampaignCalendarDoorComposer implements IMessageComposer<ConstructorParameters<typeof OpenCampaignCalendarDoorComposer>>
+{
+    private _data: ConstructorParameters<typeof OpenCampaignCalendarDoorComposer>;
+
+    constructor(k: string, _arg_2: number)
+    {
+        this._data = [ k, _arg_2 ];
+    }
+
+    dispose(): void
+    {
+        this._data = null;
+    }
+
+    public getMessageArray()
+    {
+        return this._data;
+    }
+}
diff --git a/src/nitro/communication/messages/outgoing/campaign/index.ts b/src/nitro/communication/messages/outgoing/campaign/index.ts
new file mode 100644
index 00000000..2ecdb09a
--- /dev/null
+++ b/src/nitro/communication/messages/outgoing/campaign/index.ts
@@ -0,0 +1,2 @@
+export * from './OpenCampaignCalendarDoorAsStaffComposer';
+export * from './OpenCampaignCalendarDoorComposer';
diff --git a/src/nitro/communication/messages/outgoing/index.ts b/src/nitro/communication/messages/outgoing/index.ts
index 67e34055..de96795c 100644
--- a/src/nitro/communication/messages/outgoing/index.ts
+++ b/src/nitro/communication/messages/outgoing/index.ts
@@ -2,6 +2,7 @@ export * from './achievements';
 export * from './advertisement';
 export * from './avatar';
 export * from './camera';
+export * from './campaign';
 export * from './catalog';
 export * from './client';
 export * from './desktop';