1use std::ffi::{c_char, c_void};
2
3use crate::{
4 actors::{events::*, Actor},
5 checkpoints::events::*,
6 classes::events::*,
7 core::events::*,
8 gangzones::{events::*, GangZone},
9 menus::events::*,
10 models::{events::*, ModelDownloadType},
11 objects::{events::*, Object, ObjectAttachmentSlotData, ObjectEditResponse, PlayerObject},
12 pickups::{events::*, Pickup},
13 players::{events::*, BodyPart, Player, PlayerClickSource, PlayerState, PlayerWeapon},
14 scripting::dialogs::{events::*, DialogResponse},
15 textdraws::{events::*, PlayerTextDraw, TextDraw},
16 types::{network::PeerDisconnectReason, vector::Vector3},
17 vehicles::{events::*, UnoccupiedVehicleUpdate, Vehicle},
18};
19
20pub static mut OMPRS_Event_AddHandler: Option<
21 unsafe extern "C" fn(name: *const c_char, priority: i32, callback: *const c_void) -> bool,
22> = None;
23
24#[repr(C)]
25pub struct EventArgs<T> {
26 pub size: u8,
27 pub list: *const T,
28}
29
30pub fn load_event_functions() {
31 load_function!(Event_AddHandler);
32 unsafe {
33 add_handler!(onPlayerGiveDamageActor);
34 add_handler!(onActorStreamIn);
35 add_handler!(onActorStreamOut);
36 add_handler!(onPlayerEnterCheckpoint);
37 add_handler!(onPlayerLeaveCheckpoint);
38 add_handler!(onPlayerEnterRaceCheckpoint);
39 add_handler!(onPlayerLeaveRaceCheckpoint);
40 add_handler!(onPlayerRequestClass);
41 add_handler!(onRconLoginAttempt);
43 add_handler!(onTick);
44 add_handler!(onPlayerFinishedDownloading);
45 add_handler!(onPlayerRequestDownload);
46 add_handler!(onDialogResponse);
47 add_handler!(onPlayerEnterGangZone);
48 add_handler!(onPlayerLeaveGangZone);
49 add_handler!(onPlayerClickGangZone);
50 add_handler!(onPlayerSelectedMenuRow);
51 add_handler!(onPlayerExitedMenu);
52 add_handler!(onObjectMove);
53 add_handler!(onPlayerObjectMove);
54 add_handler!(onPlayerEditObject);
55 add_handler!(onPlayerEditAttachedObject);
56 add_handler!(onPlayerSelectObject);
57 add_handler!(onPlayerPickUpPickup);
58 add_handler!(onPlayerCancelTextDrawSelection);
59 add_handler!(onPlayerCancelPlayerTextDrawSelection);
60 add_handler!(onPlayerClickTextDraw);
61 add_handler!(onPlayerClickPlayerTextDraw);
62 add_handler!(onPlayerConnect);
63 add_handler!(onPlayerSpawn);
64 add_handler!(onPlayerCommandText);
65 add_handler!(onPlayerKeyStateChange);
66 add_handler!(onIncomingConnection);
67 add_handler!(onPlayerDisconnect);
68 add_handler!(onPlayerRequestSpawn);
69 add_handler!(onPlayerStreamIn);
70 add_handler!(onPlayerStreamOut);
71 add_handler!(onPlayerText);
72 add_handler!(onPlayerShotMissed);
73 add_handler!(onPlayerShotPlayer);
74 add_handler!(onPlayerShotVehicle);
75 add_handler!(onPlayerShotObject);
76 add_handler!(onPlayerShotPlayerObject);
77 add_handler!(onPlayerDeath);
78 add_handler!(onPlayerTakeDamage);
79 add_handler!(onPlayerGiveDamage);
80 add_handler!(onPlayerInteriorChange);
81 add_handler!(onPlayerStateChange);
82 add_handler!(onPlayerClickMap);
83 add_handler!(onPlayerClickPlayer);
84 add_handler!(onClientCheckResponse);
85 add_handler!(onPlayerUpdate);
86 add_handler!(onVehicleStreamIn);
87 add_handler!(onVehicleStreamOut);
88 add_handler!(onVehicleDeath);
89 add_handler!(onPlayerEnterVehicle);
90 add_handler!(onPlayerExitVehicle);
91 add_handler!(onVehicleDamageStatusUpdate);
92 add_handler!(onVehiclePaintJob);
93 add_handler!(onVehicleMod);
94 add_handler!(onVehicleRespray);
95 add_handler!(onEnterExitModShop);
96 add_handler!(onVehicleSpawn);
97 add_handler!(onUnoccupiedVehicleUpdate);
98 add_handler!(onTrailerUpdate);
99 add_handler!(onVehicleSirenStateChange);
100 }
101}
102
103#[allow(unused_variables)]
104pub trait Events {
105 fn on_player_request_spawn(&mut self, player: Player) -> bool {
107 true
108 }
109
110 fn on_player_spawn(&mut self, player: Player) {}
112
113 fn on_incoming_connection(&mut self, player: Player, ip_address: String, port: i32) {}
115
116 fn on_player_connect(&mut self, player: Player) {}
118
119 fn on_player_disconnect(&mut self, player: Player, reason: PeerDisconnectReason) {}
121
122 fn on_player_stream_in(&mut self, player: Player, for_player: Player) {}
124
125 fn on_player_stream_out(&mut self, player: Player, for_player: Player) {}
127
128 fn on_player_text(&mut self, player: Player, message: String) -> bool {
130 true
131 }
132
133 fn on_player_command_text(&mut self, player: Player, message: String) -> bool {
135 false
136 }
137
138 fn on_player_shot_missed(
139 &mut self,
140 player: Player,
141 weapon: PlayerWeapon,
142 origin: Vector3,
143 ) -> bool {
144 true
145 }
146
147 fn on_player_shot_player(
149 &mut self,
150 player: Player,
151 target: Player,
152 weapon: PlayerWeapon,
153 origin: Vector3,
154 ) -> bool {
155 true
156 }
157
158 fn on_player_shot_vehicle(
160 &mut self,
161 player: Player,
162 target: Vehicle,
163 weapon: PlayerWeapon,
164 origin: Vector3,
165 ) -> bool {
166 true
167 }
168
169 fn on_player_shot_object(
171 &mut self,
172 player: Player,
173 target: Object,
174 weapon: PlayerWeapon,
175 origin: Vector3,
176 ) -> bool {
177 true
178 }
179
180 fn on_player_shot_player_object(
182 &mut self,
183 player: Player,
184 target: PlayerObject,
185 weapon: PlayerWeapon,
186 origin: Vector3,
187 ) -> bool {
188 true
189 }
190
191 fn on_player_score_change(&mut self, player: Player, score: i32) {}
193
194 fn on_player_name_change(&mut self, player: Player, old_name: String) {}
196
197 fn on_player_interior_change(&mut self, player: Player, new_interior: i32, old_interior: i32) {}
199
200 fn on_player_state_change(
202 &mut self,
203 player: Player,
204 new_state: PlayerState,
205 old_state: PlayerState,
206 ) {
207 }
208
209 fn on_player_key_state_change(&mut self, player: Player, new_keys: i32, old_keys: i32) {}
212
213 fn on_player_death(&mut self, player: Player, killer: Option<Player>, reason: i32) {}
215
216 fn on_player_take_damage(
218 &mut self,
219 player: Player,
220 from: Option<Player>,
221 amount: f32,
222 weapon: i32,
223 part: BodyPart,
224 ) {
225 }
226
227 fn on_player_give_damage(
229 &mut self,
230 player: Player,
231 to: Player,
232 amount: f32,
233 weapon: i32,
234 part: BodyPart,
235 ) {
236 }
237
238 fn on_player_click_map(&mut self, player: Player, pos: Vector3) {}
240
241 fn on_player_click_player(
243 &mut self,
244 player: Player,
245 clicked: Player,
246 source: PlayerClickSource,
247 ) {
248 }
249
250 fn on_client_check_response(
252 &mut self,
253 player: Player,
254 action_type: i32,
255 address: i32,
256 results: i32,
257 ) {
258 }
259
260 fn on_player_update(&mut self, player: Player) -> bool {
263 true
264 }
265
266 fn on_player_finished_downloading(&mut self, player: Player) {}
268
269 fn on_player_request_download(
271 &mut self,
272 player: Player,
273 model_type: ModelDownloadType,
274 checksum: i32,
275 ) -> bool {
276 true
277 }
278
279 fn on_player_give_damage_actor(
281 &mut self,
282 player: Player,
283 actor: Actor,
284 amount: f32,
285 weapon: i32,
286 part: BodyPart,
287 ) {
288 }
289
290 fn on_actor_stream_in(&mut self, actor: Actor, player: Player) {}
292
293 fn on_actor_stream_out(&mut self, actor: Actor, player: Player) {}
295
296 fn on_player_enter_checkpoint(&mut self, player: Player) {}
298
299 fn on_player_leave_checkpoint(&mut self, player: Player) {}
301
302 fn on_player_enter_race_checkpoint(&mut self, player: Player) {}
304
305 fn on_player_leave_race_checkpoint(&mut self, player: Player) {}
307
308 fn on_player_request_class(&mut self, player: Player, class_id: i32) -> bool {
310 true
311 }
312
313 fn on_dialog_response(
315 &mut self,
316 player: Player,
317 dialog_id: i32,
318 response: DialogResponse,
319 list_item: i32,
320 input_text: String,
321 ) {
322 }
323
324 fn on_player_enter_gang_zone(&mut self, player: Player, zone: GangZone) {}
327
328 fn on_player_leave_gang_zone(&mut self, player: Player, zone: GangZone) {}
331
332 fn on_player_click_gang_zone(&mut self, player: Player, zone: GangZone) {}
334
335 fn on_player_selected_menu_row(&mut self, player: Player, row: i32) {}
337
338 fn on_player_exited_menu(&mut self, player: Player) {}
340
341 fn on_object_moved(&mut self, object: Object) {}
343
344 fn on_player_object_moved(&mut self, player: Player, object: PlayerObject) {}
346
347 fn on_player_edit_object(
349 &mut self,
350 player: Player,
351 object: Object,
352 response: ObjectEditResponse,
353 offset: Vector3,
354 rotation: Vector3,
355 ) {
356 }
357
358 fn on_player_object_edited(
360 &mut self,
361 player: Player,
362 object: PlayerObject,
363 response: ObjectEditResponse,
364 offset: Vector3,
365 rotation: Vector3,
366 ) {
367 }
368
369 fn on_player_edit_attached_object(
371 &mut self,
372 player: Player,
373 index: i32,
374 saved: bool,
375 data: ObjectAttachmentSlotData,
376 ) {
377 }
378
379 fn on_player_select_object(
381 &mut self,
382 player: Player,
383 object: Object,
384 model: i32,
385 position: Vector3,
386 ) {
387 }
388
389 fn on_player_object_selected(
391 &mut self,
392 player: Player,
393 object: PlayerObject,
394 model: i32,
395 position: Vector3,
396 ) {
397 }
398
399 fn on_player_pick_up_pickup(&mut self, player: Player, pickup: Pickup) {}
401
402 fn on_player_cancel_text_draw_selection(&mut self, player: Player) -> bool {
404 true
405 }
406
407 fn on_player_cancel_player_text_draw_selection(&mut self, player: Player) -> bool {
409 true
410 }
411
412 fn on_player_click_text_draw(&mut self, player: Player, textdraw: TextDraw) {}
414
415 fn on_player_click_player_text_draw(&mut self, player: Player, textdraw: PlayerTextDraw) {}
417
418 fn on_vehicle_stream_in(&mut self, vehicle: Vehicle, player: Player) {}
420
421 fn on_vehicle_stream_out(&mut self, vehicle: Vehicle, player: Player) {}
423
424 fn on_vehicle_death(&mut self, vehicle: Vehicle, player: Player) {}
426
427 fn on_player_enter_vehicle(&mut self, player: Player, vehicle: Vehicle, passenger: bool) {}
429
430 fn on_player_exit_vehicle(&mut self, player: Player, vehicle: Vehicle) {}
432
433 fn on_vehicle_damage_status_update(&mut self, vehicle: Vehicle, player: Player) {}
435
436 fn on_vehicle_paint_job(&mut self, player: Player, vehicle: Vehicle, paintjob: i32) -> bool {
438 true
439 }
440
441 fn on_vehicle_mod(&mut self, player: Player, vehicle: Vehicle, component: i32) -> bool {
443 true
444 }
445
446 fn on_vehicle_respray(
448 &mut self,
449 player: Player,
450 vehicle: Vehicle,
451 colour1: i32,
452 colour2: i32,
453 ) -> bool {
454 true
455 }
456
457 fn on_enter_exit_mod_shop(&mut self, player: Player, enterexit: bool, interior_id: i32) {}
459
460 fn on_vehicle_spawn(&mut self, vehicle: Vehicle) {}
462
463 fn on_unoccupied_vehicle_update(
465 &mut self,
466 vehicle: Vehicle,
467 player: Player,
468 updateData: UnoccupiedVehicleUpdate,
469 ) -> bool {
470 true
471 }
472
473 fn on_trailer_update(&mut self, player: Player, vehicle: Vehicle) -> bool {
475 true
476 }
477
478 fn on_vehicle_siren_state_change(
480 &mut self,
481 player: Player,
482 vehicle: Vehicle,
483 sirenstate: i32,
484 ) -> bool {
485 true
486 }
487
488 fn on_rcon_command(&mut self, cmd: String) -> bool {
490 true
491 }
492
493 fn on_rcon_login_attempt(&mut self, ip: String, password: String, success: bool) -> bool {
495 true
496 }
497
498 fn on_tick(&mut self, elapsed: i32) {}
503}