Merge branch 'main' into patch/room-invite-packet

This commit is contained in:
dank074 2022-03-25 18:20:37 -05:00
commit 81013da436
76 changed files with 836 additions and 344 deletions

View File

@ -1,9 +1,8 @@
image: node:15.6 image: node:16.3
stages: stages:
- test - test
- compile - compile
ESLinter: ESLinter:
stage: test stage: test
@ -16,11 +15,11 @@ ESLinter:
- node_modules - node_modules
Compile: Compile:
stage: compile stage: compile
script: script:
- npm i - yarn install
- npm run compile - yarn compile
cache: cache:
key: ${CI_COMMIT_BRANCH} key: ${CI_COMMIT_BRANCH}
paths: paths:
- node_modules - node_modules

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "@nitrots/nitro-renderer", "name": "@nitrots/nitro-renderer",
"version": "1.1.6", "version": "1.1.16",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@nitrots/nitro-renderer", "name": "@nitrots/nitro-renderer",
"version": "1.1.6", "version": "1.1.16",
"hasInstallScript": true, "hasInstallScript": true,
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {

View File

@ -1,7 +1,7 @@
{ {
"name": "@nitrots/nitro-renderer", "name": "@nitrots/nitro-renderer",
"description": "Javascript library for rendering Nitro in the browser using PixiJS", "description": "Javascript library for rendering Nitro in the browser using PixiJS",
"version": "1.1.12", "version": "1.1.16",
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },

View File

@ -1,5 +1,5 @@
export class NitroVersion export class NitroVersion
{ {
public static RENDERER_VERSION: string = '1.1.12'; public static RENDERER_VERSION: string = '1.1.16';
public static UI_VERSION: string = ''; public static UI_VERSION: string = '';
} }

View File

@ -56,6 +56,16 @@ export class NitroLogger implements INitroLogger
} }
} }
public static error(message: string, name: string = 'Nitro'): void
{
return this.log(message, name, 'error');
}
public static warn(message: string, name: string = 'Nitro'): void
{
return this.log(message, name, 'warn');
}
public static getTimestamp(): string public static getTimestamp(): string
{ {
const now = Date.now(); const now = Date.now();

View File

@ -159,7 +159,7 @@ export class ConfigurationManager extends NitroManager implements IConfiguration
return (existing as T); return (existing as T);
} }
public setValue(key: string, value: string): void public setValue<T>(key: string, value: T): void
{ {
this._definitions.set(key, value); this._definitions.set(key, value);
} }

View File

@ -4,6 +4,6 @@ export interface IConfigurationManager extends INitroManager
{ {
interpolate(value: string, regex?: RegExp): string; interpolate(value: string, regex?: RegExp): string;
getValue<T>(key: string, value?: T): T; getValue<T>(key: string, value?: T): T;
setValue(key: string, value: string): void; setValue<T>(key: string, value: T): void;
definitions: Map<string, unknown>; definitions: Map<string, unknown>;
} }

File diff suppressed because one or more lines are too long

View File

@ -366,4 +366,7 @@ export class IncomingHeader
public static GROUP_DEACTIVATE = 3129; public static GROUP_DEACTIVATE = 3129;
public static PET_RESPECTED = 2788; public static PET_RESPECTED = 2788;
public static PET_SUPPLEMENT = 3441; public static PET_SUPPLEMENT = 3441;
public static NOOBNESS_LEVEL = 3738;
public static CAN_CREATE_ROOM_EVENT = 2599;
public static FAVORITE_GROUP_UDPATE = 3403;
} }

View File

@ -1,16 +0,0 @@
import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { GroupBadgesParser } from '../../parser/group/GroupBadgesParser';
export class GroupBadgesEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, GroupBadgesParser);
}
public getParser(): GroupBadgesParser
{
return this.parser as GroupBadgesParser;
}
}

View File

@ -1,5 +1,4 @@
export * from './GroupBadgePartsEvent'; export * from './GroupBadgePartsEvent';
export * from './GroupBadgesEvent';
export * from './GroupBuyDataEvent'; export * from './GroupBuyDataEvent';
export * from './GroupConfirmMemberRemoveEvent'; export * from './GroupConfirmMemberRemoveEvent';
export * from './GroupInformationEvent'; export * from './GroupInformationEvent';

View File

@ -0,0 +1,16 @@
import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { NoobnessLevelMessageParser } from '../../parser/handshake/NoobnessLevelMessageParser';
export class NoobnessLevelMessageEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, NoobnessLevelMessageParser);
}
public getParser(): NoobnessLevelMessageParser
{
return this.parser as NoobnessLevelMessageParser;
}
}

View File

@ -0,0 +1 @@
export * from './NoobnessLevelMessageEvent';

View File

@ -13,6 +13,7 @@ export * from './friendlist';
export * from './game'; export * from './game';
export * from './generic'; export * from './generic';
export * from './group'; export * from './group';
export * from './handshake';
export * from './help'; export * from './help';
export * from './IncomingHeader'; export * from './IncomingHeader';
export * from './inventory'; export * from './inventory';
@ -49,6 +50,7 @@ export * from './room/session';
export * from './room/unit'; export * from './room/unit';
export * from './room/unit/chat'; export * from './room/unit/chat';
export * from './roomevents'; export * from './roomevents';
export * from './roomsettings';
export * from './security'; export * from './security';
export * from './sound'; export * from './sound';
export * from './talent'; export * from './talent';

View File

@ -0,0 +1,16 @@
import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { CanCreateRoomEventParser } from '../../parser/navigator/CanCreateRoomEventParser';
export class CanCreateRoomEventEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, CanCreateRoomEventParser);
}
public getParser(): CanCreateRoomEventParser
{
return this.parser as CanCreateRoomEventParser;
}
}

View File

@ -1,3 +1,4 @@
export * from './CanCreateRoomEventEvent';
export * from './NavigatorCategoriesEvent'; export * from './NavigatorCategoriesEvent';
export * from './NavigatorCollapsedEvent'; export * from './NavigatorCollapsedEvent';
export * from './NavigatorEventCategoriesEvent'; export * from './NavigatorEventCategoriesEvent';

View File

@ -1,16 +0,0 @@
import { IMessageEvent } from '../../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../../core/communication/messages/MessageEvent';
import { RoomSettingsUsersListParser } from '../../../parser/room/data/RoomSettingsUsersListParser';
export class RoomBannedUsersEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, RoomSettingsUsersListParser);
}
public getParser(): RoomSettingsUsersListParser
{
return this.parser as RoomSettingsUsersListParser;
}
}

View File

@ -1,16 +0,0 @@
import { IMessageEvent } from '../../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../../core/communication/messages/MessageEvent';
import { RoomSettingsUsersListParser } from '../../../parser/room/data/RoomSettingsUsersListParser';
export class RoomUsersWithRightsEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, RoomSettingsUsersListParser);
}
public getParser(): RoomSettingsUsersListParser
{
return this.parser as RoomSettingsUsersListParser;
}
}

View File

@ -1,5 +1,4 @@
export * from './GetGuestRoomResultEvent'; export * from './GetGuestRoomResultEvent';
export * from './RoomBannedUsersEvent';
export * from './RoomChatSettingsEvent'; export * from './RoomChatSettingsEvent';
export * from './RoomEntryInfoMessageEvent'; export * from './RoomEntryInfoMessageEvent';
export * from './RoomScoreEvent'; export * from './RoomScoreEvent';
@ -7,4 +6,3 @@ export * from './RoomSettingsErrorEvent';
export * from './RoomSettingsEvent'; export * from './RoomSettingsEvent';
export * from './RoomSettingsSavedEvent'; export * from './RoomSettingsSavedEvent';
export * from './RoomSettingsUpdatedEvent'; export * from './RoomSettingsUpdatedEvent';
export * from './RoomUsersWithRightsEvent';

