From f0651a3a338b2b7cd6d44808e8dab18c4625f773 Mon Sep 17 00:00:00 2001 From: Bill Date: Wed, 16 Mar 2022 20:44:12 -0400 Subject: [PATCH] Update pet packets --- src/nitro/communication/NitroMessages.ts | 1 + .../messages/incoming/IncomingHeader.ts | 1 + .../incoming/user/PetSupplementTypeEnum.ts | 8 +++ .../user/PetSupplementedNotificationEvent.ts | 16 +++++ .../messages/incoming/user/index.ts | 2 + .../user/PetSupplementedNotificationParser.ts | 43 ++++++++++++ .../messages/parser/user/index.ts | 1 + src/nitro/session/handler/RoomChatHandler.ts | 67 +++++++++++++++++++ 8 files changed, 139 insertions(+) create mode 100644 src/nitro/communication/messages/incoming/user/PetSupplementTypeEnum.ts create mode 100644 src/nitro/communication/messages/incoming/user/PetSupplementedNotificationEvent.ts create mode 100644 src/nitro/communication/messages/parser/user/PetSupplementedNotificationParser.ts diff --git a/src/nitro/communication/NitroMessages.ts b/src/nitro/communication/NitroMessages.ts index 43244677..ff28d62b 100644 --- a/src/nitro/communication/NitroMessages.ts +++ b/src/nitro/communication/NitroMessages.ts @@ -881,6 +881,7 @@ export class NitroMessages implements IMessageConfiguration this._events.set(IncomingHeader.USER_WARDROBE_PAGE, UserWardrobePageEvent); this._events.set(IncomingHeader.SCR_SEND_KICKBACK_INFO, ScrSendKickbackInfoMessageEvent); this._events.set(IncomingHeader.PET_RESPECTED, PetRespectNoficationEvent); + this._events.set(IncomingHeader.PET_SUPPLEMENT, PetSupplementComposer); this._events.set(IncomingHeader.GENERIC_ERROR, GenericErrorEvent); this._events.set(IncomingHeader.GROUP_LIST, GuildMembershipsMessageEvent); diff --git a/src/nitro/communication/messages/incoming/IncomingHeader.ts b/src/nitro/communication/messages/incoming/IncomingHeader.ts index 60f5b9ba..b27a42b7 100644 --- a/src/nitro/communication/messages/incoming/IncomingHeader.ts +++ b/src/nitro/communication/messages/incoming/IncomingHeader.ts @@ -366,4 +366,5 @@ export class IncomingHeader public static PET_STATUS = 1907; public static GROUP_DEACTIVATE = 3129; public static PET_RESPECTED = 2788; + public static PET_SUPPLEMENT = 3441; } diff --git a/src/nitro/communication/messages/incoming/user/PetSupplementTypeEnum.ts b/src/nitro/communication/messages/incoming/user/PetSupplementTypeEnum.ts new file mode 100644 index 00000000..d111209c --- /dev/null +++ b/src/nitro/communication/messages/incoming/user/PetSupplementTypeEnum.ts @@ -0,0 +1,8 @@ +export class PetSupplementTypeEnum +{ + public static WATER: number = 0; + public static LIGHT: number = 1; + public static REVIVE: number = 2; + public static REBREED_FERTILIZER: number = 3; + public static SPEED_FERTILIZER: number = 4; +} diff --git a/src/nitro/communication/messages/incoming/user/PetSupplementedNotificationEvent.ts b/src/nitro/communication/messages/incoming/user/PetSupplementedNotificationEvent.ts new file mode 100644 index 00000000..c953cbe5 --- /dev/null +++ b/src/nitro/communication/messages/incoming/user/PetSupplementedNotificationEvent.ts @@ -0,0 +1,16 @@ +import { PetSupplementedNotificationParser } from '../..'; +import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent'; +import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent'; + +export class PetSupplementedNotificationEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, PetSupplementedNotificationParser); + } + + public getParser(): PetSupplementedNotificationParser + { + return this.parser as PetSupplementedNotificationParser; + } +} diff --git a/src/nitro/communication/messages/incoming/user/index.ts b/src/nitro/communication/messages/incoming/user/index.ts index dae0e1fb..228a2fe5 100644 --- a/src/nitro/communication/messages/incoming/user/index.ts +++ b/src/nitro/communication/messages/incoming/user/index.ts @@ -6,6 +6,8 @@ export * from './IgnoredUsersEvent'; export * from './IgnoreResultEvent'; export * from './InClientLinkEvent'; export * from './inventory'; +export * from './PetSupplementedNotificationEvent'; +export * from './PetSupplementTypeEnum'; export * from './RespectReceivedEvent'; export * from './ScrKickbackData'; export * from './ScrSendKickbackInfoMessageEvent'; diff --git a/src/nitro/communication/messages/parser/user/PetSupplementedNotificationParser.ts b/src/nitro/communication/messages/parser/user/PetSupplementedNotificationParser.ts new file mode 100644 index 00000000..3e3d90c9 --- /dev/null +++ b/src/nitro/communication/messages/parser/user/PetSupplementedNotificationParser.ts @@ -0,0 +1,43 @@ +import { IMessageDataWrapper, IMessageParser } from '../../../../../core'; + +export class PetSupplementedNotificationParser implements IMessageParser +{ + private _petId: number; + private _userId: number; + private _supplementType: number; + + public flush(): boolean + { + this._petId = 0; + this._userId = 0; + this._supplementType = 0; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._petId = wrapper.readInt(); + this._userId = wrapper.readInt(); + this._supplementType = wrapper.readInt(); + + return true; + } + + public get petId(): number + { + return this._petId; + } + + public get userId(): number + { + return this._userId; + } + + public get supplementType(): number + { + return this._supplementType; + } +} diff --git a/src/nitro/communication/messages/parser/user/index.ts b/src/nitro/communication/messages/parser/user/index.ts index 401714ae..496bafec 100644 --- a/src/nitro/communication/messages/parser/user/index.ts +++ b/src/nitro/communication/messages/parser/user/index.ts @@ -7,6 +7,7 @@ export * from './IgnoreResultParser'; export * from './InClientLinkParser'; export * from './inventory'; export * from './PetRespectNotificationParser'; +export * from './PetSupplementedNotificationParser'; export * from './RespectReceivedParser'; export * from './RoomEntryData'; export * from './ScrSendKickbackInfoMessageParser'; diff --git a/src/nitro/session/handler/RoomChatHandler.ts b/src/nitro/session/handler/RoomChatHandler.ts index a491f728..3931c5b7 100644 --- a/src/nitro/session/handler/RoomChatHandler.ts +++ b/src/nitro/session/handler/RoomChatHandler.ts @@ -1,3 +1,4 @@ +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'; @@ -5,6 +6,7 @@ import { RoomUnitChatEvent } from '../../communication/messages/incoming/room/un import { RoomUnitChatShoutEvent } from '../../communication/messages/incoming/room/unit/chat/RoomUnitChatShoutEvent'; 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 { RespectReceivedEvent } from '../../communication/messages/incoming/user/RespectReceivedEvent'; import { SystemChatStyleEnum } from '../../ui/widget/enums/SystemChatStyleEnum'; import { RoomSessionChatEvent } from '../events/RoomSessionChatEvent'; @@ -22,6 +24,8 @@ export class RoomChatHandler extends BaseHandler connection.addMessageEvent(new RoomUnitChatWhisperEvent(this.onRoomUnitChatEvent.bind(this))); connection.addMessageEvent(new RoomUnitHandItemReceivedEvent(this.onRoomUnitHandItemReceivedEvent.bind(this))); connection.addMessageEvent(new RespectReceivedEvent(this.onRespectReceivedEvent.bind(this))); + connection.addMessageEvent(new PetRespectNoficationEvent(this.onPetRespectNoficationEvent.bind(this))); + connection.addMessageEvent(new PetSupplementedNotificationEvent(this.onPetSupplementedNotificationEvent.bind(this))); connection.addMessageEvent(new FloodControlEvent(this.onFloodControlEvent.bind(this))); connection.addMessageEvent(new RemainingMuteEvent(this.onRemainingMuteEvent.bind(this))); } @@ -82,6 +86,69 @@ export class RoomChatHandler extends BaseHandler this.listener.events.dispatchEvent(new RoomSessionChatEvent(RoomSessionChatEvent.CHAT_EVENT, session, userData.roomIndex, '', RoomSessionChatEvent.CHAT_TYPE_RESPECT, SystemChatStyleEnum.GENERIC)); } + private onPetRespectNoficationEvent(event: PetRespectNoficationEvent): void + { + if(!this.listener) return; + + const session = this.listener.getSession(this.roomId); + + if(!session) return; + + const parser = event.getParser(); + + if(!parser) return; + + const petData = session.userDataManager.getPetData(parser.petData.id); + + if(!petData) return; + + let chatType = RoomSessionChatEvent.CHAT_TYPE_PETRESPECT; + + if(parser.isTreat) chatType = RoomSessionChatEvent.CHAT_TYPE_PETTREAT; + + this.listener.events.dispatchEvent(new RoomSessionChatEvent(RoomSessionChatEvent.CHAT_EVENT, session, petData.roomIndex, '', chatType, SystemChatStyleEnum.GENERIC)); + } + + private onPetSupplementedNotificationEvent(event: PetSupplementedNotificationEvent): void + { + if(!this.listener) return; + + const session = this.listener.getSession(this.roomId); + + if(!session) return; + + const parser = event.getParser(); + + if(!parser) return; + + const petData = session.userDataManager.getPetData(parser.petId); + + if(!petData) return; + + let userRoomIndex = -1; + + const userData = session.userDataManager.getUserData(parser.userId); + + if(userData) userRoomIndex = userData.roomIndex; + + let chatType = RoomSessionChatEvent.CHAT_TYPE_PETREVIVE; + + switch(parser.supplementType) + { + case PetSupplementTypeEnum.REVIVE: + chatType = RoomSessionChatEvent.CHAT_TYPE_PETREVIVE; + break; + case PetSupplementTypeEnum.REBREED_FERTILIZER: + chatType = RoomSessionChatEvent.CHAT_TYPE_PET_REBREED_FERTILIZE; + break; + case PetSupplementTypeEnum.SPEED_FERTILIZER: + chatType = RoomSessionChatEvent.CHAT_TYPE_PET_SPEED_FERTILIZE; + break; + } + + this.listener.events.dispatchEvent(new RoomSessionChatEvent(RoomSessionChatEvent.CHAT_EVENT, session, petData.roomIndex, '', chatType, SystemChatStyleEnum.GENERIC, null, userRoomIndex)); + } + private onFloodControlEvent(event: FloodControlEvent): void { if(!this.listener) return;