8000 [Experimental] Reverse state handlers by Segfaultd · Pull Request #147 · MafiaHub/MafiaMP · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

[Experimental] Reverse state handlers #147

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 20 additions & 6 deletions code/client/src/core/hooks/character_controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,30 +163,44 @@ bool __fastcall C_CharacterStateHandlerMove__IsSprinting(SDK::ue::game::humanai:

typedef bool(__fastcall *C_CharacterStateHandlerWeapon__SetupReload_t)(SDK::ue::game::humanai::C_CharacterStateHandlerWeapon *, bool);
C_CharacterStateHandlerWeapon__SetupReload_t C_CharacterStateHandlerWeapon__SetupReload_original = nullptr;
bool C_CharacterStateHandlerWeapon__SetupReload(SDK::ue::game::humanai::C_CharacterStateHandlerWeapon *pThis, bool a2) {
bool C_CharacterStateHandlerWeapon__SetupReload(SDK::ue::game::humanai::C_CharacterStateHandlerWeapon *pWeaponHandler, bool a2) {
Framework::Logging::GetLogger("Hooks")->debug("C_CharacterStateHandlerWeapon__SetupReload {}", a2);
return C_CharacterStateHandlerWeapon__SetupReload_original(pThis, a2);

SDK::C_Human2 *pCharacter = pWeaponHandler->GetCharacter();
if (SDK::GetGame()->GetActivePlayer() != pCharacter) {
MafiaMP::Game::Overrides::ScopedEntityTypeFaker restore(pCharacter, SDK::E_EntityType::E_ENTITY_HUMAN);
return C_CharacterStateHandlerWeapon__SetupReload_original(pWeaponHandler, a2);
}
else
return C_CharacterStateHandlerWeapon__SetupReload_original(pWeaponHandler, a2);
}

typedef int64_t(__fastcall *C_CharacterStateHandlerWeapon__StopReload_t)(SDK::ue::game::humanai::C_CharacterStateHandlerWeapon *);
C_CharacterStateHandlerWeapon__StopReload_t C_CharacterStateHandlerWeapon__StopReload_original = nullptr;
int64_t C_CharacterStateHandlerWeapon__StopReload(SDK::ue::game::humanai::C_CharacterStateHandlerWeapon *pThis) {
int64_t C_CharacterStateHandlerWeapon__StopReload(SDK::ue::game::humanai::C_CharacterStateHandlerWeapon *pWeaponHandler) {
Framework::Logging::GetLogger("Hooks")->debug("C_CharacterStateHandlerWeapon__StopReload");
return C_CharacterStateHandlerWeapon__StopReload_original(pThis);

SDK::C_Human2 *pCharacter = pWeaponHandler->GetCharacter();
if (SDK::GetGame()->GetActivePlayer() != pCharacter) {
MafiaMP::Game::Overrides::ScopedEntityTypeFaker restore(pCharacter, SDK::E_EntityType::E_ENTITY_HUMAN);
return C_CharacterStateHandlerWeapon__StopReload_original(pWeaponHandler);
}
else
return C_CharacterStateHandlerWeapon__StopReload_original(pWeaponHandler);
}

// These are just stubs to prevent the game blocking the actions on a remote entity
// It has no effect over the local player entity
typedef bool(__fastcall *C_CharacterStateHandlerAim__IsAimAllowed_t)(void *);
C_CharacterStateHandlerAim__IsAimAllowed_t C_CharacterStateHandlerAim__IsAimAllowed_original = nullptr;
bool __fastcall C_CharacterStateHandlerAim__IsAimAllowed(SDK::ue::game::humanai::C_CharacterStateHandler *pAimHandler) {
return true;
}

typedef bool(__fastcall *C_CharacterStateHandlerAim__IsAimBlocked_t)(void *);
C_CharacterStateHandlerAim__IsAimBlocked_t C_CharacterStateHandlerAim__IsAimBlocked_original = nullptr;
bool __fastcall C_CharacterStateHandlerAim__IsAimBlocked(SDK::ue::game::humanai::C_CharacterStateHandler *pAimHandler) {
return false;
}

typedef bool(__fastcall *C_CharacterLocomotionController__IsFreeFire_t)(void *);
C_CharacterLocomotionController__IsFreeFire_t C_CharacterLocomotionController__IsFreeFire_original = nullptr;
bool C_CharacterLocomotionController__IsFreeFire(void* pThis) {
Expand Down
3 changes: 3 additions & 0 deletions code/client/src/sdk/ue/game/humanai/c_character_controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,9 @@ namespace SDK {
C_CharacterStateHandler *GetCurrentStateHandler() {
return m_pCurrentStateHandler;
}
C_CharacterStateHandlerWeapon *GetWeaponHandler() {
return m_pWeaponStateHandler;
}
C_CharacterStateHandler::E_State_Handler_Type GetCurrentStateHandlerType() const;
C_CharacterStateHandler *GetHandlerByType(C_CharacterStateHandler::E_State_Handler_Type type);
uintptr_t GetCharacterLocomotionController() {
Expand Down
0