type OnLevelAddedPlayerFn = fn(*mut LevelC, *mut PlayerC) -> bool;
struct FunctionPtrAddress {
addy: OnLevelAddedPlayerFn
}
lazy_static! {
static ref fn_ptrs: FunctionPtrAddress = FunctionPtrAddress {
addy: unsafe {
std::mem::transmute::<usize, OnLevelAddedPlayerFn>(0x10111790)
}
};
}
static_detours! {
struct CreateMoveDetour: fn(*mut LevelC, *mut PlayerC) -> bool;
}
pub fn init_hooks() {
let closure_for_on_level_added_player = |level, player| {
ui::toast("Not original", "lol");
return (fn_ptrs.addy)(level, player);
};
let mut hook = unsafe {
CreateMoveDetour.initialize(on_level_added_player_hook, closure_for_on_level_added_player).unwrap()
};
unsafe {
hook.enable().unwrap();
}
on_level_added_player_hook(std::ptr::null_mut(), std::ptr::null_mut());
hook.call(std::ptr::null_mut(), std::ptr::null_mut());
}
fn on_level_added_player_hook(level: *mut LevelC, player: *mut PlayerC) -> bool {
ui::toast("Original", "lol");
return (fn_ptrs.addy)(level, player);
}
Comments