nexus\api\rtapi/
player.rs1use super::RealTimeData;
2use bitflags::bitflags;
3use std::ffi::CStr;
4
5#[derive(Debug, Clone)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct PlayerData {
8 pub account_name: String,
10
11 pub character_name: String,
13
14 pub character_position: [f32; 3],
16
17 pub character_facing: [f32; 3],
19
20 pub profession: u32,
22
23 pub elite_specialization: u32,
25
26 pub mount_index: u32,
28
29 pub character_state: CharacterState,
31}
32
33impl PlayerData {
34 pub unsafe fn read(data: *const RealTimeData) -> Self {
39 unsafe {
40 Self {
41 account_name: CStr::from_ptr((*data).account_name.as_ptr())
42 .to_string_lossy()
43 .into_owned(),
44 character_name: CStr::from_ptr((*data).account_name.as_ptr())
45 .to_string_lossy()
46 .into_owned(),
47 character_position: (*data).character_position,
48 character_facing: (*data).character_facing,
49 profession: (*data).profession,
50 elite_specialization: (*data).elite_specialization,
51 mount_index: (*data).mount_index,
52 character_state: CharacterState::from_bits_retain((*data).character_state),
53 }
54 }
55 }
56}
57
58bitflags! {
59 #[derive(
60 Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
61 )]
62 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
63 pub struct CharacterState : u32 {
64 const IsAlive = 1 << 0;
66
67 const IsDowned = 1 << 1;
69
70 const IsInCombat = 1 << 2;
72
73 const IsSwimming = 1 << 3;
75
76 const IsUnderwater = 1 << 4;
78
79 const IsGliding = 1 << 5;
81
82 const IsFlying = 1 << 6;
84 }
85}