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#[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> }
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