use std::collections::HashMap;
use miniz_oxide::deflate::compress_to_vec_zlib;
use miniz_oxide::inflate::decompress_to_vec_zlib;
use crate::protocol::hdirection::HDirection;
use crate::protocol::hpacket::HPacket;
use crate::protocol::vars::legacy::{LegacyId, LegacyLength};
use crate::protocol::vars::packetvariable::PacketVariable;
use super::baseparser::BaseParser;
use super::subparsers::*;
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2GetFriendsLeaderboard {
    pub selected_game: i32,
    pub rank: i32,
    pub scroll_dir: i32,
    pub view_size: i32,
    pub window_size: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2GetTotalGroupLeaderboard {
    pub selected_game: i32,
    pub rank: i32,
    pub scroll_dir: i32,
    pub view_size: i32,
    pub window_size: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2GetTotalLeaderboard {
    pub selected_game: i32,
    pub rank: i32,
    pub scroll_dir: i32,
    pub view_size: i32,
    pub window_size: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2GetWeeklyFriendsLeaderboard {
    pub selected_game: i32,
    pub offset: i32,
    pub rank: i32,
    pub scroll_dir: i32,
    pub view_size: i32,
    pub window_size: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2GetWeeklyGroupLeaderboard {
    pub selected_game: i32,
    pub offset: i32,
    pub rank: i32,
    pub scroll_dir: i32,
    pub view_size: i32,
    pub window_size: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2GetWeeklyLeaderboard {
    pub selected_game: i32,
    pub offset: i32,
    pub rank: i32,
    pub scroll_dir: i32,
    pub view_size: i32,
    pub window_size: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateFigureData {
    pub figure_string: String,
    pub gender: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct OpenCampaignCalendarDoorAsStaff {
    pub campaign_name: String,
    pub day: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct OpenCampaignCalendarDoor {
    pub campaign_name: String,
    pub day: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetOccupiedTiles {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetRoomEntryTile {}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct UpdateFloorProperties {
    pub data: String,
    pub entry_point_x: i32,
    pub entry_point_y: i32,
    pub entry_point_dir: i32,
    pub wall_thickness: i32,
    pub floor_thickness: i32,
    pub fixed_walls_height: i32
}
impl PacketVariable for UpdateFloorProperties {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        (Self {
            data: packet.read(),
            entry_point_x: packet.read::<Option<i32>>().unwrap_or(-1),
            entry_point_y: packet.read::<Option<i32>>().unwrap_or(-1),
            entry_point_dir: packet.read::<Option<i32>>().unwrap_or(-1),
            wall_thickness: packet.read::<Option<i32>>().unwrap_or(-1),
            floor_thickness: packet.read::<Option<i32>>().unwrap_or(-1),
            fixed_walls_height: packet.read::<Option<i32>>().unwrap_or(-1)
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        if self.entry_point_x == -1 && self.entry_point_y == -1 && self.entry_point_dir == -1
            && self.wall_thickness == -1 && self.floor_thickness == -1 {
            self.data.to_packet()
        } else if self.fixed_walls_height == -1 {
            (
                self.data.clone(), self.entry_point_x, self.entry_point_y, self.entry_point_dir,
                self.wall_thickness, self.floor_thickness
            ).to_packet()
        } else {
            (
                self.data.clone(), self.entry_point_x, self.entry_point_y, self.entry_point_dir,
                self.wall_thickness, self.floor_thickness, self.fixed_walls_height
            ).to_packet()
        }
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AddAdminRightsToMember {
    pub group_id: LegacyId,
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ApproveAllMembershipRequests {
    pub group_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ApproveMembershipRequest {
    pub group_id: LegacyId,
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ApproveName {
    pub name: String,
    pub approved: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ChangeEmail {
    pub email: String
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct CreateGuild {
    pub name: String,
    pub description: String,
    pub room_id: LegacyId,
    pub primary_color_id: i32,
    pub secondary_color_id: i32,
    pub badge_settings: Vec<GuildBadgeSettings>
}
impl PacketVariable for CreateGuild {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        let (name, description, room_id, primary_color_id, secondary_color_id) = packet.read();
        let size: LegacyLength = packet.read();
        let mut badge_settings: Vec<GuildBadgeSettings> = Vec::new();
        for _ in 0..*size/3 {
            badge_settings.push(packet.read());
        }
        (Self {
            name, description, room_id, primary_color_id, secondary_color_id, badge_settings
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        let mut packet = HPacket::from_header_id(0);
        packet.append((
            self.name.clone(), self.description.clone(), self.room_id,
            self.primary_color_id, self.secondary_color_id,
            LegacyLength(self.badge_settings.len() as i32 * 3)
        ));
        for setting in self.badge_settings.clone() {
            packet.append(setting.clone());
        }
        packet.get_bytes()[6..].to_vec()
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct DeactivateGuild {
    pub id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct DeselectFavouriteHabboGroup {
    pub id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetEmailStatus {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetExtendedProfileByName {
    pub name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetExtendedProfile {
    pub user_id: LegacyId,
    pub open: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetGuildCreationInfo {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetGuildEditInfo {
    pub group_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetGuildEditorData {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetGuildMemberships {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetGuildMembers {
    pub group_id: LegacyId,
    pub page_index: i32,
    pub search_text: String,
    pub search_type: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetHabboGroupBadges {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetHabboGroupDetails {
    pub group_id: LegacyId,
    pub open: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetIgnoredUsers {
    pub user_name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetMemberGuildItemCount {
    pub group_id: LegacyId,
    pub avatar_id: LegacyId,
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetMOTD {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetRelationshipStatusInfo {
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSelectedBadges {
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GiveStarGemToUser {
    pub user_id: LegacyId,
    pub amount: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct IgnoreUserId {
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct IgnoreUser {
    pub name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct JoinHabboGroup {
    pub group_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct KickMember {
    pub guild_id: LegacyId,
    pub user_id: LegacyId,
    pub user_blocked: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RejectMembershipRequest {
    pub guild_id: LegacyId,
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveAdminRightsFromMember {
    pub guild_id: LegacyId,
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ScrGetKickbackInfo {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ScrGetUserInfo {
    pub info_type: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SelectFavouriteHabboGroup {
    pub group_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UnblockGroupMember {
    pub group_id: LegacyId,
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UnignoreUser {
    pub name: String
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct UpdateGuildBadge {
    pub group_id: LegacyId,
    pub badge_settings: Vec<GuildBadgeSettings>
}
impl PacketVariable for UpdateGuildBadge {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        let group_id = packet.read();
        let size: LegacyLength = packet.read();
        let mut badge_settings: Vec<GuildBadgeSettings> = Vec::new();
        for _ in 0..*size/3 {
            badge_settings.push(packet.read());
        }
        (Self {
            group_id, badge_settings
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        let mut packet = HPacket::from_header_id(0);
        packet.append((self.group_id, LegacyLength(self.badge_settings.len() as i32 * 3)));
        for setting in self.badge_settings.clone() {
            packet.append(setting.clone());
        }
        packet.get_bytes()[6..].to_vec()
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateGuildColors {
    pub group_id: LegacyId,
    pub primary_color_id: i32,
    pub secondary_color_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateGuildIdentity {
    pub group_id: LegacyId,
    pub name: String,
    pub description: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateGuildSettings {
    pub group_id: LegacyId,
    pub guild_type: i32,
    pub rights_level: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetChatPreferences {
    pub force_old_chat: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetChatStylePreference {
    pub preferred_chat_style: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetIgnoreRoomInvites {
    pub ignored: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetNewNavigatorWindowPreferences {
    pub x: i32,
    pub y: i32,
    pub width: i32,
    pub height: i32,
    pub left_pane_hidden: bool,
    pub _unknown: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetRoomCameraPreferences {
    pub follow_disabled: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetSoundSettings {
    pub trax_volume: i32,
    pub furni_volume: i32,
    pub generic_volume: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetUIFlags {
    pub flags: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ApplySnapshot {
    pub id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Open {
    pub stuff_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateAction {
    pub id: LegacyId,
    pub int_params: Vec<i32>,
    pub string_param: String,
    pub stuff_ids: Vec<LegacyId>,
    pub action_delay: i32,
    pub furni_sources: Vec<LegacyId>,
    pub user_sources: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateAddon {
    pub id: LegacyId,
    pub int_params: Vec<i32>,
    pub string_param: String,
    pub stuff_ids: Vec<LegacyId>,
    pub furni_sources: Vec<LegacyId>,
    pub user_sources: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateCondition {
    pub id: LegacyId,
    pub int_params: Vec<i32>,
    pub string_param: String,
    pub stuff_ids: Vec<LegacyId>,
    pub quantifier: i32,
    pub furni_sources: Vec<LegacyId>,
    pub user_sources: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateSelector {
    pub id: LegacyId,
    pub int_params: Vec<i32>,
    pub string_param: String,
    pub stuff_ids: Vec<LegacyId>,
    pub filter_field: bool,
    pub inverse_field: bool,
    pub furni_sources: Vec<LegacyId>,
    pub user_sources: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateTrigger {
    pub id: LegacyId,
    pub int_params: Vec<i32>,
    pub string_param: String,
    pub stuff_ids: Vec<LegacyId>,
    pub furni_sources: Vec<LegacyId>,
    pub user_sources: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PollAnswer {
    pub id: i32,
    pub question_id: i32,
    pub answers: Vec<String>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PollReject {
    pub id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PollStart {
    pub id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AvatarExpression {
    pub expression: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ChangeMotto {
    pub motto: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ChangePosture {
    pub posture: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CustomizeAvatarWithFurni {
    pub id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Dance {
    pub style: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct DropCarryItem {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct LookTo {
    pub x: i32,
    pub y: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PassCarryItem {
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Sign {
    pub sign: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetTalentTrackLevel {
    pub talent_track_name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetTalentTrack {
    pub talent_track_name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideAdvertisementRead {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct DeleteRoom {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetBannedUsersFromRoom {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCustomRoomFilter {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetFlatControllers {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetRoomSettings {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SaveRoomSettings {
    pub room_id: LegacyId,
    pub name: String,
    pub description: String,
    pub door_mode: i32,
    pub password: String,
    pub maximum_visitors: i32,
    pub category_id: i32,
    pub tags: Vec<String>,
    pub trade_mode: i32,
    pub allow_pets: bool,
    pub allow_food_consume: bool,
    pub allow_walk_through: bool,
    pub hide_walls: bool,
    pub wall_thickness: i32,
    pub floor_thickness: i32,
    pub who_can_mute: i32,
    pub who_can_kick: i32,
    pub who_can_ban: i32,
    pub chat_mode: i32,
    pub chat_bubble_size: i32,
    pub chat_scroll_up_frequency: i32,
    pub chat_full_hear_range: i32,
    pub chat_flood_sensitivity: i32,
    pub allow_navigator_dyn_cats: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateRoomCategoryAndTradeSettings {
    pub room_id: LegacyId,
    pub category: i32,
    pub trade_mode: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateRoomFilter {
    pub room_id: LegacyId,
    pub is_added: bool,
    pub bad_word: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PeerUsersClassification {
    pub data: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomUsersClassification {
    pub data: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ClientHello {
    pub version: String,
    pub client_type: String,
    pub operating_system: i32,
    pub _unknown: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CompleteDiffieHandshake {
    pub public_key: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Disconnect {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct InfoRetrieve {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct InitDiffieHandshake {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Pong {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SSOTicket {
    pub sso_ticket: String,
    pub time: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UniqueID {
    pub machine_id: String,
    pub finger_print: String,
    pub flash_version: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct VersionCheck {
    pub _unknown: i32,
    pub flash_client: String,
    pub external_variables: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AcceptFriend {
    pub request_ids: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct DeclineFriend {
    pub none_declined: bool,
    pub request_ids: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct FindNewFriends {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct FollowFriend {
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct FriendListUpdate {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetFriendRequests {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct HabboSearch {
    pub search_query: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MessengerInit {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveFriend {
    pub user_ids: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RequestFriend {
    pub user_name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SendMsg {
    pub user_id: LegacyId,
    pub msg: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SendRoomInvite {
    pub user_ids: Vec<LegacyId>,
    pub msg: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetRelationshipStatus {
    pub user_id: LegacyId,
    pub relationship_status: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct VisitUser {
    pub user_name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AddFavouriteRoom {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CancelEvent {
    pub ad_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CanCreateRoom {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CompetitionRoomsSearch {
    pub goal_id: i32,
    pub page_index: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ConvertGlobalRoomId {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CreateFlat {
    pub name: String,
    pub description: String,
    pub model: String,
    pub category: i32,
    pub max_visitors: i32,
    pub trade_mode: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct DeleteFavouriteRoom {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct EditEvent {
    pub ad_id: LegacyId,
    pub name: String,
    pub description: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ForwardToARandomPromotedRoom {
    pub room_category: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ForwardToSomeRoom {
    pub room_identifier: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetGuestRoom {
    pub room_id: LegacyId,
    pub entering_room: i32,
    pub go_to_room: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetOfficialRooms {
    pub ad_index: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetPopularRoomTags {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetUserEventCats {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetUserFlatCats {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuildBaseSearch {
    pub ad_index: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MyFavouriteRoomsSearch {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MyFrequentRoomHistorySearch {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MyFriendsRoomsSearch {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MyGuildBasesSearch {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MyRecommendedRooms {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MyRoomHistorySearch {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MyRoomRightsSearch {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MyRoomsSearch {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PopularRoomsSearch {
    pub search_query: String,
    pub ad_index: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RateFlat {
    pub rating: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveOwnRoomRightsRoom {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomAdEventTabAdClicked {
    pub room_id: LegacyId,
    pub room_ad_name: String,
    pub room_ad_expires_in_min: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomAdEventTabViewed {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomAdSearch {
    pub ad_index: i32,
    pub search_type: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomsWhereMyFriendsAreSearch {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomsWithHighestScoreSearch {
    pub ad_index: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomTextSearch {
    pub search_query: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetRoomSessionTags {
    pub tag1: String,
    pub tag2: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ToggleStaffPick {
    pub room_id: LegacyId,
    pub is_staff_pick: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateHomeRoom {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct BuyMarketplaceOffer {
    pub offer_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct BuyMarketplaceTokens {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CancelMarketplaceOffer {
    pub offer_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetMarketplaceCanMakeOffer {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetMarketplaceConfiguration {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetMarketplaceItemStats {
    pub placement_type: i32,
    pub item_type: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetMarketplaceOffers {
    pub min_price: i32,
    pub max_price: i32,
    pub search_string: String,
    pub sort_key: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetMarketplaceOwnOffers {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MakeOffer {
    pub price: i32,
    pub placement_type: i32,
    pub room_item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RedeemMarketplaceOfferCredits {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ForwardToACompetitionRoom {
    pub goal_code: String,
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ForwardToASubmittableRoom {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ForwardToRandomCompetitionRoom {
    pub goal_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCurrentTimingCode {
    pub timing_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetIsUserPartOfCompetition {
    pub goal_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSecondsUntil {
    pub time: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomCompetitionInit {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SubmitRoomToCompetition {
    pub goal_code: String,
    pub event_type: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct VoteForRoom {
    pub goal_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct FriendFurniConfirmLock {
    pub stuff_id: LegacyId,
    pub canceled: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MysteryBoxWaitingCanceled {
    pub owner_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AcceptQuest {
    pub quest_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ActivateQuest {
    pub quest_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CancelQuest {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct FriendRequestQuestComplete {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCommunityGoalHallOfFame {
    pub code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCommunityGoalProgress {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetConcurrentUsersGoalProgress {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetConcurrentUsersReward {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetDailyQuest {
    pub is_easy: bool,
    pub index: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetQuests {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSeasonalQuestsOnly {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct OpenQuestTracker {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RejectQuest {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct StartCampaign {
    pub campaign_name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetResolutionAchievements {
    pub stuff_id: LegacyId,
    pub _unknown: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CloseIssueDefaultAction {
    pub highest_priority_issue_id: LegacyId,
    pub issue_ids: Vec<LegacyId>,
    pub topic_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CloseIssues {
    pub reason: i32,
    pub issue_ids: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct DefaultSanction {
    pub user_id: LegacyId,
    pub topic_id: i32,
    pub message: String,
    pub issue_id: LegacyId
}
impl PacketVariable for DefaultSanction {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        (Self {
            user_id: packet.read(),
            topic_id: packet.read(),
            message: packet.read(),
            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        if *self.issue_id == -1 {
            (
                self.user_id, self.topic_id, self.message.clone()
            ).to_packet()
        } else {
            (
                self.user_id, self.topic_id, self.message.clone(), self.issue_id
            ).to_packet()
        }
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCfhChatlog {
    pub issue_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetModeratorRoomInfo {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetModeratorUserInfo {
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetRoomChatlog {
    pub is_guest_room: i32,
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetRoomVisits {
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetUserChatlog {
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct ModAlert {
    pub user_id: LegacyId,
    pub message: String,
    pub topic_id: i32,
    pub issue_id: LegacyId
}
impl PacketVariable for ModAlert {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        (Self {
            user_id: packet.read(),
            message: packet.read(),
            topic_id: packet.read(),
            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        if *self.issue_id == -1 {
            (
                self.user_id, self.message.clone(), self.topic_id
            ).to_packet()
        } else {
            (
                self.user_id, self.message.clone(), self.topic_id, self.issue_id
            ).to_packet()
        }
    }
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct ModBan {
    pub user_id: LegacyId,
    pub message: String,
    pub topic_id: i32,
    pub sanction_type_id: i32,
    pub is_perm_ban: bool,
    pub issue_id: LegacyId
}
impl PacketVariable for ModBan {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        (Self {
            user_id: packet.read(),
            message: packet.read(),
            topic_id: packet.read(),
            sanction_type_id: packet.read(),
            is_perm_ban: packet.read(),
            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        if *self.issue_id == -1 {
            (
                self.user_id, self.message.clone(), self.topic_id,
                self.sanction_type_id, self.is_perm_ban
            ).to_packet()
        } else {
            (
                self.user_id, self.message.clone(), self.topic_id,
                self.sanction_type_id, self.is_perm_ban, self.issue_id
            ).to_packet()
        }
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ModerateRoom {
    pub room_id: LegacyId,
    pub lock_room: i32,
    pub force_room_change: i32,
    pub kick_everyone: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ModeratorAction {
    pub action: i32,
    pub message: String,
    pub _unknown: String
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct ModKick {
    pub user_id: LegacyId,
    pub message: String,
    pub topic_id: i32,
    pub issue_id: LegacyId
}
impl PacketVariable for ModKick {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        (Self {
            user_id: packet.read(),
            message: packet.read(),
            topic_id: packet.read(),
            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        if *self.issue_id == -1 {
            (
                self.user_id, self.message.clone(), self.topic_id
            ).to_packet()
        } else {
            (
                self.user_id, self.message.clone(), self.topic_id, self.issue_id
            ).to_packet()
        }
    }
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct ModMessage {
    pub user_id: LegacyId,
    pub message: String,
    pub _unknown1: String,
    pub _unknown2: String,
    pub topic_id: i32,
    pub issue_id: LegacyId
}
impl PacketVariable for ModMessage {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        (Self {
            user_id: packet.read(),
            message: packet.read(),
            _unknown1: packet.read(),
            _unknown2: packet.read(),
            topic_id: packet.read(),
            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        if *self.issue_id == -1 {
            (
                self.user_id, self.message.clone(), self._unknown1.clone(),
                self._unknown2.clone(), self.topic_id
            ).to_packet()
        } else {
            (
                self.user_id, self.message.clone(), self._unknown1.clone(),
                self._unknown2.clone(), self.topic_id, self.issue_id
            ).to_packet()
        }
    }
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct ModMute {
    pub user_id: LegacyId,
    pub message: String,
    pub topic_id: i32,
    pub issue_id: LegacyId
}
impl PacketVariable for ModMute {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        (Self {
            user_id: packet.read(),
            message: packet.read(),
            topic_id: packet.read(),
            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        if *self.issue_id == -1 {
            (
                self.user_id, self.message.clone(), self.topic_id
            ).to_packet()
        } else {
            (
                self.user_id, self.message.clone(), self.topic_id, self.issue_id
            ).to_packet()
        }
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ModToolPreferences {
    pub x: i32,
    pub y: i32,
    pub width: i32,
    pub height: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ModToolSanction {
    pub highest_priority_issue_id: LegacyId,
    pub user_id: LegacyId,
    pub topic_id: i32,
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct ModTradingLock {
    pub user_id: LegacyId,
    pub message: String,
    pub length_min: i32,
    pub topic_id: i32,
    pub issue_id: LegacyId,
}
impl PacketVariable for ModTradingLock {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        (Self {
            user_id: packet.read(),
            message: packet.read(),
            length_min: packet.read(),
            topic_id: packet.read(),
            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        if *self.issue_id == -1 {
            (
                self.user_id, self.message.clone(), self.length_min, self.topic_id
            ).to_packet()
        } else {
            (
                self.user_id, self.message.clone(), self.length_min, self.topic_id, self.issue_id
            ).to_packet()
        }
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PickIssues {
    pub issue_ids: Vec<LegacyId>,
    pub retry_enabled: bool,
    pub retry_count: i32,
    pub error: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ReleaseIssues {
    pub issue_ids: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2MakeSnowball {
    pub turn: i32,
    pub sub_turn: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2RequestFullStatusUpdate {
    pub status: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2SetUserMoveTarget {
    pub x: i32,
    pub y: i32,
    pub turn: i32,
    pub sub_turn: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2ThrowSnowballAtHuman {
    pub user_id: LegacyId,
    pub trajectory: i32,
    pub turn: i32,
    pub sub_turn: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2ThrowSnowballAtPosition {
    pub x: i32,
    pub y: i32,
    pub trajectory: i32,
    pub turn: i32,
    pub sub_turn: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AmbassadorAlert {
    pub user_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AssignRights {
    pub user_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct BanUserWithDuration {
    pub user_id: i32,
    pub ban_type: String,
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct KickUser {
    pub user_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct LetUserIn {
    pub user_name: String,
    pub can_enter: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MuteAllInRoom {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MuteUser {
    pub user_id: LegacyId,
    pub mute_type: i32,
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveAllRights {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveRights {
    pub user_ids: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UnbanUserFromRoom {
    pub user_id: LegacyId,
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UnmuteUser {
    pub user_id: LegacyId,
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct NavigatorAddCollapsedCategory {
    pub search_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct NavigatorAddSaved {
    pub search_code: String,
    pub filtering: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct NavigatorDeleteSaved {
    pub id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct NavigatorRemoveCollapsedCategory {
    pub search_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct NavigatorSetSearchCodeViewMode {
    pub search_code: String,
    pub view_mode: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct NewNavigatorInit {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct NewNavigatorSearch {
    pub search_code: String,
    pub filtering: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct BreedPets {
    pub action_id: i32,
    pub pet1_id: LegacyId,
    pub pet2_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CustomizePetWithFurni {
    pub item_id: LegacyId,
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetPetInfo {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PetSelected {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RespectPet {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CommunityGoalVote {
    pub option: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetAchievements {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetBadgePointLimits {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetBadges {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetIsBadgeRequestFulfilled {
    pub badge_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RequestABadge {
    pub badge_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct SetActivatedBadges {
    pub badges: [String; 5]
}
impl PacketVariable for SetActivatedBadges {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        let indexed_badges = packet.read::<[(i32, String); 5]>();
        (Self {
            badges: [
                indexed_badges[0].1.clone(), indexed_badges[1].1.clone(),
                indexed_badges[2].1.clone(), indexed_badges[3].1.clone(),
                indexed_badges[4].1.clone()
            ]
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        let mut packet = HPacket::from_header_id(0);
        for i in 0..5 {
            packet.append((i as i32, self.badges[i].clone()));
        }
        packet.get_bytes()[6..].to_vec()
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2ExitGame {
    pub exit: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2GameChat {
    pub message: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2LoadStageReady {
    pub percentage: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2PlayAgain {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCreditsInfo {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CommandBot {
    pub bot_id: LegacyId,
    pub skill_type: i32,
    pub command_string: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetBotCommandConfigurationData {
    pub bot_id: LegacyId,
    pub skill_type: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AvatarEffectActivated {
    pub effect_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AvatarEffectSelected {
    pub effect_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ChangeQueue {
    pub queue_type: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct OpenFlatConnection {
    pub room_id: LegacyId,
    pub room_password: String,
    pub _unknown: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Quit {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSelectedNftWardrobeOutfit {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetUserNftWardrobe {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SaveUserNftWardrobe {
    pub token_id: String
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct NewUserExperienceGetGifts {
    pub selections: Vec<NewUserExperienceGetGiftsSelection> }
impl PacketVariable for NewUserExperienceGetGifts {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        let mut selections: Vec<NewUserExperienceGetGiftsSelection> = Vec::new();
        let size: LegacyLength = packet.read();
        for _ in 0..*size/3 {
            selections.push(packet.read());
        }
        (Self {
            selections
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        let mut packet = HPacket::from_header_id(0);
        packet.append(LegacyLength(self.selections.len() as i32 * 3));
        for selection in self.selections.clone() {
            packet.append(selection);
        }
        packet.get_bytes()[6..].to_vec()
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct NewUserExperienceScriptProceed {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ClickFurni {
    pub item_id: LegacyId,
    pub _unknown: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CompostPlant {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetFurnitureAliases {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetHeightMap {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetItemData {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetPetCommands {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GiveSupplementToPet {
    pub pet_id: LegacyId,
    pub supplement_type: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct HarvestPet {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MountPet {
    pub pet_id: LegacyId,
    pub mounted: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MoveAvatar {
    pub x: i32,
    pub y: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MoveObject {
    pub item_id: LegacyId,
    pub x: i32,
    pub y: i32,
    pub direction: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MovePet {
    pub item_id: LegacyId,
    pub x: i32,
    pub y: i32,
    pub direction: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MoveWallItem {
    pub item_id: LegacyId,
    pub location: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PickupObject {
    pub placement_type: i32,
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PlaceBot {
    pub bot_id: LegacyId,
    pub x: i32,
    pub y: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PlaceObject {
    pub data: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PlacePet {
    pub pet_id: LegacyId,
    pub x: i32,
    pub y: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveBotFromFlat {
    pub bot_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveItem {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemovePetFromFlat {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveSaddleFromPet {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetClothingChangeData {
    pub item_id: LegacyId,
    pub figure_string: String,
    pub gender: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetItemData {
    pub item_id: LegacyId,
    pub color_hex: String,
    pub text: String
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct SetObjectData {
    pub item_id: LegacyId,
    pub data: HashMap<String, String>
}
impl PacketVariable for SetObjectData {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        let item_id = packet.read();
        let size: LegacyLength = packet.read();
        let mut data: HashMap<String, String> = HashMap::new();
        for _ in 0..*size/2 {
            data.insert(packet.read(), packet.read());
        }
        (Self {
            item_id, data
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        let mut packet = HPacket::from_header_id(0);
        packet.append((self.item_id, LegacyLength(self.data.len() as i32 * 2)));
        for (key, val) in self.data.clone() {
            packet.append((key, val));
        }
        packet.get_bytes()[6..].to_vec()
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct TogglePetBreedingPermission {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct TogglePetRidingPermission {
    pub pet_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UseFurniture {
    pub item_id: LegacyId,
    pub param: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UseWallItem {
    pub item_id: LegacyId,
    pub param: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ResetPhoneNumberState {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetPhoneNumberVerificationStatus {
    pub status: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct TryPhoneNumber {
    pub country_code: String,
    pub phone_number: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct VerifyCode {
    pub verification_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomNetworkOpenConnection {
    pub network_id: LegacyId,
    pub home_room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AddJukeboxDisk {
    pub disk_id: LegacyId,
    pub slot_number: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetJukeboxPlayList {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetNowPlaying {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetOfficialSongId {
    pub song_id: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSongInfo {
    pub song_ids: Vec<i32>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSoundMachinePlayList {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSoundSettings {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetUserSongDisks {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveJukeboxDisk {
    pub slot_number: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetForumsList {
    pub list_code: i32,
    pub start_index: i32,
    pub count: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetForumStats {
    pub group_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetMessages {
    pub group_id: LegacyId,
    pub thread_id: LegacyId,
    pub start_index: i32,
    pub count: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetThread {
    pub group_id: LegacyId,
    pub thread_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetThreads {
    pub group_id: LegacyId,
    pub start_index: i32,
    pub count: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetUnreadForumsCount {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ModerateMessage {
    pub group_id: LegacyId,
    pub thread_id: LegacyId,
    pub message_id: LegacyId,
    pub action_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ModerateThread {
    pub group_id: LegacyId,
    pub thread_id: LegacyId,
    pub action_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PostMessage {
    pub group_id: LegacyId,
    pub thread_id: LegacyId,
    pub subject: String,
    pub message: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateForumReadMarker {
    pub data: Vec<UpdateForumReadMarkerData>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateForumSettings {
    pub group_id: LegacyId,
    pub read_permissions: i32,
    pub post_message_permissions: i32,
    pub post_thread_permissions: i32,
    pub moderate_permissions: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UpdateThread {
    pub group_id: LegacyId,
    pub thread_id: LegacyId,
    pub is_locked: bool,
    pub is_sticky: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct EventLog {
    pub event_category: String,
    pub event_type: String,
    pub action: String,
    pub extra_string: String,
    pub extra_int: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct LagWarningReport {
    pub lag_level: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct LatencyPingReport {
    pub sum: i32,
    pub average: i32,
    pub count: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct LatencyPingRequest {
    pub request_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PerformanceLog {
    pub time_stamp: i32,
    pub user_agent: String,
    pub flash_version: String,
    pub operating_system: String,
    pub _unknown1: String,
    pub is_debugger: bool,
    pub total_memory: i32,
    pub _unknown2: i32,
    pub garbage_collection_count: i32,
    pub average_update_interval: i32,
    pub update_count: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CallForHelpFromForumMessage {
    pub group_id: LegacyId,
    pub thread_id: LegacyId,
    pub message_id: LegacyId,
    pub topic_id: i32,
    pub message: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CallForHelpFromForumThread {
    pub group_id: LegacyId,
    pub thread_id: LegacyId,
    pub topic_id: i32,
    pub message: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CallForHelpFromIM {
    pub message: String,
    pub topic_id: i32,
    pub user_id: LegacyId,
    pub messages: Vec<CallForHelpFromIMMessage>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CallForHelpFromPhoto {
    pub image: String,
    pub name: i32,
    pub room_id: LegacyId,
    pub creator_id: LegacyId,
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CallForHelpFromSelfie {
    pub image: String,
    pub message: i32,
    pub room_id: LegacyId,
    pub creator_id: LegacyId,
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CallForHelp {
    pub message: String,
    pub topic_id: i32,
    pub user_id: LegacyId,
    pub room_id: LegacyId,
    pub messages: Vec<CallForHelpFromIMMessage>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ChatReviewGuideDecidesOnOffer {
    pub accepted: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ChatReviewGuideDetached {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ChatReviewGuideVote {
    pub vote: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ChatReviewSessionCreate {
    pub user_id: LegacyId,
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct DeletePendingCallsForHelp {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCfhStatus {
    pub show: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetGuideReportingStatus {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetPendingCallsForHelp {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetQuizQuestions {
    pub name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionCreate {
    pub request_type: i32,
    pub message: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionFeedback {
    pub positive: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionGetRequesterRoom {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionGuideDecides {
    pub accepted: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionInviteRequester {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionIsTyping {
    pub is_typing: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionMessage {
    pub message: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionOnDutyUpdate {
    pub on_duty: bool,
    pub handle_guide_tickets: bool,
    pub handle_helper_tickets: bool,
    pub handle_guardian_tickets: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionReport {
    pub message: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionRequesterCancels {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GuideSessionResolved {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PostQuizAnswers {
    pub quiz_id: String,
    pub answers: Vec<i32>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetInterstitial {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct InterstitialShown {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RequestFurniInventory {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RequestFurniInventoryWhenNotInRoom {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RequestRoomPropertySet {
    pub room_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AcceptTrading {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AddItemsToTrade {
    pub item_ids: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AddItemToTrade {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CloseTrading {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ConfirmAcceptTrading {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ConfirmDeclineTrading {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct OpenTrading {
    pub user_index: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RemoveItemFromTrade {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct UnacceptTrading {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetHotLooks {
    pub count: i8
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct BuildersClubPlaceRoomItem {
    pub page_id: LegacyId,
    pub offer_id: LegacyId,
    pub extra_param: String,
    pub x: i32,
    pub y: i32,
    pub direction: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct BuildersClubPlaceWallItem {
    pub page_id: LegacyId,
    pub offer_id: LegacyId,
    pub extra_param: String,
    pub location: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct BuildersClubQueryFurniCount {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetBonusRareInfo {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetBundleDiscountRuleset {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCatalogIndex {
    pub catalog_type: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCatalogPage {
    pub page_id: LegacyId,
    pub offer_id: LegacyId,
    pub catalog_type: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCatalogPageWithEarliestExpiry {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetClubGift {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetClubOffers {
    pub _unknown: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetGiftWrappingConfiguration {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetHabboClubExtendOffer {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetIsOfferGiftable {
    pub offer_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetLimitedOfferAppearingNext {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetNextTargetedOffer {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetProductOffer {
    pub offer_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetRoomAdPurchaseInfo {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSeasonalCalendarDaily {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSellablePetPalettes {
    pub localization_id: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetSnowWarGameTokensOffer {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct MarkCatalogNewAdditionsPageOpened {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PurchaseBasicMembershipExtension {
    pub offer_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PurchaseFromCatalogAsGift {
    pub page_id: LegacyId,
    pub offer_id: LegacyId,
    pub localization_id: String,
    pub receiver_name: String,
    pub message: String,
    pub color: i32,
    pub box_type: i32,
    pub ribbon_type: i32,
    pub show_purchaser_name: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PurchaseFromCatalog {
    pub page_id: LegacyId,
    pub offer_id: LegacyId,
    pub localization_id: String,
    pub amount: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PurchaseRoomAd {
    pub page_id: LegacyId,
    pub offer_id: LegacyId,
    pub room_id: LegacyId,
    pub name: String,
    pub extended: bool,
    pub description: String,
    pub category_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PurchaseSnowWarGameTokensOffer {
    pub offer_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PurchaseTargetedOffer {
    pub page_id: LegacyId,
    pub offer_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PurchaseVipMembershipExtension {
    pub offer_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RedeemVoucher {
    pub voucher_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomAdPurchaseInitiated {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SelectClubGift {
    pub localization_id: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetTargetedOfferState {
    pub offer_id: LegacyId,
    pub state: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ShopTargetedOfferViewed {
    pub offer_id: LegacyId,
    pub state: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Craft {
    pub crafting_table_id: LegacyId,
    pub craft_type: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CraftSecret {
    pub crafting_table_id: LegacyId,
    pub selected_ingredient_ids: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCraftableProducts {
    pub crafting_table_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCraftingRecipe {
    pub product_code: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetCraftingRecipesAvailable {
    pub crafting_table_id: LegacyId,
    pub selected_ingredient_ids: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ChangeUserName {
    pub user_name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CheckUserName {
    pub user_name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetWardrobe {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SaveWardrobeOutfit {
    pub slot_id: i32,
    pub figure_string: String,
    pub gender: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ResetUnseenItemIds {
    pub category_id: i32,
    pub p2: Vec<LegacyId>
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ResetUnseenItems {
    pub category_id: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CancelTyping {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Chat {
    pub text: String,
    pub chat_style: i32,
    pub index: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Shout {
    pub text: String,
    pub chat_style: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct StartTyping {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Whisper {
    pub text: String,
    pub chat_style: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetBotInventory {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CreditVaultStatus {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct IncomeRewardClaim {
    pub reward_type: i8
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct IncomeRewardStatus {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct WithdrawCreditVault {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2CheckGameDirectoryStatus {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2GetAccountGameStatus {
    pub _unknown: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2LeaveGame {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2QuickJoinGame {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct Game2StartSnowWar {
    pub game_identifier: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct AddSpamWallPostIt {
    pub item_id: LegacyId,
    pub location: String,
    pub color_hex: String,
    pub text: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ControlYoutubeDisplayPlayback {
    pub item_id: LegacyId,
    pub action: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CreditFurniRedeem {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct DiceOff {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct EnterOneWayDoor {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ExtendRentOrBuyoutFurni {
    pub is_wall_item: bool,
    pub item_id: LegacyId,
    pub is_buyout: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ExtendRentOrBuyoutStripItem {
    pub item_id: LegacyId,
    pub is_buyout: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetGuildFurniContextMenuInfo {
    pub item_id: LegacyId,
    pub group_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetRentOrBuyoutOffer {
    pub is_wall_item: bool,
    pub full_name: String,
    pub is_buyout: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetYoutubeDisplayStatus {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct OpenMysteryTrophy {
    pub item_id: LegacyId,
    pub trophy_inscription: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct OpenPetPackage {
    pub item_id: LegacyId,
    pub name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PlacePostIt {
    pub item_id: LegacyId,
    pub location: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PresentOpen {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RentableSpaceCancelRent {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RentableSpaceRent {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RentableSpaceStatus {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomDimmerChangeState {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomDimmerGetPresets {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RoomDimmerSavePreset {
    pub preset_number: i32,
    pub effect_type_id: i32,
    pub color: String,
    pub brightness: i32,
    pub apply: bool
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetCustomStackingHeight {
    pub stack_tile_id: LegacyId,
    pub height: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetMannequinFigure {
    pub mannequin_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetMannequinName {
    pub mannequin_id: LegacyId,
    pub name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetRandomState {
    pub item_id: LegacyId,
    pub param: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetRoomBackgroundColorData {
    pub item_id: LegacyId,
    pub hue: i32,
    pub saturation: i32,
    pub lightness: i32
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SetYoutubeDisplayPlaylist {
    pub item_id: LegacyId,
    pub name: String
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct SpinWheelOfFortune {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ThrowDice {
    pub item_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct CancelPetBreeding {
    pub stuff_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct ConfirmPetBreeding {
    pub stuff_id: LegacyId,
    pub name: String,
    pub pet1_id: LegacyId,
    pub pet2_id: LegacyId
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetPetInventory {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PhotoCompetition {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PublishPhoto {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct PurchasePhoto {}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct RenderRoom {
    pub json_string: String
}
impl PacketVariable for RenderRoom {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        let compressed: Vec<u8> = packet.read();
        let decompressed = decompress_to_vec_zlib(compressed.as_slice()).expect("Couldn't decompress RenderRoom packet");
        (Self {
            json_string: String::from_utf8(decompressed).expect("Couldn't form string from decompressed RenderRoom bytes")
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        let decompressed = self.json_string.as_bytes();
        compress_to_vec_zlib(decompressed, 10).to_packet()
    }
}
#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
#[to(direction = 1)]
pub struct RenderRoomThumbnail {
    pub json_string: String
}
impl PacketVariable for RenderRoomThumbnail {
    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
        let compressed: Vec<u8> = packet.read();
        let decompressed = decompress_to_vec_zlib(compressed.as_slice()).expect("Couldn't decompress RenderRoom packet");
        (Self {
            json_string: String::from_utf8(decompressed).expect("Couldn't form string from decompressed RenderRoom bytes")
        }, packet.read_index - 6)
    }
    fn to_packet(&self) -> Vec<u8> {
        let decompressed = self.json_string.as_bytes();
        compress_to_vec_zlib(decompressed, 10).to_packet()
    }
}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct RequestCameraConfiguration {}
#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
#[to(direction = 1)]
pub struct GetPromoArticles {}