View File

@ -0,0 +1,16 @@
import { IMessageEvent } from '../../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../../core/communication/messages/MessageEvent';
import { FavoriteMembershipUpdateMessageParser } from '../../../parser/room/engine/FavoriteMembershipUpdateMessageParser';
export class FavoriteMembershipUpdateMessageEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, FavoriteMembershipUpdateMessageParser);
}
public getParser(): FavoriteMembershipUpdateMessageParser
{
return this.parser as FavoriteMembershipUpdateMessageParser;
}
}

View File

@ -0,0 +1,24 @@
import { IMessageDataWrapper } from '../../../../../core/communication/messages/IMessageDataWrapper';
import { IFlatUser } from './IFlatUser';
export class BannedUserData implements IFlatUser
{
private _userId: number;
private _userName: string;
constructor(wrapper: IMessageDataWrapper)
{
this._userId = wrapper.readInt();
this._userName = wrapper.readString();
}
public get userId(): number
{
return this._userId;
}
public get userName(): string
{
return this._userName;
}
}

View File

@ -0,0 +1,16 @@
import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { BannedUsersFromRoomParser } from '../../parser/roomsettings/BannedUsersFromRoomParser';
export class BannedUsersFromRoomEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, BannedUsersFromRoomParser);
}
public getParser(): BannedUsersFromRoomParser
{
return this.parser as BannedUsersFromRoomParser;
}
}

View File

@ -0,0 +1,16 @@
import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { FlatControllerAddedParser } from '../../parser/roomsettings/FlatControllerAddedParser';
export class FlatControllerAddedEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, FlatControllerAddedParser);
}
public getParser(): FlatControllerAddedParser
{
return this.parser as FlatControllerAddedParser;
}
}

View File

@ -0,0 +1,35 @@
import { IMessageDataWrapper } from '../../../../../core/communication/messages/IMessageDataWrapper';
import { IFlatUser } from './IFlatUser';
export class FlatControllerData implements IFlatUser
{
private _userId: number;
private _userName: string;
private _selected: boolean;
constructor(wrapper: IMessageDataWrapper)
{
this._userId = wrapper.readInt();
this._userName = wrapper.readString();
}
public get userId(): number
{
return this._userId;
}
public get userName(): string
{
return this._userName;
}
public get selected(): boolean
{
return this._selected;
}
public set selected(selected: boolean)
{
this._selected = selected;
}
}

View File

@ -0,0 +1,16 @@
import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { FlatControllerRemovedParser } from '../../parser/roomsettings/FlatControllerRemovedParser';
export class FlatControllerRemovedEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, FlatControllerRemovedParser);
}
public getParser(): FlatControllerRemovedParser
{
return this.parser as FlatControllerRemovedParser;
}
}

View File

@ -0,0 +1,16 @@
import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { FlatControllersParser } from '../../parser/roomsettings/FlatControllersParser';
export class FlatControllersEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, FlatControllersParser);
}
public getParser(): FlatControllersParser
{
return this.parser as FlatControllersParser;
}
}

View File

@ -0,0 +1,5 @@
export interface IFlatUser
{
userId: number;
userName: string;
}

View File

@ -0,0 +1,7 @@
export * from './BannedUserData';
export * from './BannedUsersFromRoomEvent';
export * from './FlatControllerAddedEvent';
export * from './FlatControllerData';
export * from './FlatControllerRemovedEvent';
export * from './FlatControllersEvent';
export * from './IFlatUser';

View File

@ -0,0 +1,16 @@
import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { HabboGroupBadgesMessageParser } from '../../parser/user/HabboGroupBadgesMessageParser';
export class HabboGroupBadgesMessageEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, HabboGroupBadgesMessageParser);
}
public getParser(): HabboGroupBadgesMessageParser
{
return this.parser as HabboGroupBadgesMessageParser;
}
}

View File

