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:
- test
- compile
- test
- compile
ESLinter:
stage: test
@ -16,11 +15,11 @@ ESLinter:
- node_modules
Compile:
stage: compile
script:
- npm i
- npm run compile
cache:
key: ${CI_COMMIT_BRANCH}
paths:
- node_modules
stage: compile
script:
- yarn install
- yarn compile
cache:
key: ${CI_COMMIT_BRANCH}
paths:
- node_modules

4
package-lock.json generated
View File

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

View File

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

View File

@ -1,5 +1,5 @@
export class NitroVersion
{
public static RENDERER_VERSION: string = '1.1.12';
public static RENDERER_VERSION: string = '1.1.16';
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
{
const now = Date.now();

View File

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

View File

@ -4,6 +4,6 @@ export interface IConfigurationManager extends INitroManager
{
interpolate(value: string, regex?: RegExp): string;
getValue<T>(key: string, value?: T): T;
setValue(key: string, value: string): void;
setValue<T>(key: string, value: T): void;
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 PET_RESPECTED = 2788;
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 './GroupBadgesEvent';
export * from './GroupBuyDataEvent';
export * from './GroupConfirmMemberRemoveEvent';
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 './generic';
export * from './group';
export * from './handshake';
export * from './help';
export * from './IncomingHeader';
export * from './inventory';
@ -49,6 +50,7 @@ export * from './room/session';
export * from './room/unit';
export * from './room/unit/chat';
export * from './roomevents';
export * from './roomsettings';
export * from './security';
export * from './sound';
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 './NavigatorCollapsedEvent';
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 './RoomBannedUsersEvent';
export * from './RoomChatSettingsEvent';
export * from './RoomEntryInfoMessageEvent';
export * from './RoomScoreEvent';
@ -7,4 +6,3 @@ export * from './RoomSettingsErrorEvent';
export * from './RoomSettingsEvent';
export * from './RoomSettingsSavedEvent';
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 { MessageEvent } from '../../../../../core/communication/messages/MessageEvent';
import { PetRespectNotificationParser } from '../../parser/user/PetRespectNotificationParser';
export class PetRespectNoficationEvent extends MessageEvent implements IMessageEvent
{

View File

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

View File

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

View File

@ -1,8 +1,8 @@
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()
{

View File

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

View File

@ -1,5 +1,4 @@
export * from './GroupBadgePartsParser';
export * from './GroupBadgesParser';
export * from './GroupBuyDataParser';
export * from './GroupConfirmMemberRemoveParser';
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 './generic';
export * from './group';
export * from './handshake';
export * from './help';
export * from './inventory';
export * from './landingview';
@ -27,6 +28,7 @@ export * from './poll';
export * from './quest';
export * from './room';
export * from './roomevents';
export * from './roomsettings';
export * from './security';
export * from './sound';
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 './NavigatorCategoryDataParser';
export * from './NavigatorCollapsedParser';

View File

@ -1,4 +1,4 @@
import { IMessageDataWrapper } from '../../../../../../core';
import { IMessageDataWrapper } from '../../../../../../core/communication/messages';
export class RoomDataParser
{
@ -12,7 +12,8 @@ export class RoomDataParser
public static OPEN_STATE = 0;
public static DOORBELL_STATE = 1;
public static PASSWORD_STATE = 2;
public static INVISIBLE_STATE = 4;
public static INVISIBLE_STATE = 3;
public static NOOB_STATE = 4;
private _roomId: number;
private _roomName: string;
@ -41,7 +42,7 @@ export class RoomDataParser
private _adExpiresIn: number;
private _allInRoomMuted: boolean;
private _canMute: boolean;
private _roomPicker: boolean;
private _officialRoomPicRef: string;
constructor(wrapper: IMessageDataWrapper)
@ -81,7 +82,6 @@ export class RoomDataParser
this._adExpiresIn = 0;
this._allInRoomMuted = false;
this._canMute = false;
this._roomPicker = false;
this._officialRoomPicRef = null;
return true;
@ -279,16 +279,6 @@ export class RoomDataParser
return this._displayAd;
}
public get roomPicker(): boolean
{
return this._roomPicker;
}
public set roomPicker(k: boolean)
{
this._roomPicker = k;
}
public get canMute(): boolean
{
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 { RoomDataParser } from './RoomDataParser';
import { RoomModerationSettings } from './RoomModerationSettings';
@ -7,8 +8,8 @@ export class RoomInfoParser implements IMessageParser
{
private _roomEnter: boolean;
private _roomForward: boolean;
private _staffPick: boolean;
private _data: RoomDataParser;
private _staffPick: boolean;
private _isGroupMember: boolean;
private _moderation: RoomModerationSettings;
private _chat: RoomChatSettings;
@ -17,8 +18,8 @@ export class RoomInfoParser implements IMessageParser
{
this._roomEnter = false;
this._roomForward = false;
this._staffPick = false;
this._data = null;
this._staffPick = false;
this._isGroupMember = false;
this._moderation = null;
this._chat = null;
@ -33,7 +34,7 @@ export class RoomInfoParser implements IMessageParser
this._roomEnter = wrapper.readBoolean();
this._data = new RoomDataParser(wrapper);
this._roomForward = wrapper.readBoolean();
this.data.roomPicker = wrapper.readBoolean();
this._staffPick = wrapper.readBoolean();
this._isGroupMember = wrapper.readBoolean();
this.data.allInRoomMuted = wrapper.readBoolean();
this._moderation = new RoomModerationSettings(wrapper);
@ -58,6 +59,11 @@ export class RoomInfoParser implements IMessageParser
return this._data;
}
public get staffPick(): boolean
{
return this._staffPick;
}
public get isGroupMember(): boolean
{
return this._isGroupMember;

View File

@ -9,4 +9,3 @@ export * from './RoomSettingsErrorParser';
export * from './RoomSettingsParser';
export * from './RoomSettingsSavedParser';
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 './ObjectsRollingParser';
export * from './RoomCreatedParser';

View File

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

View File

@ -15,7 +15,7 @@ export class UserMessageData
private _custom: string = '';
private _activityPoints: number = 0;
private _webID: number = 0;
private _groupID: string = '';
private _groupID: number = 0;
private _groupStatus: number = 0;
private _groupName: string = '';
private _subType: string = '';
@ -192,16 +192,16 @@ export class UserMessageData
}
}
public get groupID(): string
public get groupID(): number
{
return this._groupID;
}
public set groupID(k: string)
public set groupID(groupId: number)
{
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 _users: Map<number, string>;
@ -27,6 +28,7 @@ export class RoomSettingsUsersListParser implements IMessageParser
const name = wrapper.readString();
this._users.set(id, name);
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';
export class GroupBadgesParser implements IMessageParser
export class HabboGroupBadgesMessageParser implements IMessageParser
{
private _badges: Map<number, string>;

View File

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

View File

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

View File

@ -1964,7 +1964,7 @@ export class RoomEngine extends NitroManager implements IRoomEngine, IRoomCreato
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);

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,9 @@
import { MovingObjectLogic } from '..';
import { LegacyDataType } from '../..';
import { ObjectDataUpdateMessage, ObjectMoveUpdateMessage } from '../../..';
import { Vector3d } from '../../../../..';
import { RoomObjectUpdateMessage } from '../../../../../room';
import { RoomObjectUpdateMessage } from '../../../../../room/messages/RoomObjectUpdateMessage';
import { Vector3d } from '../../../../../room/utils/Vector3d';
import { ObjectDataUpdateMessage } from '../../../messages/ObjectDataUpdateMessage';
import { ObjectMoveUpdateMessage } from '../../../messages/ObjectMoveUpdateMessage';
import { LegacyDataType } from '../../data/type/LegacyDataType';
import { MovingObjectLogic } from '../MovingObjectLogic';
import { FurnitureMultiStateLogic } from './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.postures) return false;
for(const posture of postures.postures)
{
if(this._posturesToAnimations.get(posture.id)) continue;

View File

@ -1,7 +1,8 @@
import { IDisposable } from '../../core/common/disposable/IDisposable';
import { IMessageEvent } from '../../core/communication/messages/IMessageEvent';
import { GroupBadgesEvent } from '../communication/messages/incoming/group/GroupBadgesEvent';
import { GroupBadgesComposer } from '../communication/messages/outgoing/group/GroupBadgesComposer';
import { RoomReadyMessageEvent } from '../communication';
import { HabboGroupBadgesMessageEvent } from '../communication/messages/incoming/user/HabboGroupBadgesMessageEvent';
import { GetHabboGroupBadgesMessageComposer } from '../communication/messages/outgoing/user/GetHabboGroupBadgesMessageComposer';
import { SessionDataManager } from './SessionDataManager';
export class GroupInformationManager implements IDisposable
@ -22,7 +23,8 @@ export class GroupInformationManager implements IDisposable
if(this._sessionDataManager && this._sessionDataManager.communication)
{
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);
@ -44,20 +46,16 @@ export class GroupInformationManager implements IDisposable
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();
if(!parser) return;
this._groupBadges = parser.badges;
for(const [ groupId, badgeId ] of parser.badges.entries()) this._groupBadges.set(groupId, badgeId);
}
public getGroupBadge(groupId: number): string

View File

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

View File

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

View File

@ -6,6 +6,7 @@ import { FigureUpdateEvent, MysteryBoxKeysEvent } from '../communication';
import { INitroCommunicationManager } from '../communication/INitroCommunicationManager';
import { AvailabilityStatusMessageEvent } from '../communication/messages/incoming/availability/AvailabilityStatusMessageEvent';
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 { UserPermissionsEvent } from '../communication/messages/incoming/user/access/UserPermissionsEvent';
import { UserInfoEvent } from '../communication/messages/incoming/user/data/UserInfoEvent';
@ -19,6 +20,7 @@ import { NitroSettingsEvent } from '../events/NitroSettingsEvent';
import { Nitro } from '../Nitro';
import { HabboWebTools } from '../utils/HabboWebTools';
import { BadgeImageManager } from './badge/BadgeImageManager';
import { NoobnessLevelEnum } from './enum/NoobnessLevelEnum';
import { SecurityLevel } from './enum/SecurityLevel';
import { MysteryBoxKeysUpdateEvent } from './events';
import { SessionDataPreferencesEvent } from './events/SessionDataPreferencesEvent';
@ -53,6 +55,7 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
private _clubLevel: number;
private _securityLevel: number;
private _isAmbassador: boolean;
private _noobnessLevel: number;
private _systemOpen: boolean;
private _systemShutdown: boolean;
@ -89,6 +92,7 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
this._clubLevel = 0;
this._securityLevel = 0;
this._isAmbassador = false;
this._noobnessLevel = -1;
this._systemOpen = false;
this._systemShutdown = false;
@ -114,7 +118,6 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
this.onProductDataReadyEvent = this.onProductDataReadyEvent.bind(this);
this.onNitroSettingsEvent = this.onNitroSettingsEvent.bind(this);
}
groupInformationManager: GroupInformationManager;
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 InClientLinkEvent(this.onInClientLinkEvent.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);
}
@ -398,6 +402,16 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
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
{
this._isRoomCameraFollowDisabled = event.cameraFollow;
@ -599,6 +613,11 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
return this._ignoredUsersManager;
}
public get groupInformationManager(): GroupInformationManager
{
return this._groupInformationManager;
}
public get respectsReceived(): number
{
return this._respectsReceived;
@ -634,6 +653,16 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
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
{
return this._systemOpen;
@ -654,11 +683,6 @@ export class SessionDataManager extends NitroManager implements ISessionDataMana
return (this._securityLevel >= SecurityLevel.MODERATOR);
}
public get isGodMode(): boolean
{
return this.securityLevel >= SecurityLevel.MODERATOR;
}
public get isCameraFollowDisabled(): boolean
{
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 './NoobnessLevelEnum';
export * from './RoomControllerLevel';
export * from './RoomTradingLevelEnum';
export * from './SecurityLevel';

View File

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

View File

@ -5,26 +5,26 @@ export class RoomSessionUserFigureUpdateEvent extends RoomSessionEvent
{
public static USER_FIGURE: string = 'RSUBE_FIGURE';
private _userId: number = 0;
private _roomIndex: number = 0;
private _figure: string = '';
private _gender: string = '';
private _customInfo: string = '';
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);
this._userId = userId;
this._roomIndex = roomIndex;
this._figure = figure;
this._gender = gender;
this._customInfo = customInfo;
this._achievementScore = achievementScore;
}
public get userId(): number
public get roomIndex(): number
{
return this._userId;
return this._roomIndex;
}
public get figure(): string

View File

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

View File

@ -1,4 +1,3 @@
import { PetSupplementedNotificationEvent, PetSupplementTypeEnum } from '../..';
import { IConnection } from '../../../core/communication/connections/IConnection';
import { FloodControlEvent } from '../../communication/messages/incoming/room/unit/chat/FloodControlEvent';
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 { RoomUnitHandItemReceivedEvent } from '../../communication/messages/incoming/room/unit/RoomUnitHandItemReceivedEvent';
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 { SystemChatStyleEnum } from '../../ui/widget/enums/SystemChatStyleEnum';
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 { PetPlacingErrorEvent } from '../../communication/messages/incoming/notifications/PetPlacingErrorEvent';
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 { PetStatusUpdateEvent } from '../../communication/messages/incoming/room/pet/PetStatusUpdateEvent';
import { RoomUnitDanceEvent } from '../../communication/messages/incoming/room/unit/RoomUnitDanceEvent';
@ -16,6 +17,7 @@ import { RoomSessionPetFigureUpdateEvent, RoomSessionPetStatusUpdateEvent, RoomS
import { RoomSessionDanceEvent } from '../events/RoomSessionDanceEvent';
import { RoomSessionDoorbellEvent } from '../events/RoomSessionDoorbellEvent';
import { RoomSessionErrorMessageEvent } from '../events/RoomSessionErrorMessageEvent';
import { RoomSessionFavoriteGroupUpdateEvent } from '../events/RoomSessionFavoriteGroupUpdateEvent';
import { RoomSessionFriendRequestEvent } from '../events/RoomSessionFriendRequestEvent';
import { RoomSessionPetInfoUpdateEvent } from '../events/RoomSessionPetInfoUpdateEvent';
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 PetPlacingErrorEvent(this.onPetPlacingError.bind(this)));
connection.addMessageEvent(new BotErrorEvent(this.onBotError.bind(this)));
connection.addMessageEvent(new FavoriteMembershipUpdateMessageEvent(this.onFavoriteMembershipUpdateMessageEvent.bind(this)));
}
private onRoomUnitEvent(event: RoomUnitEvent): void
@ -72,7 +75,7 @@ export class RoomUsersHandler extends BaseHandler
userData.figure = user.figure;
userData.type = user.userType;
userData.webID = user.webID;
userData.guildId = user.groupID;
userData.groupId = user.groupID;
userData.groupName = user.groupName;
userData.groupStatus = user.groupStatus;
userData.sex = user.sex;
@ -374,4 +377,23 @@ export class RoomUsersHandler extends BaseHandler
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
{
console.log('music manager', event);
}
private onTraxSongInfoMessageEvent(event: TraxSongInfoMessageEvent): void

344
yarn.lock

File diff suppressed because it is too large Load Diff