pso2packetlib/protocol/
flag.rs

1//! Flag related packets. \[0x23\]
2use super::{HelperReadWrite, ObjectHeader, PacketReadWrite};
3use crate::fixed_types::{FixedAsciiString, FixedBytes, FixedVec};
4
5// ----------------------------------------------------------------
6// Flag packets
7// ----------------------------------------------------------------
8
9/// (0x23, 0x02) Set Flag.
10///
11/// (C -> S) Sent when a client sets any flag.
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13#[cfg_attr(feature = "serde", serde(default))]
14#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
15#[Id(0x23, 0x02)]
16pub struct SetFlagPacket {
17    /// Flag type.
18    pub flag_type: FlagType,
19    /// Flag ID.
20    pub id: u32,
21    /// Flag value.
22    pub value: u32,
23}
24
25/// (0x23, 0x04) Server Set Flag.
26///
27/// (S -> C) Sent when a server sets any flag for a client.
28#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
29#[cfg_attr(feature = "serde", serde(default))]
30#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
31#[Id(0x23, 0x04)]
32pub struct ServerSetFlagPacket {
33    /// Flag type.
34    pub flag_type: FlagType,
35    /// Flag ID.
36    pub id: u32,
37    /// Flag value.
38    pub value: u32,
39    pub unk: u32,
40}
41
42/// (0x23, 0x05) Server Set Parameter.
43///
44/// (S -> C) Sent when a server sets any flag parameter for a client.
45#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
46#[cfg_attr(feature = "serde", serde(default))]
47#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
48#[Id(0x23, 0x05)]
49pub struct ServerSetParamPacket {
50    /// Parameter type.
51    pub param_type: FlagType,
52    /// Parameter ID.
53    pub id: u32,
54    /// Parameter value.
55    pub value: u32,
56}
57
58/// (0x23, 0x06) Load Account Flags.
59///
60/// (S -> C) Sent when a client starts the game.
61///
62/// Response to: [`crate::protocol::Packet::StartGame`]
63#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
64#[cfg_attr(feature = "serde", serde(default))]
65#[derive(Debug, Default, Clone, PartialEq, PacketReadWrite)]
66#[Id(0x23, 0x06)]
67pub struct AccountFlagsPacket {
68    /// Account flags.
69    pub flags: FixedBytes<0x400>,
70    /// Account parameters.
71    pub params: FixedVec<0x100, u32>,
72    #[cfg(feature = "ngs_packets")]
73    #[cfg_attr(docsrs, doc(cfg(feature = "ngs_packets")))]
74    #[OnlyOn(super::PacketType::NGS)]
75    pub unk: FixedBytes<0x400>,
76}
77
78/// (0x23, 0x07) Load Character Flags.
79///
80/// (S -> C) Sent when a client starts the game.
81///
82/// Response to: [`crate::protocol::Packet::StartGame`]
83#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
84#[cfg_attr(feature = "serde", serde(default))]
85#[derive(Debug, Default, Clone, PartialEq, PacketReadWrite)]
86#[Id(0x23, 0x07)]
87pub struct CharacterFlagsPacket {
88    /// Character flags.
89    pub flags: FixedBytes<0xC00>,
90    /// Character parameters.
91    pub params: FixedVec<0x100, u32>,
92    #[cfg(feature = "ngs_packets")]
93    #[cfg_attr(docsrs, doc(cfg(feature = "ngs_packets")))]
94    #[OnlyOn(super::PacketType::NGS)]
95    pub unk: FixedBytes<0xF40>,
96}
97
98/// (0x23, 0x0A) Cutscene Ended.
99///
100/// (C -> S) Sent when a cutscene ends.
101#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
102#[cfg_attr(feature = "serde", serde(default))]
103#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
104#[Id(0x23, 0x0A)]
105pub struct CutsceneEndPacket {
106    /// Cuscene ID.
107    pub skit_name: FixedAsciiString<0x20>,
108    /// Emergency object (if related).
109    pub emergency_obj: ObjectHeader,
110    pub unk2: u32,
111    pub unk3: u32,
112}
113
114/// (0x23, 0x0B) Skit Item Add Request.
115///
116/// (C -> S) Sent when a client wants to receive an item for a skit (cutscene) or to notify the
117/// server of some event.
118///
119/// Respond with: [`crate::protocol::Packet::SkitItemAddResponse`]
120#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
121#[cfg_attr(feature = "serde", serde(default))]
122#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
123#[Id(0x23, 0x0B)]
124pub struct SkitItemAddRequestPacket {
125    /// Skit ID.
126    pub skit_name: FixedAsciiString<0x20>,
127    pub unk: u32,
128}
129
130/// (0x23, 0x0C) Skit Item Add Response.
131///
132/// (S -> C) Sent in response to the request.
133///
134/// Response to: [`crate::protocol::Packet::SkitItemAddRequest`]
135#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
136#[cfg_attr(feature = "serde", serde(default))]
137#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
138#[Id(0x23, 0x0C)]
139pub struct SkitItemAddResponsePacket {
140    /// Skit ID.
141    pub skit_name: FixedAsciiString<0x20>,
142    pub unk: u32,
143}
144
145/// (0x23, 0x0D) Unknown
146///
147/// (C -> S)
148#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
149#[cfg_attr(feature = "serde", serde(default))]
150#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
151#[Id(0x23, 0x0D)]
152pub struct Unk230DPacket {
153    pub unk: u32,
154}
155
156/// (0x23, 0x0E) Unknown
157///
158/// (S -> C)
159#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
160#[cfg_attr(feature = "serde", serde(default))]
161#[derive(Debug, Clone, Default, PartialEq, PacketReadWrite)]
162#[Id(0x23, 0x0E)]
163#[Flags(Flags::PACKED)]
164#[Magic(0xAC40, 0x99)]
165pub struct Unk230EPacket {
166    pub unk: Vec<Unk230EThing>,
167}
168
169/// (0x23, 0x15) Unknown
170///
171/// (S -> C)
172///
173/// Response to: [`crate::protocol::Packet::StartGame`]
174#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
175#[cfg_attr(feature = "serde", serde(default))]
176#[derive(Debug, Default, Clone, PartialEq, PacketReadWrite)]
177#[Id(0x23, 0x15)]
178pub struct Unk2315Packet {
179    pub unk: FixedBytes<0x1800>,
180    #[cfg(feature = "ngs_packets")]
181    #[cfg_attr(docsrs, doc(cfg(feature = "ngs_packets")))]
182    #[OnlyOn(super::PacketType::NGS)]
183    pub unk2: FixedBytes<0x1E80>,
184}
185
186// ----------------------------------------------------------------
187// Additional structs
188// ----------------------------------------------------------------
189
190#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
191#[derive(Debug, Clone, Copy, Default, PartialEq, HelperReadWrite)]
192pub struct Unk230EThing {
193    pub unk1: u16,
194    pub unk2: u16,
195    pub unk3: u32,
196    pub unk4: ObjectHeader,
197}
198
199/// Flag type.
200#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
201#[derive(Debug, Clone, Copy, Default, PartialEq, HelperReadWrite)]
202#[repr(u32)]
203pub enum FlagType {
204    /// Flag is account related.
205    #[default]
206    #[Read_default]
207    Account,
208    /// Flag is character related.
209    Character,
210}