g_rust/extension/parsers/
outgoing.rs

1use std::collections::HashMap;
2use miniz_oxide::deflate::compress_to_vec_zlib;
3use miniz_oxide::inflate::decompress_to_vec_zlib;
4use crate::protocol::hdirection::HDirection;
5use crate::protocol::hpacket::HPacket;
6use crate::protocol::vars::legacy::{LegacyId, LegacyLength};
7use crate::protocol::vars::packetvariable::PacketVariable;
8use super::baseparser::BaseParser;
9use super::subparsers::*;
10
11// WIN63-202304141420-620844112
12
13#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
14#[to(direction = 1)]
15pub struct Game2GetFriendsLeaderboard {
16    pub selected_game: i32,
17    pub rank: i32,
18    pub scroll_dir: i32,
19    pub view_size: i32,
20    pub window_size: i32
21}
22
23#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
24#[to(direction = 1)]
25pub struct Game2GetTotalGroupLeaderboard {
26    pub selected_game: i32,
27    pub rank: i32,
28    pub scroll_dir: i32,
29    pub view_size: i32,
30    pub window_size: i32
31}
32
33#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
34#[to(direction = 1)]
35pub struct Game2GetTotalLeaderboard {
36    pub selected_game: i32,
37    pub rank: i32,
38    pub scroll_dir: i32,
39    pub view_size: i32,
40    pub window_size: i32
41}
42
43#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
44#[to(direction = 1)]
45pub struct Game2GetWeeklyFriendsLeaderboard {
46    pub selected_game: i32,
47    pub offset: i32,
48    pub rank: i32,
49    pub scroll_dir: i32,
50    pub view_size: i32,
51    pub window_size: i32
52}
53
54#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
55#[to(direction = 1)]
56pub struct Game2GetWeeklyGroupLeaderboard {
57    pub selected_game: i32,
58    pub offset: i32,
59    pub rank: i32,
60    pub scroll_dir: i32,
61    pub view_size: i32,
62    pub window_size: i32
63}
64
65#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
66#[to(direction = 1)]
67pub struct Game2GetWeeklyLeaderboard {
68    pub selected_game: i32,
69    pub offset: i32,
70    pub rank: i32,
71    pub scroll_dir: i32,
72    pub view_size: i32,
73    pub window_size: i32
74}
75
76#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
77#[to(direction = 1)]
78pub struct UpdateFigureData {
79    pub figure_string: String,
80    pub gender: String
81}
82
83#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
84#[to(direction = 1)]
85pub struct OpenCampaignCalendarDoorAsStaff {
86    pub campaign_name: String,
87    pub day: i32
88}
89
90#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
91#[to(direction = 1)]
92pub struct OpenCampaignCalendarDoor {
93    pub campaign_name: String,
94    pub day: i32
95}
96
97#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
98#[to(direction = 1)]
99pub struct GetOccupiedTiles {}
100
101#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
102#[to(direction = 1)]
103pub struct GetRoomEntryTile {}
104
105#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
106#[to(direction = 1)]
107pub struct UpdateFloorProperties {
108    pub data: String,
109    pub entry_point_x: i32,
110    pub entry_point_y: i32,
111    pub entry_point_dir: i32,
112    pub wall_thickness: i32,
113    pub floor_thickness: i32,
114    pub fixed_walls_height: i32
115}
116
117impl PacketVariable for UpdateFloorProperties {
118    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
119        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
120
121        (Self {
122            data: packet.read(),
123            entry_point_x: packet.read::<Option<i32>>().unwrap_or(-1),
124            entry_point_y: packet.read::<Option<i32>>().unwrap_or(-1),
125            entry_point_dir: packet.read::<Option<i32>>().unwrap_or(-1),
126            wall_thickness: packet.read::<Option<i32>>().unwrap_or(-1),
127            floor_thickness: packet.read::<Option<i32>>().unwrap_or(-1),
128            fixed_walls_height: packet.read::<Option<i32>>().unwrap_or(-1)
129        }, packet.read_index - 6)
130    }
131
132    fn to_packet(&self) -> Vec<u8> {
133        if self.entry_point_x == -1 && self.entry_point_y == -1 && self.entry_point_dir == -1
134            && self.wall_thickness == -1 && self.floor_thickness == -1 {
135            self.data.to_packet()
136        } else if self.fixed_walls_height == -1 {
137            (
138                self.data.clone(), self.entry_point_x, self.entry_point_y, self.entry_point_dir,
139                self.wall_thickness, self.floor_thickness
140            ).to_packet()
141        } else {
142            (
143                self.data.clone(), self.entry_point_x, self.entry_point_y, self.entry_point_dir,
144                self.wall_thickness, self.floor_thickness, self.fixed_walls_height
145            ).to_packet()
146        }
147    }
148}
149
150#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
151#[to(direction = 1)]
152pub struct AddAdminRightsToMember {
153    pub group_id: LegacyId,
154    pub user_id: LegacyId
155}
156
157#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
158#[to(direction = 1)]
159pub struct ApproveAllMembershipRequests {
160    pub group_id: LegacyId
161}
162
163#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
164#[to(direction = 1)]
165pub struct ApproveMembershipRequest {
166    pub group_id: LegacyId,
167    pub user_id: LegacyId
168}
169
170#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
171#[to(direction = 1)]
172pub struct ApproveName {
173    pub name: String,
174    pub approved: i32
175}
176
177#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
178#[to(direction = 1)]
179pub struct ChangeEmail {
180    pub email: String
181}
182
183#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
184#[to(direction = 1)]
185pub struct CreateGuild {
186    pub name: String,
187    pub description: String,
188    pub room_id: LegacyId,
189    pub primary_color_id: i32,
190    pub secondary_color_id: i32,
191    pub badge_settings: Vec<GuildBadgeSettings>
192}
193
194impl PacketVariable for CreateGuild {
195    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
196        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
197
198        let (name, description, room_id, primary_color_id, secondary_color_id) = packet.read();
199        let size: LegacyLength = packet.read();
200        let mut badge_settings: Vec<GuildBadgeSettings> = Vec::new();
201        for _ in 0..*size/3 {
202            badge_settings.push(packet.read());
203        }
204
205        (Self {
206            name, description, room_id, primary_color_id, secondary_color_id, badge_settings
207        }, packet.read_index - 6)
208    }
209
210    fn to_packet(&self) -> Vec<u8> {
211        let mut packet = HPacket::from_header_id(0);
212
213        packet.append((
214            self.name.clone(), self.description.clone(), self.room_id,
215            self.primary_color_id, self.secondary_color_id,
216            LegacyLength(self.badge_settings.len() as i32 * 3)
217        ));
218        for setting in self.badge_settings.clone() {
219            packet.append(setting.clone());
220        }
221
222        packet.get_bytes()[6..].to_vec()
223    }
224}
225
226#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
227#[to(direction = 1)]
228pub struct DeactivateGuild {
229    pub id: LegacyId
230}
231
232#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
233#[to(direction = 1)]
234pub struct DeselectFavouriteHabboGroup {
235    pub id: LegacyId
236}
237
238#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
239#[to(direction = 1)]
240pub struct GetEmailStatus {}
241
242#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
243#[to(direction = 1)]
244pub struct GetExtendedProfileByName {
245    pub name: String
246}
247
248#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
249#[to(direction = 1)]
250pub struct GetExtendedProfile {
251    pub user_id: LegacyId,
252    pub open: bool
253}
254
255#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
256#[to(direction = 1)]
257pub struct GetGuildCreationInfo {}
258
259#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
260#[to(direction = 1)]
261pub struct GetGuildEditInfo {
262    pub group_id: LegacyId
263}
264
265#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
266#[to(direction = 1)]
267pub struct GetGuildEditorData {}
268
269#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
270#[to(direction = 1)]
271pub struct GetGuildMemberships {}
272
273#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
274#[to(direction = 1)]
275pub struct GetGuildMembers {
276    pub group_id: LegacyId,
277    pub page_index: i32,
278    pub search_text: String,
279    pub search_type: i32
280}
281
282#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
283#[to(direction = 1)]
284pub struct GetHabboGroupBadges {}
285
286#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
287#[to(direction = 1)]
288pub struct GetHabboGroupDetails {
289    pub group_id: LegacyId,
290    pub open: bool
291}
292
293#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
294#[to(direction = 1)]
295pub struct GetIgnoredUsers {
296    pub user_name: String
297}
298
299#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
300#[to(direction = 1)]
301pub struct GetMemberGuildItemCount {
302    pub group_id: LegacyId,
303    pub avatar_id: LegacyId,
304}
305
306#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
307#[to(direction = 1)]
308pub struct GetMOTD {}
309
310#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
311#[to(direction = 1)]
312pub struct GetRelationshipStatusInfo {
313    pub user_id: LegacyId
314}
315
316#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
317#[to(direction = 1)]
318pub struct GetSelectedBadges {
319    pub user_id: LegacyId
320}
321
322#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
323#[to(direction = 1)]
324pub struct GiveStarGemToUser {
325    pub user_id: LegacyId,
326    pub amount: i32
327}
328
329#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
330#[to(direction = 1)]
331pub struct IgnoreUserId {
332    pub user_id: LegacyId
333}
334
335#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
336#[to(direction = 1)]
337pub struct IgnoreUser {
338    pub name: String
339}
340
341#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
342#[to(direction = 1)]
343pub struct JoinHabboGroup {
344    pub group_id: LegacyId
345}
346
347#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
348#[to(direction = 1)]
349pub struct KickMember {
350    pub guild_id: LegacyId,
351    pub user_id: LegacyId,
352    pub user_blocked: bool
353}
354
355#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
356#[to(direction = 1)]
357pub struct RejectMembershipRequest {
358    pub guild_id: LegacyId,
359    pub user_id: LegacyId
360}
361
362#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
363#[to(direction = 1)]
364pub struct RemoveAdminRightsFromMember {
365    pub guild_id: LegacyId,
366    pub user_id: LegacyId
367}
368
369#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
370#[to(direction = 1)]
371pub struct ScrGetKickbackInfo {}
372
373#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
374#[to(direction = 1)]
375pub struct ScrGetUserInfo {
376    pub info_type: String
377}
378
379#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
380#[to(direction = 1)]
381pub struct SelectFavouriteHabboGroup {
382    pub group_id: LegacyId
383}
384
385#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
386#[to(direction = 1)]
387pub struct UnblockGroupMember {
388    pub group_id: LegacyId,
389    pub user_id: LegacyId
390}
391
392#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
393#[to(direction = 1)]
394pub struct UnignoreUser {
395    pub name: String
396}
397
398#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
399#[to(direction = 1)]
400pub struct UpdateGuildBadge {
401    pub group_id: LegacyId,
402    pub badge_settings: Vec<GuildBadgeSettings>
403}
404
405impl PacketVariable for UpdateGuildBadge {
406    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
407        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
408
409        let group_id = packet.read();
410        let size: LegacyLength = packet.read();
411        let mut badge_settings: Vec<GuildBadgeSettings> = Vec::new();
412        for _ in 0..*size/3 {
413            badge_settings.push(packet.read());
414        }
415
416        (Self {
417            group_id, badge_settings
418        }, packet.read_index - 6)
419    }
420
421    fn to_packet(&self) -> Vec<u8> {
422        let mut packet = HPacket::from_header_id(0);
423
424        packet.append((self.group_id, LegacyLength(self.badge_settings.len() as i32 * 3)));
425        for setting in self.badge_settings.clone() {
426            packet.append(setting.clone());
427        }
428
429        packet.get_bytes()[6..].to_vec()
430    }
431}
432
433#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
434#[to(direction = 1)]
435pub struct UpdateGuildColors {
436    pub group_id: LegacyId,
437    pub primary_color_id: i32,
438    pub secondary_color_id: i32
439}
440
441#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
442#[to(direction = 1)]
443pub struct UpdateGuildIdentity {
444    pub group_id: LegacyId,
445    pub name: String,
446    pub description: String
447}
448
449#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
450#[to(direction = 1)]
451pub struct UpdateGuildSettings {
452    pub group_id: LegacyId,
453    pub guild_type: i32,
454    pub rights_level: i32
455}
456
457#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
458#[to(direction = 1)]
459pub struct SetChatPreferences {
460    pub force_old_chat: bool
461}
462
463#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
464#[to(direction = 1)]
465pub struct SetChatStylePreference {
466    pub preferred_chat_style: bool
467}
468
469#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
470#[to(direction = 1)]
471pub struct SetIgnoreRoomInvites {
472    pub ignored: bool
473}
474
475#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
476#[to(direction = 1)]
477pub struct SetNewNavigatorWindowPreferences {
478    pub x: i32,
479    pub y: i32,
480    pub width: i32,
481    pub height: i32,
482    pub left_pane_hidden: bool,
483    pub _unknown: i32
484}
485
486#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
487#[to(direction = 1)]
488pub struct SetRoomCameraPreferences {
489    pub follow_disabled: bool
490}
491
492#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
493#[to(direction = 1)]
494pub struct SetSoundSettings {
495    pub trax_volume: i32,
496    pub furni_volume: i32,
497    pub generic_volume: i32
498}
499
500#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
501#[to(direction = 1)]
502pub struct SetUIFlags {
503    pub flags: i32
504}
505
506#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
507#[to(direction = 1)]
508pub struct ApplySnapshot {
509    pub id: i32
510}
511
512#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
513#[to(direction = 1)]
514pub struct Open {
515    pub stuff_id: LegacyId
516}
517
518#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
519#[to(direction = 1)]
520pub struct UpdateAction {
521    pub id: LegacyId,
522    pub int_params: Vec<i32>,
523    pub string_param: String,
524    pub stuff_ids: Vec<LegacyId>,
525    pub action_delay: i32,
526    pub furni_sources: Vec<LegacyId>,
527    pub user_sources: Vec<LegacyId>
528}
529
530#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
531#[to(direction = 1)]
532pub struct UpdateAddon {
533    pub id: LegacyId,
534    pub int_params: Vec<i32>,
535    pub string_param: String,
536    pub stuff_ids: Vec<LegacyId>,
537    pub furni_sources: Vec<LegacyId>,
538    pub user_sources: Vec<LegacyId>
539}
540
541#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
542#[to(direction = 1)]
543pub struct UpdateCondition {
544    pub id: LegacyId,
545    pub int_params: Vec<i32>,
546    pub string_param: String,
547    pub stuff_ids: Vec<LegacyId>,
548    pub quantifier: i32,
549    pub furni_sources: Vec<LegacyId>,
550    pub user_sources: Vec<LegacyId>
551}
552
553#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
554#[to(direction = 1)]
555pub struct UpdateSelector {
556    pub id: LegacyId,
557    pub int_params: Vec<i32>,
558    pub string_param: String,
559    pub stuff_ids: Vec<LegacyId>,
560    pub filter_field: bool,
561    pub inverse_field: bool,
562    pub furni_sources: Vec<LegacyId>,
563    pub user_sources: Vec<LegacyId>
564}
565
566#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
567#[to(direction = 1)]
568pub struct UpdateTrigger {
569    pub id: LegacyId,
570    pub int_params: Vec<i32>,
571    pub string_param: String,
572    pub stuff_ids: Vec<LegacyId>,
573    pub furni_sources: Vec<LegacyId>,
574    pub user_sources: Vec<LegacyId>
575}
576
577#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
578#[to(direction = 1)]
579pub struct PollAnswer {
580    pub id: i32,
581    pub question_id: i32,
582    pub answers: Vec<String>
583}
584
585#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
586#[to(direction = 1)]
587pub struct PollReject {
588    pub id: i32
589}
590
591#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
592#[to(direction = 1)]
593pub struct PollStart {
594    pub id: i32
595}
596
597#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
598#[to(direction = 1)]
599pub struct AvatarExpression {
600    pub expression: i32
601}
602
603#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
604#[to(direction = 1)]
605pub struct ChangeMotto {
606    pub motto: String
607}
608
609#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
610#[to(direction = 1)]
611pub struct ChangePosture {
612    pub posture: i32
613}
614
615#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
616#[to(direction = 1)]
617pub struct CustomizeAvatarWithFurni {
618    pub id: LegacyId
619}
620
621#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
622#[to(direction = 1)]
623pub struct Dance {
624    pub style: i32
625}
626
627#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
628#[to(direction = 1)]
629pub struct DropCarryItem {}
630
631#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
632#[to(direction = 1)]
633pub struct LookTo {
634    pub x: i32,
635    pub y: i32
636}
637
638#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
639#[to(direction = 1)]
640pub struct PassCarryItem {
641    pub user_id: LegacyId
642}
643
644#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
645#[to(direction = 1)]
646pub struct Sign {
647    pub sign: i32
648}
649
650#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
651#[to(direction = 1)]
652pub struct GetTalentTrackLevel {
653    pub talent_track_name: String
654}
655
656#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
657#[to(direction = 1)]
658pub struct GetTalentTrack {
659    pub talent_track_name: String
660}
661
662#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
663#[to(direction = 1)]
664pub struct GuideAdvertisementRead {}
665
666#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
667#[to(direction = 1)]
668pub struct DeleteRoom {
669    pub room_id: LegacyId
670}
671
672#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
673#[to(direction = 1)]
674pub struct GetBannedUsersFromRoom {
675    pub room_id: LegacyId
676}
677
678#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
679#[to(direction = 1)]
680pub struct GetCustomRoomFilter {
681    pub room_id: LegacyId
682}
683
684#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
685#[to(direction = 1)]
686pub struct GetFlatControllers {
687    pub room_id: LegacyId
688}
689
690#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
691#[to(direction = 1)]
692pub struct GetRoomSettings {
693    pub room_id: LegacyId
694}
695
696#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
697#[to(direction = 1)]
698pub struct SaveRoomSettings {
699    pub room_id: LegacyId,
700    pub name: String,
701    pub description: String,
702    pub door_mode: i32,
703    pub password: String,
704    pub maximum_visitors: i32,
705    pub category_id: i32,
706    pub tags: Vec<String>,
707    pub trade_mode: i32,
708    pub allow_pets: bool,
709    pub allow_food_consume: bool,
710    pub allow_walk_through: bool,
711    pub hide_walls: bool,
712    pub wall_thickness: i32,
713    pub floor_thickness: i32,
714    pub who_can_mute: i32,
715    pub who_can_kick: i32,
716    pub who_can_ban: i32,
717    pub chat_mode: i32,
718    pub chat_bubble_size: i32,
719    pub chat_scroll_up_frequency: i32,
720    pub chat_full_hear_range: i32,
721    pub chat_flood_sensitivity: i32,
722    pub allow_navigator_dyn_cats: bool
723}
724
725#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
726#[to(direction = 1)]
727pub struct UpdateRoomCategoryAndTradeSettings {
728    pub room_id: LegacyId,
729    pub category: i32,
730    pub trade_mode: i32
731}
732
733#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
734#[to(direction = 1)]
735pub struct UpdateRoomFilter {
736    pub room_id: LegacyId,
737    pub is_added: bool,
738    pub bad_word: String
739}
740
741#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
742#[to(direction = 1)]
743pub struct PeerUsersClassification {
744    pub data: String
745}
746
747#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
748#[to(direction = 1)]
749pub struct RoomUsersClassification {
750    pub data: String
751}
752
753#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
754#[to(direction = 1)]
755pub struct ClientHello {
756    pub version: String,
757    pub client_type: String,
758    pub operating_system: i32,
759    pub _unknown: i32
760}
761
762#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
763#[to(direction = 1)]
764pub struct CompleteDiffieHandshake {
765    pub public_key: String
766}
767
768#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
769#[to(direction = 1)]
770pub struct Disconnect {}
771
772#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
773#[to(direction = 1)]
774pub struct InfoRetrieve {}
775
776#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
777#[to(direction = 1)]
778pub struct InitDiffieHandshake {}
779
780#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
781#[to(direction = 1)]
782pub struct Pong {}
783
784#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
785#[to(direction = 1)]
786pub struct SSOTicket {
787    pub sso_ticket: String,
788    pub time: i32
789}
790
791#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
792#[to(direction = 1)]
793pub struct UniqueID {
794    pub machine_id: String,
795    pub finger_print: String,
796    pub flash_version: String
797}
798
799#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
800#[to(direction = 1)]
801pub struct VersionCheck {
802    pub _unknown: i32,
803    pub flash_client: String,
804    pub external_variables: String
805}
806
807#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
808#[to(direction = 1)]
809pub struct AcceptFriend {
810    pub request_ids: Vec<LegacyId>
811}
812
813#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
814#[to(direction = 1)]
815pub struct DeclineFriend {
816    pub none_declined: bool,
817    pub request_ids: Vec<LegacyId>
818}
819
820#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
821#[to(direction = 1)]
822pub struct FindNewFriends {}
823
824#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
825#[to(direction = 1)]
826pub struct FollowFriend {
827    pub user_id: LegacyId
828}
829
830#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
831#[to(direction = 1)]
832pub struct FriendListUpdate {}
833
834#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
835#[to(direction = 1)]
836pub struct GetFriendRequests {}
837
838#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
839#[to(direction = 1)]
840pub struct HabboSearch {
841    pub search_query: String
842}
843
844#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
845#[to(direction = 1)]
846pub struct MessengerInit {}
847
848#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
849#[to(direction = 1)]
850pub struct RemoveFriend {
851    pub user_ids: Vec<LegacyId>
852}
853
854#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
855#[to(direction = 1)]
856pub struct RequestFriend {
857    pub user_name: String
858}
859
860#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
861#[to(direction = 1)]
862pub struct SendMsg {
863    pub user_id: LegacyId,
864    pub msg: String
865}
866
867#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
868#[to(direction = 1)]
869pub struct SendRoomInvite {
870    pub user_ids: Vec<LegacyId>,
871    pub msg: String
872}
873
874#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
875#[to(direction = 1)]
876pub struct SetRelationshipStatus {
877    pub user_id: LegacyId,
878    pub relationship_status: i32
879}
880
881#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
882#[to(direction = 1)]
883pub struct VisitUser {
884    pub user_name: String
885}
886
887#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
888#[to(direction = 1)]
889pub struct AddFavouriteRoom {
890    pub room_id: LegacyId
891}
892
893#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
894#[to(direction = 1)]
895pub struct CancelEvent {
896    pub ad_id: LegacyId
897}
898
899#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
900#[to(direction = 1)]
901pub struct CanCreateRoom {}
902
903#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
904#[to(direction = 1)]
905pub struct CompetitionRoomsSearch {
906    pub goal_id: i32,
907    pub page_index: i32
908}
909
910#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
911#[to(direction = 1)]
912pub struct ConvertGlobalRoomId {
913    pub room_id: LegacyId
914}
915
916#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
917#[to(direction = 1)]
918pub struct CreateFlat {
919    pub name: String,
920    pub description: String,
921    pub model: String,
922    pub category: i32,
923    pub max_visitors: i32,
924    pub trade_mode: i32
925}
926
927#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
928#[to(direction = 1)]
929pub struct DeleteFavouriteRoom {
930    pub room_id: LegacyId
931}
932
933#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
934#[to(direction = 1)]
935pub struct EditEvent {
936    pub ad_id: LegacyId,
937    pub name: String,
938    pub description: String
939}
940
941#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
942#[to(direction = 1)]
943pub struct ForwardToARandomPromotedRoom {
944    pub room_category: String
945}
946
947#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
948#[to(direction = 1)]
949pub struct ForwardToSomeRoom {
950    pub room_identifier: String
951}
952
953#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
954#[to(direction = 1)]
955pub struct GetGuestRoom {
956    pub room_id: LegacyId,
957    pub entering_room: i32,
958    pub go_to_room: i32
959}
960
961#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
962#[to(direction = 1)]
963pub struct GetOfficialRooms {
964    pub ad_index: i32
965}
966
967#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
968#[to(direction = 1)]
969pub struct GetPopularRoomTags {}
970
971#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
972#[to(direction = 1)]
973pub struct GetUserEventCats {}
974
975#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
976#[to(direction = 1)]
977pub struct GetUserFlatCats {}
978
979#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
980#[to(direction = 1)]
981pub struct GuildBaseSearch {
982    pub ad_index: i32
983}
984
985#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
986#[to(direction = 1)]
987pub struct MyFavouriteRoomsSearch {}
988
989#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
990#[to(direction = 1)]
991pub struct MyFrequentRoomHistorySearch {}
992
993#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
994#[to(direction = 1)]
995pub struct MyFriendsRoomsSearch {}
996
997#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
998#[to(direction = 1)]
999pub struct MyGuildBasesSearch {}
1000
1001#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1002#[to(direction = 1)]
1003pub struct MyRecommendedRooms {}
1004
1005#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1006#[to(direction = 1)]
1007pub struct MyRoomHistorySearch {}
1008
1009#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1010#[to(direction = 1)]
1011pub struct MyRoomRightsSearch {}
1012
1013#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1014#[to(direction = 1)]
1015pub struct MyRoomsSearch {}
1016
1017#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1018#[to(direction = 1)]
1019pub struct PopularRoomsSearch {
1020    pub search_query: String,
1021    pub ad_index: i32
1022}
1023
1024#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1025#[to(direction = 1)]
1026pub struct RateFlat {
1027    pub rating: i32
1028}
1029
1030#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1031#[to(direction = 1)]
1032pub struct RemoveOwnRoomRightsRoom {
1033    pub room_id: LegacyId
1034}
1035
1036#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1037#[to(direction = 1)]
1038pub struct RoomAdEventTabAdClicked {
1039    pub room_id: LegacyId,
1040    pub room_ad_name: String,
1041    pub room_ad_expires_in_min: i32
1042}
1043
1044#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1045#[to(direction = 1)]
1046pub struct RoomAdEventTabViewed {}
1047
1048#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1049#[to(direction = 1)]
1050pub struct RoomAdSearch {
1051    pub ad_index: i32,
1052    pub search_type: i32
1053}
1054
1055#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1056#[to(direction = 1)]
1057pub struct RoomsWhereMyFriendsAreSearch {}
1058
1059#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1060#[to(direction = 1)]
1061pub struct RoomsWithHighestScoreSearch {
1062    pub ad_index: i32
1063}
1064
1065#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1066#[to(direction = 1)]
1067pub struct RoomTextSearch {
1068    pub search_query: String
1069}
1070
1071#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1072#[to(direction = 1)]
1073pub struct SetRoomSessionTags {
1074    pub tag1: String,
1075    pub tag2: String
1076}
1077
1078#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1079#[to(direction = 1)]
1080pub struct ToggleStaffPick {
1081    pub room_id: LegacyId,
1082    pub is_staff_pick: bool
1083}
1084
1085#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1086#[to(direction = 1)]
1087pub struct UpdateHomeRoom {
1088    pub room_id: LegacyId
1089}
1090
1091#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1092#[to(direction = 1)]
1093pub struct BuyMarketplaceOffer {
1094    pub offer_id: LegacyId
1095}
1096
1097#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1098#[to(direction = 1)]
1099pub struct BuyMarketplaceTokens {}
1100
1101#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1102#[to(direction = 1)]
1103pub struct CancelMarketplaceOffer {
1104    pub offer_id: LegacyId
1105}
1106
1107#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1108#[to(direction = 1)]
1109pub struct GetMarketplaceCanMakeOffer {}
1110
1111#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1112#[to(direction = 1)]
1113pub struct GetMarketplaceConfiguration {}
1114
1115#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1116#[to(direction = 1)]
1117pub struct GetMarketplaceItemStats {
1118    pub placement_type: i32,
1119    pub item_type: i32
1120}
1121
1122#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1123#[to(direction = 1)]
1124pub struct GetMarketplaceOffers {
1125    pub min_price: i32,
1126    pub max_price: i32,
1127    pub search_string: String,
1128    pub sort_key: i32
1129}
1130
1131#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1132#[to(direction = 1)]
1133pub struct GetMarketplaceOwnOffers {}
1134
1135#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1136#[to(direction = 1)]
1137pub struct MakeOffer {
1138    pub price: i32,
1139    pub placement_type: i32,
1140    pub room_item_id: LegacyId
1141}
1142
1143#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1144#[to(direction = 1)]
1145pub struct RedeemMarketplaceOfferCredits {}
1146
1147#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1148#[to(direction = 1)]
1149pub struct ForwardToACompetitionRoom {
1150    pub goal_code: String,
1151    pub user_id: LegacyId
1152}
1153
1154#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1155#[to(direction = 1)]
1156pub struct ForwardToASubmittableRoom {}
1157
1158#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1159#[to(direction = 1)]
1160pub struct ForwardToRandomCompetitionRoom {
1161    pub goal_code: String
1162}
1163
1164#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1165#[to(direction = 1)]
1166pub struct GetCurrentTimingCode {
1167    pub timing_code: String
1168}
1169
1170#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1171#[to(direction = 1)]
1172pub struct GetIsUserPartOfCompetition {
1173    pub goal_code: String
1174}
1175
1176#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1177#[to(direction = 1)]
1178pub struct GetSecondsUntil {
1179    pub time: String
1180}
1181
1182#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1183#[to(direction = 1)]
1184pub struct RoomCompetitionInit {}
1185
1186#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1187#[to(direction = 1)]
1188pub struct SubmitRoomToCompetition {
1189    pub goal_code: String,
1190    pub event_type: i32
1191}
1192
1193#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1194#[to(direction = 1)]
1195pub struct VoteForRoom {
1196    pub goal_code: String
1197}
1198
1199#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1200#[to(direction = 1)]
1201pub struct FriendFurniConfirmLock {
1202    pub stuff_id: LegacyId,
1203    pub canceled: bool
1204}
1205
1206#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1207#[to(direction = 1)]
1208pub struct MysteryBoxWaitingCanceled {
1209    pub owner_id: LegacyId
1210}
1211
1212#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1213#[to(direction = 1)]
1214pub struct AcceptQuest {
1215    pub quest_id: LegacyId
1216}
1217
1218#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1219#[to(direction = 1)]
1220pub struct ActivateQuest {
1221    pub quest_id: LegacyId
1222}
1223
1224#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1225#[to(direction = 1)]
1226pub struct CancelQuest {}
1227
1228#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1229#[to(direction = 1)]
1230pub struct FriendRequestQuestComplete {}
1231
1232#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1233#[to(direction = 1)]
1234pub struct GetCommunityGoalHallOfFame {
1235    pub code: String
1236}
1237
1238#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1239#[to(direction = 1)]
1240pub struct GetCommunityGoalProgress {}
1241
1242#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1243#[to(direction = 1)]
1244pub struct GetConcurrentUsersGoalProgress {}
1245
1246#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1247#[to(direction = 1)]
1248pub struct GetConcurrentUsersReward {}
1249
1250#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1251#[to(direction = 1)]
1252pub struct GetDailyQuest {
1253    pub is_easy: bool,
1254    pub index: i32
1255}
1256
1257#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1258#[to(direction = 1)]
1259pub struct GetQuests {}
1260
1261#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1262#[to(direction = 1)]
1263pub struct GetSeasonalQuestsOnly {}
1264
1265#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1266#[to(direction = 1)]
1267pub struct OpenQuestTracker {}
1268
1269#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1270#[to(direction = 1)]
1271pub struct RejectQuest {}
1272
1273#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1274#[to(direction = 1)]
1275pub struct StartCampaign {
1276    pub campaign_name: String
1277}
1278
1279#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1280#[to(direction = 1)]
1281pub struct GetResolutionAchievements {
1282    pub stuff_id: LegacyId,
1283    pub _unknown: i32
1284}
1285
1286#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1287#[to(direction = 1)]
1288pub struct CloseIssueDefaultAction {
1289    pub highest_priority_issue_id: LegacyId,
1290    pub issue_ids: Vec<LegacyId>,
1291    pub topic_id: i32
1292}
1293
1294#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1295#[to(direction = 1)]
1296pub struct CloseIssues {
1297    pub reason: i32,
1298    pub issue_ids: Vec<LegacyId>
1299}
1300
1301#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
1302#[to(direction = 1)]
1303pub struct DefaultSanction {
1304    pub user_id: LegacyId,
1305    pub topic_id: i32,
1306    pub message: String,
1307    pub issue_id: LegacyId
1308}
1309
1310impl PacketVariable for DefaultSanction {
1311    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
1312        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
1313
1314        (Self {
1315            user_id: packet.read(),
1316            topic_id: packet.read(),
1317            message: packet.read(),
1318            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
1319        }, packet.read_index - 6)
1320    }
1321
1322    fn to_packet(&self) -> Vec<u8> {
1323        if *self.issue_id == -1 {
1324            (
1325                self.user_id, self.topic_id, self.message.clone()
1326            ).to_packet()
1327        } else {
1328            (
1329                self.user_id, self.topic_id, self.message.clone(), self.issue_id
1330            ).to_packet()
1331        }
1332    }
1333}
1334
1335#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1336#[to(direction = 1)]
1337pub struct GetCfhChatlog {
1338    pub issue_id: LegacyId
1339}
1340
1341#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1342#[to(direction = 1)]
1343pub struct GetModeratorRoomInfo {
1344    pub room_id: LegacyId
1345}
1346
1347#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1348#[to(direction = 1)]
1349pub struct GetModeratorUserInfo {
1350    pub user_id: LegacyId
1351}
1352
1353#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1354#[to(direction = 1)]
1355pub struct GetRoomChatlog {
1356    pub is_guest_room: i32,
1357    pub room_id: LegacyId
1358}
1359
1360#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1361#[to(direction = 1)]
1362pub struct GetRoomVisits {
1363    pub user_id: LegacyId
1364}
1365
1366#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1367#[to(direction = 1)]
1368pub struct GetUserChatlog {
1369    pub user_id: LegacyId
1370}
1371
1372#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
1373#[to(direction = 1)]
1374pub struct ModAlert {
1375    pub user_id: LegacyId,
1376    pub message: String,
1377    pub topic_id: i32,
1378    pub issue_id: LegacyId
1379}
1380
1381impl PacketVariable for ModAlert {
1382    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
1383        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
1384
1385        (Self {
1386            user_id: packet.read(),
1387            message: packet.read(),
1388            topic_id: packet.read(),
1389            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
1390        }, packet.read_index - 6)
1391    }
1392
1393    fn to_packet(&self) -> Vec<u8> {
1394        if *self.issue_id == -1 {
1395            (
1396                self.user_id, self.message.clone(), self.topic_id
1397            ).to_packet()
1398        } else {
1399            (
1400                self.user_id, self.message.clone(), self.topic_id, self.issue_id
1401            ).to_packet()
1402        }
1403    }
1404}
1405
1406#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
1407#[to(direction = 1)]
1408pub struct ModBan {
1409    pub user_id: LegacyId,
1410    pub message: String,
1411    pub topic_id: i32,
1412    pub sanction_type_id: i32,
1413    pub is_perm_ban: bool,
1414    pub issue_id: LegacyId
1415}
1416
1417impl PacketVariable for ModBan {
1418    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
1419        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
1420
1421        (Self {
1422            user_id: packet.read(),
1423            message: packet.read(),
1424            topic_id: packet.read(),
1425            sanction_type_id: packet.read(),
1426            is_perm_ban: packet.read(),
1427            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
1428        }, packet.read_index - 6)
1429    }
1430
1431    fn to_packet(&self) -> Vec<u8> {
1432        if *self.issue_id == -1 {
1433            (
1434                self.user_id, self.message.clone(), self.topic_id,
1435                self.sanction_type_id, self.is_perm_ban
1436            ).to_packet()
1437        } else {
1438            (
1439                self.user_id, self.message.clone(), self.topic_id,
1440                self.sanction_type_id, self.is_perm_ban, self.issue_id
1441            ).to_packet()
1442        }
1443    }
1444}
1445
1446#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1447#[to(direction = 1)]
1448pub struct ModerateRoom {
1449    pub room_id: LegacyId,
1450    pub lock_room: i32,
1451    pub force_room_change: i32,
1452    pub kick_everyone: i32
1453}
1454
1455#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1456#[to(direction = 1)]
1457pub struct ModeratorAction {
1458    pub action: i32,
1459    pub message: String,
1460    pub _unknown: String
1461}
1462
1463#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
1464#[to(direction = 1)]
1465pub struct ModKick {
1466    pub user_id: LegacyId,
1467    pub message: String,
1468    pub topic_id: i32,
1469    pub issue_id: LegacyId
1470}
1471
1472impl PacketVariable for ModKick {
1473    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
1474        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
1475
1476        (Self {
1477            user_id: packet.read(),
1478            message: packet.read(),
1479            topic_id: packet.read(),
1480            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
1481        }, packet.read_index - 6)
1482    }
1483
1484    fn to_packet(&self) -> Vec<u8> {
1485        if *self.issue_id == -1 {
1486            (
1487                self.user_id, self.message.clone(), self.topic_id
1488            ).to_packet()
1489        } else {
1490            (
1491                self.user_id, self.message.clone(), self.topic_id, self.issue_id
1492            ).to_packet()
1493        }
1494    }
1495}
1496
1497#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
1498#[to(direction = 1)]
1499pub struct ModMessage {
1500    pub user_id: LegacyId,
1501    pub message: String,
1502    pub _unknown1: String,
1503    pub _unknown2: String,
1504    pub topic_id: i32,
1505    pub issue_id: LegacyId
1506}
1507
1508impl PacketVariable for ModMessage {
1509    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
1510        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
1511
1512        (Self {
1513            user_id: packet.read(),
1514            message: packet.read(),
1515            _unknown1: packet.read(),
1516            _unknown2: packet.read(),
1517            topic_id: packet.read(),
1518            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
1519        }, packet.read_index - 6)
1520    }
1521
1522    fn to_packet(&self) -> Vec<u8> {
1523        if *self.issue_id == -1 {
1524            (
1525                self.user_id, self.message.clone(), self._unknown1.clone(),
1526                self._unknown2.clone(), self.topic_id
1527            ).to_packet()
1528        } else {
1529            (
1530                self.user_id, self.message.clone(), self._unknown1.clone(),
1531                self._unknown2.clone(), self.topic_id, self.issue_id
1532            ).to_packet()
1533        }
1534    }
1535}
1536
1537#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
1538#[to(direction = 1)]
1539pub struct ModMute {
1540    pub user_id: LegacyId,
1541    pub message: String,
1542    pub topic_id: i32,
1543    pub issue_id: LegacyId
1544}
1545
1546impl PacketVariable for ModMute {
1547    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
1548        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
1549
1550        (Self {
1551            user_id: packet.read(),
1552            message: packet.read(),
1553            topic_id: packet.read(),
1554            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
1555        }, packet.read_index - 6)
1556    }
1557
1558    fn to_packet(&self) -> Vec<u8> {
1559        if *self.issue_id == -1 {
1560            (
1561                self.user_id, self.message.clone(), self.topic_id
1562            ).to_packet()
1563        } else {
1564            (
1565                self.user_id, self.message.clone(), self.topic_id, self.issue_id
1566            ).to_packet()
1567        }
1568    }
1569}
1570
1571#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1572#[to(direction = 1)]
1573pub struct ModToolPreferences {
1574    pub x: i32,
1575    pub y: i32,
1576    pub width: i32,
1577    pub height: i32
1578}
1579
1580#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1581#[to(direction = 1)]
1582pub struct ModToolSanction {
1583    pub highest_priority_issue_id: LegacyId,
1584    pub user_id: LegacyId,
1585    pub topic_id: i32,
1586}
1587
1588#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
1589#[to(direction = 1)]
1590pub struct ModTradingLock {
1591    pub user_id: LegacyId,
1592    pub message: String,
1593    pub length_min: i32,
1594    pub topic_id: i32,
1595    pub issue_id: LegacyId,
1596}
1597
1598impl PacketVariable for ModTradingLock {
1599    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
1600        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
1601
1602        (Self {
1603            user_id: packet.read(),
1604            message: packet.read(),
1605            length_min: packet.read(),
1606            topic_id: packet.read(),
1607            issue_id: packet.read::<Option<LegacyId>>().unwrap_or(LegacyId(-1))
1608        }, packet.read_index - 6)
1609    }
1610
1611    fn to_packet(&self) -> Vec<u8> {
1612        if *self.issue_id == -1 {
1613            (
1614                self.user_id, self.message.clone(), self.length_min, self.topic_id
1615            ).to_packet()
1616        } else {
1617            (
1618                self.user_id, self.message.clone(), self.length_min, self.topic_id, self.issue_id
1619            ).to_packet()
1620        }
1621    }
1622}
1623
1624#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1625#[to(direction = 1)]
1626pub struct PickIssues {
1627    pub issue_ids: Vec<LegacyId>,
1628    pub retry_enabled: bool,
1629    pub retry_count: i32,
1630    pub error: String
1631}
1632
1633#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1634#[to(direction = 1)]
1635pub struct ReleaseIssues {
1636    pub issue_ids: Vec<LegacyId>
1637}
1638
1639#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1640#[to(direction = 1)]
1641pub struct Game2MakeSnowball {
1642    pub turn: i32,
1643    pub sub_turn: i32
1644}
1645
1646#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1647#[to(direction = 1)]
1648pub struct Game2RequestFullStatusUpdate {
1649    pub status: i32
1650}
1651
1652#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1653#[to(direction = 1)]
1654pub struct Game2SetUserMoveTarget {
1655    pub x: i32,
1656    pub y: i32,
1657    pub turn: i32,
1658    pub sub_turn: i32
1659}
1660
1661#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1662#[to(direction = 1)]
1663pub struct Game2ThrowSnowballAtHuman {
1664    pub user_id: LegacyId,
1665    pub trajectory: i32,
1666    pub turn: i32,
1667    pub sub_turn: i32
1668}
1669
1670#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1671#[to(direction = 1)]
1672pub struct Game2ThrowSnowballAtPosition {
1673    pub x: i32,
1674    pub y: i32,
1675    pub trajectory: i32,
1676    pub turn: i32,
1677    pub sub_turn: i32
1678}
1679
1680#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1681#[to(direction = 1)]
1682pub struct AmbassadorAlert {
1683    pub user_id: LegacyId
1684}
1685
1686#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1687#[to(direction = 1)]
1688pub struct AssignRights {
1689    pub user_id: i32
1690}
1691
1692#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1693#[to(direction = 1)]
1694pub struct BanUserWithDuration {
1695    pub user_id: i32,
1696    pub ban_type: String,
1697    pub room_id: LegacyId
1698}
1699
1700#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1701#[to(direction = 1)]
1702pub struct KickUser {
1703    pub user_id: i32
1704}
1705
1706#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1707#[to(direction = 1)]
1708pub struct LetUserIn {
1709    pub user_name: String,
1710    pub can_enter: bool
1711}
1712
1713#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1714#[to(direction = 1)]
1715pub struct MuteAllInRoom {}
1716
1717#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1718#[to(direction = 1)]
1719pub struct MuteUser {
1720    pub user_id: LegacyId,
1721    pub mute_type: i32,
1722    pub room_id: LegacyId
1723}
1724
1725#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1726#[to(direction = 1)]
1727pub struct RemoveAllRights {
1728    pub room_id: LegacyId
1729}
1730
1731#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1732#[to(direction = 1)]
1733pub struct RemoveRights {
1734    pub user_ids: Vec<LegacyId>
1735}
1736
1737#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1738#[to(direction = 1)]
1739pub struct UnbanUserFromRoom {
1740    pub user_id: LegacyId,
1741    pub room_id: LegacyId
1742}
1743
1744#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1745#[to(direction = 1)]
1746pub struct UnmuteUser {
1747    pub user_id: LegacyId,
1748    pub room_id: LegacyId
1749}
1750
1751#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1752#[to(direction = 1)]
1753pub struct NavigatorAddCollapsedCategory {
1754    pub search_code: String
1755}
1756
1757#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1758#[to(direction = 1)]
1759pub struct NavigatorAddSaved {
1760    pub search_code: String,
1761    pub filtering: String
1762}
1763
1764#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1765#[to(direction = 1)]
1766pub struct NavigatorDeleteSaved {
1767    pub id: i32
1768}
1769
1770#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1771#[to(direction = 1)]
1772pub struct NavigatorRemoveCollapsedCategory {
1773    pub search_code: String
1774}
1775
1776#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1777#[to(direction = 1)]
1778pub struct NavigatorSetSearchCodeViewMode {
1779    pub search_code: String,
1780    pub view_mode: i32
1781}
1782
1783#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1784#[to(direction = 1)]
1785pub struct NewNavigatorInit {}
1786
1787#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1788#[to(direction = 1)]
1789pub struct NewNavigatorSearch {
1790    pub search_code: String,
1791    pub filtering: String
1792}
1793
1794#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1795#[to(direction = 1)]
1796pub struct BreedPets {
1797    pub action_id: i32,
1798    pub pet1_id: LegacyId,
1799    pub pet2_id: LegacyId
1800}
1801
1802#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1803#[to(direction = 1)]
1804pub struct CustomizePetWithFurni {
1805    pub item_id: LegacyId,
1806    pub pet_id: LegacyId
1807}
1808
1809#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1810#[to(direction = 1)]
1811pub struct GetPetInfo {
1812    pub pet_id: LegacyId
1813}
1814
1815#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1816#[to(direction = 1)]
1817pub struct PetSelected {
1818    pub pet_id: LegacyId
1819}
1820
1821#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1822#[to(direction = 1)]
1823pub struct RespectPet {
1824    pub pet_id: LegacyId
1825}
1826
1827#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1828#[to(direction = 1)]
1829pub struct CommunityGoalVote {
1830    pub option: i32
1831}
1832
1833#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1834#[to(direction = 1)]
1835pub struct GetAchievements {}
1836
1837#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1838#[to(direction = 1)]
1839pub struct GetBadgePointLimits {}
1840
1841#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1842#[to(direction = 1)]
1843pub struct GetBadges {}
1844
1845#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1846#[to(direction = 1)]
1847pub struct GetIsBadgeRequestFulfilled {
1848    pub badge_code: String
1849}
1850
1851#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1852#[to(direction = 1)]
1853pub struct RequestABadge {
1854    pub badge_code: String
1855}
1856
1857#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
1858#[to(direction = 1)]
1859pub struct SetActivatedBadges {
1860    pub badges: [String; 5]
1861}
1862
1863impl PacketVariable for SetActivatedBadges {
1864    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
1865        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
1866        let indexed_badges = packet.read::<[(i32, String); 5]>();
1867
1868        (Self {
1869            badges: [
1870                indexed_badges[0].1.clone(), indexed_badges[1].1.clone(),
1871                indexed_badges[2].1.clone(), indexed_badges[3].1.clone(),
1872                indexed_badges[4].1.clone()
1873            ]
1874        }, packet.read_index - 6)
1875    }
1876
1877    fn to_packet(&self) -> Vec<u8> {
1878        let mut packet = HPacket::from_header_id(0);
1879
1880        for i in 0..5 {
1881            packet.append((i as i32, self.badges[i].clone()));
1882        }
1883
1884        packet.get_bytes()[6..].to_vec()
1885    }
1886}
1887
1888#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1889#[to(direction = 1)]
1890pub struct Game2ExitGame {
1891    pub exit: bool
1892}
1893
1894#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1895#[to(direction = 1)]
1896pub struct Game2GameChat {
1897    pub message: String
1898}
1899
1900#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1901#[to(direction = 1)]
1902pub struct Game2LoadStageReady {
1903    pub percentage: i32
1904}
1905
1906#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1907#[to(direction = 1)]
1908pub struct Game2PlayAgain {}
1909
1910#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1911#[to(direction = 1)]
1912pub struct GetCreditsInfo {}
1913
1914#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1915#[to(direction = 1)]
1916pub struct CommandBot {
1917    pub bot_id: LegacyId,
1918    pub skill_type: i32,
1919    pub command_string: String
1920}
1921
1922#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1923#[to(direction = 1)]
1924pub struct GetBotCommandConfigurationData {
1925    pub bot_id: LegacyId,
1926    pub skill_type: i32
1927}
1928
1929#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1930#[to(direction = 1)]
1931pub struct AvatarEffectActivated {
1932    pub effect_id: i32
1933}
1934
1935#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1936#[to(direction = 1)]
1937pub struct AvatarEffectSelected {
1938    pub effect_id: i32
1939}
1940
1941#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1942#[to(direction = 1)]
1943pub struct ChangeQueue {
1944    pub queue_type: i32
1945}
1946
1947#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1948#[to(direction = 1)]
1949pub struct OpenFlatConnection {
1950    pub room_id: LegacyId,
1951    pub room_password: String,
1952    pub _unknown: i32
1953}
1954
1955#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1956#[to(direction = 1)]
1957pub struct Quit {}
1958
1959#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1960#[to(direction = 1)]
1961pub struct GetSelectedNftWardrobeOutfit {}
1962
1963#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1964#[to(direction = 1)]
1965pub struct GetUserNftWardrobe {}
1966
1967#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
1968#[to(direction = 1)]
1969pub struct SaveUserNftWardrobe {
1970    pub token_id: String
1971}
1972
1973#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
1974#[to(direction = 1)]
1975pub struct NewUserExperienceGetGifts {
1976    pub selections: Vec<NewUserExperienceGetGiftsSelection> // (day_index, step_index, gift_index)
1977}
1978
1979impl PacketVariable for NewUserExperienceGetGifts {
1980    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
1981        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
1982
1983        let mut selections: Vec<NewUserExperienceGetGiftsSelection> = Vec::new();
1984        let size: LegacyLength = packet.read();
1985        for _ in 0..*size/3 {
1986            selections.push(packet.read());
1987        }
1988
1989        (Self {
1990            selections
1991        }, packet.read_index - 6)
1992    }
1993
1994    fn to_packet(&self) -> Vec<u8> {
1995        let mut packet = HPacket::from_header_id(0);
1996
1997        packet.append(LegacyLength(self.selections.len() as i32 * 3));
1998        for selection in self.selections.clone() {
1999            packet.append(selection);
2000        }
2001
2002        packet.get_bytes()[6..].to_vec()
2003    }
2004}
2005
2006#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2007#[to(direction = 1)]
2008pub struct NewUserExperienceScriptProceed {}
2009
2010#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2011#[to(direction = 1)]
2012pub struct ClickFurni {
2013    pub item_id: LegacyId,
2014    pub _unknown: i32
2015}
2016
2017#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2018#[to(direction = 1)]
2019pub struct CompostPlant {
2020    pub pet_id: LegacyId
2021}
2022
2023#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2024#[to(direction = 1)]
2025pub struct GetFurnitureAliases {}
2026
2027#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2028#[to(direction = 1)]
2029pub struct GetHeightMap {}
2030
2031#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2032#[to(direction = 1)]
2033pub struct GetItemData {
2034    pub item_id: LegacyId
2035}
2036
2037#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2038#[to(direction = 1)]
2039pub struct GetPetCommands {
2040    pub pet_id: LegacyId
2041}
2042
2043#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2044#[to(direction = 1)]
2045pub struct GiveSupplementToPet {
2046    pub pet_id: LegacyId,
2047    pub supplement_type: i32
2048}
2049
2050#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2051#[to(direction = 1)]
2052pub struct HarvestPet {
2053    pub pet_id: LegacyId
2054}
2055
2056#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2057#[to(direction = 1)]
2058pub struct MountPet {
2059    pub pet_id: LegacyId,
2060    pub mounted: bool
2061}
2062
2063#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2064#[to(direction = 1)]
2065pub struct MoveAvatar {
2066    pub x: i32,
2067    pub y: i32
2068}
2069
2070#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2071#[to(direction = 1)]
2072pub struct MoveObject {
2073    pub item_id: LegacyId,
2074    pub x: i32,
2075    pub y: i32,
2076    pub direction: i32
2077}
2078
2079#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2080#[to(direction = 1)]
2081pub struct MovePet {
2082    pub item_id: LegacyId,
2083    pub x: i32,
2084    pub y: i32,
2085    pub direction: i32
2086}
2087
2088#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2089#[to(direction = 1)]
2090pub struct MoveWallItem {
2091    pub item_id: LegacyId,
2092    pub location: String
2093}
2094
2095#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2096#[to(direction = 1)]
2097pub struct PickupObject {
2098    pub placement_type: i32,
2099    pub item_id: LegacyId
2100}
2101
2102#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2103#[to(direction = 1)]
2104pub struct PlaceBot {
2105    pub bot_id: LegacyId,
2106    pub x: i32,
2107    pub y: i32
2108}
2109
2110#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2111#[to(direction = 1)]
2112pub struct PlaceObject {
2113    pub data: String
2114}
2115
2116#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2117#[to(direction = 1)]
2118pub struct PlacePet {
2119    pub pet_id: LegacyId,
2120    pub x: i32,
2121    pub y: i32
2122}
2123
2124#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2125#[to(direction = 1)]
2126pub struct RemoveBotFromFlat {
2127    pub bot_id: LegacyId
2128}
2129
2130#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2131#[to(direction = 1)]
2132pub struct RemoveItem {
2133    pub item_id: LegacyId
2134}
2135
2136#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2137#[to(direction = 1)]
2138pub struct RemovePetFromFlat {
2139    pub pet_id: LegacyId
2140}
2141
2142#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2143#[to(direction = 1)]
2144pub struct RemoveSaddleFromPet {
2145    pub pet_id: LegacyId
2146}
2147
2148#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2149#[to(direction = 1)]
2150pub struct SetClothingChangeData {
2151    pub item_id: LegacyId,
2152    pub figure_string: String,
2153    pub gender: String
2154}
2155
2156#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2157#[to(direction = 1)]
2158pub struct SetItemData {
2159    pub item_id: LegacyId,
2160    pub color_hex: String,
2161    pub text: String
2162}
2163
2164#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
2165#[to(direction = 1)]
2166pub struct SetObjectData {
2167    pub item_id: LegacyId,
2168    pub data: HashMap<String, String>
2169}
2170
2171impl PacketVariable for SetObjectData {
2172    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
2173        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
2174
2175        let item_id = packet.read();
2176        let size: LegacyLength = packet.read();
2177        let mut data: HashMap<String, String> = HashMap::new();
2178        for _ in 0..*size/2 {
2179            data.insert(packet.read(), packet.read());
2180        }
2181
2182        (Self {
2183            item_id, data
2184        }, packet.read_index - 6)
2185    }
2186
2187    fn to_packet(&self) -> Vec<u8> {
2188        let mut packet = HPacket::from_header_id(0);
2189
2190        packet.append((self.item_id, LegacyLength(self.data.len() as i32 * 2)));
2191        for (key, val) in self.data.clone() {
2192            packet.append((key, val));
2193        }
2194
2195        packet.get_bytes()[6..].to_vec()
2196    }
2197}
2198
2199#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2200#[to(direction = 1)]
2201pub struct TogglePetBreedingPermission {
2202    pub pet_id: LegacyId
2203}
2204
2205#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2206#[to(direction = 1)]
2207pub struct TogglePetRidingPermission {
2208    pub pet_id: LegacyId
2209}
2210
2211#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2212#[to(direction = 1)]
2213pub struct UseFurniture {
2214    pub item_id: LegacyId,
2215    pub param: i32
2216}
2217
2218#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2219#[to(direction = 1)]
2220pub struct UseWallItem {
2221    pub item_id: LegacyId,
2222    pub param: i32
2223}
2224
2225#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2226#[to(direction = 1)]
2227pub struct ResetPhoneNumberState {}
2228
2229#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2230#[to(direction = 1)]
2231pub struct SetPhoneNumberVerificationStatus {
2232    pub status: i32
2233}
2234
2235#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2236#[to(direction = 1)]
2237pub struct TryPhoneNumber {
2238    pub country_code: String,
2239    pub phone_number: String
2240}
2241
2242#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2243#[to(direction = 1)]
2244pub struct VerifyCode {
2245    pub verification_code: String
2246}
2247
2248#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2249#[to(direction = 1)]
2250pub struct RoomNetworkOpenConnection {
2251    pub network_id: LegacyId,
2252    pub home_room_id: LegacyId
2253}
2254
2255#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2256#[to(direction = 1)]
2257pub struct AddJukeboxDisk {
2258    pub disk_id: LegacyId,
2259    pub slot_number: i32
2260}
2261
2262#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2263#[to(direction = 1)]
2264pub struct GetJukeboxPlayList {}
2265
2266#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2267#[to(direction = 1)]
2268pub struct GetNowPlaying {}
2269
2270#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2271#[to(direction = 1)]
2272pub struct GetOfficialSongId {
2273    pub song_id: String
2274}
2275
2276#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2277#[to(direction = 1)]
2278pub struct GetSongInfo {
2279    pub song_ids: Vec<i32>
2280}
2281
2282#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2283#[to(direction = 1)]
2284pub struct GetSoundMachinePlayList {}
2285
2286#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2287#[to(direction = 1)]
2288pub struct GetSoundSettings {}
2289
2290#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2291#[to(direction = 1)]
2292pub struct GetUserSongDisks {}
2293
2294#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2295#[to(direction = 1)]
2296pub struct RemoveJukeboxDisk {
2297    pub slot_number: i32
2298}
2299
2300#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2301#[to(direction = 1)]
2302pub struct GetForumsList {
2303    pub list_code: i32,
2304    pub start_index: i32,
2305    pub count: i32
2306}
2307
2308#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2309#[to(direction = 1)]
2310pub struct GetForumStats {
2311    pub group_id: LegacyId
2312}
2313
2314#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2315#[to(direction = 1)]
2316pub struct GetMessages {
2317    pub group_id: LegacyId,
2318    pub thread_id: LegacyId,
2319    pub start_index: i32,
2320    pub count: i32
2321}
2322
2323#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2324#[to(direction = 1)]
2325pub struct GetThread {
2326    pub group_id: LegacyId,
2327    pub thread_id: LegacyId
2328}
2329
2330#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2331#[to(direction = 1)]
2332pub struct GetThreads {
2333    pub group_id: LegacyId,
2334    pub start_index: i32,
2335    pub count: i32
2336}
2337
2338#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2339#[to(direction = 1)]
2340pub struct GetUnreadForumsCount {}
2341
2342#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2343#[to(direction = 1)]
2344pub struct ModerateMessage {
2345    pub group_id: LegacyId,
2346    pub thread_id: LegacyId,
2347    pub message_id: LegacyId,
2348    pub action_id: i32
2349}
2350
2351#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2352#[to(direction = 1)]
2353pub struct ModerateThread {
2354    pub group_id: LegacyId,
2355    pub thread_id: LegacyId,
2356    pub action_id: i32
2357}
2358
2359#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2360#[to(direction = 1)]
2361pub struct PostMessage {
2362    pub group_id: LegacyId,
2363    pub thread_id: LegacyId,
2364    pub subject: String,
2365    pub message: String
2366}
2367
2368#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2369#[to(direction = 1)]
2370pub struct UpdateForumReadMarker {
2371    pub data: Vec<UpdateForumReadMarkerData>
2372}
2373
2374#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2375#[to(direction = 1)]
2376pub struct UpdateForumSettings {
2377    pub group_id: LegacyId,
2378    pub read_permissions: i32,
2379    pub post_message_permissions: i32,
2380    pub post_thread_permissions: i32,
2381    pub moderate_permissions: i32
2382}
2383
2384#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2385#[to(direction = 1)]
2386pub struct UpdateThread {
2387    pub group_id: LegacyId,
2388    pub thread_id: LegacyId,
2389    pub is_locked: bool,
2390    pub is_sticky: bool
2391}
2392
2393#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2394#[to(direction = 1)]
2395pub struct EventLog {
2396    pub event_category: String,
2397    pub event_type: String,
2398    pub action: String,
2399    pub extra_string: String,
2400    pub extra_int: i32
2401}
2402
2403#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2404#[to(direction = 1)]
2405pub struct LagWarningReport {
2406    pub lag_level: i32
2407}
2408
2409#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2410#[to(direction = 1)]
2411pub struct LatencyPingReport {
2412    pub sum: i32,
2413    pub average: i32,
2414    pub count: i32
2415}
2416
2417#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2418#[to(direction = 1)]
2419pub struct LatencyPingRequest {
2420    pub request_id: i32
2421}
2422
2423#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2424#[to(direction = 1)]
2425pub struct PerformanceLog {
2426    pub time_stamp: i32,
2427    pub user_agent: String,
2428    pub flash_version: String,
2429    pub operating_system: String,
2430    pub _unknown1: String,
2431    pub is_debugger: bool,
2432    pub total_memory: i32,
2433    pub _unknown2: i32,
2434    pub garbage_collection_count: i32,
2435    pub average_update_interval: i32,
2436    pub update_count: i32
2437}
2438
2439#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2440#[to(direction = 1)]
2441pub struct CallForHelpFromForumMessage {
2442    pub group_id: LegacyId,
2443    pub thread_id: LegacyId,
2444    pub message_id: LegacyId,
2445    pub topic_id: i32,
2446    pub message: String
2447}
2448
2449#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2450#[to(direction = 1)]
2451pub struct CallForHelpFromForumThread {
2452    pub group_id: LegacyId,
2453    pub thread_id: LegacyId,
2454    pub topic_id: i32,
2455    pub message: String
2456}
2457
2458#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2459#[to(direction = 1)]
2460pub struct CallForHelpFromIM {
2461    pub message: String,
2462    pub topic_id: i32,
2463    pub user_id: LegacyId,
2464    pub messages: Vec<CallForHelpFromIMMessage>
2465}
2466
2467#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2468#[to(direction = 1)]
2469pub struct CallForHelpFromPhoto {
2470    pub image: String,
2471    pub name: i32,
2472    pub room_id: LegacyId,
2473    pub creator_id: LegacyId,
2474    pub item_id: LegacyId
2475}
2476
2477#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2478#[to(direction = 1)]
2479pub struct CallForHelpFromSelfie {
2480    pub image: String,
2481    pub message: i32,
2482    pub room_id: LegacyId,
2483    pub creator_id: LegacyId,
2484    pub item_id: LegacyId
2485}
2486
2487#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2488#[to(direction = 1)]
2489pub struct CallForHelp {
2490    pub message: String,
2491    pub topic_id: i32,
2492    pub user_id: LegacyId,
2493    pub room_id: LegacyId,
2494    pub messages: Vec<CallForHelpFromIMMessage>
2495}
2496
2497#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2498#[to(direction = 1)]
2499pub struct ChatReviewGuideDecidesOnOffer {
2500    pub accepted: bool
2501}
2502
2503#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2504#[to(direction = 1)]
2505pub struct ChatReviewGuideDetached {}
2506
2507#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2508#[to(direction = 1)]
2509pub struct ChatReviewGuideVote {
2510    pub vote: i32
2511}
2512
2513#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2514#[to(direction = 1)]
2515pub struct ChatReviewSessionCreate {
2516    pub user_id: LegacyId,
2517    pub room_id: LegacyId
2518}
2519
2520#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2521#[to(direction = 1)]
2522pub struct DeletePendingCallsForHelp {}
2523
2524#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2525#[to(direction = 1)]
2526pub struct GetCfhStatus {
2527    pub show: bool
2528}
2529
2530#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2531#[to(direction = 1)]
2532pub struct GetGuideReportingStatus {}
2533
2534#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2535#[to(direction = 1)]
2536pub struct GetPendingCallsForHelp {}
2537
2538#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2539#[to(direction = 1)]
2540pub struct GetQuizQuestions {
2541    pub name: String
2542}
2543
2544#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2545#[to(direction = 1)]
2546pub struct GuideSessionCreate {
2547    pub request_type: i32,
2548    pub message: String
2549}
2550
2551#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2552#[to(direction = 1)]
2553pub struct GuideSessionFeedback {
2554    pub positive: bool
2555}
2556
2557#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2558#[to(direction = 1)]
2559pub struct GuideSessionGetRequesterRoom {}
2560
2561#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2562#[to(direction = 1)]
2563pub struct GuideSessionGuideDecides {
2564    pub accepted: bool
2565}
2566
2567#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2568#[to(direction = 1)]
2569pub struct GuideSessionInviteRequester {}
2570
2571#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2572#[to(direction = 1)]
2573pub struct GuideSessionIsTyping {
2574    pub is_typing: bool
2575}
2576
2577#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2578#[to(direction = 1)]
2579pub struct GuideSessionMessage {
2580    pub message: String
2581}
2582
2583#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2584#[to(direction = 1)]
2585pub struct GuideSessionOnDutyUpdate {
2586    pub on_duty: bool,
2587    pub handle_guide_tickets: bool,
2588    pub handle_helper_tickets: bool,
2589    pub handle_guardian_tickets: bool
2590}
2591
2592#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2593#[to(direction = 1)]
2594pub struct GuideSessionReport {
2595    pub message: String
2596}
2597
2598#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2599#[to(direction = 1)]
2600pub struct GuideSessionRequesterCancels {}
2601
2602#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2603#[to(direction = 1)]
2604pub struct GuideSessionResolved {}
2605
2606#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2607#[to(direction = 1)]
2608pub struct PostQuizAnswers {
2609    pub quiz_id: String,
2610    pub answers: Vec<i32>
2611}
2612
2613#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2614#[to(direction = 1)]
2615pub struct GetInterstitial {}
2616
2617#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2618#[to(direction = 1)]
2619pub struct InterstitialShown {}
2620
2621#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2622#[to(direction = 1)]
2623pub struct RequestFurniInventory {}
2624
2625#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2626#[to(direction = 1)]
2627pub struct RequestFurniInventoryWhenNotInRoom {}
2628
2629#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2630#[to(direction = 1)]
2631pub struct RequestRoomPropertySet {
2632    pub room_id: LegacyId
2633}
2634
2635#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2636#[to(direction = 1)]
2637pub struct AcceptTrading {}
2638
2639#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2640#[to(direction = 1)]
2641pub struct AddItemsToTrade {
2642    pub item_ids: Vec<LegacyId>
2643}
2644
2645#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2646#[to(direction = 1)]
2647pub struct AddItemToTrade {
2648    pub item_id: LegacyId
2649}
2650
2651#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2652#[to(direction = 1)]
2653pub struct CloseTrading {}
2654
2655#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2656#[to(direction = 1)]
2657pub struct ConfirmAcceptTrading {}
2658
2659#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2660#[to(direction = 1)]
2661pub struct ConfirmDeclineTrading {}
2662
2663#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2664#[to(direction = 1)]
2665pub struct OpenTrading {
2666    pub user_index: i32
2667}
2668
2669#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2670#[to(direction = 1)]
2671pub struct RemoveItemFromTrade {
2672    pub item_id: LegacyId
2673}
2674
2675#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2676#[to(direction = 1)]
2677pub struct UnacceptTrading {}
2678
2679#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2680#[to(direction = 1)]
2681pub struct GetHotLooks {
2682    pub count: i8
2683}
2684
2685#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2686#[to(direction = 1)]
2687pub struct BuildersClubPlaceRoomItem {
2688    pub page_id: LegacyId,
2689    pub offer_id: LegacyId,
2690    pub extra_param: String,
2691    pub x: i32,
2692    pub y: i32,
2693    pub direction: i32
2694}
2695
2696#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2697#[to(direction = 1)]
2698pub struct BuildersClubPlaceWallItem {
2699    pub page_id: LegacyId,
2700    pub offer_id: LegacyId,
2701    pub extra_param: String,
2702    pub location: String
2703}
2704
2705#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2706#[to(direction = 1)]
2707pub struct BuildersClubQueryFurniCount {}
2708
2709#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2710#[to(direction = 1)]
2711pub struct GetBonusRareInfo {}
2712
2713#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2714#[to(direction = 1)]
2715pub struct GetBundleDiscountRuleset {}
2716
2717#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2718#[to(direction = 1)]
2719pub struct GetCatalogIndex {
2720    pub catalog_type: String
2721}
2722
2723#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2724#[to(direction = 1)]
2725pub struct GetCatalogPage {
2726    pub page_id: LegacyId,
2727    pub offer_id: LegacyId,
2728    pub catalog_type: String
2729}
2730
2731#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2732#[to(direction = 1)]
2733pub struct GetCatalogPageWithEarliestExpiry {}
2734
2735#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2736#[to(direction = 1)]
2737pub struct GetClubGift {}
2738
2739#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2740#[to(direction = 1)]
2741pub struct GetClubOffers {
2742    pub _unknown: i32
2743}
2744
2745#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2746#[to(direction = 1)]
2747pub struct GetGiftWrappingConfiguration {}
2748
2749#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2750#[to(direction = 1)]
2751pub struct GetHabboClubExtendOffer {}
2752
2753#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2754#[to(direction = 1)]
2755pub struct GetIsOfferGiftable {
2756    pub offer_id: LegacyId
2757}
2758
2759#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2760#[to(direction = 1)]
2761pub struct GetLimitedOfferAppearingNext {}
2762
2763#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2764#[to(direction = 1)]
2765pub struct GetNextTargetedOffer {}
2766
2767#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2768#[to(direction = 1)]
2769pub struct GetProductOffer {
2770    pub offer_id: LegacyId
2771}
2772
2773#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2774#[to(direction = 1)]
2775pub struct GetRoomAdPurchaseInfo {}
2776
2777#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2778#[to(direction = 1)]
2779pub struct GetSeasonalCalendarDaily {}
2780
2781#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2782#[to(direction = 1)]
2783pub struct GetSellablePetPalettes {
2784    pub localization_id: String
2785}
2786
2787#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2788#[to(direction = 1)]
2789pub struct GetSnowWarGameTokensOffer {}
2790
2791#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2792#[to(direction = 1)]
2793pub struct MarkCatalogNewAdditionsPageOpened {}
2794
2795#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2796#[to(direction = 1)]
2797pub struct PurchaseBasicMembershipExtension {
2798    pub offer_id: LegacyId
2799}
2800
2801#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2802#[to(direction = 1)]
2803pub struct PurchaseFromCatalogAsGift {
2804    pub page_id: LegacyId,
2805    pub offer_id: LegacyId,
2806    pub localization_id: String,
2807    pub receiver_name: String,
2808    pub message: String,
2809    pub color: i32,
2810    pub box_type: i32,
2811    pub ribbon_type: i32,
2812    pub show_purchaser_name: bool
2813}
2814
2815#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2816#[to(direction = 1)]
2817pub struct PurchaseFromCatalog {
2818    pub page_id: LegacyId,
2819    pub offer_id: LegacyId,
2820    pub localization_id: String,
2821    pub amount: i32
2822}
2823
2824#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2825#[to(direction = 1)]
2826pub struct PurchaseRoomAd {
2827    pub page_id: LegacyId,
2828    pub offer_id: LegacyId,
2829    pub room_id: LegacyId,
2830    pub name: String,
2831    pub extended: bool,
2832    pub description: String,
2833    pub category_id: i32
2834}
2835
2836#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2837#[to(direction = 1)]
2838pub struct PurchaseSnowWarGameTokensOffer {
2839    pub offer_id: LegacyId
2840}
2841
2842#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2843#[to(direction = 1)]
2844pub struct PurchaseTargetedOffer {
2845    pub page_id: LegacyId,
2846    pub offer_id: LegacyId
2847}
2848
2849#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2850#[to(direction = 1)]
2851pub struct PurchaseVipMembershipExtension {
2852    pub offer_id: LegacyId
2853}
2854
2855#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2856#[to(direction = 1)]
2857pub struct RedeemVoucher {
2858    pub voucher_code: String
2859}
2860
2861#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2862#[to(direction = 1)]
2863pub struct RoomAdPurchaseInitiated {}
2864
2865#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2866#[to(direction = 1)]
2867pub struct SelectClubGift {
2868    pub localization_id: String
2869}
2870
2871#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2872#[to(direction = 1)]
2873pub struct SetTargetedOfferState {
2874    pub offer_id: LegacyId,
2875    pub state: i32
2876}
2877
2878#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2879#[to(direction = 1)]
2880pub struct ShopTargetedOfferViewed {
2881    pub offer_id: LegacyId,
2882    pub state: LegacyId
2883}
2884
2885#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2886#[to(direction = 1)]
2887pub struct Craft {
2888    pub crafting_table_id: LegacyId,
2889    pub craft_type: String
2890}
2891
2892#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2893#[to(direction = 1)]
2894pub struct CraftSecret {
2895    pub crafting_table_id: LegacyId,
2896    pub selected_ingredient_ids: Vec<LegacyId>
2897}
2898
2899#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2900#[to(direction = 1)]
2901pub struct GetCraftableProducts {
2902    pub crafting_table_id: LegacyId
2903}
2904
2905#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2906#[to(direction = 1)]
2907pub struct GetCraftingRecipe {
2908    pub product_code: String
2909}
2910
2911#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2912#[to(direction = 1)]
2913pub struct GetCraftingRecipesAvailable {
2914    pub crafting_table_id: LegacyId,
2915    pub selected_ingredient_ids: Vec<LegacyId>
2916}
2917
2918#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2919#[to(direction = 1)]
2920pub struct ChangeUserName {
2921    pub user_name: String
2922}
2923
2924#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2925#[to(direction = 1)]
2926pub struct CheckUserName {
2927    pub user_name: String
2928}
2929
2930#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2931#[to(direction = 1)]
2932pub struct GetWardrobe {}
2933
2934#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2935#[to(direction = 1)]
2936pub struct SaveWardrobeOutfit {
2937    pub slot_id: i32,
2938    pub figure_string: String,
2939    pub gender: String
2940}
2941
2942#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2943#[to(direction = 1)]
2944pub struct ResetUnseenItemIds {
2945    pub category_id: i32,
2946    pub p2: Vec<LegacyId>
2947}
2948
2949#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2950#[to(direction = 1)]
2951pub struct ResetUnseenItems {
2952    pub category_id: i32
2953}
2954
2955#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2956#[to(direction = 1)]
2957pub struct CancelTyping {}
2958
2959#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2960#[to(direction = 1)]
2961pub struct Chat {
2962    pub text: String,
2963    pub chat_style: i32,
2964    pub index: i32
2965}
2966
2967#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2968#[to(direction = 1)]
2969pub struct Shout {
2970    pub text: String,
2971    pub chat_style: i32
2972}
2973
2974#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2975#[to(direction = 1)]
2976pub struct StartTyping {}
2977
2978#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2979#[to(direction = 1)]
2980pub struct Whisper {
2981    pub text: String,
2982    pub chat_style: i32
2983}
2984
2985#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2986#[to(direction = 1)]
2987pub struct GetBotInventory {}
2988
2989#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2990#[to(direction = 1)]
2991pub struct CreditVaultStatus {}
2992
2993#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
2994#[to(direction = 1)]
2995pub struct IncomeRewardClaim {
2996    pub reward_type: i8
2997}
2998
2999#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3000#[to(direction = 1)]
3001pub struct IncomeRewardStatus {}
3002
3003#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3004#[to(direction = 1)]
3005pub struct WithdrawCreditVault {}
3006
3007#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3008#[to(direction = 1)]
3009pub struct Game2CheckGameDirectoryStatus {}
3010
3011#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3012#[to(direction = 1)]
3013pub struct Game2GetAccountGameStatus {
3014    pub _unknown: i32
3015}
3016
3017#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3018#[to(direction = 1)]
3019pub struct Game2LeaveGame {}
3020
3021#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3022#[to(direction = 1)]
3023pub struct Game2QuickJoinGame {}
3024
3025#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3026#[to(direction = 1)]
3027pub struct Game2StartSnowWar {
3028    pub game_identifier: String
3029}
3030
3031#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3032#[to(direction = 1)]
3033pub struct AddSpamWallPostIt {
3034    pub item_id: LegacyId,
3035    pub location: String,
3036    pub color_hex: String,
3037    pub text: String
3038}
3039
3040#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3041#[to(direction = 1)]
3042pub struct ControlYoutubeDisplayPlayback {
3043    pub item_id: LegacyId,
3044    pub action: i32
3045}
3046
3047#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3048#[to(direction = 1)]
3049pub struct CreditFurniRedeem {
3050    pub item_id: LegacyId
3051}
3052
3053#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3054#[to(direction = 1)]
3055pub struct DiceOff {
3056    pub item_id: LegacyId
3057}
3058
3059#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3060#[to(direction = 1)]
3061pub struct EnterOneWayDoor {
3062    pub item_id: LegacyId
3063}
3064
3065#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3066#[to(direction = 1)]
3067pub struct ExtendRentOrBuyoutFurni {
3068    pub is_wall_item: bool,
3069    pub item_id: LegacyId,
3070    pub is_buyout: bool
3071}
3072
3073#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3074#[to(direction = 1)]
3075pub struct ExtendRentOrBuyoutStripItem {
3076    pub item_id: LegacyId,
3077    pub is_buyout: bool
3078}
3079
3080#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3081#[to(direction = 1)]
3082pub struct GetGuildFurniContextMenuInfo {
3083    pub item_id: LegacyId,
3084    pub group_id: LegacyId
3085}
3086
3087#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3088#[to(direction = 1)]
3089pub struct GetRentOrBuyoutOffer {
3090    pub is_wall_item: bool,
3091    pub full_name: String,
3092    pub is_buyout: bool
3093}
3094
3095#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3096#[to(direction = 1)]
3097pub struct GetYoutubeDisplayStatus {
3098    pub item_id: LegacyId
3099}
3100
3101#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3102#[to(direction = 1)]
3103pub struct OpenMysteryTrophy {
3104    pub item_id: LegacyId,
3105    pub trophy_inscription: String
3106}
3107
3108#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3109#[to(direction = 1)]
3110pub struct OpenPetPackage {
3111    pub item_id: LegacyId,
3112    pub name: String
3113}
3114
3115#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3116#[to(direction = 1)]
3117pub struct PlacePostIt {
3118    pub item_id: LegacyId,
3119    pub location: String
3120}
3121
3122#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3123#[to(direction = 1)]
3124pub struct PresentOpen {
3125    pub item_id: LegacyId
3126}
3127
3128#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3129#[to(direction = 1)]
3130pub struct RentableSpaceCancelRent {
3131    pub item_id: LegacyId
3132}
3133
3134#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3135#[to(direction = 1)]
3136pub struct RentableSpaceRent {
3137    pub item_id: LegacyId
3138}
3139
3140#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3141#[to(direction = 1)]
3142pub struct RentableSpaceStatus {
3143    pub item_id: LegacyId
3144}
3145
3146#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3147#[to(direction = 1)]
3148pub struct RoomDimmerChangeState {}
3149
3150#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3151#[to(direction = 1)]
3152pub struct RoomDimmerGetPresets {}
3153
3154#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3155#[to(direction = 1)]
3156pub struct RoomDimmerSavePreset {
3157    pub preset_number: i32,
3158    pub effect_type_id: i32,
3159    pub color: String,
3160    pub brightness: i32,
3161    pub apply: bool
3162}
3163
3164#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3165#[to(direction = 1)]
3166pub struct SetCustomStackingHeight {
3167    pub stack_tile_id: LegacyId,
3168    pub height: i32
3169}
3170
3171#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3172#[to(direction = 1)]
3173pub struct SetMannequinFigure {
3174    pub mannequin_id: LegacyId
3175}
3176
3177#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3178#[to(direction = 1)]
3179pub struct SetMannequinName {
3180    pub mannequin_id: LegacyId,
3181    pub name: String
3182}
3183
3184#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3185#[to(direction = 1)]
3186pub struct SetRandomState {
3187    pub item_id: LegacyId,
3188    pub param: i32
3189}
3190
3191#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3192#[to(direction = 1)]
3193pub struct SetRoomBackgroundColorData {
3194    pub item_id: LegacyId,
3195    pub hue: i32,
3196    pub saturation: i32,
3197    pub lightness: i32
3198}
3199
3200#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3201#[to(direction = 1)]
3202pub struct SetYoutubeDisplayPlaylist {
3203    pub item_id: LegacyId,
3204    pub name: String
3205}
3206
3207#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3208#[to(direction = 1)]
3209pub struct SpinWheelOfFortune {
3210    pub item_id: LegacyId
3211}
3212
3213#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3214#[to(direction = 1)]
3215pub struct ThrowDice {
3216    pub item_id: LegacyId
3217}
3218
3219#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3220#[to(direction = 1)]
3221pub struct CancelPetBreeding {
3222    pub stuff_id: LegacyId
3223}
3224
3225#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3226#[to(direction = 1)]
3227pub struct ConfirmPetBreeding {
3228    pub stuff_id: LegacyId,
3229    pub name: String,
3230    pub pet1_id: LegacyId,
3231    pub pet2_id: LegacyId
3232}
3233
3234#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3235#[to(direction = 1)]
3236pub struct GetPetInventory {}
3237
3238#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3239#[to(direction = 1)]
3240pub struct PhotoCompetition {}
3241
3242#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3243#[to(direction = 1)]
3244pub struct PublishPhoto {}
3245
3246#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3247#[to(direction = 1)]
3248pub struct PurchasePhoto {}
3249
3250#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
3251#[to(direction = 1)]
3252pub struct RenderRoom {
3253    pub json_string: String
3254}
3255
3256impl PacketVariable for RenderRoom {
3257    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
3258        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
3259        let compressed: Vec<u8> = packet.read();
3260        let decompressed = decompress_to_vec_zlib(compressed.as_slice()).expect("Couldn't decompress RenderRoom packet");
3261        (Self {
3262            json_string: String::from_utf8(decompressed).expect("Couldn't form string from decompressed RenderRoom bytes")
3263        }, packet.read_index - 6)
3264    }
3265
3266    fn to_packet(&self) -> Vec<u8> {
3267        let decompressed = self.json_string.as_bytes();
3268        compress_to_vec_zlib(decompressed, 10).to_packet()
3269    }
3270}
3271
3272#[derive(BaseParser, Clone, Debug, Default, PartialEq)]
3273#[to(direction = 1)]
3274pub struct RenderRoomThumbnail {
3275    pub json_string: String
3276}
3277
3278impl PacketVariable for RenderRoomThumbnail {
3279    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
3280        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
3281        let compressed: Vec<u8> = packet.read();
3282        let decompressed = decompress_to_vec_zlib(compressed.as_slice()).expect("Couldn't decompress RenderRoom packet");
3283        (Self {
3284            json_string: String::from_utf8(decompressed).expect("Couldn't form string from decompressed RenderRoom bytes")
3285        }, packet.read_index - 6)
3286    }
3287
3288    fn to_packet(&self) -> Vec<u8> {
3289        let decompressed = self.json_string.as_bytes();
3290        compress_to_vec_zlib(decompressed, 10).to_packet()
3291    }
3292}
3293
3294#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3295#[to(direction = 1)]
3296pub struct RequestCameraConfiguration {}
3297
3298#[derive(BaseParser, Clone, Debug, Default, PacketVariable, PartialEq)]
3299#[to(direction = 1)]
3300pub struct GetPromoArticles {}
3301
3302
3303
3304
3305