@ -1,6 +1,6 @@
import { PetRespectNotificationParser } from '../..';
import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent'; import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent';
import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent'; import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { PetRespectNotificationParser } from '../../parser/user/PetRespectNotificationParser';
export class PetRespectNoficationEvent extends MessageEvent implements IMessageEvent export class PetRespectNoficationEvent extends MessageEvent implements IMessageEvent
{ {

View File

@ -2,6 +2,7 @@ export * from './access';
export * from './ApproveNameMessageEvent'; export * from './ApproveNameMessageEvent';
export * from './data'; export * from './data';
export * from './GuildMembershipsMessageEvent'; export * from './GuildMembershipsMessageEvent';
export * from './HabboGroupBadgesMessageEvent';
export * from './IgnoredUsersEvent'; export * from './IgnoredUsersEvent';
export * from './IgnoreResultEvent'; export * from './IgnoreResultEvent';
export * from './InClientLinkEvent'; export * from './InClientLinkEvent';

View File

@ -1,7 +1,6 @@
export * from './GroupAdminGiveComposer'; export * from './GroupAdminGiveComposer';
export * from './GroupAdminTakeComposer'; export * from './GroupAdminTakeComposer';
export * from './GroupBadgePartsComposer'; export * from './GroupBadgePartsComposer';
export * from './GroupBadgesComposer';
export * from './GroupBuyComposer'; export * from './GroupBuyComposer';
export * from './GroupBuyDataComposer'; export * from './GroupBuyDataComposer';
export * from './GroupConfirmRemoveMemberComposer'; export * from './GroupConfirmRemoveMemberComposer';

View File

@ -1,8 +1,8 @@
import { IMessageComposer } from '../../../../../core/communication/messages/IMessageComposer'; import { IMessageComposer } from '../../../../../core/communication/messages/IMessageComposer';
export class GroupBadgesComposer implements IMessageComposer<ConstructorParameters<typeof GroupBadgesComposer>> export class GetHabboGroupBadgesMessageComposer implements IMessageComposer<ConstructorParameters<typeof GetHabboGroupBadgesMessageComposer>>
{ {
private _data: ConstructorParameters<typeof GroupBadgesComposer>; private _data: ConstructorParameters<typeof GetHabboGroupBadgesMessageComposer>;
constructor() constructor()
{ {

View File

@ -1,6 +1,7 @@
export * from './ApproveNameMessageComposer'; export * from './ApproveNameMessageComposer';
export * from './CatalogGroupsComposer'; export * from './CatalogGroupsComposer';
export * from './data'; export * from './data';
export * from './GetHabboGroupBadgesMessageComposer';
export * from './inventory'; export * from './inventory';
export * from './ScrGetKickbackInfoMessageComposer'; export * from './ScrGetKickbackInfoMessageComposer';
export * from './settings'; export * from './settings';

View File

@ -1,5 +1,4 @@
export * from './GroupBadgePartsParser'; export * from './GroupBadgePartsParser';
export * from './GroupBadgesParser';
export * from './GroupBuyDataParser'; export * from './GroupBuyDataParser';
export * from './GroupConfirmMemberRemoveParser'; export * from './GroupConfirmMemberRemoveParser';
export * from './GroupInformationParser'; export * from './GroupInformationParser';

View File

@ -0,0 +1,28 @@
import { IMessageDataWrapper } from '../../../../../core/communication/messages/IMessageDataWrapper';
import { IMessageParser } from '../../../../../core/communication/messages/IMessageParser';
export class NoobnessLevelMessageParser implements IMessageParser
{
private _noobnessLevel: number;
public flush(): boolean
{
this._noobnessLevel = 0;
return true;
}
public parse(wrapper: IMessageDataWrapper): boolean
{
if(!wrapper) return false;
this._noobnessLevel = wrapper.readInt();
return true;
}
public get noobnessLevel(): number
{
return this._noobnessLevel;
}
}

View File

@ -0,0 +1 @@
export * from './NoobnessLevelMessageParser';

View File

@ -14,6 +14,7 @@ export * from './friendlist';
export * from './game'; export * from './game';
export * from './generic'; export * from './generic';
export * from './group'; export * from './group';
export * from './handshake';
export * from './help'; export * from './help';
export * from './inventory'; export * from './inventory';
export * from './landingview'; export * from './landingview';
@ -27,6 +28,7 @@ export * from './poll';
export * from './quest'; export * from './quest';
export * from './room'; export * from './room';
export * from './roomevents'; export * from './roomevents';
export * from './roomsettings';
export * from './security'; export * from './security';
export * from './sound'; export * from './sound';
export * from './talent'; export * from './talent';

View File

@ -0,0 +1,36 @@
import { IMessageDataWrapper } from '../../../../../core/communication/messages/IMessageDataWrapper';
import { IMessageParser } from '../../../../../core/communication/messages/IMessageParser';
export class CanCreateRoomEventParser implements IMessageParser
{
private _canCreate: boolean;
private _errorCode: number;
public flush(): boolean
{
this._canCreate = false;
this._errorCode = 0;
return true;
}
public parse(wrapper: IMessageDataWrapper): boolean
{
if(!wrapper) return false;
this._canCreate = wrapper.readBoolean();
this._errorCode = wrapper.readInt();
return true;
}
public get canCreate(): boolean
{
return this._canCreate;
}
public get errorCode(): number
{
return this._errorCode;
}
}

View File

@ -1,3 +1,4 @@
export * from './CanCreateRoomEventParser';
export * from './NavigatorCategoriesParser'; export * from './NavigatorCategoriesParser';
export * from './NavigatorCategoryDataParser'; export * from './NavigatorCategoryDataParser';
export * from './NavigatorCollapsedParser'; export * from './NavigatorCollapsedParser';

View File

@ -1,4 +1,4 @@
import { IMessageDataWrapper } from '../../../../../../core'; import { IMessageDataWrapper } from '../../../../../../core/communication/messages';
export class RoomDataParser export class RoomDataParser
{ {
@ -12,7 +12,8 @@ export class RoomDataParser
public static OPEN_STATE = 0; public static OPEN_STATE = 0;
public static DOORBELL_STATE = 1; public static DOORBELL_STATE = 1;
public static PASSWORD_STATE = 2; public static PASSWORD_STATE = 2;
public static INVISIBLE_STATE = 4; public static INVISIBLE_STATE = 3;
public static NOOB_STATE = 4;
private _roomId: number; private _roomId: number;
private _roomName: string; private _roomName: string;
@ -41,7 +42,7 @@ export class RoomDataParser
private _adExpiresIn: number; private _adExpiresIn: number;
private _allInRoomMuted: boolean; private _allInRoomMuted: boolean;
private _canMute: boolean; private _canMute: boolean;
private _roomPicker: boolean;
private _officialRoomPicRef: string; private _officialRoomPicRef: string;
constructor(wrapper: IMessageDataWrapper) constructor(wrapper: IMessageDataWrapper)
@ -81,7 +82,6 @@ export class RoomDataParser
this._adExpiresIn = 0; this._adExpiresIn = 0;
this._allInRoomMuted = false; this._allInRoomMuted = false;
this._canMute = false; this._canMute = false;
this._roomPicker = false;
this._officialRoomPicRef = null; this._officialRoomPicRef = null;
return true; return true;
@ -279,16 +279,6 @@ export class RoomDataParser
return this._displayAd; return this._displayAd;
} }
public get roomPicker(): boolean
{
return this._roomPicker;
}
public set roomPicker(k: boolean)
{
this._roomPicker = k;
}
public get canMute(): boolean public get canMute(): boolean
{ {
return this._canMute; return this._canMute;

View File

@ -1,4 +1,5 @@
import { IMessageDataWrapper, IMessageParser } from '../../../../../../core'; import { IMessageParser } from '../../../../../../././core/communication/messages/IMessageParser';
import { IMessageDataWrapper } from '../../../../../../core/communication/messages/IMessageDataWrapper';
import { RoomChatSettings } from './RoomChatSettings'; import { RoomChatSettings } from './RoomChatSettings';
import { RoomDataParser } from './RoomDataParser'; import { RoomDataParser } from './RoomDataParser';
import { RoomModerationSettings } from './RoomModerationSettings'; import { RoomModerationSettings } from './RoomModerationSettings';
@ -7,8 +8,8 @@ export class RoomInfoParser implements IMessageParser
{ {
private _roomEnter: boolean; private _roomEnter: boolean;
private _roomForward: boolean; private _roomForward: boolean;
private _staffPick: boolean;
private _data: RoomDataParser; private _data: RoomDataParser;
private _staffPick: boolean;
private _isGroupMember: boolean; private _isGroupMember: boolean;
private _moderation: RoomModerationSettings; private _moderation: RoomModerationSettings;
private _chat: RoomChatSettings; private _chat: RoomChatSettings;
@ -17,8 +18,8 @@ export class RoomInfoParser implements IMessageParser
{ {
this._roomEnter = false; this._roomEnter = false;
this._roomForward = false; this._roomForward = false;
this._staffPick = false;
this._data = null; this._data = null;
this._staffPick = false;
this._isGroupMember = false; this._isGroupMember = false;
this._moderation = null; this._moderation = null;
this._chat = null; this._chat = null;
@ -33,7 +34,7 @@ export class RoomInfoParser implements IMessageParser
this._roomEnter = wrapper.readBoolean(); this._roomEnter = wrapper.readBoolean();
this._data = new RoomDataParser(wrapper); this._data = new RoomDataParser(wrapper);
this._roomForward = wrapper.readBoolean(); this._roomForward = wrapper.readBoolean();
this.data.roomPicker = wrapper.readBoolean(); this._staffPick = wrapper.readBoolean();
this._isGroupMember = wrapper.readBoolean(); this._isGroupMember = wrapper.readBoolean();
this.data.allInRoomMuted = wrapper.readBoolean(); this.data.allInRoomMuted = wrapper.readBoolean();
this._moderation = new RoomModerationSettings(wrapper); this._moderation = new RoomModerationSettings(wrapper);
@ -58,6 +59,11 @@ export class RoomInfoParser implements IMessageParser
return this._data; return this._data;
} }
public get staffPick(): boolean
{
return this._staffPick;
}
public get isGroupMember(): boolean public get isGroupMember(): boolean
{ {
return this._isGroupMember; return this._isGroupMember;

View File

@ -9,4 +9,3 @@ export * from './RoomSettingsErrorParser';
export * from './RoomSettingsParser'; export * from './RoomSettingsParser';
export * from './RoomSettingsSavedParser'; export * from './RoomSettingsSavedParser';
export * from './RoomSettingsUpdatedParser'; export * from './RoomSettingsUpdatedParser';
export * from './RoomSettingsUsersListParser';

View File

@ -0,0 +1,51 @@
import { IMessageDataWrapper, IMessageParser } from '../../../../../../core';
export class FavoriteMembershipUpdateMessageParser implements IMessageParser
{
private _roomIndex: number;
private _groupId: number;
private _status: number;
private _groupName: string;
public flush(): boolean
{
this._roomIndex = -1;
this._groupId = -1;
this._status = 0;
this._groupName = null;
return true;
}
public parse(wrapper: IMessageDataWrapper): boolean
{
if(!wrapper) return false;
this._roomIndex = wrapper.readInt();
this._groupId = wrapper.readInt();
this._status = wrapper.readInt();
this._groupName = wrapper.readString();
return true;
}
public get roomIndex(): number
{
return this._roomIndex;
}
public get groupId(): number
{
return this._groupId;
}
public get status(): number
{
return this._status;
}
public get groupName(): string
{
return this._groupName;
}
}

View File

@ -1,3 +1,4 @@
export * from './FavoriteMembershipUpdateMessageParser';
export * from './ObjectsDataUpdateParser'; export * from './ObjectsDataUpdateParser';
export * from './ObjectsRollingParser'; export * from './ObjectsRollingParser';
export * from './RoomCreatedParser'; export * from './RoomCreatedParser';

View File

@ -52,7 +52,7 @@ export class RoomUnitParser implements IMessageParser
user.webID = id; user.webID = id;
user.userType = RoomObjectType.USER; user.userType = RoomObjectType.USER;
user.sex = this.resolveSex(wrapper.readString()); user.sex = this.resolveSex(wrapper.readString());
user.groupID = ('' + wrapper.readInt()); user.groupID = wrapper.readInt();
user.groupStatus = wrapper.readInt(); user.groupStatus = wrapper.readInt();
user.groupName = wrapper.readString(); user.groupName = wrapper.readString();

View File

@ -15,7 +15,7 @@ export class UserMessageData
private _custom: string = ''; private _custom: string = '';
private _activityPoints: number = 0; private _activityPoints: number = 0;
private _webID: number = 0; private _webID: number = 0;
private _groupID: string = ''; private _groupID: number = 0;
private _groupStatus: number = 0; private _groupStatus: number = 0;
private _groupName: string = ''; private _groupName: string = '';
private _subType: string = ''; private _subType: string = '';
@ -192,16 +192,16 @@ export class UserMessageData
} }
} }
public get groupID(): string public get groupID(): number
{ {
return this._groupID; return this._groupID;
} }
public set groupID(k: string) public set groupID(groupId: number)
{ {
if(!this._isReadOnly) if(!this._isReadOnly)
{ {
this._groupID = k; this._groupID = groupId;
} }
} }

View File

@ -0,0 +1,45 @@
import { IMessageDataWrapper } from '../../../../../core/communication/messages/IMessageDataWrapper';
import { IMessageParser } from '../../../../../core/communication/messages/IMessageParser';
import { BannedUserData } from '../../incoming/roomsettings/BannedUserData';
export class BannedUsersFromRoomParser implements IMessageParser
{
private _roomId: number;
private _bannedUsers: BannedUserData[];
public flush(): boolean
{
this._roomId = 0;
this._bannedUsers = [];
return true;
}
public parse(wrapper: IMessageDataWrapper): boolean
{
if(!wrapper) return false;
this._roomId = wrapper.readInt();
let totalBans = wrapper.readInt();
while(totalBans > 0)
{
this._bannedUsers.push(new BannedUserData(wrapper));
totalBans--;
}
return true;
}
public get roomId(): number
{
return this._roomId;
}
public get bannedUsers(): BannedUserData[]
{
return this._bannedUsers;
}
}

View File

@ -0,0 +1,37 @@
import { IMessageDataWrapper } from '../../../../../core/communication/messages/IMessageDataWrapper';
import { IMessageParser } from '../../../../../core/communication/messages/IMessageParser';
import { FlatControllerData } from '../../incoming/roomsettings/FlatControllerData';
export class FlatControllerAddedParser implements IMessageParser
{
private _roomId: number;
private _data: FlatControllerData;
public flush(): boolean
{
this._roomId = 0;
this._data = null;
return true;
}
public parse(wrapper: IMessageDataWrapper): boolean
{
if(!wrapper) return false;
this._roomId = wrapper.readInt();
this._data = new FlatControllerData(wrapper);
return true;
}
public get roomId(): number
{
return this._roomId;
}
public get data(): FlatControllerData
{
return this._data;
}
}

View File

@ -0,0 +1,36 @@
import { IMessageDataWrapper } from '../../../../../core/communication/messages/IMessageDataWrapper';
import { IMessageParser } from '../../../../../core/communication/messages/IMessageParser';
export class FlatControllerRemovedParser implements IMessageParser
{
private _roomId: number;
private _userId: number;
public flush(): boolean
{
this._roomId = 0;
this._userId = 0;
return true;
}
public parse(wrapper: IMessageDataWrapper): boolean
{
if(!wrapper) return false;
this._roomId = wrapper.readInt();
this._userId = wrapper.readInt();
return true;
}
public get roomId(): number
{
return this._roomId;
}
public get userId(): number
{
return this._userId;
}
}

View File

@ -1,6 +1,7 @@
import { IMessageDataWrapper, IMessageParser } from '../../../../../../core'; import { IMessageDataWrapper } from '../../../../../core/communication/messages/IMessageDataWrapper';
import { IMessageParser } from '../../../../../core/communication/messages/IMessageParser';
export class RoomSettingsUsersListParser implements IMessageParser export class FlatControllersParser implements IMessageParser
{ {
private _roomId: number; private _roomId: number;
private _users: Map<number, string>; private _users: Map<number, string>;
@ -27,6 +28,7 @@ export class RoomSettingsUsersListParser implements IMessageParser
const name = wrapper.readString(); const name = wrapper.readString();
this._users.set(id, name); this._users.set(id, name);
usersCount--; usersCount--;
} }

View File

@ -0,0 +1,4 @@
export * from './BannedUsersFromRoomParser';
export * from './FlatControllerAddedParser';
export * from './FlatControllerRemovedParser';
export * from './FlatControllersParser';

View File

@ -1,6 +1,6 @@
import { IMessageDataWrapper, IMessageParser } from '../../../../../core'; import { IMessageDataWrapper, IMessageParser } from '../../../../../core';
export class GroupBadgesParser implements IMessageParser export class HabboGroupBadgesMessageParser implements IMessageParser
{ {
private _badges: Map<number, string>; private _badges: Map<number, string>;

View File

@ -1,6 +1,6 @@
import { PetData } from '..';
import { PetType } from '../../../..';
import { IMessageDataWrapper, IMessageParser } from '../../../../../core'; import { IMessageDataWrapper, IMessageParser } from '../../../../../core';
import { PetType } from '../../../../avatar/pets/PetType';
import { PetData } from '../inventory/pets/PetData';
export class PetRespectNotificationParser implements IMessageParser export class PetRespectNotificationParser implements IMessageParser
{ {

View File

@ -1,6 +1,7 @@
export * from './access'; export * from './access';
export * from './ApproveNameResultParser'; export * from './ApproveNameResultParser';
export * from './data'; export * from './data';
export * from './HabboGroupBadgesMessageParser';
export * from './HabboGroupEntryData'; export * from './HabboGroupEntryData';
export * from './IgnoredUsersParser'; export * from './IgnoredUsersParser';
export * from './IgnoreResultParser'; export * from './IgnoreResultParser';

View File

@ -1964,7 +1964,7 @@ export class RoomEngine extends NitroManager implements IRoomEngine, IRoomCreato
return true; return true;
} }
public updateRoomObjectFloor(roomId: number, objectId: number, location: IVector3D, direction: IVector3D, state: number, data: IObjectData, extra: number = NaN): boolean public updateRoomObjectFloor(roomId: number, objectId: number, location: IVector3D, direction: IVector3D, state: number, data: IObjectData, extra: number = null): boolean
{ {
const object = this.getRoomObjectFloor(roomId, objectId); const object = this.getRoomObjectFloor(roomId, objectId);

View File

@ -7,7 +7,7 @@ export class ObjectDataUpdateMessage extends RoomObjectUpdateMessage
private _data: IObjectData; private _data: IObjectData;
private _extra: number; private _extra: number;
constructor(state: number, data: IObjectData, extra: number = NaN) constructor(state: number, data: IObjectData, extra: number = null)
{ {
super(null, null); super(null, null);
@ -30,4 +30,4 @@ export class ObjectDataUpdateMessage extends RoomObjectUpdateMessage
{ {
return this._extra; return this._extra;
} }
} }

View File

@ -67,11 +67,21 @@ export class ObjectDataBase implements IObjectData
return this._uniqueNumber; return this._uniqueNumber;
} }
public set uniqueNumber(number: number)
{
this._uniqueNumber = number;
}
public get uniqueSeries(): number public get uniqueSeries(): number
{ {
return this._uniqueSeries; return this._uniqueSeries;
} }
public set uniqueSeries(series: number)
{
this._uniqueSeries = series;
}
public get rarityLevel(): number public get rarityLevel(): number
{ {
return -1; return -1;

View File

@ -1,11 +1,11 @@
import { FurnitureBadgeDisplayLogic } from '.'; import { RoomObjectEvent } from '../../../../../room/events/RoomObjectEvent';
import { ObjectSelectedMessage } from '../../..';
import { RoomObjectEvent } from '../../../../..';
import { RoomObjectUpdateMessage } from '../../../../../room/messages/RoomObjectUpdateMessage'; import { RoomObjectUpdateMessage } from '../../../../../room/messages/RoomObjectUpdateMessage';
import { RoomObjectBadgeAssetEvent } from '../../../events/RoomObjectBadgeAssetEvent'; import { RoomObjectBadgeAssetEvent } from '../../../events/RoomObjectBadgeAssetEvent';
import { RoomObjectWidgetRequestEvent } from '../../../events/RoomObjectWidgetRequestEvent'; import { RoomObjectWidgetRequestEvent } from '../../../events/RoomObjectWidgetRequestEvent';
import { ObjectGroupBadgeUpdateMessage } from '../../../messages/ObjectGroupBadgeUpdateMessage'; import { ObjectGroupBadgeUpdateMessage } from '../../../messages/ObjectGroupBadgeUpdateMessage';
import { ObjectSelectedMessage } from '../../../messages/ObjectSelectedMessage';
import { RoomObjectVariable } from '../../RoomObjectVariable'; import { RoomObjectVariable } from '../../RoomObjectVariable';
import { FurnitureBadgeDisplayLogic } from './FurnitureBadgeDisplayLogic';
export class FurnitureAchievementResolutionLogic extends FurnitureBadgeDisplayLogic export class FurnitureAchievementResolutionLogic extends FurnitureBadgeDisplayLogic
{ {

View File

@ -6,6 +6,7 @@ import { FurnitureMultiStateLogic } from './FurnitureMultiStateLogic';
export class FurnitureIceStormLogic extends FurnitureMultiStateLogic export class FurnitureIceStormLogic extends FurnitureMultiStateLogic
{ {
private _nextState: number; private _nextState: number;
private _nextStateExtra: number;
private _nextStateTimestamp: number; private _nextStateTimestamp: number;
constructor() constructor()
@ -26,7 +27,7 @@ export class FurnitureIceStormLogic extends FurnitureMultiStateLogic
data.setString(this._nextState.toString()); data.setString(this._nextState.toString());
super.processUpdateMessage(new ObjectDataUpdateMessage(this._nextState, data)); super.processUpdateMessage(new ObjectDataUpdateMessage(this._nextState, data, this._nextStateExtra));
} }
super.update(totalTimeRunning); super.update(totalTimeRunning);
@ -34,7 +35,12 @@ export class FurnitureIceStormLogic extends FurnitureMultiStateLogic
public processUpdateMessage(message: RoomObjectUpdateMessage): void public processUpdateMessage(message: RoomObjectUpdateMessage): void
{ {
if(message instanceof ObjectDataUpdateMessage) return this.processUpdate(message); if(message instanceof ObjectDataUpdateMessage)
{
this.processUpdate(message);
return;
}
super.processUpdateMessage(message); super.processUpdateMessage(message);
} }
@ -43,8 +49,8 @@ export class FurnitureIceStormLogic extends FurnitureMultiStateLogic
{ {
if(!message) return; if(!message) return;
const state = message.state / 1000; const state = ~~(message.state / 1000);
const time = message.state % 1000; const time = ~~(message.state % 1000);
if(!time) if(!time)
{ {
@ -54,12 +60,13 @@ export class FurnitureIceStormLogic extends FurnitureMultiStateLogic
data.setString(state.toString()); data.setString(state.toString());
super.processUpdateMessage(new ObjectDataUpdateMessage(state, data)); super.processUpdateMessage(new ObjectDataUpdateMessage(state, data, message.extra));
} }
else else
{ {
this._nextState = state; this._nextState = state;
this._nextStateExtra = message.extra;
this._nextStateTimestamp = this.time + time; this._nextStateTimestamp = this.time + time;
} }
} }
} }

View File

@ -254,7 +254,7 @@ export class FurnitureLogic extends MovingObjectLogic
if(message.data) message.data.writeRoomObjectModel(this.object.model); if(message.data) message.data.writeRoomObjectModel(this.object.model);
if(!isNaN(message.extra)) this.object.model.setValue(RoomObjectVariable.FURNITURE_EXTRAS, message.extra.toString()); if(message.extra !== null) this.object.model.setValue(RoomObjectVariable.FURNITURE_EXTRAS, message.extra.toString());
this.object.model.setValue(RoomObjectVariable.FURNITURE_STATE_UPDATE_TIME, this.lastUpdateTime); this.object.model.setValue(RoomObjectVariable.FURNITURE_STATE_UPDATE_TIME, this.lastUpdateTime);
} }

View File

@ -1,8 +1,9 @@
import { MovingObjectLogic } from '..'; import { RoomObjectUpdateMessage } from '../../../../../room/messages/RoomObjectUpdateMessage';
import { LegacyDataType } from '../..'; import { Vector3d } from '../../../../../room/utils/Vector3d';
import { ObjectDataUpdateMessage, ObjectMoveUpdateMessage } from '../../..'; import { ObjectDataUpdateMessage } from '../../../messages/ObjectDataUpdateMessage';
import { Vector3d } from '../../../../..'; import { ObjectMoveUpdateMessage } from '../../../messages/ObjectMoveUpdateMessage';
import { RoomObjectUpdateMessage } from '../../../../../room'; import { LegacyDataType } from '../../data/type/LegacyDataType';
import { MovingObjectLogic } from '../MovingObjectLogic';
import { FurnitureMultiStateLogic } from './FurnitureMultiStateLogic'; import { FurnitureMultiStateLogic } from './FurnitureMultiStateLogic';
export class FurniturePushableLogic extends FurnitureMultiStateLogic export class FurniturePushableLogic extends FurnitureMultiStateLogic

View File

@ -24,6 +24,8 @@ export class PetSizeData extends AnimationSizeData
if(postures.defaultPosture && postures.defaultPosture.length) this._defaultPosture = postures.defaultPosture; if(postures.defaultPosture && postures.defaultPosture.length) this._defaultPosture = postures.defaultPosture;
if(!postures.postures) return false;
for(const posture of postures.postures) for(const posture of postures.postures)
{ {
if(this._posturesToAnimations.get(posture.id)) continue; if(this._posturesToAnimations.get(posture.id)) continue;

View File

@ -1,7 +1,8 @@
import { IDisposable } from '../../core/common/disposable/IDisposable'; import { IDisposable } from '../../core/common/disposable/IDisposable';
import { IMessageEvent } from '../../core/communication/messages/IMessageEvent'; import { IMessageEvent } from '../../core/communication/messages/IMessageEvent';
import { GroupBadgesEvent } from '../communication/messages/incoming/group/GroupBadgesEvent'; import { RoomReadyMessageEvent } from '../communication';
import { GroupBadgesComposer } from '../communication/messages/outgoing/group/GroupBadgesComposer'; import { HabboGroupBadgesMessageEvent } from '../communication/messages/incoming/user/HabboGroupBadgesMessageEvent';
import { GetHabboGroupBadgesMessageComposer } from '../communication/messages/outgoing/user/GetHabboGroupBadgesMessageComposer';
import { SessionDataManager } from './SessionDataManager'; import { SessionDataManager } from './SessionDataManager';
export class GroupInformationManager implements IDisposable export class GroupInformationManager implements IDisposable
@ -22,7 +23,8 @@ export class GroupInformationManager implements IDisposable
if(this._sessionDataManager && this._sessionDataManager.communication) if(this._sessionDataManager && this._sessionDataManager.communication)
{ {
this._messages = [ this._messages = [
new GroupBadgesEvent(this.onGroupBadgesEvent.bind(this)) new RoomReadyMessageEvent(this.onRoomReadyMessageEvent.bind(this)),
new HabboGroupBadgesMessageEvent(this.onGroupBadgesEvent.bind(this))
]; ];
for(const message of this._messages) this._sessionDataManager.communication.registerMessageEvent(message); for(const message of this._messages) this._sessionDataManager.communication.registerMessageEvent(message);
@ -44,20 +46,16 @@ export class GroupInformationManager implements IDisposable
this._sessionDataManager = null; this._sessionDataManager = null;
} }
public requestGroupBadges(): void private onRoomReadyMessageEvent(event: RoomReadyMessageEvent): void
{ {
this._sessionDataManager.send(new GroupBadgesComposer()); this._sessionDataManager.send(new GetHabboGroupBadgesMessageComposer());
} }
private onGroupBadgesEvent(event: GroupBadgesEvent): void private onGroupBadgesEvent(event: HabboGroupBadgesMessageEvent): void
{ {
if(!event) return;
const parser = event.getParser(); const parser = event.getParser();
if(!parser) return; for(const [ groupId, badgeId ] of parser.badges.entries()) this._groupBadges.set(groupId, badgeId);
this._groupBadges = parser.badges;
} }
public getGroupBadge(groupId: number): string public getGroupBadge(groupId: number): string

View File

@ -36,7 +36,6 @@ export interface ISessionDataManager extends INitroManager
userName: string; userName: string;
figure: string; figure: string;
gender: string; gender: string;
isGodMode: boolean;
realName: string; realName: string;
ignoredUsersManager: IgnoredUsersManager; ignoredUsersManager: IgnoredUsersManager;
groupInformationManager: GroupInformationManager; groupInformationManager: GroupInformationManager;
@ -47,6 +46,8 @@ export interface ISessionDataManager extends INitroManager
clubLevel: number; clubLevel: number;
securityLevel: number; securityLevel: number;
isAmbassador: boolean; isAmbassador: boolean;
isNoob: boolean;
isRealNoob: boolean;
isSystemOpen: boolean; isSystemOpen: boolean;
isSystemShutdown: boolean; isSystemShutdown: boolean;
isAuthenticHabbo: boolean; isAuthenticHabbo: boolean;

View File

@ -8,7 +8,7 @@ export class RoomUserData
private _custom: string = ''; private _custom: string = '';
private _activityPoints: number; private _activityPoints: number;
private _webID: number = 0; private _webID: number = 0;
private _groupID: string = ''; private _groupID: number = 0;
private _groupStatus: number = 0; private _groupStatus: number = 0;
private _groupName: string = ''; private _groupName: string = '';
private _ownerId: number = 0; private _ownerId: number = 0;
@ -104,14 +104,14 @@ export class RoomUserData
this._webID = k; this._webID = k;
} }
public get guildId(): string public get groupId(): number
{ {
return this._groupID; return this._groupID;
} }
public set guildId(k: string) public set groupId(groupId: number)
{ {
this._groupID = k; this._groupID = groupId;
} }
public get groupName(): string public get groupName(): string

View File

@ -6,6 +6,7 @@ import { FigureUpdateEvent, MysteryBoxKeysEvent } from '../communication';
import { INitroCommunicationManager } from '../communication/INitroCommunicationManager'; import { INitroCommunicationManager } from '../communication/INitroCommunicationManager';
import { AvailabilityStatusMessageEvent } from '../communication/messages/incoming/availability/AvailabilityStatusMessageEvent'; import { AvailabilityStatusMessageEvent } from '../communication/messages/incoming/availability/AvailabilityStatusMessageEvent';
import { ChangeUserNameResultMessageEvent } from '../communication/messages/incoming/avatar/ChangeUserNameResultMessageEvent'; import { ChangeUserNameResultMessageEvent } from '../communication/messages/incoming/avatar/ChangeUserNameResultMessageEvent';
import { NoobnessLevelMessageEvent } from '../communication/messages/incoming/handshake/NoobnessLevelMessageEvent';
import { RoomReadyMessageEvent } from '../communication/messages/incoming/room/mapping/RoomReadyMessageEvent'; import { RoomReadyMessageEvent } from '../communication/messages/incoming/room/mapping/RoomReadyMessageEvent';
import { UserPermissionsEvent } from '../communication/messages/incoming/user/access/UserPermissionsEvent'; import { UserPermissionsEvent } from '../communication/messages/incoming/user/access/UserPermissionsEvent';
import { UserInfoEvent } from '../communication/messages/incoming/user/data/UserInfoEvent'; import { UserInfoEvent } from '../communication/messages/incoming/user/data/UserInfoEvent';
@ -19,6 +20,7 @@ import { NitroSettingsEvent } from '../events/NitroSettingsEvent';
import { Nitro } from '../Nitro'; import { Nitro } from '../Nitro';
import { HabboWebTools } from '../utils/HabboWebTools'; import { HabboWebTools } from '../utils/HabboWebTools';
import { BadgeImageManager } from './badge/BadgeImageManager'; import { BadgeImageManager } from './badge/BadgeImageManager';
import { NoobnessLevelEnum } from './enum/NoobnessLevelEnum';
import { SecurityLevel } from './enum/SecurityLevel'; import { SecurityLevel } from './enum/SecurityLevel';
import { MysteryBoxKeysUpdateEvent } from './events'; import { MysteryBoxKeysUpdateEvent } from './events';
import { SessionDataPreferencesEvent } from './events/SessionDataPreferencesEvent'; import { SessionDataPreferencesEvent } from './events/SessionDataPreferencesEvent';
@ -53,6 +55,7 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
private _clubLevel: number; private _clubLevel: number;
private _securityLevel: number; private _securityLevel: number;
private _isAmbassador: boolean; private _isAmbassador: boolean;
private _noobnessLevel: number;
private _systemOpen: boolean; private _systemOpen: boolean;
private _systemShutdown: boolean; private _systemShutdown: boolean;
@ -89,6 +92,7 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
this._clubLevel = 0; this._clubLevel = 0;
this._securityLevel = 0; this._securityLevel = 0;
this._isAmbassador = false; this._isAmbassador = false;
this._noobnessLevel = -1;
this._systemOpen = false; this._systemOpen = false;
this._systemShutdown = false; this._systemShutdown = false;
@ -114,7 +118,6 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
this.onProductDataReadyEvent = this.onProductDataReadyEvent.bind(this); this.onProductDataReadyEvent = this.onProductDataReadyEvent.bind(this);
this.onNitroSettingsEvent = this.onNitroSettingsEvent.bind(this); this.onNitroSettingsEvent = this.onNitroSettingsEvent.bind(this);
} }
groupInformationManager: GroupInformationManager;
protected onInit(): void protected onInit(): void
{ {
@ -134,6 +137,7 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
this._communication.registerMessageEvent(new RoomReadyMessageEvent(this.onRoomModelNameEvent.bind(this))); this._communication.registerMessageEvent(new RoomReadyMessageEvent(this.onRoomModelNameEvent.bind(this)));
this._communication.registerMessageEvent(new InClientLinkEvent(this.onInClientLinkEvent.bind(this))); this._communication.registerMessageEvent(new InClientLinkEvent(this.onInClientLinkEvent.bind(this)));
this._communication.registerMessageEvent(new MysteryBoxKeysEvent(this.onMysteryBoxKeysEvent.bind(this))); this._communication.registerMessageEvent(new MysteryBoxKeysEvent(this.onMysteryBoxKeysEvent.bind(this)));
this._communication.registerMessageEvent(new NoobnessLevelMessageEvent(this.onNoobnessLevelMessageEvent.bind(this)));
Nitro.instance.events.addEventListener(NitroSettingsEvent.SETTINGS_UPDATED, this.onNitroSettingsEvent); Nitro.instance.events.addEventListener(NitroSettingsEvent.SETTINGS_UPDATED, this.onNitroSettingsEvent);
} }
@ -398,6 +402,16 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
this.events.dispatchEvent(new MysteryBoxKeysUpdateEvent(parser.boxColor, parser.keyColor)); this.events.dispatchEvent(new MysteryBoxKeysUpdateEvent(parser.boxColor, parser.keyColor));
} }
private onNoobnessLevelMessageEvent(event: NoobnessLevelMessageEvent): void
{
this._noobnessLevel = event.getParser().noobnessLevel;
if(this._noobnessLevel !== NoobnessLevelEnum.OLD_IDENTITY)
{
Nitro.instance.core.configuration.setValue<number>('new.identity', 1);
}
}
private onNitroSettingsEvent(event: NitroSettingsEvent): void private onNitroSettingsEvent(event: NitroSettingsEvent): void
{ {
this._isRoomCameraFollowDisabled = event.cameraFollow; this._isRoomCameraFollowDisabled = event.cameraFollow;
@ -599,6 +613,11 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
return this._ignoredUsersManager; return this._ignoredUsersManager;
} }
public get groupInformationManager(): GroupInformationManager
{
return this._groupInformationManager;
}
public get respectsReceived(): number public get respectsReceived(): number
{ {
return this._respectsReceived; return this._respectsReceived;
@ -634,6 +653,16 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
return this._isAmbassador; return this._isAmbassador;
} }
public get isNoob(): boolean
{
return (this._noobnessLevel !== NoobnessLevelEnum.OLD_IDENTITY);
}
public get isRealNoob(): boolean
{
return (this._noobnessLevel === NoobnessLevelEnum.REAL_NOOB);
}
public get isSystemOpen(): boolean public get isSystemOpen(): boolean
{ {
return this._systemOpen; return this._systemOpen;
@ -654,11 +683,6 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
return (this._securityLevel >= SecurityLevel.MODERATOR); return (this._securityLevel >= SecurityLevel.MODERATOR);
} }
public get isGodMode(): boolean
{
return this.securityLevel >= SecurityLevel.MODERATOR;
}
public get isCameraFollowDisabled(): boolean public get isCameraFollowDisabled(): boolean
{ {
return this._isRoomCameraFollowDisabled; return this._isRoomCameraFollowDisabled;

View File

@ -0,0 +1,6 @@
export class NoobnessLevelEnum
{
public static OLD_IDENTITY: number = 0;
public static NEW_IDENTITY: number = 1;
public static REAL_NOOB: number = 2;
}

View File

@ -1,4 +1,5 @@
export * from './GenericErrorEnum'; export * from './GenericErrorEnum';
export * from './NoobnessLevelEnum';
export * from './RoomControllerLevel'; export * from './RoomControllerLevel';
export * from './RoomTradingLevelEnum'; export * from './RoomTradingLevelEnum';
export * from './SecurityLevel'; export * from './SecurityLevel';

View File

@ -1,7 +1,7 @@
import { IRoomSession } from '../IRoomSession'; import { IRoomSession } from '../IRoomSession';
import { RoomSessionEvent } from './RoomSessionEvent'; import { RoomSessionEvent } from './RoomSessionEvent';
export class RoomSessionFavouriteGroupUpdateEvent extends RoomSessionEvent export class RoomSessionFavoriteGroupUpdateEvent extends RoomSessionEvent
{ {
public static FAVOURITE_GROUP_UPDATE: string = 'RSFGUE_FAVOURITE_GROUP_UPDATE'; public static FAVOURITE_GROUP_UPDATE: string = 'RSFGUE_FAVOURITE_GROUP_UPDATE';
@ -10,14 +10,14 @@ export class RoomSessionFavouriteGroupUpdateEvent extends RoomSessionEvent
private _habboGroupName: string; private _habboGroupName: string;
private _status: number; private _status: number;
constructor(k: IRoomSession, _arg_2: number, _arg_3: number, _arg_4: number, _arg_5: string) constructor(session: IRoomSession, roomIndex: number, groupId: number, status: number, groupName: string)
{ {
super(RoomSessionFavouriteGroupUpdateEvent.FAVOURITE_GROUP_UPDATE, k); super(RoomSessionFavoriteGroupUpdateEvent.FAVOURITE_GROUP_UPDATE, session);
this._roomIndex = _arg_2; this._roomIndex = roomIndex;
this._habboGroupId = _arg_3; this._habboGroupId = groupId;
this._habboGroupName = _arg_5; this._habboGroupName = groupName;
this._status = _arg_4; this._status = status;
} }
public get roomIndex(): number public get roomIndex(): number

View File

@ -5,26 +5,26 @@ export class RoomSessionUserFigureUpdateEvent extends RoomSessionEvent
{ {
public static USER_FIGURE: string = 'RSUBE_FIGURE'; public static USER_FIGURE: string = 'RSUBE_FIGURE';
private _userId: number = 0; private _roomIndex: number = 0;
private _figure: string = ''; private _figure: string = '';
private _gender: string = ''; private _gender: string = '';
private _customInfo: string = ''; private _customInfo: string = '';
private _achievementScore: number; private _achievementScore: number;
constructor(session: IRoomSession, userId: number, figure: string, gender: string, customInfo: string, achievementScore: number) constructor(session: IRoomSession, roomIndex: number, figure: string, gender: string, customInfo: string, achievementScore: number)
{ {
super(RoomSessionUserFigureUpdateEvent.USER_FIGURE, session); super(RoomSessionUserFigureUpdateEvent.USER_FIGURE, session);
this._userId = userId; this._roomIndex = roomIndex;
this._figure = figure; this._figure = figure;
this._gender = gender; this._gender = gender;
this._customInfo = customInfo; this._customInfo = customInfo;
this._achievementScore = achievementScore; this._achievementScore = achievementScore;
} }
public get userId(): number public get roomIndex(): number
{ {
return this._userId; return this._roomIndex;
} }
public get figure(): string public get figure(): string

View File

@ -10,7 +10,7 @@ export * from './RoomSessionDimmerPresetsEventPresetItem';
export * from './RoomSessionDoorbellEvent'; export * from './RoomSessionDoorbellEvent';
export * from './RoomSessionErrorMessageEvent'; export * from './RoomSessionErrorMessageEvent';
export * from './RoomSessionEvent'; export * from './RoomSessionEvent';
export * from './RoomSessionFavouriteGroupUpdateEvent'; export * from './RoomSessionFavoriteGroupUpdateEvent';
export * from './RoomSessionFriendRequestEvent'; export * from './RoomSessionFriendRequestEvent';
export * from './RoomSessionNestBreedingSuccessEvent'; export * from './RoomSessionNestBreedingSuccessEvent';
export * from './RoomSessionPetBreedingEvent'; export * from './RoomSessionPetBreedingEvent';

View File

@ -1,4 +1,3 @@
import { PetSupplementedNotificationEvent, PetSupplementTypeEnum } from '../..';
import { IConnection } from '../../../core/communication/connections/IConnection'; import { IConnection } from '../../../core/communication/connections/IConnection';
import { FloodControlEvent } from '../../communication/messages/incoming/room/unit/chat/FloodControlEvent'; import { FloodControlEvent } from '../../communication/messages/incoming/room/unit/chat/FloodControlEvent';
import { RemainingMuteEvent } from '../../communication/messages/incoming/room/unit/chat/RemainingMuteEvent'; import { RemainingMuteEvent } from '../../communication/messages/incoming/room/unit/chat/RemainingMuteEvent';
@ -7,6 +6,8 @@ import { RoomUnitChatShoutEvent } from '../../communication/messages/incoming/ro
import { RoomUnitChatWhisperEvent } from '../../communication/messages/incoming/room/unit/chat/RoomUnitChatWhisperEvent'; import { RoomUnitChatWhisperEvent } from '../../communication/messages/incoming/room/unit/chat/RoomUnitChatWhisperEvent';
import { RoomUnitHandItemReceivedEvent } from '../../communication/messages/incoming/room/unit/RoomUnitHandItemReceivedEvent'; import { RoomUnitHandItemReceivedEvent } from '../../communication/messages/incoming/room/unit/RoomUnitHandItemReceivedEvent';
import { PetRespectNoficationEvent } from '../../communication/messages/incoming/user/PetRespectNoficationEvent'; import { PetRespectNoficationEvent } from '../../communication/messages/incoming/user/PetRespectNoficationEvent';
import { PetSupplementedNotificationEvent } from '../../communication/messages/incoming/user/PetSupplementedNotificationEvent';
import { PetSupplementTypeEnum } from '../../communication/messages/incoming/user/PetSupplementTypeEnum';
import { RespectReceivedEvent } from '../../communication/messages/incoming/user/RespectReceivedEvent'; import { RespectReceivedEvent } from '../../communication/messages/incoming/user/RespectReceivedEvent';
import { SystemChatStyleEnum } from '../../ui/widget/enums/SystemChatStyleEnum'; import { SystemChatStyleEnum } from '../../ui/widget/enums/SystemChatStyleEnum';
import { RoomSessionChatEvent } from '../events/RoomSessionChatEvent'; import { RoomSessionChatEvent } from '../events/RoomSessionChatEvent';

View File

@ -4,6 +4,7 @@ import { NewFriendRequestEvent } from '../../communication/messages/incoming/fri
import { BotErrorEvent } from '../../communication/messages/incoming/notifications/BotErrorEvent'; import { BotErrorEvent } from '../../communication/messages/incoming/notifications/BotErrorEvent';
import { PetPlacingErrorEvent } from '../../communication/messages/incoming/notifications/PetPlacingErrorEvent'; import { PetPlacingErrorEvent } from '../../communication/messages/incoming/notifications/PetPlacingErrorEvent';
import { RoomDoorbellEvent } from '../../communication/messages/incoming/room/access/doorbell/RoomDoorbellEvent'; import { RoomDoorbellEvent } from '../../communication/messages/incoming/room/access/doorbell/RoomDoorbellEvent';
import { FavoriteMembershipUpdateMessageEvent } from '../../communication/messages/incoming/room/engine/FavoriteMembershipUpdateMessageEvent';
import { PetInfoEvent } from '../../communication/messages/incoming/room/pet/PetInfoEvent'; import { PetInfoEvent } from '../../communication/messages/incoming/room/pet/PetInfoEvent';
import { PetStatusUpdateEvent } from '../../communication/messages/incoming/room/pet/PetStatusUpdateEvent'; import { PetStatusUpdateEvent } from '../../communication/messages/incoming/room/pet/PetStatusUpdateEvent';
import { RoomUnitDanceEvent } from '../../communication/messages/incoming/room/unit/RoomUnitDanceEvent'; import { RoomUnitDanceEvent } from '../../communication/messages/incoming/room/unit/RoomUnitDanceEvent';
@ -16,6 +17,7 @@ import { RoomSessionPetFigureUpdateEvent, RoomSessionPetStatusUpdateEvent, RoomS
import { RoomSessionDanceEvent } from '../events/RoomSessionDanceEvent'; import { RoomSessionDanceEvent } from '../events/RoomSessionDanceEvent';
import { RoomSessionDoorbellEvent } from '../events/RoomSessionDoorbellEvent'; import { RoomSessionDoorbellEvent } from '../events/RoomSessionDoorbellEvent';
import { RoomSessionErrorMessageEvent } from '../events/RoomSessionErrorMessageEvent'; import { RoomSessionErrorMessageEvent } from '../events/RoomSessionErrorMessageEvent';
import { RoomSessionFavoriteGroupUpdateEvent } from '../events/RoomSessionFavoriteGroupUpdateEvent';
import { RoomSessionFriendRequestEvent } from '../events/RoomSessionFriendRequestEvent'; import { RoomSessionFriendRequestEvent } from '../events/RoomSessionFriendRequestEvent';
import { RoomSessionPetInfoUpdateEvent } from '../events/RoomSessionPetInfoUpdateEvent'; import { RoomSessionPetInfoUpdateEvent } from '../events/RoomSessionPetInfoUpdateEvent';
import { RoomSessionUserBadgesEvent } from '../events/RoomSessionUserBadgesEvent'; import { RoomSessionUserBadgesEvent } from '../events/RoomSessionUserBadgesEvent';
@ -44,6 +46,7 @@ export class RoomUsersHandler extends BaseHandler
connection.addMessageEvent(new PetFigureUpdateEvent(this.onPetFigureUpdateEvent.bind(this))); connection.addMessageEvent(new PetFigureUpdateEvent(this.onPetFigureUpdateEvent.bind(this)));
connection.addMessageEvent(new PetPlacingErrorEvent(this.onPetPlacingError.bind(this))); connection.addMessageEvent(new PetPlacingErrorEvent(this.onPetPlacingError.bind(this)));
connection.addMessageEvent(new BotErrorEvent(this.onBotError.bind(this))); connection.addMessageEvent(new BotErrorEvent(this.onBotError.bind(this)));
connection.addMessageEvent(new FavoriteMembershipUpdateMessageEvent(this.onFavoriteMembershipUpdateMessageEvent.bind(this)));
} }
private onRoomUnitEvent(event: RoomUnitEvent): void private onRoomUnitEvent(event: RoomUnitEvent): void
@ -72,7 +75,7 @@ export class RoomUsersHandler extends BaseHandler
userData.figure = user.figure; userData.figure = user.figure;
userData.type = user.userType; userData.type = user.userType;
userData.webID = user.webID; userData.webID = user.webID;
userData.guildId = user.groupID; userData.groupId = user.groupID;
userData.groupName = user.groupName; userData.groupName = user.groupName;
userData.groupStatus = user.groupStatus; userData.groupStatus = user.groupStatus;
userData.sex = user.sex; userData.sex = user.sex;
@ -374,4 +377,23 @@ export class RoomUsersHandler extends BaseHandler
this.listener.events.dispatchEvent(new RoomSessionErrorMessageEvent(type, session)); this.listener.events.dispatchEvent(new RoomSessionErrorMessageEvent(type, session));
} }
private onFavoriteMembershipUpdateMessageEvent(event: FavoriteMembershipUpdateMessageEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
const session = this.listener.getSession(this.roomId);
if(!session) return;
const userData = session.userDataManager.getUserDataByIndex(parser.roomIndex);
if(!userData) return;
userData.groupId = parser.groupId;
userData.groupName = parser.groupName;
this.listener.events.dispatchEvent(new RoomSessionFavoriteGroupUpdateEvent(session, parser.roomIndex, parser.groupId, parser.status, parser.groupName));
}
} }

View File

@ -84,7 +84,7 @@ export class MusicManager extends NitroManager implements IMusicManager
private onEvent(event: NitroEvent): void private onEvent(event: NitroEvent): void
{ {
console.log('music manager', event);
} }
private onTraxSongInfoMessageEvent(event: TraxSongInfoMessageEvent): void private onTraxSongInfoMessageEvent(event: TraxSongInfoMessageEvent): void

344
yarn.lock

File diff suppressed because it is too large Load Diff