assembly_xml/obj/
char.rs

1//! ## Data for the [`Character` component](https://docs.lu-dev.net/en/latest/components/004-character.html)
2use serde::{Deserialize, Serialize};
3
4#[derive(Default, Debug, PartialEq, Deserialize, Serialize)]
5/// Data for the [`Character` component][c004]
6///
7/// [c004]: https://docs.lu-dev.net/en/latest/components/004-character.html
8pub struct Character {
9    /// Account ID
10    #[serde(rename = "acct")]
11    account: u32,
12
13    /// Current amount of currency
14    #[serde(rename = "cc")]
15    currency_current: u32,
16
17    /// GM level
18    #[serde(rename = "gm")]
19    gm_level: u32,
20
21    /// FreeToPlay status
22    #[serde(rename = "ft")]
23    free_to_play: u32,
24
25    /// Timestamp of last login as this character
26    #[serde(rename = "llog")]
27    last_login: u64,
28
29    /// LEGO score / Uscore
30    #[serde(rename = "ls")]
31    lego_score: u32,
32
33    /// Last world position X-coordinate
34    lzx: f32,
35    /// Last world position Y-coordinate
36    lzy: f32,
37    /// Last world position Z-coordinate
38    lzz: f32,
39
40    /// Last world rotation X component
41    lzrx: f32,
42    /// Last world rotation Y component
43    lzry: f32,
44    /// Last world rotation Z component
45    lzrz: f32,
46    /// Last world rotation W component
47    lzrw: f32,
48
49    /// Player stats
50    stt: String,
51
52    /// Last zone ID (packed)
53    lzid: u32,
54    /// ???
55    lnzid: u32,
56    /// Last world ID
57    lwid: u32,
58
59    /// ???
60    tscene: String,
61    /// ???
62    lrid: u64,
63
64    /// Total time played, in seconds
65    time: u32,
66
67    /// Unlocked emotes
68    #[serde(rename = "ue")]
69    pub unlocked_emotes: UnlockedEmotes,
70
71    /// Zone summaries
72    #[serde(default, rename = "vl")]
73    pub visited_levels: VisitedLevels,
74
75    /// Zone summaries
76    #[serde(rename = "zs")]
77    pub zone_summaries: ZoneSummaries,
78}
79
80#[derive(Default, Debug, PartialEq, Deserialize, Serialize)]
81/// Unlocked emotes
82pub struct UnlockedEmotes {
83    /// List of unlocked emotes
84    #[serde(rename = "e")]
85    pub children: Vec<UnlockedEmote>,
86}
87
88#[derive(Default, Debug, PartialEq, Deserialize, Serialize)]
89/// A single unlocked emote
90pub struct UnlockedEmote {
91    /// The ID from the [`Emotes` tables](https://docs.lu-dev.net/en/latest/database/Emotes.html)
92    pub id: u32,
93}
94
95#[derive(Default, Debug, PartialEq, Deserialize, Serialize)]
96/// List of zone summaries
97pub struct ZoneSummaries {
98    /// The list of summaries
99    #[serde(rename = "s")]
100    pub children: Vec<ZoneSummary>,
101}
102
103#[derive(Default, Debug, PartialEq, Deserialize, Serialize)]
104/// A single zone summary
105pub struct ZoneSummary {
106    /// The relevant map ID from the [`ZoneTable`](https://docs.lu-dev.net/en/latest/database/ZoneTable.html)
107    map: u32,
108    /// Number of achievements
109    #[serde(rename = "ac")]
110    pub achievement_count: u32,
111    /// Number of bricks collected
112    #[serde(rename = "bc")]
113    pub bricks_collected: u32,
114    /// Number of coins collected
115    #[serde(rename = "cc")]
116    pub coins_collected: u32,
117    /// Number of enemies smashed
118    #[serde(rename = "es")]
119    pub enemies_smashed: u32,
120    /// Number of quick-builds constructed
121    #[serde(rename = "qbc")]
122    pub quick_builds_constructed: u32,
123}
124
125#[derive(Default, Debug, PartialEq, Deserialize, Serialize)]
126/// List of zone summaries
127pub struct VisitedLevels {
128    /// The list of summaries
129    #[serde(rename = "v")]
130    pub children: Vec<VisitedLevel>,
131}
132
133#[derive(Default, Debug, PartialEq, Deserialize, Serialize)]
134/// A level the player visited
135pub struct VisitedLevel {
136    /// Clone ID (used for properties, 0 if not a property)
137    #[serde(rename = "cid")]
138    clone_id: u32,
139    /// World ID.
140    id: u32,
141}