Update packets, fix group badge loading

This commit is contained in:
Bill 2022-03-21 01:54:27 -04:00
parent e7dcd1da19
commit 3e0f5e3478
25 changed files with 162 additions and 72 deletions

File diff suppressed because one or more lines are too long

View File

@ -369,4 +369,5 @@ export class IncomingHeader
public static PET_SUPPLEMENT = 3441; public static PET_SUPPLEMENT = 3441;
public static NOOBNESS_LEVEL = 3738; public static NOOBNESS_LEVEL = 3738;
public static CAN_CREATE_ROOM_EVENT = 2599; 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 { 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,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

@ -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,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

@ -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,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

@ -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;

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

@ -118,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
{ {
@ -614,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;
@ -679,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

@ -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

@ -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));
}
} }