Skip to content

Commit c36b27f

Browse files
committed
Don't rely on borrow checker in script events at all
1 parent d6c514b commit c36b27f

File tree

13 files changed

+214
-162
lines changed

13 files changed

+214
-162
lines changed

omp-gdk/src/scripting/actors/events.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![allow(clippy::all)]
2-
use std::mem::transmute;
2+
use std::{mem::transmute, rc::Rc};
33

44
use crate::{events::EventArgs, players::Player};
55

@@ -23,8 +23,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerGiveDamageActor(
2323
.unwrap()
2424
.as_mut()
2525
.unwrap();
26-
for script in scripts.iter_mut() {
27-
script.borrow_mut().on_player_give_damage_actor(
26+
for script in scripts.iter() {
27+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
28+
script.on_player_give_damage_actor(
2829
Player::new(*(*(*args).list).player),
2930
Actor::new(*(*(*args).list).actor),
3031
*(*(*args).list).amount,
@@ -47,8 +48,9 @@ pub unsafe extern "C" fn OMPRS_OnActorStreamIn(args: *const EventArgs<OnActorStr
4748
.unwrap()
4849
.as_mut()
4950
.unwrap();
50-
for script in scripts.iter_mut() {
51-
script.borrow_mut().on_actor_stream_in(
51+
for script in scripts.iter() {
52+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
53+
script.on_actor_stream_in(
5254
Actor::new(*(*(*args).list).actor),
5355
Player::new(*(*(*args).list).forPlayer),
5456
);
@@ -68,8 +70,9 @@ pub unsafe extern "C" fn OMPRS_OnActorStreamOut(args: *const EventArgs<OnActorSt
6870
.unwrap()
6971
.as_mut()
7072
.unwrap();
71-
for script in scripts.iter_mut() {
72-
script.borrow_mut().on_actor_stream_out(
73+
for script in scripts.iter() {
74+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
75+
script.on_actor_stream_out(
7376
Actor::new(*(*(*args).list).actor),
7477
Player::new(*(*(*args).list).forPlayer),
7578
);

omp-gdk/src/scripting/checkpoints/events.rs

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#![allow(clippy::all)]
2+
use std::rc::Rc;
3+
24
use crate::{events::EventArgs, players::Player};
35

46
#[repr(C)]
@@ -15,10 +17,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerEnterCheckpoint(
1517
.unwrap()
1618
.as_mut()
1719
.unwrap();
18-
for script in scripts.iter_mut() {
19-
script
20-
.borrow_mut()
21-
.on_player_enter_checkpoint(Player::new(*(*(*args).list).player));
20+
for script in scripts.iter() {
21+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
22+
script.on_player_enter_checkpoint(Player::new(*(*(*args).list).player));
2223
}
2324
}
2425

@@ -36,10 +37,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerLeaveCheckpoint(
3637
.unwrap()
3738
.as_mut()
3839
.unwrap();
39-
for script in scripts.iter_mut() {
40-
script
41-
.borrow_mut()
42-
.on_player_leave_checkpoint(Player::new(*(*(*args).list).player));
40+
for script in scripts.iter() {
41+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
42+
script.on_player_leave_checkpoint(Player::new(*(*(*args).list).player));
4343
}
4444
}
4545

@@ -57,10 +57,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerEnterRaceCheckpoint(
5757
.unwrap()
5858
.as_mut()
5959
.unwrap();
60-
for script in scripts.iter_mut() {
61-
script
62-
.borrow_mut()
63-
.on_player_enter_race_checkpoint(Player::new(*(*(*args).list).player));
60+
for script in scripts.iter() {
61+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
62+
script.on_player_enter_race_checkpoint(Player::new(*(*(*args).list).player));
6463
}
6564
}
6665

@@ -78,9 +77,8 @@ pub unsafe extern "C" fn OMPRS_OnPlayerLeaveRaceCheckpoint(
7877
.unwrap()
7978
.as_mut()
8079
.unwrap();
81-
for script in scripts.iter_mut() {
82-
script
83-
.borrow_mut()
84-
.on_player_leave_race_checkpoint(Player::new(*(*(*args).list).player));
80+
for script in scripts.iter() {
81+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
82+
script.on_player_leave_race_checkpoint(Player::new(*(*(*args).list).player));
8583
}
8684
}

omp-gdk/src/scripting/classes/events.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#![allow(clippy::all)]
2+
use std::rc::Rc;
3+
24
use crate::{events::EventArgs, players::Player};
35

46
#[repr(C)]
@@ -17,8 +19,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerRequestClass(
1719
.as_mut()
1820
.unwrap();
1921
let mut ret = false;
20-
for script in scripts.iter_mut() {
21-
ret = script.borrow_mut().on_player_request_class(
22+
for script in scripts.iter() {
23+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
24+
ret = script.on_player_request_class(
2225
Player::new(*(*(*args).list).player),
2326
*(*(*args).list).classId,
2427
);

omp-gdk/src/scripting/core/events.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#![allow(clippy::all)]
2+
use std::rc::Rc;
3+
24
use crate::{events::EventArgs, types::stringview::StringView};
35

46
#[repr(C)]
@@ -13,8 +15,9 @@ pub unsafe extern "C" fn OMPRS_OnTick(args: *const EventArgs<OnTickArgs>) {
1315
.unwrap()
1416
.as_mut()
1517
.unwrap();
16-
for script in scripts.iter_mut() {
17-
script.borrow_mut().on_tick(*(*(*args).list).elapsed);
18+
for script in scripts.iter() {
19+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
20+
script.on_tick(*(*(*args).list).elapsed);
1821
}
1922
}
2023

@@ -58,8 +61,9 @@ pub unsafe extern "C" fn OMPRS_OnRconLoginAttempt(
5861
.as_mut()
5962
.unwrap();
6063
let mut ret = false;
61-
for script in scripts.iter_mut() {
62-
ret = script.borrow_mut().on_rcon_login_attempt(
64+
for script in scripts.iter() {
65+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
66+
ret = script.on_rcon_login_attempt(
6367
(*(*(*args).list).address).get_data(),
6468
(*(*(*args).list).password).get_data(),
6569
*(*(*args).list).success,

omp-gdk/src/scripting/dialogs/events.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![allow(clippy::all)]
22
use crate::{events::EventArgs, players::Player, types::stringview::StringView};
3-
use std::mem::transmute;
3+
use std::{mem::transmute, rc::Rc};
44

55
#[repr(C)]
66
pub struct OnDialogResponseArgs {
@@ -18,8 +18,9 @@ pub unsafe extern "C" fn OMPRS_OnDialogResponse(args: *const EventArgs<OnDialogR
1818
.unwrap()
1919
.as_mut()
2020
.unwrap();
21-
for script in scripts.iter_mut() {
22-
script.borrow_mut().on_dialog_response(
21+
for script in scripts.iter() {
22+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
23+
script.on_dialog_response(
2324
Player::new(*(*(*args).list).player),
2425
*(*(*args).list).dialogId,
2526
transmute(*(*(*args).list).response),

omp-gdk/src/scripting/gangzones/events.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#![allow(clippy::all)]
2+
use std::rc::Rc;
3+
24
use crate::{events::EventArgs, players::Player};
35

46
use super::GangZone;
@@ -18,8 +20,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerEnterGangZone(
1820
.unwrap()
1921
.as_mut()
2022
.unwrap();
21-
for script in scripts.iter_mut() {
22-
script.borrow_mut().on_player_enter_gang_zone(
23+
for script in scripts.iter() {
24+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
25+
script.on_player_enter_gang_zone(
2326
Player::new(*(*(*args).list).player),
2427
GangZone::new(*(*(*args).list).zone),
2528
);
@@ -41,8 +44,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerLeaveGangZone(
4144
.unwrap()
4245
.as_mut()
4346
.unwrap();
44-
for script in scripts.iter_mut() {
45-
script.borrow_mut().on_player_leave_gang_zone(
47+
for script in scripts.iter() {
48+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
49+
script.on_player_leave_gang_zone(
4650
Player::new(*(*(*args).list).player),
4751
GangZone::new(*(*(*args).list).zone),
4852
);
@@ -64,8 +68,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerClickGangZone(
6468
.unwrap()
6569
.as_mut()
6670
.unwrap();
67-
for script in scripts.iter_mut() {
68-
script.borrow_mut().on_player_click_gang_zone(
71+
for script in scripts.iter() {
72+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
73+
script.on_player_click_gang_zone(
6974
Player::new(*(*(*args).list).player),
7075
GangZone::new(*(*(*args).list).zone),
7176
);

omp-gdk/src/scripting/menus/events.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#![allow(clippy::all)]
2+
use std::rc::Rc;
3+
24
use crate::{events::EventArgs, players::Player};
35

46
#[repr(C)]
@@ -16,8 +18,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerSelectedMenuRow(
1618
.unwrap()
1719
.as_mut()
1820
.unwrap();
19-
for script in scripts.iter_mut() {
20-
script.borrow_mut().on_player_selected_menu_row(
21+
for script in scripts.iter() {
22+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
23+
script.on_player_selected_menu_row(
2124
Player::new(*(*(*args).list).player),
2225
*(*(*args).list).row,
2326
);
@@ -36,9 +39,8 @@ pub unsafe extern "C" fn OMPRS_OnPlayerExitedMenu(args: *const EventArgs<OnPlaye
3639
.unwrap()
3740
.as_mut()
3841
.unwrap();
39-
for script in scripts.iter_mut() {
40-
script
41-
.borrow_mut()
42-
.on_player_exited_menu(Player::new(*(*(*args).list).player));
42+
for script in scripts.iter() {
43+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
44+
script.on_player_exited_menu(Player::new(*(*(*args).list).player));
4345
}
4446
}

omp-gdk/src/scripting/models/events.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![allow(clippy::all)]
22
use crate::{events::EventArgs, players::Player};
3-
use std::mem::transmute;
3+
use std::{mem::transmute, rc::Rc};
44

55
#[repr(C)]
66
pub struct OnPlayerFinishedDownloadingArgs {
@@ -17,10 +17,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerFinishedDownloading(
1717
.unwrap()
1818
.as_mut()
1919
.unwrap();
20-
for script in scripts.iter_mut() {
21-
script
22-
.borrow_mut()
23-
.on_player_finished_downloading(Player::new(*(*(*args).list).player));
20+
for script in scripts.iter() {
21+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
22+
script.on_player_finished_downloading(Player::new(*(*(*args).list).player));
2423
}
2524
}
2625

@@ -40,8 +39,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerRequestDownload(
4039
.unwrap()
4140
.as_mut()
4241
.unwrap();
43-
for script in scripts.iter_mut() {
44-
script.borrow_mut().on_player_request_download(
42+
for script in scripts.iter() {
43+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
44+
script.on_player_request_download(
4545
Player::new(*(*(*args).list).player),
4646
transmute(*(*(*args).list).model_type),
4747
*(*(*args).list).checksum,

omp-gdk/src/scripting/objects/events.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![allow(clippy::all)]
2-
use std::mem::transmute;
2+
use std::{mem::transmute, rc::Rc};
33

44
use crate::{events::EventArgs, players::Player, types::vector::Vector3};
55

@@ -17,10 +17,9 @@ pub unsafe extern "C" fn OMPRS_OnObjectMove(args: *const EventArgs<OnObjectMoveA
1717
.unwrap()
1818
.as_mut()
1919
.unwrap();
20-
for script in scripts.iter_mut() {
21-
script
22-
.borrow_mut()
23-
.on_object_moved(Object::new(*(*(*args).list).object));
20+
for script in scripts.iter() {
21+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
22+
script.on_object_moved(Object::new(*(*(*args).list).object));
2423
}
2524
}
2625

@@ -37,8 +36,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerObjectMove(args: *const EventArgs<OnPlaye
3736
.unwrap()
3837
.as_mut()
3938
.unwrap();
40-
for script in scripts.iter_mut() {
41-
script.borrow_mut().on_player_object_moved(
39+
for script in scripts.iter() {
40+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
41+
script.on_player_object_moved(
4242
Player::new(*(*(*args).list).player),
4343
PlayerObject::new(
4444
*(*(*args).list).object,
@@ -68,8 +68,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerEditObject(args: *const EventArgs<OnPlaye
6868
.unwrap()
6969
.as_mut()
7070
.unwrap();
71-
for script in scripts.iter_mut() {
72-
script.borrow_mut().on_player_edit_object(
71+
for script in scripts.iter() {
72+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
73+
script.on_player_edit_object(
7374
Player::new(*(*(*args).list).player),
7475
Object::new(*(*(*args).list).object),
7576
transmute(*(*(*args).list).response),
@@ -127,8 +128,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerEditAttachedObject(
127128
.unwrap()
128129
.as_mut()
129130
.unwrap();
130-
for script in scripts.iter_mut() {
131-
script.borrow_mut().on_player_edit_attached_object(
131+
for script in scripts.iter() {
132+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
133+
script.on_player_edit_attached_object(
132134
Player::new(*(*(*args).list).player),
133135
*(*(*args).list).index,
134136
*(*(*args).list).saved,
@@ -175,8 +177,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerSelectObject(
175177
.unwrap()
176178
.as_mut()
177179
.unwrap();
178-
for script in scripts.iter_mut() {
179-
script.borrow_mut().on_player_select_object(
180+
for script in scripts.iter() {
181+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
182+
script.on_player_select_object(
180183
Player::new(*(*(*args).list).player),
181184
Object::new(*(*(*args).list).object),
182185
*(*(*args).list).model,

omp-gdk/src/scripting/pickups/events.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#![allow(clippy::all)]
2+
use std::rc::Rc;
3+
24
use crate::{events::EventArgs, players::Player};
35

46
use super::Pickup;
@@ -18,8 +20,9 @@ pub unsafe extern "C" fn OMPRS_OnPlayerPickUpPickup(
1820
.unwrap()
1921
.as_mut()
2022
.unwrap();
21-
for script in scripts.iter_mut() {
22-
script.borrow_mut().on_player_pick_up_pickup(
23+
for script in scripts.iter() {
24+
let script = &mut *(*Rc::as_ptr(script)).as_ptr();
25+
script.on_player_pick_up_pickup(
2326
Player::new(*(*(*args).list).player),
2427
Pickup::new(*(*(*args).list).pickup),
2528
);

0 commit comments

Comments
 (0)