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,12 @@
import { IPetCustomPart } from '../../session';
export interface IPetFigureData
{
readonly typeId: number;
readonly paletteId: number;
readonly color: string;
readonly breedId: number;
readonly figuredata: string;
readonly customParts: IPetCustomPart[];
readonly customPartCount: number;
}
@@ -0,0 +1,11 @@
export interface IRoomMapData
{
width: number;
height: number;
wallHeight: number;
fixedWallsHeight: number;
tileMap: { height: number }[][];
holeMap: { id: number, x: number, y: number, width: number, height: number }[];
doors: { x: number, y: number, z: number, dir: number }[];
dimensions: { minX: number, maxX: number, minY: number, maxY: number };
}
@@ -0,0 +1,9 @@
export class RoomObjectCategory
{
public static MINIMUM: number = -2;
public static ROOM: number = 0;
public static FLOOR: number = 10;
public static WALL: number = 20;
public static UNIT: number = 100;
public static CURSOR: number = 200;
}
@@ -0,0 +1,74 @@
export class RoomObjectLogicType
{
public static FURNITURE_BASIC = 'furniture_basic';
public static FURNITURE_MULTISTATE = 'furniture_multistate';
public static FURNITURE_MULTIHEIGHT = 'furniture_multiheight';
public static FURNITURE_RANDOMSTATE = 'furniture_randomstate';
public static FURNITURE_PLACEHOLDER = 'furniture_placeholder';
public static FURNITURE_CREDIT = 'furniture_credit';
public static FURNITURE_STICKIE = 'furniture_stickie';
public static FURNITURE_PRESENT = 'furniture_present';
public static FURNITURE_TROPHY = 'furniture_trophy';
public static FURNITURE_ECOTRON_BOX = 'furniture_ecotron_box';
public static FURNITURE_DICE = 'furniture_dice';
public static FURNITURE_HOCKEY_SCORE = 'furniture_hockey_score';
public static FURNITURE_HABBOWHEEL = 'furniture_habbowheel';
public static FURNITURE_ONE_WAY_DOOR = 'furniture_one_way_door';
public static FURNITURE_PLANET_SYSTEM = 'furniture_planet_system';
public static FURNITURE_WINDOW = 'furniture_window';
public static FURNITURE_EXTERNAL_IMAGE_WALLITEM = 'furniture_external_image_wallitem';
public static FURNITURE_ROOMDIMMER = 'furniture_roomdimmer';
public static FURNITURE_SOUND_MACHINE = 'furniture_sound_machine';
public static FURNITURE_JUKEBOX = 'furniture_jukebox';
public static FURNITURE_CRACKABLE = 'furniture_crackable';
public static FURNITURE_PUSHABLE = 'furniture_pushable';
public static FURNITURE_CLOTHING_CHANGE = 'furniture_clothing_change';
public static FURNITURE_COUNTER_CLOCK = 'furniture_counter_clock';
public static FURNITURE_SCORE = 'furniture_score';
public static FURNITURE_ES = 'furniture_es';
public static FURNITURE_FIREWORKS = 'furniture_fireworks';
public static FURNITURE_SONG_DISK = 'furniture_song_disk';
public static FURNITURE_BB = 'furniture_bb';
public static FURNITURE_BG = 'furniture_bg';
public static FURNITURE_WELCOME_GIFT = 'furniture_welcome_gift';
public static FURNITURE_FLOOR_HOLE = 'furniture_floor_hole';
public static FURNITURE_MANNEQUIN = 'furniture_mannequin';
public static FURNITURE_GUILD_CUSTOMIZED = 'furniture_guild_customized';
public static FURNITURE_GROUP_FORUM_TERMINAL = 'furniture_group_forum_terminal';
public static FURNITURE_PET_CUSTOMIZATION = 'furniture_pet_customization';
public static FURNITURE_CUCKOO_CLOCK = 'furniture_cuckoo_clock';
public static FURNITURE_VOTE_COUNTER = 'furniture_vote_counter';
public static FURNITURE_VOTE_MAJORITY = 'furniture_vote_majority';
public static FURNITURE_SOUNDBLOCK = 'furniture_soundblock';
public static FURNITURE_RANDOM_TELEPORT = 'furniture_random_teleport';
public static FURNITURE_MONSTERPLANT_SEED = 'furniture_monsterplant_seed';
public static FURNITURE_PURCHASABLE_CLOTHING = 'furniture_purchasable_clothing';
public static FURNITURE_BACKGROUND_COLOR = 'furniture_background_color';
public static FURNITURE_MYSTERYBOX = 'furniture_mysterybox';
public static FURNITURE_EFFECTBOX = 'furniture_effectbox';
public static FURNITURE_MYSTERYTROPHY = 'furniture_mysterytrophy';
public static FURNITURE_ACHIEVEMENT_RESOLUTION = 'furniture_achievement_resolution';
public static FURNITURE_LOVELOCK = 'furniture_lovelock';
public static FURNITURE_WILDWEST_WANTED = 'furniture_wildwest_wanted';
public static FURNITURE_HWEEN_LOVELOCK = 'furniture_hween_lovelock';
public static FURNITURE_BADGE_DISPLAY = 'furniture_badge_display';
public static FURNITURE_HIGH_SCORE = 'furniture_high_score';
public static FURNITURE_INTERNAL_LINK = 'furniture_internal_link';
public static FURNITURE_CUSTOM_STACK_HEIGHT = 'furniture_custom_stack_height';
public static FURNITURE_YOUTUBE = 'furniture_youtube';
public static FURNITURE_RENTABLE_SPACE = 'furniture_rentable_space';
public static FURNITURE_CHANGE_STATE_WHEN_STEP_ON = 'furniture_change_state_when_step_on';
public static FURNITURE_VIMEO = 'furniture_vimeo';
public static FURNITURE_EDITABLE_INTERNAL_LINK = 'furniture_editable_internal_link';
public static FURNITURE_EDITABLE_ROOM_LINK = 'furniture_editable_room_link';
public static FURNITURE_CRAFTING_GIZMO = 'furniture_crafting_gizmo';
public static ROOM = 'room';
public static USER = 'user';
public static BOT = 'bot';
public static RENTABLE_BOT = 'rentable_bot';
public static PET = 'pet';
public static TILE_CURSOR = 'tile_cursor';
public static SELECTION_ARROW = 'selection_arrow';
public static GAME_SNOWBALL = 'game_snowball';
public static GAME_SNOWSPLASH = 'game_snowsplash';
}
@@ -0,0 +1,15 @@
export class RoomObjectOperationType
{
public static OBJECT_UNDEFINED: string = 'OBJECT_UNDEFINED';
public static OBJECT_MOVE: string = 'OBJECT_MOVE';
public static OBJECT_PLACE: string = 'OBJECT_PLACE';
public static OBJECT_ROTATE_POSITIVE: string = 'OBJECT_ROTATE_POSITIVE';
public static OBJECT_ROTATE_NEGATIVE: string = 'OBJECT_ROTATE_NEGATIVE';
public static OBJECT_MOVE_TO: string = 'OBJECT_MOVE_TO';
public static OBJECT_PLACE_TO: string = 'OBJECT_PLACE_TO';
public static OBJECT_PICKUP: string = 'OBJECT_PICKUP';
public static OBJECT_PICKUP_BOT: string = 'OBJECT_PICKUP_BOT';
public static OBJECT_PICKUP_PET: string = 'OBJECT_PICKUP_PET';
public static OBJECT_EJECT: string = 'OBJECT_EJECT';
public static OBJECT_SAVE_STUFF_DATA: string = 'OBJECT_SAVE_STUFF_DATA';
}
@@ -0,0 +1,7 @@
export class RoomObjectType
{
public static USER: number = 1;
public static PET: number = 2;
public static BOT: number = 3;
public static RENTABLE_BOT: number = 4;
}
@@ -0,0 +1,40 @@
export class RoomObjectUserType
{
public static USER: string = 'user';
public static PET: string = 'pet';
public static BOT: string = 'bot';
public static RENTABLE_BOT: string = 'rentable_bot';
public static MONSTER_PLANT: string = 'monsterplant';
public static AVATAR_TYPES: { [key: string]: number } = { 'user': 1, 'pet': 2, 'bot': 3, 'rentable_bot': 4 };
public static getTypeNumber(type: string): number
{
return RoomObjectUserType.AVATAR_TYPES[type];
}
public static getTypeString(type: number): string
{
for(const key in RoomObjectUserType.AVATAR_TYPES)
{
if(!key) continue;
if(RoomObjectUserType.AVATAR_TYPES[key] !== type) continue;
return key;
}
return null;
}
public static getRealType(type: string): string
{
switch(type)
{
case RoomObjectUserType.BOT:
case RoomObjectUserType.RENTABLE_BOT:
return RoomObjectUserType.USER;
default:
return type;
}
}
}
@@ -0,0 +1,144 @@
export class RoomObjectVariable
{
public static OBJECT_ROOM_ID: string = 'object_room_id';
public static OBJECT_ACCURATE_Z_VALUE: string = 'object_accurate_z_value';
public static TILE_CURSOR_HEIGHT: string = 'tile_cursor_height';
public static FIGURE: string = 'figure';
public static GENDER: string = 'gender';
public static OWN_USER: string = 'own_user';
public static FIGURE_CAN_STAND_UP: string = 'figure_can_stand_up';
public static FIGURE_VERTICAL_OFFSET: string = 'figure_vertical_offset';
public static FIGURE_TALK: string = 'figure_talk';
public static FIGURE_DANCE: string = 'figure_dance';
public static FIGURE_SLEEP: string = 'figure_sleep';
public static FIGURE_BLINK: string = 'figure_blink';
public static FIGURE_EFFECT: string = 'figure_effect';
public static FIGURE_CARRY_OBJECT: string = 'figure_carry_object';
public static FIGURE_USE_OBJECT: string = 'figure_use_object';
public static FIGURE_GESTURE: string = 'figure_gesture';
public static FIGURE_POSTURE: string = 'figure_posture';
public static FIGURE_POSTURE_PARAMETER: string = 'figure_posture_parameter';
public static FIGURE_HIGHLIGHT_ENABLE: string = 'figure_highlight_enable';
public static FIGURE_HIGHLIGHT: string = 'figure_highlight';
public static FURNITURE_PURCHASER_NAME: string = 'furniture_purchaser_name';
public static FURNITURE_PURCHASER_FIGURE: string = 'furniture_purchaser_figure';
public static STD: string = 'std';
public static FIGURE_SIGN: string = 'figure_sign';
public static FIGURE_FLAT_CONTROL: string = 'figure_flat_control';
public static FIGURE_IS_TYPING: string = 'figure_is_typing';
public static FIGURE_IS_MUTED: string = 'figure_is_muted';
public static FIGURE_GAINED_EXPERIENCE: string = 'figure_gained_experience';
public static FIGURE_EXPERIENCE_TIMESTAMP: string = 'figure_experience_timestamp';
public static FIGURE_NUMBER_VALUE: string = 'figure_number_value';
public static FIGURE_IS_PLAYING_GAME: string = 'figure_is_playing_game';
public static FIGURE_GUIDE_STATUS: string = 'figure_guide_status';
public static FIGURE_EXPRESSION: string = 'figure_expression';
public static HEAD_DIRECTION: string = 'head_direction';
public static FURNITURE_CUSTOM_VARIABLES: string = 'furniture_custom_variables';
public static FURNITURE_AUTOMATIC_STATE_INDEX: string = 'furniture_automatic_state_index';
public static FURNITURE_ALWAYS_STACKABLE: string = 'furniture_always_stackable';
public static FURNITURE_DISABLE_PICKING_ANIMATION: string = 'furniture_disable_picking_animation';
public static FURNITURE_DATA_FORMAT: string = 'furniture_data_format';
public static FURNITURE_UNIQUE_SERIAL_NUMBER: string = 'furniture_unique_serial_number';
public static FURNITURE_UNIQUE_EDITION_SIZE: string = 'furniture_unique_edition_size';
public static FURNITURE_CRACKABLE_STATE: string = 'furniture_crackable_state';
public static FURNITURE_CRACKABLE_HITS: string = 'furniture_crackable_hits';
public static FURNITURE_CRACKABLE_TARGET: string = 'furniture_crackable_target';
public static FURNITURE_CREDIT_VALUE: string = 'furniture_credit_value';
public static FURNITURE_DATA: string = 'furniture_data';
public static FURNITURE_ITEMDATA: string = 'furniture_itemdata';
public static FURNITURE_COLOR: string = 'furniture_color';
public static FURNITURE_LIFT_AMOUNT: string = 'furniure_lift_amount';
public static FURNITURE_GUILD_CUSTOMIZED_GUILD_ID: string = 'furniture_guild_customized_guild_id';
public static FURNITURE_GUILD_CUSTOMIZED_ASSET_NAME: string = 'furniture_guild_customized_asset_name';
public static FURNITURE_GUILD_CUSTOMIZED_COLOR_1: string = 'furniture_guild_customized_color_1';
public static FURNITURE_GUILD_CUSTOMIZED_COLOR_2: string = 'furniture_guild_customized_color_2';
public static FURNITURE_STATE_UPDATE_TIME: string = 'furniture_state_update_time';
public static FURNITURE_SELECTION_DISABLED: string = 'furniture_selection_disabled';
public static FURNITURE_SIZE_X: string = 'furniture_size_x';
public static FURNITURE_SIZE_Y: string = 'furniture_size_y';
public static FURNITURE_SIZE_Z: string = 'furniture_size_z';
public static FURNITURE_CENTER_X: string = 'furniture_center_x';
public static FURNITURE_CENTER_Y: string = 'furniture_center_y';
public static FURNITURE_CENTER_Z: string = 'furniture_center_z';
public static FURNITURE_ALLOWED_DIRECTIONS: string = 'furniture_allowed_directions';
public static FURNITURE_AD_URL: string = 'furniture_ad_url';
public static FURNITURE_TYPE_ID: string = 'furniture_type_id';
public static FURNITURE_EXTRAS: string = 'furniture_extras';
public static FURNITURE_EXPIRY_TIME: string = 'furniture_expiry_time';
public static FURNITURE_EXPIRTY_TIMESTAMP: string = 'furniture_expiry_timestamp';
public static FURNITURE_REAL_ROOM_OBJECT: string = 'furniture_real_room_object';
public static FURNITURE_IS_STICKIE: string = 'furniture_is_stickie';
public static FURNITURE_BRANDING_IMAGE_STATUS: string = 'furniture_branding_image_status';
public static FURNITURE_BRANDING_IMAGE_URL: string = 'furniture_branding_image_url';
public static FURNITURE_BRANDING_URL: string = 'furniture_branding_url';
public static FURNITURE_BRANDING_OFFSET_X: string = 'furniture_branding_offset_x';
public static FURNITURE_BRANDING_OFFSET_Y: string = 'furniture_branding_offset_y';
public static FURNITURE_BRANDING_OFFSET_Z: string = 'furniture_branding_offset_z';
public static FURNITURE_BADGE_IMAGE_STATUS: string = 'furniture_badge_image_status';
public static FURNITURE_BADGE_ASSET_NAME: string = 'furniture_badge_asset_name';
public static FURNITURE_BADGE_VISIBLE_IN_STATE: string = 'furniture_badge_visible_in_state';
public static FURNITURE_ALPHA_MULTIPLIER: string = 'furniture_alpha_multiplier';
public static FURNITURE_USAGE_POLICY: string = 'furniture_usage_policy';
public static FURNITURE_OWNER_ID: string = 'furniture_owner_id';
public static FURNITURE_OWNER_NAME: string = 'furniture_owner_name';
public static FURNITURE_ROOM_BACKGROUND_COLOR_HUE: string = 'furniture_room_background_color_hue';
public static FURNITURE_ROOM_BACKGROUND_COLOR_SATURATION: string = 'furniture_room_background_color_saturation';
public static FURNITURE_ROOM_BACKGROUND_COLOR_LIGHTNESS: string = 'furniture_room_background_color_lightness';
public static FURNITURE_USES_PLANE_MASK: string = 'furniture_uses_plane_mask';
public static FURNITURE_PLANE_MASK_TYPE: string = 'furniture_plane_mask_type';
public static FURNITURE_IS_VARIABLE_HEIGHT: string = 'furniture_is_variable_height';
public static FURNITURE_VOTE_MAJORITY_RESULT: string = 'furniture_vote_majority_result';
public static FURNITURE_VOTE_COUNTER_COUNT: string = 'furniture_vote_counter_count';
public static FURNITURE_SOUNDBLOCK_RELATIVE_ANIMATION_SPEED: string = 'furniture_soundblock_relative_animation_speed';
public static FURNITURE_MANNEQUIN_NAME: string = 'furniture_mannequin_name';
public static FURNITURE_MANNEQUIN_GENDER: string = 'furniture_mannequin_gender';
public static FURNITURE_MANNEQUIN_FIGURE: string = 'furniture_mannequin_figure';
public static FURNITURE_HIGHSCORE_SCORE_TYPE: string = 'furniture_highscore_score_type';
public static FURNITURE_HIGHSCORE_CLEAR_TYPE: string = 'furniture_highscore_clear_type';
public static FURNITURE_HIGHSCORE_DATA_ENTRY_COUNT: string = 'furniture_highscore_data_entry_count';
public static FURNITURE_HIGHSCORE_DATA_ENTRY_BASE_USERS_: string = 'furniture_highscore_data_entry_base_users_';
public static FURNITURE_HIGHSCORE_DATA_ENTRY_BASE_SCORE_: string = 'furniture_highscore_data_entry_base_score_';
public static FURNITURE_INTERNAL_LINK: string = 'furniture_internal_link';
public static FURNITURE_CLOTHING_BOY: string = 'furniture_clothing_boy';
public static FURNITURE_CLOTHING_GIRL: string = 'furniture_clothing_girl';
public static FURNITURE_PLANETSYSTEM_DATA: string = 'furniture_planetsystem_data';
public static FURNITURE_FIREWORKS_DATA: string = 'furniture_fireworks_data';
public static PET_PALETTE_INDEX: string = 'pet_palette_index';
public static PET_COLOR: string = 'pet_color';
public static PET_HEAD_ONLY: string = 'pet_head_only';
public static PET_CUSTOM_LAYER_IDS: string = 'pet_custom_layer_ids';
public static PET_CUSTOM_PARTS_IDS: string = 'pet_custom_part_ids';
public static PET_CUSTOM_PALETTE_IDS: string = 'pet_custom_palette_ids';
public static PET_IS_RIDING: string = 'pet_is_riding';
public static PET_TYPE: string = 'pet_type';
public static PET_ALLOWED_DIRECTIONS: string = 'pet_allowed_directions';
public static RACE: string = 'race';
public static ROOM_MAP_DATA: string = 'room_map_data';
public static ROOM_PLANE_MASK_XML: string = 'room_plane_mask_xml';
public static ROOM_FLOOR_TYPE: string = 'room_floor_type';
public static ROOM_WALL_TYPE: string = 'room_wall_type';
public static ROOM_LANDSCAPE_TYPE: string = 'room_landscape_type';
public static ROOM_WALL_THICKNESS: string = 'room_wall_thickness';
public static ROOM_FLOOR_THICKNESS: string = 'room_floor_thickness';
public static ROOM_FLOOR_HOLE_UPDATE_TIME: string = 'room_floor_hole_update_time';
public static ROOM_FLOOR_VISIBILITY: string = 'room_floor_visibility';
public static ROOM_WALL_VISIBILITY: string = 'room_wall_visibility';
public static ROOM_LANDSCAPE_VISIBILITY: string = 'room_landscape_visibility';
public static ROOM_DOOR_X: string = 'room_door_x';
public static ROOM_DOOR_Y: string = 'room_door_y';
public static ROOM_DOOR_Z: string = 'room_door_z';
public static ROOM_DOOR_DIR: string = 'room_door_dir';
public static ROOM_BACKGROUND_COLOR: string = 'room_background_color';
public static ROOM_COLORIZE_BG_ONLY: string = 'room_colorize_bg_only';
public static ROOM_RANDOM_SEED: string = 'room_random_seed';
public static ROOM_WORLD_TYPE: string = 'room_world_type';
public static ROOM_SELECTED_X: string = 'room_selected_x';
public static ROOM_SELECTED_Y: string = 'room_selected_y';
public static ROOM_SELECTED_Z: string = 'room_selected_z';
public static ROOM_SELECTED_PLANE: string = 'room_selected_plane';
public static IMAGE_QUERY_SCALE: string = 'image_query_scale';
public static FURNITURE_FRIENDFURNI_ENGRAVING: string = 'furniture_friendfurni_engraving_type';
public static SESSION_URL_PREFIX: string = 'session_url_prefix';
public static SESSION_CURRENT_USER_ID: string = 'session_current_user_id';
}
@@ -0,0 +1,40 @@
export class RoomObjectVisualizationType
{
public static FURNITURE_STATIC = 'furniture_static';
public static FURNITURE_ANIMATED = 'furniture_animated';
public static FURNITURE_RESETTING_ANIMATED = 'furniture_resetting_animated';
public static FURNITURE_POSTER = 'furniture_poster';
public static FURNITURE_EXTERNAL_IMAGE = 'furniture_external_image';
public static FURNITURE_HABBOWHEEL = 'furniture_habbowheel';
public static FURNITURE_VAL_RANDOMIZER = 'furniture_val_randomizer';
public static FURNITURE_BOTTLE = 'furniture_bottle';
public static FURNITURE_PLANET_SYSTEM = 'furniture_planet_system';
public static FURNITURE_QUEUE_TILE = 'furniture_queue_tile';
public static FURNITURE_PARTY_BEAMER = 'furniture_party_beamer';
public static FURNITURE_CUBOID = 'furniture_cuboid';
public static FURNITURE_GIFT_WRAPPED = 'furniture_gift_wrapped';
public static FURNITURE_GIFT_WRAPPED_FIREWORKS = 'furniture_gift_wrapped_fireworks';
public static FURNITURE_COUNTER_CLOCK = 'furniture_counter_clock';
public static FURNITURE_WATER_AREA = 'furniture_water_area';
public static FURNITURE_SCORE_BOARD = 'furniture_score_board';
public static FURNITURE_FIREWORKS = 'furniture_fireworks';
public static FURNITURE_BB = 'furniture_bb';
public static FURNITURE_ISOMETRIC_BB = 'furniture_isometric_bb';
public static FURNITURE_BG = 'furniture_bg';
public static FURNITURE_STICKIE = 'furniture_stickie';
public static FURNITURE_MANNEQUIN = 'furniture_mannequin';
public static FURNITURE_GUILD_CUSTOMIZED = 'furniture_guild_customized';
public static FURNITURE_GUILD_ISOMETRIC_BADGE = 'furniture_guild_isometric_badge';
public static FURNITURE_VOTE_COUNTER = 'furniture_vote_counter';
public static FURNITURE_VOTE_MAJORITY = 'furniture_vote_majority';
public static FURNITURE_SOUNDBLOCK = 'furniture_soundblock';
public static FURNITURE_BADGE_DISPLAY = 'furniture_badge_display';
public static FURNITURE_YOUTUBE = 'furniture_youtube';
public static FURNITURE_BUILDER_PLACEHOLDER = 'furniture_builder_placeholder';
public static ROOM = 'room';
public static USER = 'user';
public static PET_ANIMATED = 'pet_animated';
public static BOT = 'bot';
public static RENTABLE_BOT = 'rentable_bot';
public static TILE_CURSOR = 'tile_cursor';
}
@@ -0,0 +1,17 @@
import { IMessageDataWrapper } from '../../../../communication';
import { IRoomObjectModel } from '../../../../room';
export interface IObjectData
{
state: number;
isUnique: boolean;
uniqueNumber: number;
uniqueSeries: number;
rarityLevel: number;
flags: number;
parseWrapper(wrapper: IMessageDataWrapper): void;
initializeFromRoomObjectModel(model: IRoomObjectModel): void;
writeRoomObjectModel(model: IRoomObjectModel): void;
getLegacyString(): string;
compare(data: IObjectData): boolean;
}
@@ -0,0 +1,99 @@
import { IMessageDataWrapper } from '../../../../communication';
import { IRoomObjectModel } from '../../../../room';
import { RoomObjectVariable } from '../RoomObjectVariable';
import { IObjectData } from './IObjectData';
import { ObjectDataFlags } from './ObjectDataFlags';
export class ObjectDataBase implements IObjectData
{
private _flags: number;
private _uniqueNumber: number;
private _uniqueSeries: number;
constructor()
{
this._flags = 0;
this._uniqueNumber = 0;
this._uniqueSeries = 0;
}
public parseWrapper(wrapper: IMessageDataWrapper): void
{
if((this._flags & ObjectDataFlags.UNIQUE_SET) > 0)
{
this._uniqueNumber = wrapper.readInt();
this._uniqueSeries = wrapper.readInt();
}
}
public initializeFromRoomObjectModel(model: IRoomObjectModel): void
{
this._uniqueNumber = model.getValue<number>(RoomObjectVariable.FURNITURE_UNIQUE_SERIAL_NUMBER);
this._uniqueSeries = model.getValue<number>(RoomObjectVariable.FURNITURE_UNIQUE_EDITION_SIZE);
}
public writeRoomObjectModel(model: IRoomObjectModel): void
{
if(!model) return;
model.setValue(RoomObjectVariable.FURNITURE_UNIQUE_SERIAL_NUMBER, this._uniqueNumber);
model.setValue(RoomObjectVariable.FURNITURE_UNIQUE_EDITION_SIZE, this._uniqueSeries);
}
public getLegacyString(): string
{
return '';
}
public compare(data: IObjectData): boolean
{
return false;
}
public get state(): number
{
const state = parseInt(this.getLegacyString());
return isNaN(state) ? 0 : state;
}
public get isUnique(): boolean
{
return this._uniqueSeries > 0;
}
public get uniqueNumber(): number
{
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;
}
public get flags(): number
{
return this._flags;
}
public set flags(flags: number)
{
this._flags = flags;
}
}
@@ -0,0 +1,44 @@
import { IObjectData } from './IObjectData';
import { CrackableDataType, EmptyDataType, HighScoreDataType, LegacyDataType, MapDataType, NumberDataType, StringDataType, VoteDataType } from './type';
export class ObjectDataFactory
{
public static getData(flags: number): IObjectData
{
let objectData: IObjectData = null;
switch(flags & 0xFF)
{
case CrackableDataType.FORMAT_KEY:
objectData = new CrackableDataType();
break;
case EmptyDataType.FORMAT_KEY:
objectData = new EmptyDataType();
break;
case HighScoreDataType.FORMAT_KEY:
objectData = new HighScoreDataType();
break;
case LegacyDataType.FORMAT_KEY:
objectData = new LegacyDataType();
break;
case MapDataType.FORMAT_KEY:
objectData = new MapDataType();
break;
case NumberDataType.FORMAT_KEY:
objectData = new NumberDataType();
break;
case StringDataType.FORMAT_KEY:
objectData = new StringDataType();
break;
case VoteDataType.FORMAT_KEY:
objectData = new VoteDataType();
break;
}
if(!objectData) return null;
objectData.flags = (flags & 0xFF00);
return objectData;
}
}
@@ -0,0 +1,4 @@
export class ObjectDataFlags
{
public static UNIQUE_SET = 256;
}
@@ -0,0 +1,11 @@
export class ObjectDataKey
{
public static LEGACY_KEY: number = 0;
public static MAP_KEY: number = 1;
public static STRING_KEY: number = 2;
public static VOTE_KEY: number = 3;
public static EMPTY_KEY: number = 4;
public static NUMBER_KEY: number = 5;
public static HIGHSCORE_KEY: number = 6;
public static CRACKABLE_KEY: number = 7;
}
@@ -0,0 +1,6 @@
export * from './IObjectData';
export * from './ObjectDataBase';
export * from './ObjectDataFactory';
export * from './ObjectDataFlags';
export * from './ObjectDataKey';
export * from './type';
@@ -0,0 +1,74 @@
import { IMessageDataWrapper } from '../../../../../communication';
import { IRoomObjectModel } from '../../../../../room';
import { RoomObjectVariable } from '../../RoomObjectVariable';
import { IObjectData } from '../IObjectData';
import { ObjectDataBase } from '../ObjectDataBase';
import { ObjectDataKey } from '../ObjectDataKey';
export class CrackableDataType extends ObjectDataBase implements IObjectData
{
public static FORMAT_KEY = ObjectDataKey.CRACKABLE_KEY;
private _state: string;
private _hits: number;
private _target: number;
constructor()
{
super();
this._state = '';
this._hits = 0;
this._target = 0;
}
public parseWrapper(wrapper: IMessageDataWrapper): void
{
if(!wrapper) return;
this._state = wrapper.readString();
this._hits = wrapper.readInt();
this._target = wrapper.readInt();
super.parseWrapper(wrapper);
}
public initializeFromRoomObjectModel(model: IRoomObjectModel): void
{
super.initializeFromRoomObjectModel(model);
this._state = model.getValue<string>(RoomObjectVariable.FURNITURE_CRACKABLE_STATE);
this._hits = model.getValue<number>(RoomObjectVariable.FURNITURE_CRACKABLE_HITS);
this._target = model.getValue<number>(RoomObjectVariable.FURNITURE_CRACKABLE_TARGET);
}
public writeRoomObjectModel(model: IRoomObjectModel): void
{
super.writeRoomObjectModel(model);
model.setValue(RoomObjectVariable.FURNITURE_DATA_FORMAT, CrackableDataType.FORMAT_KEY);
model.setValue(RoomObjectVariable.FURNITURE_CRACKABLE_STATE, this._state);
model.setValue(RoomObjectVariable.FURNITURE_CRACKABLE_HITS, this._hits);
model.setValue(RoomObjectVariable.FURNITURE_CRACKABLE_TARGET, this._target);
}
public getLegacyString(): string
{
return this._state;
}
public compare(data: IObjectData): boolean
{
return true;
}
public get hits(): number
{
return this._hits;
}
public get target(): number
{
return this._target;
}
}
@@ -0,0 +1,39 @@
import { IMessageDataWrapper } from '../../../../../communication';
import { IRoomObjectModel } from '../../../../../room';
import { RoomObjectVariable } from '../../RoomObjectVariable';
import { IObjectData } from '../IObjectData';
import { ObjectDataBase } from '../ObjectDataBase';
import { ObjectDataKey } from '../ObjectDataKey';
export class EmptyDataType extends ObjectDataBase implements IObjectData
{
public static FORMAT_KEY = ObjectDataKey.EMPTY_KEY;
private _state: string;
public parseWrapper(wrapper: IMessageDataWrapper): void
{
if(!wrapper) return;
this._state = '';
super.parseWrapper(wrapper);
}
public writeRoomObjectModel(model: IRoomObjectModel): void
{
super.writeRoomObjectModel(model);
model.setValue(RoomObjectVariable.FURNITURE_DATA_FORMAT, EmptyDataType.FORMAT_KEY);
}
public getLegacyString(): string
{
return this._state;
}
public compare(data: IObjectData): boolean
{
return super.compare(data);
}
}
@@ -0,0 +1,36 @@
export class HighScoreData
{
private _score: number;
private _users: string[];
constructor()
{
this._score = -1;
this._users = [];
}
public get score(): number
{
return this._score;
}
public set score(k: number)
{
this._score = k;
}
public get users(): string[]
{
return this._users;
}
public set users(k: string[])
{
this._users = k;
}
public addUsername(k: string): void
{
this._users.push(k);
}
}
@@ -0,0 +1,131 @@
import { IMessageDataWrapper } from '../../../../../communication';
import { IRoomObjectModel } from '../../../../../room';
import { RoomObjectVariable } from '../../RoomObjectVariable';
import { IObjectData } from '../IObjectData';
import { ObjectDataBase } from '../ObjectDataBase';
import { ObjectDataKey } from '../ObjectDataKey';
import { HighScoreData } from './HighScoreData';
export class HighScoreDataType extends ObjectDataBase implements IObjectData
{
public static FORMAT_KEY = ObjectDataKey.HIGHSCORE_KEY;
private _state: string;
private _scoreType: number;
private _clearType: number;
private _entries: HighScoreData[];
constructor()
{
super();
this._state = '';
this._scoreType = -1;
this._clearType = -1;
this._entries = [];
}
public parseWrapper(wrapper: IMessageDataWrapper): void
{
if(!wrapper) return;
this._state = wrapper.readString();
this._scoreType = wrapper.readInt();
this._clearType = wrapper.readInt();
let totalScores = wrapper.readInt();
while(totalScores > 0)
{
const data = new HighScoreData();
data.score = wrapper.readInt();
let totalUsers = wrapper.readInt();
while(totalUsers > 0)
{
data.addUsername(wrapper.readString());
totalUsers--;
}
this._entries.push(data);
totalScores--;
}
super.parseWrapper(wrapper);
}
public initializeFromRoomObjectModel(model: IRoomObjectModel): void
{
this._scoreType = model.getValue<number>(RoomObjectVariable.FURNITURE_HIGHSCORE_SCORE_TYPE);
this._clearType = model.getValue<number>(RoomObjectVariable.FURNITURE_HIGHSCORE_CLEAR_TYPE);
this._entries = [];
const totalEntries = model.getValue<number>(RoomObjectVariable.FURNITURE_HIGHSCORE_DATA_ENTRY_COUNT);
let i = 0;
while(i < totalEntries)
{
const data = new HighScoreData();
data.score = model.getValue<number>(RoomObjectVariable.FURNITURE_HIGHSCORE_DATA_ENTRY_BASE_SCORE_ + i);
data.users = model.getValue<string[]>(RoomObjectVariable.FURNITURE_HIGHSCORE_DATA_ENTRY_BASE_USERS_ + i);
this._entries.push(data);
i++;
}
super.initializeFromRoomObjectModel(model);
}
public writeRoomObjectModel(model: IRoomObjectModel): void
{
super.writeRoomObjectModel(model);
model.setValue(RoomObjectVariable.FURNITURE_DATA_FORMAT, HighScoreDataType.FORMAT_KEY);
model.setValue(RoomObjectVariable.FURNITURE_HIGHSCORE_SCORE_TYPE, this._scoreType);
model.setValue(RoomObjectVariable.FURNITURE_HIGHSCORE_CLEAR_TYPE, this._clearType);
if(this._entries)
{
model.setValue(RoomObjectVariable.FURNITURE_HIGHSCORE_DATA_ENTRY_COUNT, this._entries.length);
let i = 0;
while(i < this._entries.length)
{
const entry = this._entries[i];
model.setValue((RoomObjectVariable.FURNITURE_HIGHSCORE_DATA_ENTRY_BASE_SCORE_ + i), entry.score);
model.setValue((RoomObjectVariable.FURNITURE_HIGHSCORE_DATA_ENTRY_BASE_USERS_ + i), entry.users);
i++;
}
}
}
public getLegacyString(): string
{
return this._state;
}
public get entries(): HighScoreData[]
{
return this._entries;
}
public get clearType(): number
{
return this._clearType;
}
public get scoreType(): number
{
return this._scoreType;
}
}
@@ -0,0 +1,59 @@
import { IMessageDataWrapper } from '../../../../../communication';
import { IRoomObjectModel } from '../../../../../room';
import { RoomObjectVariable } from '../../RoomObjectVariable';
import { IObjectData } from '../IObjectData';
import { ObjectDataBase } from '../ObjectDataBase';
import { ObjectDataKey } from '../ObjectDataKey';
export class LegacyDataType extends ObjectDataBase implements IObjectData
{
public static FORMAT_KEY = ObjectDataKey.LEGACY_KEY;
private _data: string;
constructor()
{
super();
this._data = '';
}
public parseWrapper(wrapper: IMessageDataWrapper): void
{
if(!wrapper) return;
this._data = wrapper.readString();
super.parseWrapper(wrapper);
}
public initializeFromRoomObjectModel(model: IRoomObjectModel): void
{
super.initializeFromRoomObjectModel(model);
this._data = model.getValue<string>(RoomObjectVariable.FURNITURE_DATA);
}
public writeRoomObjectModel(model: IRoomObjectModel): void
{
super.writeRoomObjectModel(model);
model.setValue(RoomObjectVariable.FURNITURE_DATA_FORMAT, LegacyDataType.FORMAT_KEY);
model.setValue(RoomObjectVariable.FURNITURE_DATA, this._data);
}
public getLegacyString(): string
{
return this._data;
}
public compare(data: IObjectData): boolean
{
return (this._data === data.getLegacyString());
}
public setString(data: string): void
{
this._data = data;
}
}
@@ -0,0 +1,90 @@
import { IMessageDataWrapper } from '../../../../../communication';
import { IRoomObjectModel } from '../../../../../room';
import { RoomObjectVariable } from '../../RoomObjectVariable';
import { IObjectData } from '../IObjectData';
import { ObjectDataBase } from '../ObjectDataBase';
import { ObjectDataKey } from '../ObjectDataKey';
export class MapDataType extends ObjectDataBase
{
public static FORMAT_KEY = ObjectDataKey.MAP_KEY;
private static STATE: string = 'state';
private static RARITY: string = 'rarity';
private _data: { [index: string]: string };
constructor()
{
super();
this._data = {};
}
public parseWrapper(wrapper: IMessageDataWrapper): void
{
if(!wrapper) return;
this._data = {};
const totalSets = wrapper.readInt();
if(totalSets) for(let i = 0; i < totalSets; i++) this._data[wrapper.readString()] = wrapper.readString();
super.parseWrapper(wrapper);
}
public initializeFromRoomObjectModel(model: IRoomObjectModel): void
{
super.initializeFromRoomObjectModel(model);
this._data = model.getValue<{ [index: string]: string }>(RoomObjectVariable.FURNITURE_DATA) || {};
}
public writeRoomObjectModel(model: IRoomObjectModel): void
{
super.writeRoomObjectModel(model);
model.setValue(RoomObjectVariable.FURNITURE_DATA_FORMAT, MapDataType.FORMAT_KEY);
model.setValue(RoomObjectVariable.FURNITURE_DATA, this._data);
}
public getLegacyString(): string
{
if(!this._data) return '';
const state = this._data[MapDataType.STATE];
if(state === undefined || state === null) return '';
return state;
}
public compare(data: IObjectData): boolean
{
return false;
}
public getValue(key: string): string
{
return this._data[key];
}
public get rarityLevel(): number
{
if(!this._data) return -1;
const state = this._data[MapDataType.RARITY];
if(state === undefined || state === null) return -1;
return parseInt(state);
}
// TODO: How to get the keys?
public get data()
{
return this._data;
}
}
@@ -0,0 +1,91 @@
import { IMessageDataWrapper } from '../../../../../communication';
import { IRoomObjectModel } from '../../../../../room';
import { RoomObjectVariable } from '../../RoomObjectVariable';
import { IObjectData } from '../IObjectData';
import { ObjectDataBase } from '../ObjectDataBase';
import { ObjectDataKey } from '../ObjectDataKey';
export class NumberDataType extends ObjectDataBase
{
public static FORMAT_KEY = ObjectDataKey.NUMBER_KEY;
private static STATE: number = 0;
private _data: number[];
constructor()
{
super();
this._data = [];
}
public parseWrapper(wrapper: IMessageDataWrapper): void
{
if(!wrapper) return;
this._data = [];
const totalNumbers = wrapper.readInt();
if(totalNumbers) for(let i = 0; i < totalNumbers; i++) this._data.push(wrapper.readInt());
super.parseWrapper(wrapper);
}
public initializeFromRoomObjectModel(model: IRoomObjectModel): void
{
super.initializeFromRoomObjectModel(model);
this._data = model.getValue<number[]>(RoomObjectVariable.FURNITURE_DATA);
}
public writeRoomObjectModel(model: IRoomObjectModel): void
{
super.writeRoomObjectModel(model);
model.setValue(RoomObjectVariable.FURNITURE_DATA_FORMAT, NumberDataType.FORMAT_KEY);
model.setValue(RoomObjectVariable.FURNITURE_DATA, this._data);
}
public getLegacyString(): string
{
if(!this._data || !this._data.length) return '';
return this._data[NumberDataType.STATE].toString();
}
public compare(data: IObjectData): boolean
{
if(!(data instanceof NumberDataType)) return false;
let i = 0;
while(i < this._data.length)
{
if(i === 0)
{
//
}
else
{
if(this._data[i] !== data.getValue(i)) return false;
}
i++;
}
return true;
}
public getValue(index: number): number
{
if(!this._data || !this._data.length) return -1;
const value = this._data[index];
if(value === undefined || value === null) return -1;
return value;
}
}
@@ -0,0 +1,90 @@
import { IMessageDataWrapper } from '../../../../../communication';
import { IRoomObjectModel } from '../../../../../room';
import { RoomObjectVariable } from '../../RoomObjectVariable';
import { IObjectData } from '../IObjectData';
import { ObjectDataBase } from '../ObjectDataBase';
import { ObjectDataKey } from '../ObjectDataKey';
export class StringDataType extends ObjectDataBase
{
public static FORMAT_KEY = ObjectDataKey.STRING_KEY;
private static STATE: number = 0;
private _data: string[];
constructor()
{
super();
this._data = [];
}
public parseWrapper(wrapper: IMessageDataWrapper): void
{
if(!wrapper) return;
this._data = [];
const totalStrings = wrapper.readInt();
if(totalStrings) for(let i = 0; i < totalStrings; i++) this._data.push(wrapper.readString());
super.parseWrapper(wrapper);
}
public initializeFromRoomObjectModel(model: IRoomObjectModel): void
{
super.initializeFromRoomObjectModel(model);
this._data = model.getValue<string[]>(RoomObjectVariable.FURNITURE_DATA);
}
public writeRoomObjectModel(model: IRoomObjectModel): void
{
super.writeRoomObjectModel(model);
model.setValue(RoomObjectVariable.FURNITURE_DATA_FORMAT, StringDataType.FORMAT_KEY);
model.setValue(RoomObjectVariable.FURNITURE_DATA, this._data);
}
public getLegacyString(): string
{
if(!this._data || !this._data.length) return '';
return this._data[StringDataType.STATE];
}
public compare(data: IObjectData): boolean
{
if(!(data instanceof StringDataType)) return false;
let i = 0;
while(i < this._data.length)
{
if(i === 0)
{
//
}
else
{
if(this._data[i] !== data.getValue(i)) return false;
}
i++;
}
return true;
}
public getValue(index: number): string
{
return this._data[index] || '';
}
public setValue(data: string[]): void
{
this._data = data;
}
}
@@ -0,0 +1,66 @@
import { IMessageDataWrapper } from '../../../../../communication';
import { IRoomObjectModel } from '../../../../../room';
import { RoomObjectVariable } from '../../RoomObjectVariable';
import { IObjectData } from '../IObjectData';
import { ObjectDataBase } from '../ObjectDataBase';
import { ObjectDataKey } from '../ObjectDataKey';
export class VoteDataType extends ObjectDataBase
{
public static FORMAT_KEY = ObjectDataKey.VOTE_KEY;
private _state: string;
private _result: number;
constructor()
{
super();
this._state = '';
this._result = 0;
}
public parseWrapper(wrapper: IMessageDataWrapper): void
{
if(!wrapper) return;
this._state = wrapper.readString();
this._result = wrapper.readInt();
super.parseWrapper(wrapper);
}
public writeRoomObjectModel(model: IRoomObjectModel): void
{
super.writeRoomObjectModel(model);
model.setValue(RoomObjectVariable.FURNITURE_DATA_FORMAT, VoteDataType.FORMAT_KEY);
const data: { [index: string]: string } = {};
data['S'] = this._state;
data['R'] = this._result.toString();
model.setValue(RoomObjectVariable.FURNITURE_DATA, data);
}
public getLegacyString(): string
{
return this._state;
}
public compare(data: IObjectData): boolean
{
return true;
}
public setString(state: string): void
{
this._state = state;
}
public get result(): number
{
return this._result;
}
}
@@ -0,0 +1,9 @@
export * from './CrackableDataType';
export * from './EmptyDataType';
export * from './HighScoreData';
export * from './HighScoreDataType';
export * from './LegacyDataType';
export * from './MapDataType';
export * from './NumberDataType';
export * from './StringDataType';
export * from './VoteDataType';
@@ -0,0 +1,11 @@
export * from './data';
export * from './data/type';
export * from './IPetFigureData';
export * from './IRoomMapData';
export * from './RoomObjectCategory';
export * from './RoomObjectLogicType';
export * from './RoomObjectOperationType';
export * from './RoomObjectType';
export * from './RoomObjectUserType';
export * from './RoomObjectVariable';
export * from './RoomObjectVisualizationType';