pso2packetlib/protocol/
symbolart.rs

1//! Symbol Art related packets. \[0x2F\]
2use crate::fixed_types::Bytes;
3
4use super::{HelperReadWrite, MessageChannel, ObjectHeader, PacketReadWrite};
5
6// ----------------------------------------------------------------
7// Symbol Art packets
8// ----------------------------------------------------------------
9
10/// (0x2F, 0x00) Request Symbol Art Data (client).
11///
12/// (C -> S) Sent when the client encounters an unknown symbol art and wants to receive it's data.
13///
14/// Respond with: [`crate::protocol::Packet::SymbolArtClientData`]
15#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
16#[cfg_attr(feature = "serde", serde(default))]
17#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
18#[Id(0x2F, 0x00)]
19pub struct SymbolArtClientDataRequestPacket {
20    /// Symbol Art UUID.
21    pub uuid: u128,
22}
23
24/// (0x2F, 0x01) Request Symbol Art Data (server).
25///
26/// (S -> C) Sent when the server encounters an unknown symbol art and wants to receive it's data.
27///
28/// Respond with: [`crate::protocol::Packet::SymbolArtData`]
29#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
30#[cfg_attr(feature = "serde", serde(default))]
31#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
32#[Id(0x2F, 0x01)]
33pub struct SymbolArtDataRequestPacket {
34    /// Symbol Art UUID.
35    pub uuid: u128,
36}
37
38/// (0x2F, 0x02) Symbol Art Data (serverbound).
39///
40/// (C -> S) Sent in response to the reqeust
41///
42/// Response to: [`crate::protocol::Packet::SymbolArtDataRequest`]
43#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
44#[cfg_attr(feature = "serde", serde(default))]
45#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
46#[Id(0x2F, 0x02)]
47#[Flags(Flags::PACKED)]
48#[Magic(0x4B58, 0x76)]
49pub struct SymbolArtDataPacket {
50    /// Symbol Art UUID.
51    pub uuid: u128,
52    /// Symbol Art data.
53    pub data: Bytes,
54    /// Symbol Art name.
55    pub name: String,
56}
57
58/// (0x2F, 0x03) Symbol Art Data (clientbound).
59///
60/// (S -> C) Sent in response to the reqeust
61///
62/// Response to: [`crate::protocol::Packet::SymbolArtClientDataRequest`]
63#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
64#[cfg_attr(feature = "serde", serde(default))]
65#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
66#[Id(0x2F, 0x03)]
67#[Flags(Flags::PACKED)]
68#[Magic(0xD116, 0xC1)]
69pub struct SymbolArtClientDataPacket {
70    /// Symbol Art UUID.
71    pub uuid: u128,
72    /// Symbol Art data.
73    pub data: Bytes,
74}
75
76/// (0x2F, 0x04) Change Symbol Art Slot.
77///
78/// (C -> S) Sent when the client puts a new symbol art in a save slot.
79///
80/// Respond with: [`crate::protocol::Packet::SymbolArtResult`]
81#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
82#[cfg_attr(feature = "serde", serde(default))]
83#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
84#[Id(0x2F, 0x04)]
85#[Flags(Flags::PACKED)]
86#[Magic(0x56D3, 0x0C)]
87pub struct ChangeSymbolArtPacket {
88    /// Symbol Art UUIDs and slot indexes.
89    pub uuids: Vec<SlottedSymbolArt>,
90}
91
92/// (0x2F, 0x05) Change Symbol Art Slot Result.
93///
94/// (S -> C) Sent in response to the request.
95///
96/// Response to: [`crate::protocol::Packet::ChangeSymbolArt`]
97#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
98#[cfg_attr(feature = "serde", serde(default))]
99#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
100#[Id(0x2F, 0x05)]
101#[Flags(Flags::PACKED)]
102#[Magic(0xDC91, 0x57)]
103pub struct SymbolArtResultPacket {
104    pub unk1: u32,
105    pub uuids: Vec<u128>,
106}
107
108/// (0x2F, 0x07) Saved Symbol Art List.
109///
110/// (S -> C) Sent in response to the request.
111///
112/// Response to: [`crate::protocol::Packet::SymbolArtListRequest`]
113#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
114#[cfg_attr(feature = "serde", serde(default))]
115#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
116#[Id(0x2F, 0x07)]
117#[Flags(Flags::PACKED)]
118#[Magic(0xE80C, 0xED)]
119pub struct SymbolArtListPacket {
120    /// Player object.
121    pub object: ObjectHeader,
122    /// Currenly selected character ID.
123    pub character_id: u32,
124    /// Saved UUIDs.
125    pub uuids: Vec<u128>,
126}
127
128/// (0x2F, 0x08) Send Symbol Art.
129///
130/// (C -> S) Sent when a client sends a symbol art.
131///
132/// Respond with: [`crate::protocol::Packet::ReceiveSymbolArt`]
133#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
134#[cfg_attr(feature = "serde", serde(default))]
135#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
136#[Id(0x2F, 0x08)]
137#[Flags(Flags::OBJECT_RELATED)]
138pub struct SendSymbolArtPacket {
139    /// Sender object (unset).
140    pub object: ObjectHeader,
141    /// Symbol Art UUID.
142    pub uuid: u128,
143    /// Symbol Art channel.
144    pub area: MessageChannel,
145    pub unk1: u8,
146    pub unk2: u16,
147    pub unk3: u32,
148}
149
150/// (0x2F, 0x09) Received Symbol Art.
151///
152/// (S -> C) Sent when a client receives a symbol art.
153#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
154#[cfg_attr(feature = "serde", serde(default))]
155#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
156#[Id(0x2F, 0x09)]
157pub struct ReceiveSymbolArtPacket {
158    /// Sender object.
159    pub object: ObjectHeader,
160    /// Symbol Art UUID.
161    pub uuid: u128,
162    /// Symbol Art channel.
163    pub area: MessageChannel,
164    pub unk1: u8,
165    pub unk2: u16,
166    pub unk3: u32,
167}
168
169// ----------------------------------------------------------------
170// Additional structs
171// ----------------------------------------------------------------
172
173/// Symbol Art in a saved SA list.
174#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
175#[cfg_attr(feature = "serde", serde(default))]
176#[derive(Debug, Clone, Copy, Default, PartialEq, HelperReadWrite)]
177pub struct SlottedSymbolArt {
178    /// UUID of the Symbol Art.
179    pub uuid: u128,
180    /// Slot index.
181    pub slot: u32,
182}