You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1429 lines
47 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. #![allow(unused_must_use)]
  2. use std::io::{SeekFrom};
  3. use psopacket::{pso_message, PSOPacketData};
  4. use crate::{PSOPacketData, PacketParseError};
  5. pub trait PSOMessage {
  6. const CMD: u8;
  7. fn from_bytes<R: std::io::Read + std::io::Seek>(cur: &mut R) -> Result<Self, PacketParseError> where Self: Sized;
  8. fn as_bytes(&self) -> Vec<u8>;
  9. }
  10. #[pso_message(0x05)]
  11. pub struct PlayerActivatedSwitch {
  12. data: [u8; 8],
  13. }
  14. #[pso_message(0x06)]
  15. pub struct GuildcardSend {
  16. }
  17. #[pso_message(0x06)]
  18. pub struct GuildcardRecv {
  19. guildcard: u32,
  20. name: [u16; 0x18],
  21. team: [u16; 0x10],
  22. desc: [u16; 0x58],
  23. one: u8,
  24. language: u8,
  25. section_id: u8,
  26. class: u8,
  27. }
  28. #[pso_message(0x07)]
  29. pub struct SymbolChat {
  30. unknown1: u32,
  31. sc_data: [u8; 60],
  32. }
  33. #[pso_message(0x0A)]
  34. pub struct MobAttack {
  35. enemy_id: u16,
  36. damage: u16,
  37. flags: u16,
  38. }
  39. #[pso_message(0x0B)]
  40. pub struct BoxAttack {
  41. data: [u8; 8],
  42. }
  43. #[pso_message(0x0C)]
  44. pub struct Unknown0C {
  45. data: [u8; 8],
  46. }
  47. #[pso_message(0x0D)]
  48. pub struct Unknown0D {
  49. data: [u8; 8],
  50. }
  51. #[pso_message(0x12)]
  52. pub struct BossInteractionDragon {
  53. data: [u8; 6],
  54. }
  55. //#[pso_message(0x13)]
  56. //pub struct BossInteractionDeRolLe {
  57. //}
  58. //#[pso_message(0x14)]
  59. //pub struct BossInteractionDeRolLe2 {
  60. //}
  61. //#[pso_message(0x15)]
  62. //pub struct BossInteractionVolOpt {
  63. //}
  64. //#[pso_message(0x16)]
  65. //pub struct BossInteractionVolOpt2 {
  66. //}
  67. //#[pso_message(0x17)]
  68. //pub struct VolOptSecondPhase {
  69. // x: f32,
  70. // y: f32,
  71. // z: f32,
  72. //}
  73. //#[pso_message(0x18)]
  74. //pub struct VolOptSecondPhase2 {
  75. //}
  76. //#[pso_message(0x19)]
  77. //pub struct BossInteractionDarkFalz {
  78. //}
  79. //#[pso_message(0x1B)]
  80. //pub struct PlayerKillActivated {
  81. //}
  82. //#[pso_message(0x1C)]
  83. //pub struct PlayerKillActivated2 {
  84. //}
  85. #[pso_message(0x1F)]
  86. pub struct PlayerChangedMap {
  87. unknown1: u32,
  88. unknown2: u32,
  89. x: f32,
  90. y: f32,
  91. z: f32,
  92. }
  93. #[pso_message(0x1F)]
  94. pub struct PlayerChangedMap2 {
  95. map_area: u16,
  96. _unknown1: u16,
  97. }
  98. #[pso_message(0x20)]
  99. pub struct TellOtherPlayerMyLocation {
  100. map_area: u16,
  101. _unknown1: u16,
  102. x: f32,
  103. y: f32,
  104. z: f32,
  105. unknown2: u32,
  106. }
  107. #[pso_message(0x21)]
  108. pub struct PlayerWarpingToFloor {
  109. area: u8,
  110. data: u16,
  111. }
  112. #[pso_message(0x22)]
  113. pub struct PlayerWarping {
  114. }
  115. #[pso_message(0x23)]
  116. pub struct PlayerDoneChangingMap {
  117. }
  118. #[pso_message(0x24)]
  119. pub struct PlayerTeleported {
  120. x: f32,
  121. y: f32,
  122. z: f32,
  123. }
  124. #[pso_message(0x25)]
  125. pub struct PlayerEquipItem {
  126. item_id: u32,
  127. sub_menu: u8,
  128. unknown1: u16,
  129. }
  130. #[pso_message(0x26)]
  131. pub struct PlayerUnequipItem {
  132. item_id: u32,
  133. unknown1: u32,
  134. }
  135. #[pso_message(0x27)]
  136. pub struct PlayerUseItem {
  137. item_id: u32,
  138. }
  139. #[pso_message(0x28)]
  140. pub struct PlayerFeedMag {
  141. mag_id: u32,
  142. item_id: u32,
  143. }
  144. #[pso_message(0x29)]
  145. pub struct PlayerNoLongerHasItem {
  146. item_id: u32,
  147. amount: u32,
  148. }
  149. #[pso_message(0x2A)]
  150. pub struct PlayerDropItem {
  151. unknown1: u16,
  152. map_area: u16,
  153. item_id: u32,
  154. x: f32,
  155. y: f32,
  156. z: f32,
  157. }
  158. #[pso_message(0x2B)]
  159. pub struct AddItemToInventory {
  160. item_data: [u8; 12],
  161. slot: u32,
  162. item_data2: [u8; 4],
  163. unknown1: u32,
  164. }
  165. #[pso_message(0x2C)]
  166. pub struct InitializeSpeechNpc {
  167. unknown1: u16,
  168. unknown2: u16,
  169. x: f32,
  170. z: f32,
  171. unknown3: f32,
  172. }
  173. #[pso_message(0x2D)]
  174. pub struct FinishSpeechNpc {
  175. }
  176. #[pso_message(0x2F)]
  177. pub struct FinishSpeechNpcBPD {
  178. }
  179. #[pso_message(0x30)]
  180. pub struct PlayerLevelUp {
  181. atp: u16,
  182. mst: u16,
  183. evp: u16,
  184. hp: u16,
  185. dfp: u16,
  186. ata: u16,
  187. lvl: u32,
  188. }
  189. #[pso_message(0x31)]
  190. pub struct PlayerResurrected {
  191. }
  192. #[pso_message(0x32)]
  193. pub struct PlayerResurrectedMedicalCenter {
  194. }
  195. #[pso_message(0x33)]
  196. pub struct PlayerUsedMoonAtomizer {
  197. }
  198. #[pso_message(0x36)]
  199. pub struct PlayerPBDonation {
  200. }
  201. #[pso_message(0x37)]
  202. pub struct PlayerInitiatedPB {
  203. pb_amount: u8,
  204. unknown1: u32,
  205. }
  206. #[pso_message(0x3A)]
  207. pub struct PlayerLeftArea {
  208. }
  209. #[pso_message(0x3B)]
  210. pub struct PlayerSpawnedIntoArea {
  211. }
  212. #[pso_message(0x3E)]
  213. pub struct PlayerStopped {
  214. unknown1: u32,
  215. area: u16,
  216. room: u16,
  217. x: f32,
  218. y: f32,
  219. z: f32,
  220. }
  221. #[pso_message(0x3F)]
  222. pub struct PlayerLoadedIn {
  223. unknown1: u32,
  224. unknown2: u32,
  225. x: f32,
  226. y: f32,
  227. z: f32,
  228. }
  229. #[pso_message(0x40)]
  230. pub struct PlayerWalking {
  231. x: f32,
  232. z: f32,
  233. unknown: f32,
  234. }
  235. #[pso_message(0x42)]
  236. pub struct PlayerRunning {
  237. x: f32,
  238. z: f32,
  239. }
  240. #[pso_message(0x43)]
  241. pub struct ComboStep1 {
  242. data: [u8; 4],
  243. }
  244. #[pso_message(0x44)]
  245. pub struct ComboStep2 {
  246. data: [u8; 4],
  247. }
  248. #[pso_message(0x45)]
  249. pub struct ComboStep3 {
  250. data: [u8; 4],
  251. }
  252. #[pso_message(0x46)]
  253. pub struct ComboStepDone {
  254. data: [u8; 4],
  255. }
  256. #[pso_message(0x47)]
  257. pub struct PlayerTechCast {
  258. technique: u8,
  259. unknown1: u8,
  260. unknown2: u8,
  261. num_of_targets: u8,
  262. }
  263. #[pso_message(0x48)]
  264. pub struct PlayerTechDone {
  265. technique: u8,
  266. unknown1: u8,
  267. level: u8,
  268. unknown2: u8,
  269. }
  270. #[pso_message(0x49)]
  271. pub struct PlayerPBUsed {
  272. pb: u8,
  273. unknown1: u32,
  274. amount: u8,
  275. unknown2: u32,
  276. }
  277. #[pso_message(0x4A)]
  278. pub struct PlayerBlockedDamage {
  279. }
  280. #[pso_message(0x4B)]
  281. pub struct PlayerReceivedDamage {
  282. unknown1: u16,
  283. hp: u16,
  284. unknown2: u32,
  285. }
  286. #[pso_message(0x4C)]
  287. pub struct PlayerReceivedDamage2 {
  288. unknown1: u16,
  289. hp: u16,
  290. unknown2: u32,
  291. }
  292. #[pso_message(0x4D)]
  293. pub struct PlayerDeath {
  294. data: [u8; 4],
  295. }
  296. #[pso_message(0x4E)]
  297. pub struct PlayerPostDeathAnimation {
  298. }
  299. #[pso_message(0x4F)]
  300. pub struct PlayerScapedollResurrection {
  301. }
  302. #[pso_message(0x50)]
  303. pub struct PlayerActivatedSwitch2 {
  304. data: [u16; 2],
  305. }
  306. #[pso_message(0x52)]
  307. pub struct TalkToNpc {
  308. unknown1: u32,
  309. unknown2: u32,
  310. }
  311. //#[pso_message(0x53)]
  312. //pub struct Unknown53 {
  313. //}
  314. #[pso_message(0x55)]
  315. pub struct PlayerWarped {
  316. unknown1: u32,
  317. x: f32,
  318. y: f32,
  319. }
  320. #[pso_message(0x58)]
  321. pub struct LobbyEmote {
  322. emote: u32,
  323. }
  324. #[pso_message(0x59)]
  325. pub struct RemoveItemFromFloor {
  326. client_id: u8,
  327. unknown: u8,
  328. map_area: u8,
  329. unknown2: u8,
  330. item_id: u32,
  331. }
  332. #[pso_message(0x5A)]
  333. pub struct PickupItem {
  334. item_id: u32,
  335. map_area: u8,
  336. unknown: [u8; 3],
  337. }
  338. #[pso_message(0x5D)]
  339. pub struct DropSplitStack {
  340. pub map_area: u8,
  341. pub variety: u8,
  342. pub unknown1: u16,
  343. pub x: f32,
  344. pub z: f32,
  345. pub item_bytes: [u8; 12],
  346. pub item_id: u32,
  347. pub item_bytes2: [u8; 4],
  348. pub unknown2: u32,
  349. }
  350. //#[pso_message(0x5E)]
  351. //pub struct BuyFromShop {
  352. // item_data: u32,
  353. // item_data2: u32,
  354. // item_data3: u32,
  355. // item_id: u32,
  356. // amount: u32,
  357. //}
  358. #[pso_message(0x5F)]
  359. pub struct ItemDrop {
  360. pub map_area: u8,
  361. pub variety: u8,
  362. pub unknown: u16,
  363. pub x: f32,
  364. pub z: f32,
  365. pub y: f32,
  366. pub item_bytes: [u8; 12],
  367. pub item_id: u32,
  368. pub item_bytes2: [u8; 4],
  369. pub unknown2: u32,
  370. }
  371. #[pso_message(0x60)]
  372. pub struct RequestItem {
  373. map_area: u8,
  374. pt_index: u8,
  375. enemy_id: u16,
  376. x: f32,
  377. z: f32,
  378. y: f32,
  379. }
  380. #[pso_message(0x61)]
  381. pub struct MagAnimation {
  382. mag_id: u32,
  383. effect: u8,
  384. unknown1: u16,
  385. }
  386. //#[pso_message(0x63)]
  387. //pub struct FloorItemLimitItemDeletion {
  388. // client_id: u16,
  389. // item_id: u8,
  390. // amount: u8,
  391. //}
  392. #[pso_message(0x66)]
  393. pub struct PlayerUsedStarAtomizer {
  394. }
  395. #[pso_message(0x67)]
  396. pub struct SpawningMonsters {
  397. data: [u8; 12],
  398. }
  399. #[pso_message(0x68)]
  400. pub struct PlayerTelepipe {
  401. }
  402. #[pso_message(0x69)]
  403. pub struct NpcSpawn {
  404. data: [u8; 8],
  405. }
  406. #[pso_message(0x6F)]
  407. pub struct PlayerJoiningGame {
  408. data: [u32; 0x81],
  409. }
  410. #[pso_message(0x71)]
  411. pub struct PlayerJoiningGame2 {
  412. }
  413. #[pso_message(0x72)]
  414. pub struct BurstDone {
  415. }
  416. #[pso_message(0x74)]
  417. pub struct WordSelect {
  418. data: [u8; 28],
  419. }
  420. #[pso_message(0x75)]
  421. pub struct PlayerChangedFloor {
  422. data: [u8; 4],
  423. }
  424. #[pso_message(0x76)]
  425. pub struct KillMonster {
  426. map_area: u16,
  427. data: [u8; 2],
  428. }
  429. //#[pso_message(0x77)]
  430. //pub struct SyncQuestRegister {
  431. //}
  432. //#[pso_message(0x79)]
  433. //pub struct GoGoBall {
  434. //}
  435. //#[pso_message(0x7C)]
  436. //pub struct CmodeData {
  437. //}
  438. //#[pso_message(0x7D)]
  439. //pub struct BmodeData {
  440. //}
  441. #[pso_message(0x83)]
  442. pub struct PlayerTrapSet {
  443. trap_type: u16,
  444. trap_count: u16,
  445. }
  446. //#[pso_message(0x84)]
  447. //pub struct Unknown84 {
  448. //}
  449. //#[pso_message(0x80)]
  450. //pub struct PlayerTrapActivate {
  451. //}
  452. //#[pso_message(0x87)]
  453. //pub struct PlayerShrink {
  454. //}
  455. //#[pso_message(0x88)]
  456. //pub struct PlayerUnshrink {
  457. //}
  458. #[pso_message(0x89)]
  459. pub struct PlayerKilledByMonster {
  460. data: [u8; 4],
  461. }
  462. //#[pso_message(0x8A)]
  463. //pub struct CmodeStatistics {
  464. //}
  465. //#[pso_message(0x8D)]
  466. //pub struct PlayerTechStart {
  467. //}
  468. #[pso_message(0x94)]
  469. pub struct PlayerWarped2 {
  470. }
  471. //#[pso_message(0x97)]
  472. //pub struct CmodeTryAgain {
  473. //}
  474. #[pso_message(0x9A)]
  475. pub struct ModifyPlayerStats {
  476. unknown1: u8,
  477. unknown2: u8,
  478. stat: u8,
  479. amount: u8,
  480. }
  481. //#[pso_message(0x9D)]
  482. //pub struct CmodePartyWipe {
  483. //}
  484. //#[pso_message(0xA0)]
  485. //pub struct BossInteractionGalGryphon {
  486. //}
  487. //#[pso_message(0xA1)]
  488. //pub struct PlayerMoonAtomizerResurrection {
  489. //}
  490. #[pso_message(0xA2)]
  491. pub struct BoxDropRequest {
  492. pub area: u8,
  493. pub unknown1: u8,
  494. pub object_id: u16,
  495. pub x: f32,
  496. pub z: f32,
  497. pub section: u8,
  498. pub unknown2: [u8; 23],
  499. }
  500. //#[pso_message(0xA3)]
  501. //pub struct BossInteractionOlgaFlow {
  502. //}
  503. //#[pso_message(0xA4)]
  504. //pub struct BossInteractionOlgaFlow2 {
  505. //}
  506. //#[pso_message(0xA5)]
  507. //pub struct BossInteractionOlgaFlow3 {
  508. //}
  509. //#[pso_message(0xA6)]
  510. //pub struct TradeRequest {
  511. //}
  512. //#[pso_message(0xA8)]
  513. //pub struct BossInteractionGolDragon {
  514. //}
  515. //#[pso_message(0xA9)]
  516. //pub struct BossInteractionBarbaRay {
  517. //}
  518. //#[pso_message(0xAA)]
  519. //pub struct BossInteractionBarbaRay2 {
  520. //}
  521. #[pso_message(0xAB)]
  522. pub struct PhotonChairSit {
  523. unknown1: u32,
  524. }
  525. //#[pso_message(0xAD)]
  526. //pub struct BossInteractionOlgaFlow4 {
  527. //}
  528. #[pso_message(0xAE)]
  529. pub struct UnknownAE {
  530. unknown1: u32,
  531. unknown2: u32,
  532. unknown3: u32,
  533. }
  534. #[pso_message(0xAF)]
  535. pub struct PhotonChairTurn {
  536. unknown1: u32,
  537. }
  538. #[pso_message(0xB0)]
  539. pub struct PhotonChairMove {
  540. unknown1: u32,
  541. }
  542. //#[pso_message(0xB5)]
  543. //pub struct ShopRequest {
  544. // unknown1: u16,
  545. // shop_type: u8,
  546. //}
  547. //#[pso_message(0xB7)]
  548. //pub struct BuyItem {
  549. // unknown1: u16,
  550. // item_id: u8,
  551. // unknown2: u8,
  552. // shop_item_index: u8,
  553. // amount: u8,
  554. // unknown3: u8,
  555. //}
  556. #[pso_message(0xB8)]
  557. pub struct TekRequest {
  558. item_index: u8,
  559. _unknown1: u8,
  560. _unknown2: u8,
  561. _unknown3: u8,
  562. }
  563. #[pso_message(0xB9)]
  564. pub struct TekPreview {
  565. pub item_bytes: [u8; 12],
  566. pub item_id: u32,
  567. pub item_bytes2: [u8; 4],
  568. }
  569. //#[pso_message(0xBA)]
  570. //pub struct TekAccept {
  571. //}
  572. #[pso_message(0xBB)]
  573. pub struct BankRequest {
  574. unknown: u32,
  575. }
  576. #[pso_message(0xBD)]
  577. pub struct BankInteraction {
  578. item_id: u32,
  579. meseta_amount: u32,
  580. action: u8,
  581. item_amount: u8,
  582. unknown: u16,
  583. }
  584. #[pso_message(0xBE)]
  585. pub struct CreateItem {
  586. item_data: [u8; 12],
  587. item_id: u32,
  588. item_data2: [u8; 4],
  589. unknown: u32,
  590. }
  591. #[pso_message(0xBF)]
  592. pub struct GiveCharacterExp {
  593. exp: u32,
  594. }
  595. //#[pso_message(0xC0)]
  596. //pub struct PlayerSoldItem {
  597. // client_id: u16,
  598. // item_id: u8,
  599. // amount: u8,
  600. //}
  601. //#[pso_message(0xC1)]
  602. //pub struct TeamInvite {
  603. //}
  604. //#[pso_message(0xC2)]
  605. //pub struct AcceptTeamInvite {
  606. //}
  607. #[pso_message(0xC3)]
  608. pub struct DropCoordinates {
  609. map_area: u16,
  610. room: u16,
  611. x: f32,
  612. z: f32,
  613. item_id: u32,
  614. }
  615. #[pso_message(0xC4)]
  616. pub struct SortItems {
  617. item_id: [u8; 30],
  618. }
  619. #[pso_message(0xC5)]
  620. pub struct PlayerUsedMedicalCenter {
  621. }
  622. //#[pso_message(0xC6)]
  623. //pub struct ExperienceSteal {
  624. //}
  625. #[pso_message(0xC7)]
  626. pub struct ChargeAttack {
  627. meseta: u32,
  628. }
  629. #[pso_message(0xC8)]
  630. pub struct RequestExp {
  631. enemy_id: u16,
  632. client_id: u8,
  633. unused: u8,
  634. last_hitter: u32,
  635. }
  636. //#[pso_message(0xC9)]
  637. //pub struct QuestRewardMeseta {
  638. //}
  639. //#[pso_message(0xCA)]
  640. //pub struct QuestRewardItem {
  641. //}
  642. //#[pso_message(0xCB)]
  643. //pub struct TransferItemRequest {
  644. //}
  645. //#[pso_message(0xCC)]
  646. //pub struct ExchangeItemForTeampoints {
  647. //}
  648. //#[pso_message(0xCD)]
  649. //pub struct MasterTransfer {
  650. //}
  651. //#[pso_message(0xCE)]
  652. //pub struct AcceptMasterTransfer {
  653. //}
  654. //#[pso_message(0xCF)]
  655. //pub struct RestartBattle {
  656. //}
  657. //#[pso_message(0xD0)]
  658. //pub struct BmodeLevelUp {
  659. //}
  660. //#[pso_message(0xD1)]
  661. //pub struct CmodeGrave {
  662. //}
  663. //#[pso_message(0xD2)]
  664. //pub struct WriteQuestFlag {
  665. //}
  666. //#[pso_message(0xD5)]
  667. //pub struct QuestItemExchange {
  668. //}
  669. //#[pso_message(0xD6)]
  670. //pub struct WrapItem {
  671. //}
  672. //#[pso_message(0xD7)]
  673. //pub struct PaganiniPDExchange {
  674. //}
  675. //#[pso_message(0xD8)]
  676. //pub struct SrankSpecialModification {
  677. //}
  678. //#[pso_message(0xD9)]
  679. //pub struct MomokaItemShop {
  680. //}
  681. //#[pso_message(0xDA)]
  682. //pub struct WeaponAttributeEnhancement {
  683. //}
  684. //#[pso_message(0xDC)]
  685. //pub struct BossInteractionSaintMillion {
  686. //}
  687. //#[pso_message(0xDE)]
  688. //pub struct GoodLuckQuest {
  689. //}
  690. //#[pso_message(0xDF)]
  691. //pub struct BPDPhotonCrystalExchange {
  692. //}
  693. //#[pso_message(0xE0)]
  694. //pub struct BPDRewards {
  695. //}
  696. //#[pso_message(0xE1)]
  697. //pub struct GallonsPlanQuest {
  698. //}
  699. //#[pso_message(0xE2)]
  700. //pub struct Coren {
  701. //}
  702. #[derive(Debug, Clone, PartialEq)]
  703. pub enum GameMessage {
  704. PlayerActivatedSwitch(PlayerActivatedSwitch),
  705. GuildcardSend(GuildcardSend),
  706. GuildcardRecv(GuildcardRecv),
  707. SymbolChat(SymbolChat),
  708. MobAttack(MobAttack),
  709. BoxAttack(BoxAttack),
  710. Unknown0C(Unknown0C),
  711. Unknown0D(Unknown0D),
  712. BossInteractionDragon(BossInteractionDragon),
  713. //BossInteractionDeRolLe(BossInteractionDeRolLe),
  714. //BossInteractionDeRolLe2(BossInteractionDeRolLe2),
  715. //BossInteractionVolOpt(BossInteractionVolOpt),
  716. //BossInteractionVolOpt2(BossInteractionVolOpt2),
  717. //VolOptSecondPhase(VolOptSecondPhase),
  718. //VolOptSecondPhase2(VolOptSecondPhase2),
  719. //BossInteractionDarkFalz(BossInteractionDarkFalz),
  720. //PlayerKillActivated(PlayerKillActivated),
  721. //PlayerKillActivated2(PlayerKillActivated2),
  722. PlayerChangedMap(PlayerChangedMap),
  723. PlayerChangedMap2(PlayerChangedMap2),
  724. TellOtherPlayerMyLocation(TellOtherPlayerMyLocation),
  725. PlayerWarpingToFloor(PlayerWarpingToFloor),
  726. PlayerWarping(PlayerWarping),
  727. PlayerDoneChangingMap(PlayerDoneChangingMap),
  728. PlayerTeleported(PlayerTeleported),
  729. PlayerEquipItem(PlayerEquipItem),
  730. PlayerUnequipItem(PlayerUnequipItem),
  731. PlayerUseItem(PlayerUseItem),
  732. PlayerFeedMag(PlayerFeedMag),
  733. PlayerDropItem(PlayerDropItem),
  734. PlayerNoLongerHasItem(PlayerNoLongerHasItem),
  735. AddItemToInventory(AddItemToInventory),
  736. InitializeSpeechNpc(InitializeSpeechNpc),
  737. FinishSpeechNpc(FinishSpeechNpc),
  738. FinishSpeechNpcBPD(FinishSpeechNpcBPD),
  739. PlayerLevelUp(PlayerLevelUp),
  740. PlayerResurrected(PlayerResurrected),
  741. PlayerResurrectedMedicalCenter(PlayerResurrectedMedicalCenter),
  742. PlayerUsedMoonAtomizer(PlayerUsedMoonAtomizer),
  743. PlayerPBDonation(PlayerPBDonation),
  744. PlayerInitiatedPB(PlayerInitiatedPB),
  745. PlayerLeftArea(PlayerLeftArea),
  746. PlayerSpawnedIntoArea(PlayerSpawnedIntoArea),
  747. PlayerStopped(PlayerStopped),
  748. PlayerLoadedIn(PlayerLoadedIn),
  749. PlayerWalking(PlayerWalking),
  750. PlayerRunning(PlayerRunning),
  751. ComboStep1(ComboStep1),
  752. ComboStep2(ComboStep2),
  753. ComboStep3(ComboStep3),
  754. ComboStepDone(ComboStepDone),
  755. PlayerTechCast(PlayerTechCast),
  756. PlayerTechDone(PlayerTechDone),
  757. PlayerPBUsed(PlayerPBUsed),
  758. PlayerBlockedDamage(PlayerBlockedDamage),
  759. PlayerReceivedDamage(PlayerReceivedDamage),
  760. PlayerReceivedDamage2(PlayerReceivedDamage2),
  761. PlayerDeath(PlayerDeath),
  762. PlayerPostDeathAnimation(PlayerPostDeathAnimation),
  763. PlayerScapedollResurrection(PlayerScapedollResurrection),
  764. PlayerActivatedSwitch2(PlayerActivatedSwitch2),
  765. TalkToNpc(TalkToNpc),
  766. //Unknown53(Unknown53),
  767. PlayerWarped(PlayerWarped),
  768. LobbyEmote(LobbyEmote),
  769. RemoveItemFromFloor(RemoveItemFromFloor),
  770. PickupItem(PickupItem),
  771. DropSplitStack(DropSplitStack),
  772. //BuyFromShop(BuyFromShop),
  773. ItemDrop(ItemDrop),
  774. RequestItem(RequestItem),
  775. MagAnimation(MagAnimation),
  776. //FloorItemLimitItemDeletion(FloorItemLimitItemDeletion),
  777. PlayerUsedStarAtomizer(PlayerUsedStarAtomizer),
  778. SpawningMonsters(SpawningMonsters),
  779. PlayerTelepipe(PlayerTelepipe),
  780. NpcSpawn(NpcSpawn),
  781. PlayerJoiningGame(PlayerJoiningGame),
  782. PlayerJoiningGame2(PlayerJoiningGame2),
  783. BurstDone(BurstDone),
  784. WordSelect(WordSelect),
  785. PlayerChangedFloor(PlayerChangedFloor),
  786. KillMonster(KillMonster),
  787. //SyncQuestRegister(SyncQuestRegister),
  788. //GoGoBall(GoGoBall),
  789. //CmodeData(CmodeData),
  790. //BmodeData(BmodeData),
  791. PlayerTrapSet(PlayerTrapSet),
  792. //Unknown84(Unknown84),
  793. //PlayerTrapActivate(PlayerTrapActivate),
  794. //PlayerShrink(PlayerShrink),
  795. //PlayerUnshrink(PlayerUnshrink),
  796. PlayerKilledByMonster(PlayerKilledByMonster),
  797. //CmodeStatistics(CmodeStatistics),
  798. //PlayerTechStart(PlayerTechStart),
  799. PlayerWarped2(PlayerWarped2),
  800. //CmodeTryAgain(CmodeTryAgain),
  801. ModifyPlayerStats(ModifyPlayerStats),
  802. //CmodePartyWipe(CmodePartyWipe),
  803. //BossInteractionGalGryphon(BossInteractionGalGryphon),
  804. //PlayerMoonAtomizerResurrection(PlayerMoonAtomizerResurrection),
  805. BoxDropRequest(BoxDropRequest),
  806. //BossInteractionOlgaFlow(BossInteractionOlgaFlow),
  807. //BossInteractionOlgaFlow2(BossInteractionOlgaFlow2),
  808. //BossInteractionOlgaFlow3(BossInteractionOlgaFlow3),
  809. //TradeRequest(TradeRequest),
  810. //BossInteractionGolDragon(BossInteractionGolDragon),
  811. //BossInteractionBarbaRay(BossInteractionBarbaRay),
  812. //BossInteractionBarbaRay2(BossInteractionBarbaRay2),
  813. PhotonChairSit(PhotonChairSit),
  814. //BossInteractionOlgaFlow4(BossInteractionOlgaFlow4),
  815. UnknownAE(UnknownAE),
  816. PhotonChairTurn(PhotonChairTurn),
  817. PhotonChairMove(PhotonChairMove),
  818. //ShopRequest(ShopRequest),
  819. //BuyItem(BuyItem),
  820. TekRequest(TekRequest),
  821. TekPreview(TekPreview),
  822. //TekAccept(TekAccept),
  823. BankRequest(BankRequest),
  824. BankInteraction(BankInteraction),
  825. //PlayerSoldItem(PlayerSoldItem),
  826. //TeamInvite(TeamInvite),
  827. //AcceptTeamInvite(AcceptTeamInvite),
  828. CreateItem(CreateItem),
  829. GiveCharacterExp(GiveCharacterExp),
  830. DropCoordinates(DropCoordinates),
  831. SortItems(SortItems),
  832. PlayerUsedMedicalCenter(PlayerUsedMedicalCenter),
  833. //ExperienceSteal(ExperienceSteal),
  834. ChargeAttack(ChargeAttack),
  835. RequestExp(RequestExp),
  836. //QuestRewardMeseta(QuestRewardMeseta),
  837. //QuestRewardItem(QuestRewardItem),
  838. //TransferItemRequest(TransferItemRequest),
  839. //ExchangeItemForTeampoints(ExchangeItemForTeampoints),
  840. //MasterTransfer(MasterTransfer),
  841. //AcceptMasterTransfer(AcceptMasterTransfer),
  842. //RestartBattle(RestartBattle),
  843. //BmodeLevelUp(BmodeLevelUp),
  844. //CmodeGrave(CmodeGrave),
  845. //WriteQuestFlag(WriteQuestFlag),
  846. //QuestItemExchange(QuestItemExchange),
  847. //WrapItem(WrapItem),
  848. //PaganiniPDExchange(PaganiniPDExchange),
  849. //SrankSpecialModification(SrankSpecialModification),
  850. //MomokaItemShop(MomokaItemShop),
  851. //WeaponAttributeEnhancement(WeaponAttributeEnhancement),
  852. //BossInteractionSaintMillion(BossInteractionSaintMillion),
  853. //GoodLuckQuest(GoodLuckQuest),
  854. //BPDPhotonCrystalExchange(BPDPhotonCrystalExchange),
  855. //BPDRewards(BPDRewards),
  856. //GallonsPlanQuest(GallonsPlanQuest),
  857. //Coren(Coren),
  858. }
  859. impl PSOPacketData for GameMessage {
  860. fn from_bytes<R: std::io::Read + std::io::Seek>(mut cur: &mut R) -> Result<Self, PacketParseError> {
  861. let mut byte = [0u8; 1];
  862. let mut len = [0u8; 1];
  863. cur.read(&mut byte);
  864. cur.read(&mut len);
  865. cur.seek(SeekFrom::Current(-2)); // Cursor doesn't implement Peek?
  866. match byte[0] {
  867. PlayerActivatedSwitch::CMD => Ok(GameMessage::PlayerActivatedSwitch(PlayerActivatedSwitch::from_bytes(&mut cur)?)),
  868. GuildcardSend::CMD if len[0] == 1 => Ok(GameMessage::GuildcardSend(GuildcardSend::from_bytes(&mut cur)?)),
  869. GuildcardRecv::CMD => Ok(GameMessage::GuildcardRecv(GuildcardRecv::from_bytes(&mut cur)?)),
  870. SymbolChat::CMD => Ok(GameMessage::SymbolChat(SymbolChat::from_bytes(&mut cur)?)),
  871. MobAttack::CMD => Ok(GameMessage::MobAttack(MobAttack::from_bytes(&mut cur)?)),
  872. BoxAttack::CMD => Ok(GameMessage::BoxAttack(BoxAttack::from_bytes(&mut cur)?)),
  873. Unknown0C::CMD => Ok(GameMessage::Unknown0C(Unknown0C::from_bytes(&mut cur)?)),
  874. Unknown0D::CMD => Ok(GameMessage::Unknown0D(Unknown0D::from_bytes(&mut cur)?)),
  875. BossInteractionDragon::CMD => Ok(GameMessage::BossInteractionDragon(BossInteractionDragon::from_bytes(&mut cur)?)),
  876. //BossInteractionDeRolLe::CMD => Ok(GameMessage::BossInteractionDeRolLe(BossInteractionDeRolLe::from_bytes(&mut cur)?)),
  877. //BossInteractionDeRolLe2::CMD => Ok(GameMessage::BossInteractionDeRolLe2(BossInteractionDeRolLe2::from_bytes(&mut cur)?)),
  878. //BossInteractionVolOpt::CMD => Ok(GameMessage::BossInteractionVolOpt(BossInteractionVolOpt::from_bytes(&mut cur)?)),
  879. //BossInteractionVolOpt2::CMD => Ok(GameMessage::BossInteractionVolOpt2(BossInteractionVolOpt2::from_bytes(&mut cur)?)),
  880. //VolOptSecondPhase::CMD => Ok(GameMessage::VolOptSecondPhase(VolOptSecondPhase::from_bytes(&mut cur)?)),
  881. //VolOptSecondPhase2::CMD => Ok(GameMessage::VolOptSecondPhase2(VolOptSecondPhase2::from_bytes(&mut cur)?)),
  882. //BossInteractionDarkFalz::CMD => Ok(GameMessage::BossInteractionDarkFalz(BossInteractionDarkFalz::from_bytes(&mut cur)?)),
  883. //PlayerKillActivated::CMD => Ok(GameMessage::PlayerKillActivated(PlayerKillActivated::from_bytes(&mut cur)?)),
  884. //PlayerKillActivated2::CMD => Ok(GameMessage::PlayerKillActivated2(PlayerKillActivated2::from_bytes(&mut cur)?)),
  885. PlayerChangedMap::CMD if len[0] == 6 => Ok(GameMessage::PlayerChangedMap(PlayerChangedMap::from_bytes(&mut cur)?)),
  886. PlayerChangedMap2::CMD if len[0] == 2 => Ok(GameMessage::PlayerChangedMap2(PlayerChangedMap2::from_bytes(&mut cur)?)),
  887. TellOtherPlayerMyLocation::CMD => Ok(GameMessage::TellOtherPlayerMyLocation(TellOtherPlayerMyLocation::from_bytes(&mut cur)?)),
  888. PlayerWarpingToFloor::CMD => Ok(GameMessage::PlayerWarpingToFloor(PlayerWarpingToFloor::from_bytes(&mut cur)?)),
  889. PlayerWarping::CMD => Ok(GameMessage::PlayerWarping(PlayerWarping::from_bytes(&mut cur)?)),
  890. PlayerDoneChangingMap::CMD => Ok(GameMessage::PlayerDoneChangingMap(PlayerDoneChangingMap::from_bytes(&mut cur)?)),
  891. PlayerTeleported::CMD => Ok(GameMessage::PlayerTeleported(PlayerTeleported::from_bytes(&mut cur)?)),
  892. PlayerEquipItem::CMD => Ok(GameMessage::PlayerEquipItem(PlayerEquipItem::from_bytes(&mut cur)?)),
  893. PlayerUnequipItem::CMD => Ok(GameMessage::PlayerUnequipItem(PlayerUnequipItem::from_bytes(&mut cur)?)),
  894. PlayerUseItem::CMD => Ok(GameMessage::PlayerUseItem(PlayerUseItem::from_bytes(&mut cur)?)),
  895. PlayerFeedMag::CMD => Ok(GameMessage::PlayerFeedMag(PlayerFeedMag::from_bytes(&mut cur)?)),
  896. PlayerDropItem::CMD => Ok(GameMessage::PlayerDropItem(PlayerDropItem::from_bytes(&mut cur)?)),
  897. PlayerNoLongerHasItem::CMD => Ok(GameMessage::PlayerNoLongerHasItem(PlayerNoLongerHasItem::from_bytes(&mut cur)?)),
  898. AddItemToInventory::CMD => Ok(GameMessage::AddItemToInventory(AddItemToInventory::from_bytes(&mut cur)?)),
  899. InitializeSpeechNpc::CMD => Ok(GameMessage::InitializeSpeechNpc(InitializeSpeechNpc::from_bytes(&mut cur)?)),
  900. FinishSpeechNpc::CMD => Ok(GameMessage::FinishSpeechNpc(FinishSpeechNpc::from_bytes(&mut cur)?)),
  901. FinishSpeechNpcBPD::CMD => Ok(GameMessage::FinishSpeechNpcBPD(FinishSpeechNpcBPD::from_bytes(&mut cur)?)),
  902. PlayerLevelUp::CMD => Ok(GameMessage::PlayerLevelUp(PlayerLevelUp::from_bytes(&mut cur)?)),
  903. PlayerResurrected::CMD => Ok(GameMessage::PlayerResurrected(PlayerResurrected::from_bytes(&mut cur)?)),
  904. PlayerResurrectedMedicalCenter::CMD => Ok(GameMessage::PlayerResurrectedMedicalCenter(PlayerResurrectedMedicalCenter::from_bytes(&mut cur)?)),
  905. PlayerUsedMoonAtomizer::CMD => Ok(GameMessage::PlayerUsedMoonAtomizer(PlayerUsedMoonAtomizer::from_bytes(&mut cur)?)),
  906. PlayerPBDonation::CMD => Ok(GameMessage::PlayerPBDonation(PlayerPBDonation::from_bytes(&mut cur)?)),
  907. PlayerInitiatedPB::CMD => Ok(GameMessage::PlayerInitiatedPB(PlayerInitiatedPB::from_bytes(&mut cur)?)),
  908. PlayerLeftArea::CMD => Ok(GameMessage::PlayerLeftArea(PlayerLeftArea::from_bytes(&mut cur)?)),
  909. PlayerSpawnedIntoArea::CMD => Ok(GameMessage::PlayerSpawnedIntoArea(PlayerSpawnedIntoArea::from_bytes(&mut cur)?)),
  910. PlayerStopped::CMD => Ok(GameMessage::PlayerStopped(PlayerStopped::from_bytes(&mut cur)?)),
  911. PlayerLoadedIn::CMD => Ok(GameMessage::PlayerLoadedIn(PlayerLoadedIn::from_bytes(&mut cur)?)),
  912. PlayerWalking::CMD => Ok(GameMessage::PlayerWalking(PlayerWalking::from_bytes(&mut cur)?)),
  913. PlayerRunning::CMD => Ok(GameMessage::PlayerRunning(PlayerRunning::from_bytes(&mut cur)?)),
  914. ComboStep1::CMD => Ok(GameMessage::ComboStep1(ComboStep1::from_bytes(&mut cur)?)),
  915. ComboStep2::CMD => Ok(GameMessage::ComboStep2(ComboStep2::from_bytes(&mut cur)?)),
  916. ComboStep3::CMD => Ok(GameMessage::ComboStep3(ComboStep3::from_bytes(&mut cur)?)),
  917. ComboStepDone::CMD => Ok(GameMessage::ComboStepDone(ComboStepDone::from_bytes(&mut cur)?)),
  918. PlayerTechCast::CMD => Ok(GameMessage::PlayerTechCast(PlayerTechCast::from_bytes(&mut cur)?)),
  919. PlayerTechDone::CMD => Ok(GameMessage::PlayerTechDone(PlayerTechDone::from_bytes(&mut cur)?)),
  920. PlayerPBUsed::CMD => Ok(GameMessage::PlayerPBUsed(PlayerPBUsed::from_bytes(&mut cur)?)),
  921. PlayerBlockedDamage::CMD => Ok(GameMessage::PlayerBlockedDamage(PlayerBlockedDamage::from_bytes(&mut cur)?)),
  922. PlayerReceivedDamage::CMD => Ok(GameMessage::PlayerReceivedDamage(PlayerReceivedDamage::from_bytes(&mut cur)?)),
  923. PlayerReceivedDamage2::CMD => Ok(GameMessage::PlayerReceivedDamage2(PlayerReceivedDamage2::from_bytes(&mut cur)?)),
  924. PlayerDeath::CMD => Ok(GameMessage::PlayerDeath(PlayerDeath::from_bytes(&mut cur)?)),
  925. PlayerPostDeathAnimation::CMD => Ok(GameMessage::PlayerPostDeathAnimation(PlayerPostDeathAnimation::from_bytes(&mut cur)?)),
  926. PlayerScapedollResurrection::CMD => Ok(GameMessage::PlayerScapedollResurrection(PlayerScapedollResurrection::from_bytes(&mut cur)?)),
  927. PlayerActivatedSwitch2::CMD => Ok(GameMessage::PlayerActivatedSwitch2(PlayerActivatedSwitch2::from_bytes(&mut cur)?)),
  928. TalkToNpc::CMD => Ok(GameMessage::TalkToNpc(TalkToNpc::from_bytes(&mut cur)?)),
  929. //Unknown53::CMD => Ok(GameMessage::Unknown53(Unknown53::from_bytes(&mut cur)?)),
  930. PlayerWarped::CMD => Ok(GameMessage::PlayerWarped(PlayerWarped::from_bytes(&mut cur)?)),
  931. LobbyEmote::CMD => Ok(GameMessage::LobbyEmote(LobbyEmote::from_bytes(&mut cur)?)),
  932. RemoveItemFromFloor::CMD => Ok(GameMessage::RemoveItemFromFloor(RemoveItemFromFloor::from_bytes(&mut cur)?)),
  933. PickupItem::CMD => Ok(GameMessage::PickupItem(PickupItem::from_bytes(&mut cur)?)),
  934. DropSplitStack::CMD => Ok(GameMessage::DropSplitStack(DropSplitStack::from_bytes(&mut cur)?)),
  935. //BuyFromShop::CMD => Ok(GameMessage::BuyFromShop(BuyFromShop::from_bytes(&mut cur)?)),
  936. ItemDrop::CMD => Ok(GameMessage::ItemDrop(ItemDrop::from_bytes(&mut cur)?)),
  937. RequestItem::CMD => Ok(GameMessage::RequestItem(RequestItem::from_bytes(&mut cur)?)),
  938. MagAnimation::CMD => Ok(GameMessage::MagAnimation(MagAnimation::from_bytes(&mut cur)?)),
  939. //FloorItemLimitItemDeletion::CMD => Ok(GameMessage::FloorItemLimitItemDeletion(FloorItemLimitItemDeletion::from_bytes(&mut cur)?)),
  940. PlayerUsedStarAtomizer::CMD => Ok(GameMessage::PlayerUsedStarAtomizer(PlayerUsedStarAtomizer::from_bytes(&mut cur)?)),
  941. SpawningMonsters::CMD => Ok(GameMessage::SpawningMonsters(SpawningMonsters::from_bytes(&mut cur)?)),
  942. PlayerTelepipe::CMD => Ok(GameMessage::PlayerTelepipe(PlayerTelepipe::from_bytes(&mut cur)?)),
  943. NpcSpawn::CMD => Ok(GameMessage::NpcSpawn(NpcSpawn::from_bytes(&mut cur)?)),
  944. PlayerJoiningGame::CMD => Ok(GameMessage::PlayerJoiningGame(PlayerJoiningGame::from_bytes(&mut cur)?)),
  945. PlayerJoiningGame2::CMD => Ok(GameMessage::PlayerJoiningGame2(PlayerJoiningGame2::from_bytes(&mut cur)?)),
  946. BurstDone::CMD => Ok(GameMessage::BurstDone(BurstDone::from_bytes(&mut cur)?)),
  947. WordSelect::CMD => Ok(GameMessage::WordSelect(WordSelect::from_bytes(&mut cur)?)),
  948. PlayerChangedFloor::CMD => Ok(GameMessage::PlayerChangedFloor(PlayerChangedFloor::from_bytes(&mut cur)?)),
  949. KillMonster::CMD => Ok(GameMessage::KillMonster(KillMonster::from_bytes(&mut cur)?)),
  950. //SyncQuestRegister::CMD => Ok(GameMessage::SyncQuestRegister(SyncQuestRegister::from_bytes(&mut cur)?)),
  951. //GoGoBall::CMD => Ok(GameMessage::GoGoBall(GoGoBall::from_bytes(&mut cur)?)),
  952. //CmodeData::CMD => Ok(GameMessage::CmodeData(CmodeData::from_bytes(&mut cur)?)),
  953. //BmodeData::CMD => Ok(GameMessage::BmodeData(BmodeData::from_bytes(&mut cur)?)),
  954. PlayerTrapSet::CMD => Ok(GameMessage::PlayerTrapSet(PlayerTrapSet::from_bytes(&mut cur)?)),
  955. //Unknown84::CMD => Ok(GameMessage::Unknown84(Unknown84::from_bytes(&mut cur)?)),
  956. //PlayerTrapActivate::CMD => Ok(GameMessage::PlayerTrapActivate(PlayerTrapActivate::from_bytes(&mut cur)?)),
  957. //PlayerShrink::CMD => Ok(GameMessage::PlayerShrink(PlayerShrink::from_bytes(&mut cur)?)),
  958. //PlayerUnshrink::CMD => Ok(GameMessage::PlayerUnshrink(PlayerUnshrink::from_bytes(&mut cur)?)),
  959. PlayerKilledByMonster::CMD => Ok(GameMessage::PlayerKilledByMonster(PlayerKilledByMonster::from_bytes(&mut cur)?)),
  960. //CmodeStatistics::CMD => Ok(GameMessage::CmodeStatistics(CmodeStatistics::from_bytes(&mut cur)?)),
  961. //PlayerTechStart::CMD => Ok(GameMessage::PlayerTechStart(PlayerTechStart::from_bytes(&mut cur)?)),
  962. PlayerWarped2::CMD => Ok(GameMessage::PlayerWarped2(PlayerWarped2::from_bytes(&mut cur)?)),
  963. //CmodeTryAgain::CMD => Ok(GameMessage::CmodeTryAgain(CmodeTryAgain::from_bytes(&mut cur)?)),
  964. ModifyPlayerStats::CMD => Ok(GameMessage::ModifyPlayerStats(ModifyPlayerStats::from_bytes(&mut cur)?)),
  965. //CmodePartyWipe::CMD => Ok(GameMessage::CmodePartyWipe(CmodePartyWipe::from_bytes(&mut cur)?)),
  966. //BossInteractionGalGryphon::CMD => Ok(GameMessage::BossInteractionGalGryphon(BossInteractionGalGryphon::from_bytes(&mut cur)?)),
  967. //PlayerMoonAtomizerResurrection::CMD => Ok(GameMessage::PlayerMoonAtomizerResurrection(PlayerMoonAtomizerResurrection::from_bytes(&mut cur)?)),
  968. BoxDropRequest::CMD => Ok(GameMessage::BoxDropRequest(BoxDropRequest::from_bytes(&mut cur)?)),
  969. //BossInteractionOlgaFlow::CMD => Ok(GameMessage::BossInteractionOlgaFlow(BossInteractionOlgaFlow::from_bytes(&mut cur)?)),
  970. //BossInteractionOlgaFlow2::CMD => Ok(GameMessage::BossInteractionOlgaFlow2(BossInteractionOlgaFlow2::from_bytes(&mut cur)?)),
  971. //BossInteractionOlgaFlow3::CMD => Ok(GameMessage::BossInteractionOlgaFlow3(BossInteractionOlgaFlow3::from_bytes(&mut cur)?)),
  972. //TradeRequest::CMD => Ok(GameMessage::TradeRequest(TradeRequest::from_bytes(&mut cur)?)),
  973. //BossInteractionGolDragon::CMD => Ok(GameMessage::BossInteractionGolDragon(BossInteractionGolDragon::from_bytes(&mut cur)?)),
  974. //BossInteractionBarbaRay::CMD => Ok(GameMessage::BossInteractionBarbaRay(BossInteractionBarbaRay::from_bytes(&mut cur)?)),
  975. //BossInteractionBarbaRay2::CMD => Ok(GameMessage::BossInteractionBarbaRay2(BossInteractionBarbaRay2::from_bytes(&mut cur)?)),
  976. PhotonChairSit::CMD => Ok(GameMessage::PhotonChairSit(PhotonChairSit::from_bytes(&mut cur)?)),
  977. //BossInteractionOlgaFlow4::CMD => Ok(GameMessage::BossInteractionOlgaFlow4(BossInteractionOlgaFlow4::from_bytes(&mut cur)?)),
  978. UnknownAE::CMD => Ok(GameMessage::UnknownAE(UnknownAE::from_bytes(&mut cur)?)),
  979. PhotonChairTurn::CMD => Ok(GameMessage::PhotonChairTurn(PhotonChairTurn::from_bytes(&mut cur)?)),
  980. PhotonChairMove::CMD => Ok(GameMessage::PhotonChairMove(PhotonChairMove::from_bytes(&mut cur)?)),
  981. //ShopRequest::CMD => Ok(GameMessage::ShopRequest(ShopRequest::from_bytes(&mut cur)?)),
  982. //BuyItem::CMD => Ok(GameMessage::BuyItem(BuyItem::from_bytes(&mut cur)?)),
  983. TekRequest::CMD => Ok(GameMessage::TekRequest(TekRequest::from_bytes(&mut cur)?)),
  984. TekPreview::CMD => Ok(GameMessage::TekPreview(TekPreview::from_bytes(&mut cur)?)),
  985. //TekAccept::CMD => Ok(GameMessage::TekAccept(TekAccept::from_bytes(&mut cur)?)),
  986. BankRequest::CMD => Ok(GameMessage::BankRequest(BankRequest::from_bytes(&mut cur)?)),
  987. BankInteraction::CMD => Ok(GameMessage::BankInteraction(BankInteraction::from_bytes(&mut cur)?)),
  988. //PlayerSoldItem::CMD => Ok(GameMessage::PlayerSoldItem(PlayerSoldItem::from_bytes(&mut cur)?)),
  989. //TeamInvite::CMD => Ok(GameMessage::TeamInvite(TeamInvite::from_bytes(&mut cur)?)),
  990. //AcceptTeamInvite::CMD => Ok(GameMessage::AcceptTeamInvite(AcceptTeamInvite::from_bytes(&mut cur)?)),
  991. CreateItem::CMD => Ok(GameMessage::CreateItem(CreateItem::from_bytes(&mut cur)?)),
  992. GiveCharacterExp::CMD => Ok(GameMessage::GiveCharacterExp(GiveCharacterExp::from_bytes(&mut cur)?)),
  993. DropCoordinates::CMD => Ok(GameMessage::DropCoordinates(DropCoordinates::from_bytes(&mut cur)?)),
  994. SortItems::CMD => Ok(GameMessage::SortItems(SortItems::from_bytes(&mut cur)?)),
  995. PlayerUsedMedicalCenter::CMD => Ok(GameMessage::PlayerUsedMedicalCenter(PlayerUsedMedicalCenter::from_bytes(&mut cur)?)),
  996. //ExperienceSteal::CMD => Ok(GameMessage::ExperienceSteal(ExperienceSteal::from_bytes(&mut cur)?)),
  997. ChargeAttack::CMD => Ok(GameMessage::ChargeAttack(ChargeAttack::from_bytes(&mut cur)?)),
  998. RequestExp::CMD => Ok(GameMessage::RequestExp(RequestExp::from_bytes(&mut cur)?)),
  999. //QuestRewardMeseta::CMD => Ok(GameMessage::QuestRewardMeseta(QuestRewardMeseta::from_bytes(&mut cur)?)),
  1000. //QuestRewardItem::CMD => Ok(GameMessage::QuestRewardItem(QuestRewardItem::from_bytes(&mut cur)?)),
  1001. //TransferItemRequest::CMD => Ok(GameMessage::TransferItemRequest(TransferItemRequest::from_bytes(&mut cur)?)),
  1002. //ExchangeItemForTeampoints::CMD => Ok(GameMessage::ExchangeItemForTeampoints(ExchangeItemForTeampoints::from_bytes(&mut cur)?)),
  1003. //MasterTransfer::CMD => Ok(GameMessage::MasterTransfer(MasterTransfer::from_bytes(&mut cur)?)),
  1004. //AcceptMasterTransfer::CMD => Ok(GameMessage::AcceptMasterTransfer(AcceptMasterTransfer::from_bytes(&mut cur)?)),
  1005. //RestartBattle::CMD => Ok(GameMessage::RestartBattle(RestartBattle::from_bytes(&mut cur)?)),
  1006. //BmodeLevelUp::CMD => Ok(GameMessage::BmodeLevelUp(BmodeLevelUp::from_bytes(&mut cur)?)),
  1007. //CmodeGrave::CMD => Ok(GameMessage::CmodeGrave(CmodeGrave::from_bytes(&mut cur)?)),
  1008. //WriteQuestFlag::CMD => Ok(GameMessage::WriteQuestFlag(WriteQuestFlag::from_bytes(&mut cur)?)),
  1009. //QuestItemExchange::CMD => Ok(GameMessage::QuestItemExchange(QuestItemExchange::from_bytes(&mut cur)?)),
  1010. //WrapItem::CMD => Ok(GameMessage::WrapItem(WrapItem::from_bytes(&mut cur)?)),
  1011. //PaganiniPDExchange::CMD => Ok(GameMessage::PaganiniPDExchange(PaganiniPDExchange::from_bytes(&mut cur)?)),
  1012. //SrankSpecialModification::CMD => Ok(GameMessage::SrankSpecialModification(SrankSpecialModification::from_bytes(&mut cur)?)),
  1013. //MomokaItemShop::CMD => Ok(GameMessage::MomokaItemShop(MomokaItemShop::from_bytes(&mut cur)?)),
  1014. //WeaponAttributeEnhancement::CMD => Ok(GameMessage::WeaponAttributeEnhancement(WeaponAttributeEnhancement::from_bytes(&mut cur)?)),
  1015. //BossInteractionSaintMillion::CMD => Ok(GameMessage::BossInteractionSaintMillion(BossInteractionSaintMillion::from_bytes(&mut cur)?)),
  1016. //GoodLuckQuest::CMD => Ok(GameMessage::GoodLuckQuest(GoodLuckQuest::from_bytes(&mut cur)?)),
  1017. //BPDPhotonCrystalExchange::CMD => Ok(GameMessage::BPDPhotonCrystalExchange(BPDPhotonCrystalExchange::from_bytes(&mut cur)?)),
  1018. //BPDRewards::CMD => Ok(GameMessage::BPDRewards(BPDRewards::from_bytes(&mut cur)?)),
  1019. //GallonsPlanQuest::CMD => Ok(GameMessage::GallonsPlanQuest(GallonsPlanQuest::from_bytes(&mut cur)?)),
  1020. //Coren::CMD => Ok(GameMessage::Coren(Coren::from_bytes(&mut cur)?)),
  1021. _ => Err(PacketParseError::UnknownMessage(byte[0],
  1022. {
  1023. let mut b = vec![0; len[0] as usize * 4];
  1024. cur.read(&mut b).unwrap();
  1025. b.to_vec()
  1026. }
  1027. )),
  1028. }
  1029. }
  1030. fn as_bytes(&self) -> Vec<u8> {
  1031. match self {
  1032. GameMessage::PlayerActivatedSwitch(data) => data.as_bytes(),
  1033. GameMessage::GuildcardSend(data) => data.as_bytes(),
  1034. GameMessage::GuildcardRecv(data) => data.as_bytes(),
  1035. GameMessage::SymbolChat(data) => data.as_bytes(),
  1036. GameMessage::MobAttack(data) => data.as_bytes(),
  1037. GameMessage::BoxAttack(data) => data.as_bytes(),
  1038. GameMessage::Unknown0C(data) => data.as_bytes(),
  1039. GameMessage::Unknown0D(data) => data.as_bytes(),
  1040. GameMessage::BossInteractionDragon(data) => data.as_bytes(),
  1041. //GameMessage::BossInteractionDeRolLe(data) => data.as_bytes(),
  1042. //GameMessage::BossInteractionDeRolLe2(data) => data.as_bytes(),
  1043. //GameMessage::BossInteractionVolOpt(data) => data.as_bytes(),
  1044. //GameMessage::BossInteractionVolOpt2(data) => data.as_bytes(),
  1045. //GameMessage::VolOptSecondPhase(data) => data.as_bytes(),
  1046. //GameMessage::VolOptSecondPhase2(data) => data.as_bytes(),
  1047. //GameMessage::BossInteractionDarkFalz(data) => data.as_bytes(),
  1048. //GameMessage::PlayerKillActivated(data) => data.as_bytes(),
  1049. //GameMessage::PlayerKillActivated2(data) => data.as_bytes(),
  1050. GameMessage::PlayerChangedMap(data) => data.as_bytes(),
  1051. GameMessage::PlayerChangedMap2(data) => data.as_bytes(),
  1052. GameMessage::TellOtherPlayerMyLocation(data) => data.as_bytes(),
  1053. GameMessage::PlayerWarpingToFloor(data) => data.as_bytes(),
  1054. GameMessage::PlayerWarping(data) => data.as_bytes(),
  1055. GameMessage::PlayerDoneChangingMap(data) => data.as_bytes(),
  1056. GameMessage::PlayerTeleported(data) => data.as_bytes(),
  1057. GameMessage::PlayerEquipItem(data) => data.as_bytes(),
  1058. GameMessage::PlayerUnequipItem(data) => data.as_bytes(),
  1059. GameMessage::PlayerUseItem(data) => data.as_bytes(),
  1060. GameMessage::PlayerFeedMag(data) => data.as_bytes(),
  1061. GameMessage::PlayerDropItem(data) => data.as_bytes(),
  1062. GameMessage::PlayerNoLongerHasItem(data) => data.as_bytes(),
  1063. GameMessage::AddItemToInventory(data) => data.as_bytes(),
  1064. GameMessage::InitializeSpeechNpc(data) => data.as_bytes(),
  1065. GameMessage::FinishSpeechNpc(data) => data.as_bytes(),
  1066. GameMessage::FinishSpeechNpcBPD(data) => data.as_bytes(),
  1067. GameMessage::PlayerLevelUp(data) => data.as_bytes(),
  1068. GameMessage::PlayerResurrected(data) => data.as_bytes(),
  1069. GameMessage::PlayerResurrectedMedicalCenter(data) => data.as_bytes(),
  1070. GameMessage::PlayerUsedMoonAtomizer(data) => data.as_bytes(),
  1071. GameMessage::PlayerPBDonation(data) => data.as_bytes(),
  1072. GameMessage::PlayerInitiatedPB(data) => data.as_bytes(),
  1073. GameMessage::PlayerLeftArea(data) => data.as_bytes(),
  1074. GameMessage::PlayerSpawnedIntoArea(data) => data.as_bytes(),
  1075. GameMessage::PlayerStopped(data) => data.as_bytes(),
  1076. GameMessage::PlayerLoadedIn(data) => data.as_bytes(),
  1077. GameMessage::PlayerWalking(data) => data.as_bytes(),
  1078. GameMessage::PlayerRunning(data) => data.as_bytes(),
  1079. GameMessage::ComboStep1(data) => data.as_bytes(),
  1080. GameMessage::ComboStep2(data) => data.as_bytes(),
  1081. GameMessage::ComboStep3(data) => data.as_bytes(),
  1082. GameMessage::ComboStepDone(data) => data.as_bytes(),
  1083. GameMessage::PlayerTechCast(data) => data.as_bytes(),
  1084. GameMessage::PlayerTechDone(data) => data.as_bytes(),
  1085. GameMessage::PlayerPBUsed(data) => data.as_bytes(),
  1086. GameMessage::PlayerBlockedDamage(data) => data.as_bytes(),
  1087. GameMessage::PlayerReceivedDamage(data) => data.as_bytes(),
  1088. GameMessage::PlayerReceivedDamage2(data) => data.as_bytes(),
  1089. GameMessage::PlayerDeath(data) => data.as_bytes(),
  1090. GameMessage::PlayerPostDeathAnimation(data) => data.as_bytes(),
  1091. GameMessage::PlayerScapedollResurrection(data) => data.as_bytes(),
  1092. GameMessage::PlayerActivatedSwitch2(data) => data.as_bytes(),
  1093. GameMessage::TalkToNpc(data) => data.as_bytes(),
  1094. //GameMessage::Unknown53(data) => data.as_bytes(),
  1095. GameMessage::PlayerWarped(data) => data.as_bytes(),
  1096. GameMessage::LobbyEmote(data) => data.as_bytes(),
  1097. GameMessage::RemoveItemFromFloor(data) => data.as_bytes(),
  1098. GameMessage::PickupItem(data) => data.as_bytes(),
  1099. GameMessage::DropSplitStack(data) => data.as_bytes(),
  1100. //GameMessage::BuyFromShop(data) => data.as_bytes(),
  1101. GameMessage::ItemDrop(data) => data.as_bytes(),
  1102. GameMessage::RequestItem(data) => data.as_bytes(),
  1103. GameMessage::MagAnimation(data) => data.as_bytes(),
  1104. //GameMessage::FloorItemLimitItemDeletion(data) => data.as_bytes(),
  1105. GameMessage::PlayerUsedStarAtomizer(data) => data.as_bytes(),
  1106. GameMessage::SpawningMonsters(data) => data.as_bytes(),
  1107. GameMessage::PlayerTelepipe(data) => data.as_bytes(),
  1108. GameMessage::NpcSpawn(data) => data.as_bytes(),
  1109. GameMessage::PlayerJoiningGame(data) => data.as_bytes(),
  1110. GameMessage::PlayerJoiningGame2(data) => data.as_bytes(),
  1111. GameMessage::BurstDone(data) => data.as_bytes(),
  1112. GameMessage::WordSelect(data) => data.as_bytes(),
  1113. GameMessage::PlayerChangedFloor(data) => data.as_bytes(),
  1114. GameMessage::KillMonster(data) => data.as_bytes(),
  1115. //GameMessage::SyncQuestRegister(data) => data.as_bytes(),
  1116. //GameMessage::GoGoBall(data) => data.as_bytes(),
  1117. //GameMessage::CmodeData(data) => data.as_bytes(),
  1118. //GameMessage::BmodeData(data) => data.as_bytes(),
  1119. GameMessage::PlayerTrapSet(data) => data.as_bytes(),
  1120. //GameMessage::Unknown84(data) => data.as_bytes(),
  1121. //GameMessage::PlayerTrapActivate(data) => data.as_bytes(),
  1122. //GameMessage::PlayerShrink(data) => data.as_bytes(),
  1123. //GameMessage::PlayerUnshrink(data) => data.as_bytes(),
  1124. GameMessage::PlayerKilledByMonster(data) => data.as_bytes(),
  1125. //GameMessage::CmodeStatistics(data) => data.as_bytes(),
  1126. //GameMessage::PlayerTechStart(data) => data.as_bytes(),
  1127. GameMessage::PlayerWarped2(data) => data.as_bytes(),
  1128. //GameMessage::CmodeTryAgain(data) => data.as_bytes(),
  1129. GameMessage::ModifyPlayerStats(data) => data.as_bytes(),
  1130. //GameMessage::CmodePartyWipe(data) => data.as_bytes(),
  1131. //GameMessage::BossInteractionGalGryphon(data) => data.as_bytes(),
  1132. //GameMessage::PlayerMoonAtomizerResurrection(data) => data.as_bytes(),
  1133. GameMessage::BoxDropRequest(data) => data.as_bytes(),
  1134. //GameMessage::BossInteractionOlgaFlow(data) => data.as_bytes(),
  1135. //GameMessage::BossInteractionOlgaFlow2(data) => data.as_bytes(),
  1136. //GameMessage::BossInteractionOlgaFlow3(data) => data.as_bytes(),
  1137. //GameMessage::TradeRequest(data) => data.as_bytes(),
  1138. //GameMessage::BossInteractionGolDragon(data) => data.as_bytes(),
  1139. //GameMessage::BossInteractionBarbaRay(data) => data.as_bytes(),
  1140. //GameMessage::BossInteractionBarbaRay2(data) => data.as_bytes(),
  1141. GameMessage::PhotonChairSit(data) => data.as_bytes(),
  1142. //GameMessage::BossInteractionOlgaFlow4(data) => data.as_bytes(),
  1143. GameMessage::UnknownAE(data) => data.as_bytes(),
  1144. GameMessage::PhotonChairTurn(data) => data.as_bytes(),
  1145. GameMessage::PhotonChairMove(data) => data.as_bytes(),
  1146. //GameMessage::ShopRequest(data) => data.as_bytes(),
  1147. //GameMessage::BuyItem(data) => data.as_bytes(),
  1148. GameMessage::TekRequest(data) => data.as_bytes(),
  1149. GameMessage::TekPreview(data) => data.as_bytes(),
  1150. // GameMessage::TekAccept(data) => data.as_bytes(),
  1151. GameMessage::BankRequest(data) => data.as_bytes(),
  1152. GameMessage::BankInteraction(data) => data.as_bytes(),
  1153. //GameMessage::PlayerSoldItem(data) => data.as_bytes(),
  1154. //GameMessage::TeamInvite(data) => data.as_bytes(),
  1155. //GameMessage::AcceptTeamInvite(data) => data.as_bytes(),
  1156. GameMessage::CreateItem(data) => data.as_bytes(),
  1157. GameMessage::GiveCharacterExp(data) => data.as_bytes(),
  1158. GameMessage::DropCoordinates(data) => data.as_bytes(),
  1159. GameMessage::SortItems(data) => data.as_bytes(),
  1160. GameMessage::PlayerUsedMedicalCenter(data) => data.as_bytes(),
  1161. //GameMessage::ExperienceSteal(data) => data.as_bytes(),
  1162. GameMessage::ChargeAttack(data) => data.as_bytes(),
  1163. GameMessage::RequestExp(data) => data.as_bytes(),
  1164. //GameMessage::QuestRewardMeseta(data) => data.as_bytes(),
  1165. //GameMessage::QuestRewardItem(data) => data.as_bytes(),
  1166. //GameMessage::TransferItemRequest(data) => data.as_bytes(),
  1167. //GameMessage::ExchangeItemForTeampoints(data) => data.as_bytes(),
  1168. //GameMessage::MasterTransfer(data) => data.as_bytes(),
  1169. //GameMessage::AcceptMasterTransfer(data) => data.as_bytes(),
  1170. //GameMessage::RestartBattle(data) => data.as_bytes(),
  1171. //GameMessage::BmodeLevelUp(data) => data.as_bytes(),
  1172. //GameMessage::CmodeGrave(data) => data.as_bytes(),
  1173. //GameMessage::WriteQuestFlag(data) => data.as_bytes(),
  1174. //GameMessage::QuestItemExchange(data) => data.as_bytes(),
  1175. //GameMessage::WrapItem(data) => data.as_bytes(),
  1176. //GameMessage::PaganiniPDExchange(data) => data.as_bytes(),
  1177. //GameMessage::SrankSpecialModification(data) => data.as_bytes(),
  1178. //GameMessage::MomokaItemShop(data) => data.as_bytes(),
  1179. //GameMessage::WeaponAttributeEnhancement(data) => data.as_bytes(),
  1180. //GameMessage::BossInteractionSaintMillion(data) => data.as_bytes(),
  1181. //GameMessage::GoodLuckQuest(data) => data.as_bytes(),
  1182. //GameMessage::BPDPhotonCrystalExchange(data) => data.as_bytes(),
  1183. //GameMessage::BPDRewards(data) => data.as_bytes(),
  1184. //GameMessage::GallonsPlanQuest(data) => data.as_bytes(),
  1185. //GameMessage::Coren(data) => data.as_bytes(),
  1186. }
  1187. }
  1188. }