Move to Renderer V2

This commit is contained in:
duckietm
2024-04-03 09:27:56 +02:00
parent 110c3ad393
commit b3134ce50b
4080 changed files with 115593 additions and 66375 deletions
@@ -0,0 +1,41 @@
import { IConnection, IRoomHandlerListener } from '@nitrots/api';
export class BaseHandler
{
private _connection: IConnection;
private _listener: IRoomHandlerListener;
private _roomId: number;
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
this._connection = connection;
this._listener = listener;
this._roomId = 0;
}
public dispose(): void
{
this._connection = null;
this._listener = null;
}
public setRoomId(id: number): void
{
this._roomId = id;
}
public get connection(): IConnection
{
return this._connection;
}
public get listener(): IRoomHandlerListener
{
return this._listener;
}
public get roomId(): number
{
return this._roomId;
}
}
@@ -0,0 +1,42 @@
import { GenericErrorEnum, IConnection, IRoomHandlerListener } from '@nitrots/api';
import { GenericErrorEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionErrorMessageEvent } from '@nitrots/events';
import { BaseHandler } from './BaseHandler';
export class GenericErrorHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
connection.addMessageEvent(new GenericErrorEvent(this.onRoomGenericError.bind(this)));
}
private onRoomGenericError(event: GenericErrorEvent): void
{
if(!(event instanceof GenericErrorEvent)) return;
const parser = event.getParser();
if(!parser) return;
const roomSession = this.listener.getSession(this.roomId);
if(!roomSession) return;
let type: string = '';
switch(parser.errorCode)
{
case GenericErrorEnum.KICKED_OUT_OF_ROOM:
type = RoomSessionErrorMessageEvent.RSEME_KICKED;
break;
default:
return;
}
if(!type || type.length == 0) return;
GetEventDispatcher().dispatchEvent(new RoomSessionErrorMessageEvent(type, roomSession));
}
}
@@ -0,0 +1,45 @@
import { IConnection, IRoomHandlerListener } from '@nitrots/api';
import { GetCommunication, OpenPetPackageRequestedMessageEvent, OpenPetPackageResultMessageEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionPetPackageEvent } from '@nitrots/events';
import { BaseHandler } from './BaseHandler';
export class PetPackageHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
GetCommunication().registerMessageEvent(new OpenPetPackageRequestedMessageEvent(this.onOpenPetPackageRequested.bind(this)));
GetCommunication().registerMessageEvent(new OpenPetPackageResultMessageEvent(this.onOpenPetPackageResult.bind(this)));
}
private onOpenPetPackageRequested(event: OpenPetPackageRequestedMessageEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionPetPackageEvent(RoomSessionPetPackageEvent.RSOPPE_OPEN_PET_PACKAGE_REQUESTED, session, parser.objectId, parser.figureData, 0, null));
}
private onOpenPetPackageResult(event: OpenPetPackageResultMessageEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionPetPackageEvent(RoomSessionPetPackageEvent.RSOPPE_OPEN_PET_PACKAGE_RESULT, session, parser.objectId, null, parser.nameValidationStatus, parser.nameValidationInfo));
}
}
+114
View File
@@ -0,0 +1,114 @@
import { IConnection, IRoomHandlerListener } from '@nitrots/api';
import { PollContentsEvent, PollErrorEvent, PollOfferEvent, RoomPollResultEvent, StartRoomPollEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionPollEvent, RoomSessionVoteEvent } from '@nitrots/events';
import { BaseHandler } from './BaseHandler';
export class PollHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
connection.addMessageEvent(new PollContentsEvent(this.onPollContentsEvent.bind(this)));
connection.addMessageEvent(new PollOfferEvent(this.onPollOfferEvent.bind(this)));
connection.addMessageEvent(new PollErrorEvent(this.onPollErrorEvent.bind(this)));
connection.addMessageEvent(new StartRoomPollEvent(this.onStartRoomPollEvent.bind(this)));
connection.addMessageEvent(new RoomPollResultEvent(this.onRoomPollResultEvent.bind(this)));
}
private onPollContentsEvent(event: PollContentsEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const pollEvent = new RoomSessionPollEvent(RoomSessionPollEvent.CONTENT, session, parser.id);
pollEvent.startMessage = parser.startMessage;
pollEvent.endMessage = parser.endMessage;
pollEvent.numQuestions = parser.numQuestions;
pollEvent.questionArray = parser.questionArray;
pollEvent.npsPoll = parser.npsPoll;
GetEventDispatcher().dispatchEvent(pollEvent);
}
private onPollOfferEvent(event: PollOfferEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const pollEvent = new RoomSessionPollEvent(RoomSessionPollEvent.OFFER, session, parser.id);
pollEvent.summary = parser.headline;
pollEvent.summary = parser.summary;
GetEventDispatcher().dispatchEvent(pollEvent);
}
private onPollErrorEvent(event: PollErrorEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const pollEvent = new RoomSessionPollEvent(RoomSessionPollEvent.ERROR, session, -1);
pollEvent.headline = '???';
pollEvent.summary = '???';
GetEventDispatcher().dispatchEvent(pollEvent);
}
private onStartRoomPollEvent(event: StartRoomPollEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const pollEvent = new RoomSessionVoteEvent(RoomSessionVoteEvent.VOTE_QUESTION, session, parser.question, parser.choices);
GetEventDispatcher().dispatchEvent(pollEvent);
}
private onRoomPollResultEvent(event: RoomPollResultEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const pollEvent = new RoomSessionVoteEvent(RoomSessionVoteEvent.VOTE_RESULT, session, parser.question, parser.choices, parser.SafeStr_7651, parser.SafeStr_7654);
GetEventDispatcher().dispatchEvent(pollEvent);
}
}
@@ -0,0 +1,173 @@
import { IConnection, IRoomHandlerListener, SystemChatStyleEnum } from '@nitrots/api';
import { FloodControlEvent, PetRespectNoficationEvent, PetSupplementTypeEnum, PetSupplementedNotificationEvent, RemainingMuteEvent, RespectReceivedEvent, RoomUnitChatEvent, RoomUnitChatShoutEvent, RoomUnitChatWhisperEvent, RoomUnitHandItemReceivedEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionChatEvent } from '@nitrots/events';
import { BaseHandler } from './BaseHandler';
export class RoomChatHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
connection.addMessageEvent(new RoomUnitChatEvent(this.onRoomUnitChatEvent.bind(this)));
connection.addMessageEvent(new RoomUnitChatShoutEvent(this.onRoomUnitChatEvent.bind(this)));
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)));
}
private onRoomUnitChatEvent(event: RoomUnitChatEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
let chatType: number = RoomSessionChatEvent.CHAT_TYPE_SPEAK;
if(event instanceof RoomUnitChatShoutEvent) chatType = RoomSessionChatEvent.CHAT_TYPE_SHOUT;
else if(event instanceof RoomUnitChatWhisperEvent) chatType = RoomSessionChatEvent.CHAT_TYPE_WHISPER;
const chatEvent = new RoomSessionChatEvent(RoomSessionChatEvent.CHAT_EVENT, session, parser.roomIndex, parser.message, chatType, parser.bubble);
GetEventDispatcher().dispatchEvent(chatEvent);
}
private onRoomUnitHandItemReceivedEvent(event: RoomUnitHandItemReceivedEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
GetEventDispatcher().dispatchEvent(new RoomSessionChatEvent(RoomSessionChatEvent.CHAT_EVENT, session, parser.giverUserId, '', RoomSessionChatEvent.CHAT_TYPE_HAND_ITEM_RECEIVED, SystemChatStyleEnum.GENERIC, [], parser.handItemType));
}
private onRespectReceivedEvent(event: RespectReceivedEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const userData = session.userDataManager.getUserData(parser.userId);
if(!userData) return;
GetEventDispatcher().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;
GetEventDispatcher().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;
}
GetEventDispatcher().dispatchEvent(new RoomSessionChatEvent(RoomSessionChatEvent.CHAT_EVENT, session, petData.roomIndex, '', chatType, SystemChatStyleEnum.GENERIC, null, userRoomIndex));
}
private onFloodControlEvent(event: FloodControlEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const seconds = parser.seconds;
GetEventDispatcher().dispatchEvent(new RoomSessionChatEvent(RoomSessionChatEvent.FLOOD_EVENT, session, -1, seconds.toString(), 0, 0));
}
private onRemainingMuteEvent(event: RemainingMuteEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
GetEventDispatcher().dispatchEvent(new RoomSessionChatEvent(RoomSessionChatEvent.CHAT_EVENT, session, session.ownRoomIndex, '', RoomSessionChatEvent.CHAT_TYPE_MUTE_REMAINING, SystemChatStyleEnum.GENERIC, [], parser.seconds));
}
}
@@ -0,0 +1,40 @@
import { IConnection, IRoomHandlerListener } from '@nitrots/api';
import { GetGuestRoomResultEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionEvent, RoomSessionPropertyUpdateEvent } from '@nitrots/events';
import { BaseHandler } from './BaseHandler';
export class RoomDataHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
connection.addMessageEvent(new GetGuestRoomResultEvent(this.onGetGuestRoomResultEvent.bind(this)));
}
private onGetGuestRoomResultEvent(event: GetGuestRoomResultEvent): void
{
if(!(event instanceof GetGuestRoomResultEvent)) return;
const parser = event.getParser();
if(!parser) return;
if(parser.roomForward) return;
const roomSession = this.listener.getSession(this.roomId);
if(!roomSession) return;
const roomData = parser.data;
roomSession.tradeMode = roomData.tradeMode;
roomSession.isGuildRoom = (roomData.habboGroupId !== 0);
roomSession.doorMode = roomData.doorMode;
roomSession.allowPets = roomData.allowPets;
roomSession.moderationSettings = parser.moderation;
GetEventDispatcher().dispatchEvent(new RoomSessionPropertyUpdateEvent(RoomSessionPropertyUpdateEvent.RSDUE_ALLOW_PETS, roomSession));
GetEventDispatcher().dispatchEvent(new RoomSessionEvent(RoomSessionEvent.ROOM_DATA, roomSession));
}
}
@@ -0,0 +1,44 @@
import { IConnection, IRoomHandlerListener } from '@nitrots/api';
import { RoomDimmerPresetsEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionDimmerPresetsEvent } from '@nitrots/events';
import { BaseHandler } from './BaseHandler';
export class RoomDimmerPresetsHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
connection.addMessageEvent(new RoomDimmerPresetsEvent(this.onRoomDimmerPresets.bind(this)));
}
private onRoomDimmerPresets(event: RoomDimmerPresetsEvent): void
{
if(!event) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const presetEvent = new RoomSessionDimmerPresetsEvent(RoomSessionDimmerPresetsEvent.ROOM_DIMMER_PRESETS, session);
presetEvent.selectedPresetId = parser.selectedPresetId;
let i = 0;
while(i < parser.presetCount)
{
const preset = parser.getPreset(i);
if(preset) presetEvent.storePreset(preset.id, preset.type, preset.color, preset.brightness);
i++;
}
GetEventDispatcher().dispatchEvent(presetEvent);
}
}
@@ -0,0 +1,48 @@
import { IConnection, IRoomHandlerListener, RoomControllerLevel } from '@nitrots/api';
import { RoomRightsClearEvent, RoomRightsEvent, RoomRightsOwnerEvent } from '@nitrots/communication';
import { BaseHandler } from './BaseHandler';
export class RoomPermissionsHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
connection.addMessageEvent(new RoomRightsEvent(this.onRoomRightsEvent.bind(this)));
connection.addMessageEvent(new RoomRightsClearEvent(this.onRoomRightsClearEvent.bind(this)));
connection.addMessageEvent(new RoomRightsOwnerEvent(this.onRoomRightsOwnerEvent.bind(this)));
}
private onRoomRightsEvent(event: RoomRightsEvent): void
{
if(!(event instanceof RoomRightsEvent)) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
session.setControllerLevel(event.getParser().controllerLevel);
}
private onRoomRightsClearEvent(event: RoomRightsClearEvent): void
{
if(!(event instanceof RoomRightsClearEvent)) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
session.setControllerLevel(RoomControllerLevel.NONE);
}
private onRoomRightsOwnerEvent(event: RoomRightsOwnerEvent): void
{
if(!(event instanceof RoomRightsOwnerEvent)) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
session.setRoomOwner();
}
}
@@ -0,0 +1,33 @@
import { IConnection, IRoomHandlerListener } from '@nitrots/api';
import { PresentOpenedMessageEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionPresentEvent } from '@nitrots/events';
import { BaseHandler } from './BaseHandler';
export class RoomPresentHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
if(!connection) return;
connection.addMessageEvent(new PresentOpenedMessageEvent(this.onFurnitureGiftOpenedEvent.bind(this)));
}
private onFurnitureGiftOpenedEvent(event: PresentOpenedMessageEvent): void
{
if(!event) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionPresentEvent(RoomSessionPresentEvent.RSPE_PRESENT_OPENED, session, parser.classId, parser.itemType, parser.productCode, parser.placedItemId, parser.placedItemType, parser.placedInRoom, parser.petFigureString));
}
}
@@ -0,0 +1,113 @@
import { IConnection, IRoomHandlerListener } from '@nitrots/api';
import { DesktopViewEvent, FlatAccessDeniedMessageEvent, GoToFlatMessageComposer, RoomDoorbellAcceptedEvent, RoomEnterEvent, RoomReadyMessageEvent, YouAreSpectatorMessageEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionDoorbellEvent, RoomSessionSpectatorModeEvent } from '@nitrots/events';
import { BaseHandler } from './BaseHandler';
export class RoomSessionHandler extends BaseHandler
{
public static RS_CONNECTED: string = 'RS_CONNECTED';
public static RS_READY: string = 'RS_READY';
public static RS_DISCONNECTED: string = 'RS_DISCONNECTED';
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
connection.addMessageEvent(new RoomEnterEvent(this.onRoomEnterEvent.bind(this)));
connection.addMessageEvent(new RoomReadyMessageEvent(this.onRoomReadyMessageEvent.bind(this)));
connection.addMessageEvent(new DesktopViewEvent(this.onDesktopViewEvent.bind(this)));
connection.addMessageEvent(new RoomDoorbellAcceptedEvent(this.onRoomDoorbellAcceptedEvent.bind(this)));
connection.addMessageEvent(new FlatAccessDeniedMessageEvent(this.onRoomDoorbellRejectedEvent.bind(this)));
connection.addMessageEvent(new YouAreSpectatorMessageEvent(this.onYouAreSpectatorMessageEvent.bind(this)));
}
private onRoomEnterEvent(event: RoomEnterEvent): void
{
if(!(event instanceof RoomEnterEvent)) return;
if(this.listener) this.listener.sessionUpdate(this.roomId, RoomSessionHandler.RS_CONNECTED);
}
private onRoomReadyMessageEvent(event: RoomReadyMessageEvent): void
{
if(!(event instanceof RoomReadyMessageEvent)) return;
const fromRoomId = this.roomId;
const toRoomId = event.getParser().roomId;
if(this.listener)
{
this.listener.sessionReinitialize(fromRoomId, toRoomId);
this.listener.sessionUpdate(this.roomId, RoomSessionHandler.RS_READY);
}
}
private onDesktopViewEvent(event: DesktopViewEvent): void
{
if(!(event instanceof DesktopViewEvent)) return;
if(this.listener) this.listener.sessionUpdate(this.roomId, RoomSessionHandler.RS_DISCONNECTED);
}
private onRoomDoorbellAcceptedEvent(event: RoomDoorbellAcceptedEvent): void
{
if(!(event instanceof RoomDoorbellAcceptedEvent) || !this.listener) return;
const parser = event.getParser();
if(!parser) return;
const username = parser.userName;
if(!username || !username.length)
{
this.connection.send(new GoToFlatMessageComposer(this.roomId));
}
else
{
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionDoorbellEvent(RoomSessionDoorbellEvent.RSDE_ACCEPTED, session, username));
}
}
private onRoomDoorbellRejectedEvent(event: FlatAccessDeniedMessageEvent): void
{
if(!(event instanceof FlatAccessDeniedMessageEvent) || !this.listener) return;
const parser = event.getParser();
if(!parser) return;
const username = parser.userName;
if(!username || !username.length)
{
this.listener.sessionUpdate(this.roomId, RoomSessionHandler.RS_DISCONNECTED);
}
else
{
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionDoorbellEvent(RoomSessionDoorbellEvent.RSDE_REJECTED, session, username));
}
}
private onYouAreSpectatorMessageEvent(event: YouAreSpectatorMessageEvent): void
{
if(this.listener)
{
const session = this.listener.getSession(this.roomId);
if(!session) return;
session.isSpectator = true;
GetEventDispatcher().dispatchEvent(new RoomSessionSpectatorModeEvent(RoomSessionSpectatorModeEvent.SPECTATOR_MODE, session));
}
}
}
@@ -0,0 +1,475 @@
import { IConnection, IRoomHandlerListener, IRoomUserData } from '@nitrots/api';
import { BotErrorEvent, ConfirmBreedingRequestEvent, ConfirmBreedingResultEvent, DoorbellMessageEvent, FavoriteMembershipUpdateMessageEvent, NestBreedingSuccessEvent, NewFriendRequestEvent, PetBreedingMessageEvent, PetBreedingResultEvent, PetFigureUpdateEvent, PetInfoEvent, PetLevelUpdateMessageEvent, PetPlacingErrorEvent, PetStatusUpdateEvent, RoomUnitDanceEvent, RoomUnitEvent, RoomUnitInfoEvent, RoomUnitRemoveEvent, UserCurrentBadgesEvent, UserNameChangeMessageEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionConfirmPetBreedingEvent, RoomSessionConfirmPetBreedingResultEvent, RoomSessionDanceEvent, RoomSessionDoorbellEvent, RoomSessionErrorMessageEvent, RoomSessionFavoriteGroupUpdateEvent, RoomSessionFriendRequestEvent, RoomSessionNestBreedingSuccessEvent, RoomSessionPetBreedingEvent, RoomSessionPetBreedingResultEvent, RoomSessionPetFigureUpdateEvent, RoomSessionPetInfoUpdateEvent, RoomSessionPetLevelUpdateEvent, RoomSessionPetStatusUpdateEvent, RoomSessionUserBadgesEvent, RoomSessionUserDataUpdateEvent, RoomSessionUserFigureUpdateEvent } from '@nitrots/events';
import { RoomPetData } from '../RoomPetData';
import { RoomUserData } from '../RoomUserData';
import { BaseHandler } from './BaseHandler';
export class RoomUsersHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
connection.addMessageEvent(new RoomUnitEvent(this.onRoomUnitEvent.bind(this)));
connection.addMessageEvent(new RoomUnitInfoEvent(this.onRoomUnitInfoEvent.bind(this)));
connection.addMessageEvent(new RoomUnitRemoveEvent(this.onRoomUnitRemoveEvent.bind(this)));
connection.addMessageEvent(new RoomUnitDanceEvent(this.onRoomUnitDanceEvent.bind(this)));
connection.addMessageEvent(new UserCurrentBadgesEvent(this.onUserCurrentBadgesEvent.bind(this)));
connection.addMessageEvent(new DoorbellMessageEvent(this.onRoomDoorbellEvent.bind(this)));
connection.addMessageEvent(new UserNameChangeMessageEvent(this.onUserNameChangeMessageEvent.bind(this)));
connection.addMessageEvent(new NewFriendRequestEvent(this.onNewFriendRequestEvent.bind(this)));
connection.addMessageEvent(new PetInfoEvent(this.onPetInfoEvent.bind(this)));
connection.addMessageEvent(new PetStatusUpdateEvent(this.onPetStatusUpdateEvent.bind(this)));
connection.addMessageEvent(new PetBreedingMessageEvent(this.onPetBreedingMessageEvent.bind(this)));
connection.addMessageEvent(new PetLevelUpdateMessageEvent(this.onPetLevelUpdateMessageEvent.bind(this)));
connection.addMessageEvent(new ConfirmBreedingResultEvent(this.onConfirmBreedingResultEvent.bind(this)));
connection.addMessageEvent(new NestBreedingSuccessEvent(this.onNestBreedingSuccessEvent.bind(this)));
connection.addMessageEvent(new ConfirmBreedingRequestEvent(this.onConfirmBreedingRequestEvent.bind(this)));
connection.addMessageEvent(new PetFigureUpdateEvent(this.onPetFigureUpdateEvent.bind(this)));
connection.addMessageEvent(new PetBreedingResultEvent(this.onPetBreedingResultEvent.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
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const users = event.getParser().users;
const usersToAdd: IRoomUserData[] = [];
if(users && users.length)
{
for(const user of users)
{
if(!user) continue;
const userData = new RoomUserData(user.roomIndex);
userData.name = user.name;
userData.custom = user.custom;
userData.activityPoints = user.activityPoints;
userData.figure = user.figure;
userData.type = user.userType;
userData.webID = user.webID;
userData.groupId = user.groupID;
userData.groupName = user.groupName;
userData.groupStatus = user.groupStatus;
userData.sex = user.sex;
userData.ownerId = user.ownerId;
userData.ownerName = user.ownerName;
userData.rarityLevel = user.rarityLevel;
userData.hasSaddle = user.hasSaddle;
userData.isRiding = user.isRiding;
userData.canBreed = user.canBreed;
userData.canHarvest = user.canHarvest;
userData.canRevive = user.canRevive;
userData.hasBreedingPermission = user.hasBreedingPermission;
userData.petLevel = user.petLevel;
userData.botSkills = user.botSkills;
userData.isModerator = user.isModerator;
if(!session.userDataManager.getUserData(user.roomIndex)) usersToAdd.push(userData);
session.userDataManager.updateUserData(userData);
}
}
GetEventDispatcher().dispatchEvent(new RoomSessionUserDataUpdateEvent(session, usersToAdd));
}
private onRoomUnitInfoEvent(event: RoomUnitInfoEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
session.userDataManager.updateFigure(parser.unitId, parser.figure, parser.gender, false, false);
session.userDataManager.updateMotto(parser.unitId, parser.motto);
session.userDataManager.updateAchievementScore(parser.unitId, parser.achievementScore);
GetEventDispatcher().dispatchEvent(new RoomSessionUserFigureUpdateEvent(session, parser.unitId, parser.figure, parser.gender, parser.motto, parser.achievementScore));
}
private onRoomUnitRemoveEvent(event: RoomUnitRemoveEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
session.userDataManager.removeUserData(event.getParser().unitId);
}
private onRoomUnitDanceEvent(event: RoomUnitDanceEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionDanceEvent(session, parser.unitId, parser.danceId));
}
private onUserCurrentBadgesEvent(event: UserCurrentBadgesEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
session.userDataManager.setUserBadges(parser.userId, parser.badges);
GetEventDispatcher().dispatchEvent(new RoomSessionUserBadgesEvent(session, parser.userId, parser.badges));
}
private onRoomDoorbellEvent(event: DoorbellMessageEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const username = parser.userName;
if(!username || !username.length) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionDoorbellEvent(RoomSessionDoorbellEvent.DOORBELL, session, username));
}
private onUserNameChangeMessageEvent(event: UserNameChangeMessageEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
session.userDataManager.updateName(parser.id, parser.newName);
}
private onNewFriendRequestEvent(event: NewFriendRequestEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const request = parser.request;
GetEventDispatcher().dispatchEvent(new RoomSessionFriendRequestEvent(session, request.requestId, request.requesterUserId, request.requesterName));
}
private onPetInfoEvent(event: PetInfoEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const petData = new RoomPetData();
petData.id = parser.id;
petData.level = parser.level;
petData.maximumLevel = parser.maximumLevel;
petData.experience = parser.experience;
petData.levelExperienceGoal = parser.levelExperienceGoal;
petData.energy = parser.energy;
petData.maximumEnergy = parser.maximumEnergy;
petData.happyness = parser.happyness;
petData.maximumHappyness = parser.maximumHappyness;
petData.ownerId = parser.ownerId;
petData.ownerName = parser.ownerName;
petData.respect = parser.respect;
petData.age = parser.age;
petData.unknownRarity = parser.unknownRarity;
petData.saddle = parser.saddle;
petData.rider = parser.rider;
petData.breedable = parser.breedable;
petData.fullyGrown = parser.fullyGrown;
petData.rarityLevel = parser.rarityLevel;
petData.dead = parser.dead;
petData.skillTresholds = parser.skillTresholds;
petData.publiclyRideable = parser.publiclyRideable;
petData.maximumTimeToLive = parser.maximumTimeToLive;
petData.remainingTimeToLive = parser.remainingTimeToLive;
petData.remainingGrowTime = parser.remainingGrowTime;
petData.publiclyBreedable = parser.publiclyBreedable;
GetEventDispatcher().dispatchEvent(new RoomSessionPetInfoUpdateEvent(session, petData));
}
private onPetStatusUpdateEvent(event: PetStatusUpdateEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
session.userDataManager.updatePetBreedingStatus(parser.roomIndex, parser.canBreed, parser.canHarvest, parser.canRevive, parser.hasBreedingPermission);
GetEventDispatcher().dispatchEvent(new RoomSessionPetStatusUpdateEvent(session, parser.petId, parser.canBreed, parser.canHarvest, parser.canRevive, parser.hasBreedingPermission));
}
private onPetBreedingMessageEvent(event: PetBreedingMessageEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionPetBreedingEvent(session, parser.state, parser.ownPetId, parser.otherPetId));
}
private onPetLevelUpdateMessageEvent(event: PetLevelUpdateMessageEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
session.userDataManager.updatePetLevel(parser.roomIndex, parser.level);
GetEventDispatcher().dispatchEvent(new RoomSessionPetLevelUpdateEvent(session, parser.petId, parser.level));
}
private onConfirmBreedingResultEvent(event: ConfirmBreedingResultEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionConfirmPetBreedingResultEvent(session, parser.breedingNestStuffId, parser.result));
}
private onNestBreedingSuccessEvent(event: NestBreedingSuccessEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionNestBreedingSuccessEvent(session, parser.petId, parser.rarityCategory));
}
private onConfirmBreedingRequestEvent(event: ConfirmBreedingRequestEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionConfirmPetBreedingEvent(session, parser.nestId, parser.pet1, parser.pet2, parser.rarityCategories, parser.resultPetType));
}
private onPetFigureUpdateEvent(event: PetFigureUpdateEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const figure = parser.figureData.figuredata;
session.userDataManager.updateFigure(parser.roomIndex, figure, '', parser.hasSaddle, parser.isRiding);
GetEventDispatcher().dispatchEvent(new RoomSessionPetFigureUpdateEvent(session, parser.petId, figure));
}
private onPetBreedingResultEvent(event: PetBreedingResultEvent): void
{
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
GetEventDispatcher().dispatchEvent(new RoomSessionPetBreedingResultEvent(session, parser.resultData, parser.otherResultData));
}
private onPetPlacingError(event: PetPlacingErrorEvent): void
{
if(!event) return;
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
let type: string = '';
switch(parser.errorCode)
{
case 0:
type = RoomSessionErrorMessageEvent.RSEME_PETS_FORBIDDEN_IN_HOTEL;
break;
case 1:
type = RoomSessionErrorMessageEvent.RSEME_PETS_FORBIDDEN_IN_FLAT;
break;
case 2:
type = RoomSessionErrorMessageEvent.RSEME_MAX_PETS;
break;
case 3:
type = RoomSessionErrorMessageEvent.RSEME_NO_FREE_TILES_FOR_PET;
break;
case 4:
type = RoomSessionErrorMessageEvent.RSEME_SELECTED_TILE_NOT_FREE_FOR_PET;
break;
case 5:
type = RoomSessionErrorMessageEvent.RSEME_MAX_NUMBER_OF_OWN_PETS;
break;
}
if(!type || type.length == 0) return;
GetEventDispatcher().dispatchEvent(new RoomSessionErrorMessageEvent(type, session));
}
private onBotError(event: BotErrorEvent): void
{
if(!event) return;
if(!this.listener) return;
const parser = event.getParser();
if(!parser) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
let type: string = '';
switch(parser.errorCode)
{
case 0:
type = RoomSessionErrorMessageEvent.RSEME_BOTS_FORBIDDEN_IN_HOTEL;
break;
case 1:
type = RoomSessionErrorMessageEvent.RSEME_BOTS_FORBIDDEN_IN_FLAT;
break;
case 2:
type = RoomSessionErrorMessageEvent.RSEME_BOT_LIMIT_REACHED;
break;
case 3:
type = RoomSessionErrorMessageEvent.RSEME_SELECTED_TILE_NOT_FREE_FOR_BOT;
break;
case 4:
type = RoomSessionErrorMessageEvent.RSEME_BOT_NAME_NOT_ACCEPTED;
break;
}
if(!type || type.length == 0) return;
GetEventDispatcher().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;
GetEventDispatcher().dispatchEvent(new RoomSessionFavoriteGroupUpdateEvent(session, parser.roomIndex, parser.groupId, parser.status, parser.groupName));
}
}
@@ -0,0 +1,79 @@
import { IConnection, IRoomHandlerListener } from '@nitrots/api';
import { QuestionAnsweredEvent, QuestionEvent, QuestionFinishedEvent } from '@nitrots/communication';
import { GetEventDispatcher, RoomSessionWordQuizEvent } from '@nitrots/events';
import { BaseHandler } from './BaseHandler';
export class WordQuizHandler extends BaseHandler
{
constructor(connection: IConnection, listener: IRoomHandlerListener)
{
super(connection, listener);
connection.addMessageEvent(new QuestionEvent(this.onQuestionEvent.bind(this)));
connection.addMessageEvent(new QuestionAnsweredEvent(this.onQuestionAnsweredEvent.bind(this)));
connection.addMessageEvent(new QuestionFinishedEvent(this.onQuestionFinishedEvent.bind(this)));
}
private onQuestionEvent(event: QuestionEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const quizEvent = new RoomSessionWordQuizEvent(RoomSessionWordQuizEvent.QUESTION, session, parser.pollId);
quizEvent.question = parser.question;
quizEvent.duration = parser.duration;
quizEvent.pollType = parser.pollType;
quizEvent.questionId = parser.questionId;
quizEvent.pollId = parser.pollId;
GetEventDispatcher().dispatchEvent(quizEvent);
}
private onQuestionAnsweredEvent(event: QuestionAnsweredEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const quizEvent = new RoomSessionWordQuizEvent(RoomSessionWordQuizEvent.ANSWERED, session, parser.userId);
quizEvent.value = parser.value;
quizEvent.userId = parser.userId;
quizEvent.answerCounts = parser.answerCounts;
GetEventDispatcher().dispatchEvent(quizEvent);
}
private onQuestionFinishedEvent(event: QuestionFinishedEvent): void
{
if(!this.listener) return;
const session = this.listener.getSession(this.roomId);
if(!session) return;
const parser = event.getParser();
if(!parser) return;
const quizEvent = new RoomSessionWordQuizEvent(RoomSessionWordQuizEvent.FINISHED, session);
quizEvent.questionId = parser.questionId;
quizEvent.answerCounts = parser.answerCounts;
GetEventDispatcher().dispatchEvent(quizEvent);
}
}
+12
View File
@@ -0,0 +1,12 @@
export * from './BaseHandler';
export * from './GenericErrorHandler';
export * from './PetPackageHandler';
export * from './PollHandler';
export * from './RoomChatHandler';
export * from './RoomDataHandler';
export * from './RoomDimmerPresetsHandler';
export * from './RoomPermissionsHandler';
export * from './RoomPresentHandler';
export * from './RoomSessionHandler';
export * from './RoomUsersHandler';
export * from './WordQuizHandler';