omp_gdk/scripting/classes/
mod.rs1pub mod events;
2pub mod functions;
3
4use std::{ffi::c_void, mem::transmute};
5
6use crate::{players::WeaponSlots, types::vector::Vector3};
7pub use functions::{load_functions, Class_Add as Class_Create};
8
9#[repr(C)]
11#[derive(Clone, Copy, Debug, Default)]
12pub struct PlayerClass {
13 pub team: u8,
15 pub skin: i32,
17 pub spawn: Vector3,
19 pub angle: f32,
21 pub weapons: WeaponSlots,
23}
24
25pub struct Class {
26 handle: *const c_void,
27}
28
29impl Class {
30 pub fn new(handle: *const c_void) -> Self {
31 Class { handle }
32 }
33 pub fn get_handle(&self) -> *const c_void {
34 self.handle
35 }
36 pub fn from_id(classid: i32) -> Option<Class> {
37 functions::Class_FromID(classid)
38 }
39 pub fn get_id(&self) -> i32 {
40 functions::Class_GetID(self)
41 }
42
43 pub fn add(
44 team: u8,
45 skin: i32,
46 spawn: Vector3,
47 angle: f32,
48 weapon: WeaponSlots,
49 ) -> Option<Class> {
50 let mut id = 0;
51 functions::Class_Add(
52 team,
53 skin,
54 spawn.x,
55 spawn.y,
56 spawn.z,
57 angle,
58 weapon[0].id as u8,
59 weapon[0].ammo,
60 weapon[1].id as u8,
61 weapon[1].ammo,
62 weapon[2].id as u8,
63 weapon[2].ammo,
64 &mut id,
65 )
66 }
67 pub fn count(&self) -> i32 {
68 functions::Class_Count()
69 }
70 pub fn getdata(&self) -> PlayerClass {
71 let mut data = PlayerClass::default();
72 let (mut weapon1, mut ammo1, mut weapon2, mut ammo2, mut weapon3, mut ammo3): (
73 u8,
74 u32,
75 u8,
76 u32,
77 u8,
78 u32,
79 ) = (0, 0, 0, 0, 0, 0);
80 functions::Class_GetData(
81 self,
82 &mut data.team,
83 &mut data.skin,
84 &mut data.spawn.x,
85 &mut data.spawn.y,
86 &mut data.spawn.z,
87 &mut data.angle,
88 &mut weapon1,
89 &mut ammo1,
90 &mut weapon2,
91 &mut ammo2,
92 &mut weapon3,
93 &mut ammo3,
94 );
95 data.weapons[0].id = unsafe { transmute(weapon1) };
96 data.weapons[0].ammo = ammo1;
97 data.weapons[1].id = unsafe { transmute(weapon2) };
98 data.weapons[1].ammo = ammo2;
99 data.weapons[2].id = unsafe { transmute(weapon3) };
100 data.weapons[2].ammo = ammo3;
101
102 data
103 }
104 pub fn edit(&self, data: PlayerClass) -> bool {
105 functions::Class_Edit(
106 self,
107 data.team,
108 data.skin,
109 data.spawn.x,
110 data.spawn.y,
111 data.spawn.z,
112 data.angle,
113 data.weapons[0].id,
114 data.weapons[0].ammo,
115 data.weapons[1].id,
116 data.weapons[1].ammo,
117 data.weapons[2].id,
118 data.weapons[2].ammo,
119 )
120 }
121}