omp_gdk/
events.rs

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!(onConsoleText);
42        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    /// This callback is called when a player attempts to spawn via class selection either by pressing SHIFT or clicking the 'Spawn' button.
106    fn on_player_request_spawn(&mut self, player: Player) -> bool {
107        true
108    }
109
110    /// This callback is called when a player spawns
111    fn on_player_spawn(&mut self, player: Player) {}
112
113    /// This callback is called when an IP address attempts a connection to the server.     
114    fn on_incoming_connection(&mut self, player: Player, ip_address: String, port: i32) {}
115
116    /// This callback is called when a player connects to the server.
117    fn on_player_connect(&mut self, player: Player) {}
118
119    /// This callback is called when a player disconnects from the server.
120    fn on_player_disconnect(&mut self, player: Player, reason: PeerDisconnectReason) {}
121
122    /// This callback is called when a player is streamed by some other player's client.
123    fn on_player_stream_in(&mut self, player: Player, for_player: Player) {}
124
125    /// This callback is called when a player is streamed out from some other player's client.
126    fn on_player_stream_out(&mut self, player: Player, for_player: Player) {}
127
128    /// This callback is called when a player sends a chat message.
129    fn on_player_text(&mut self, player: Player, message: String) -> bool {
130        true
131    }
132
133    /// This callback is called when a player enters a command into the client chat window. Commands are anything that start with a forward slash, e.g. /help.
134    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    /// This callback is called when a player shoots another player
148    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    /// This callback is called when a player shoots a vehicle
159    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    /// This callback is called when a player shoots an object
170    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    /// This callback is called when a player shoots a player object
181    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    /// This callback is called when a player's score changes
192    fn on_player_score_change(&mut self, player: Player, score: i32) {}
193
194    /// This callback is called when a player's name is changed
195    fn on_player_name_change(&mut self, player: Player, old_name: String) {}
196
197    /// This callback is called when a player changes interior
198    fn on_player_interior_change(&mut self, player: Player, new_interior: i32, old_interior: i32) {}
199
200    /// This callback is called when a player changes state. For example, when a player changes from being the driver of a vehicle to being on-foot.
201    fn on_player_state_change(
202        &mut self,
203        player: Player,
204        new_state: PlayerState,
205        old_state: PlayerState,
206    ) {
207    }
208
209    /// This callback is called when the state of any supported key is changed (pressed/released).
210    /// Directional keys do not trigger on_player_key_state_change (up/down/left/right).
211    fn on_player_key_state_change(&mut self, player: Player, new_keys: i32, old_keys: i32) {}
212
213    /// This callback is called when a player dies, either by suicide or by being killed by another player.
214    fn on_player_death(&mut self, player: Player, killer: Option<Player>, reason: i32) {}
215
216    /// This callback is called when a player takes damage.
217    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    /// This callback is called when a player gives damage to another player.
228    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    /// This callback is called when a player places a target/waypoint on the pause menu map (by right-clicking).
239    fn on_player_click_map(&mut self, player: Player, pos: Vector3) {}
240
241    /// This callback is called when a player double-clicks on a player on the scoreboard.
242    fn on_player_click_player(
243        &mut self,
244        player: Player,
245        clicked: Player,
246        source: PlayerClickSource,
247    ) {
248    }
249
250    /// This callback is called when a send_client_check request completes.
251    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    /// This callback is called every time a client/player updates the server with their status.
261    /// It can be used to monitor client updates that aren't actively tracked by the server, such as health or armor updates or players switching weapons.
262    fn on_player_update(&mut self, player: Player) -> bool {
263        true
264    }
265
266    /// This callback is called when a player finishes downloading custom models
267    fn on_player_finished_downloading(&mut self, player: Player) {}
268
269    /// This callback is called when a player request for custom model downloads.
270    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    /// This callback is called when a player gives damage to an actor.
280    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    /// This callback is called when an actor is streamed in by a player's client.
291    fn on_actor_stream_in(&mut self, actor: Actor, player: Player) {}
292
293    /// This callback is called when an actor is streamed out by a player's client.
294    fn on_actor_stream_out(&mut self, actor: Actor, player: Player) {}
295
296    /// This callback is called when a player enters the checkpoint set for that player.
297    fn on_player_enter_checkpoint(&mut self, player: Player) {}
298
299    /// This callback is called when a player leaves a checkpoint.
300    fn on_player_leave_checkpoint(&mut self, player: Player) {}
301
302    /// This callback is called when a player enters a race checkpoint.
303    fn on_player_enter_race_checkpoint(&mut self, player: Player) {}
304
305    /// This callback is called when a player leaves a race checkpoint.
306    fn on_player_leave_race_checkpoint(&mut self, player: Player) {}
307
308    /// This callback is called when a player changes class at class selection (and when class selection first appears).
309    fn on_player_request_class(&mut self, player: Player, class_id: i32) -> bool {
310        true
311    }
312
313    /// This callback is called when a player responds to a dialog shown using ShowPlayerDialog by either clicking a button, pressing ENTER/ESC or double-clicking a list item (if using a list style dialog).
314    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    /// This callback is called when a player enters a gangzone
325    /// This callback requires the use of use_check method to be enable
326    fn on_player_enter_gang_zone(&mut self, player: Player, zone: GangZone) {}
327
328    /// This callback is called when a player exited a gangzone.
329    /// This callback requires the use of use_check method to be enable
330    fn on_player_leave_gang_zone(&mut self, player: Player, zone: GangZone) {}
331
332    /// This callback is called when a player clicked a gangzone on the pause menu map (by right-clicking).
333    fn on_player_click_gang_zone(&mut self, player: Player, zone: GangZone) {}
334
335    /// This callback is called when a player selects an item from a menu
336    fn on_player_selected_menu_row(&mut self, player: Player, row: i32) {}
337
338    /// This callback is called when a player exits a menu.
339    fn on_player_exited_menu(&mut self, player: Player) {}
340
341    /// This callback is called when an object is completed moving
342    fn on_object_moved(&mut self, object: Object) {}
343
344    /// This callback is called when a player object is completed moving
345    fn on_player_object_moved(&mut self, player: Player, object: PlayerObject) {}
346
347    /// This callback is called when a player finishes editing an object
348    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    /// This callback is called when a player finishes editing a player object
359    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    /// This callback is called when a player ends attached object edition mode.
370    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    /// This callback is called when a player selects an object
380    fn on_player_select_object(
381        &mut self,
382        player: Player,
383        object: Object,
384        model: i32,
385        position: Vector3,
386    ) {
387    }
388
389    /// This callback is called when a player selects a player object
390    fn on_player_object_selected(
391        &mut self,
392        player: Player,
393        object: PlayerObject,
394        model: i32,
395        position: Vector3,
396    ) {
397    }
398
399    /// This callback is called when a player picks up a pickup created
400    fn on_player_pick_up_pickup(&mut self, player: Player, pickup: Pickup) {}
401
402    /// This callback is called when a player cancels the textdraw selection
403    fn on_player_cancel_text_draw_selection(&mut self, player: Player) -> bool {
404        true
405    }
406
407    /// This callback is called when a player cancels the player textdraw selection
408    fn on_player_cancel_player_text_draw_selection(&mut self, player: Player) -> bool {
409        true
410    }
411
412    /// This callback is called when a player clicks a textdraw
413    fn on_player_click_text_draw(&mut self, player: Player, textdraw: TextDraw) {}
414
415    /// This callback is called when a player clicks a player textdraw
416    fn on_player_click_player_text_draw(&mut self, player: Player, textdraw: PlayerTextDraw) {}
417
418    /// This callback is called when a vehicle is streamed to a player's client.
419    fn on_vehicle_stream_in(&mut self, vehicle: Vehicle, player: Player) {}
420
421    /// This callback is called when a vehicle streams out for a player.
422    fn on_vehicle_stream_out(&mut self, vehicle: Vehicle, player: Player) {}
423
424    /// This callback is called when a vehicle is destroyed - either by exploding or becoming submerged in water.
425    fn on_vehicle_death(&mut self, vehicle: Vehicle, player: Player) {}
426
427    /// This callback is called when a player starts to enter a vehicle, meaning the player is not in vehicle yet at the time this callback is called.
428    fn on_player_enter_vehicle(&mut self, player: Player, vehicle: Vehicle, passenger: bool) {}
429
430    /// This callback is called when a player leaves a vehicle.
431    fn on_player_exit_vehicle(&mut self, player: Player, vehicle: Vehicle) {}
432
433    /// This callback is called when a vehicle element such as doors, tyres, panels, or lights change their damage status.
434    fn on_vehicle_damage_status_update(&mut self, vehicle: Vehicle, player: Player) {}
435
436    /// This callback is called when a player previews a vehicle paintjob inside a mod shop. Watch out, this callback is not called when the player buys the paintjob.
437    fn on_vehicle_paint_job(&mut self, player: Player, vehicle: Vehicle, paintjob: i32) -> bool {
438        true
439    }
440
441    /// This callback is called when a vehicle is modded.
442    fn on_vehicle_mod(&mut self, player: Player, vehicle: Vehicle, component: i32) -> bool {
443        true
444    }
445
446    /// This callback is called when a player exits a mod shop, even if the colors weren't changed. Watch out, the name is ambiguous, Pay 'n' Spray shops don't call this callback.
447    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    /// This callback is called when a vehicle enters or exits a mod shop.
458    fn on_enter_exit_mod_shop(&mut self, player: Player, enterexit: bool, interior_id: i32) {}
459
460    /// This callback is called when a vehicle respawns.
461    fn on_vehicle_spawn(&mut self, vehicle: Vehicle) {}
462
463    /// This callback is called when a player's client updates/syncs the position of a vehicle they're not driving. This can happen outside of the vehicle or when the player is a passenger of a vehicle that has no driver.
464    fn on_unoccupied_vehicle_update(
465        &mut self,
466        vehicle: Vehicle,
467        player: Player,
468        updateData: UnoccupiedVehicleUpdate,
469    ) -> bool {
470        true
471    }
472
473    /// Called when a trailer's position is synced by a client.
474    fn on_trailer_update(&mut self, player: Player, vehicle: Vehicle) -> bool {
475        true
476    }
477
478    /// This callback is called when a vehicle's siren is toggled.
479    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    /// This callback is called when a command is sent through the server console, remote RCON, or via the in-game "/rcon command".
489    fn on_rcon_command(&mut self, cmd: String) -> bool {
490        true
491    }
492
493    /// This callback is called when an attempt to login to RCON is made.
494    fn on_rcon_login_attempt(&mut self, ip: String, password: String, success: bool) -> bool {
495        true
496    }
497
498    // fn on_console_text(&mut self, command: String, params: String) -> bool {
499    //     true
500    // }
501
502    fn on_tick(&mut self, elapsed: i32) {}
503}