Add an option to enter vehicle as passenger
- Added ModMenuModule::Utils::EnterCarAsPassenger - Added "Enter as passenger" button in ModMenuModule::VehiclesMenu
This commit is contained in:
parent
cd56d3908a
commit
c0e93e1919
@ -516,6 +516,7 @@
|
||||
<ClInclude Include="src\modules\modmenu\utils\categorized-native-cheats-utils.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\categorized-objects-utils.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\custom-render-queue-utils.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\enter-car-as-passenger.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\explode-all-cars.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\explode-last-car.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\fix-car-utils.h" />
|
||||
@ -820,6 +821,7 @@
|
||||
<ClCompile Include="src\modules\modmenu\utils\categorized-objects-utils.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\custom-render-queue-utils.cpp" />
|
||||
<ClCompile Include="src\game\utils\teleport-utils.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\enter-car-as-passenger.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\explode-all-cars.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\explode-last-car.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\fix-car-utils.cpp" />
|
||||
|
||||
@ -236,6 +236,7 @@
|
||||
<ClCompile Include="src\modules\modmenu\menus\smooth-vehicle-camera-menu.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\menus\smooth-follow-camera-menu.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\quick-actions\toggle-smooth-camera.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\enter-car-as-passenger.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\converters\ammo.h" />
|
||||
@ -606,6 +607,7 @@
|
||||
<ClInclude Include="src\modules\modmenu\menus\smooth-vehicle-camera-menu.h" />
|
||||
<ClInclude Include="src\modules\modmenu\menus\smooth-follow-camera-menu.h" />
|
||||
<ClInclude Include="src\modules\modmenu\quick-actions\toggle-smooth-camera.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\enter-car-as-passenger.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="GTA2.props" />
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
#include "../cheats/last-car.h"
|
||||
#include "../cheats/disable-steering-assist.h"
|
||||
#include "../../../converters/yes-no.h"
|
||||
#include "../utils/enter-car-as-passenger.h"
|
||||
|
||||
ModMenuModule::VehiclesMenu::VehiclesMenu()
|
||||
{
|
||||
@ -45,6 +46,11 @@ bool ModMenuModule::VehiclesMenu::Attach()
|
||||
disableSteeringAssistCheat->SetEnabled(newValue);
|
||||
});
|
||||
|
||||
// enter as passenger
|
||||
auto* enterAsPassengerText = m_menuController->CreateItem<UiModule::Text>(vertCont, L"Enter as passenger", options.textSize);
|
||||
auto* enterAsPassengerBtn = m_menuController->CreateLatestItemController<UiModule::ButtonController>(enterAsPassengerText);
|
||||
enterAsPassengerBtn->SetCallback(std::bind(&VehiclesMenu::EnterAsPassenger, this));
|
||||
|
||||
SetPreviousSelectedIndex();
|
||||
|
||||
return true;
|
||||
@ -103,6 +109,15 @@ void ModMenuModule::VehiclesMenu::OnCheatStateChange(CheatStateEvent& event)
|
||||
}
|
||||
}
|
||||
|
||||
void ModMenuModule::VehiclesMenu::EnterAsPassenger() const
|
||||
{
|
||||
bool success = Utils::EnterCarAsPassenger();
|
||||
|
||||
if (!success) {
|
||||
ToastManager::GetInstance()->Show({ L"Failed to enter vehicle", ToastType::Warning });
|
||||
}
|
||||
}
|
||||
|
||||
void ModMenuModule::VehiclesMenu::UpdateLastCarState()
|
||||
{
|
||||
if (!m_lastCarText) return;
|
||||
|
||||
@ -18,6 +18,7 @@ namespace ModMenuModule {
|
||||
void OnMenuAction(UiModule::Selectable* item, UiModule::MenuItemId id) override;
|
||||
void OnLastCarStateChange(ModMenuModule::LastCarStateEvent& event);
|
||||
void OnCheatStateChange(CheatStateEvent& event);
|
||||
void EnterAsPassenger() const;
|
||||
|
||||
void UpdateLastCarState();
|
||||
void UpdateCheatStates();
|
||||
|
||||
57
src/modules/modmenu/utils/enter-car-as-passenger.cpp
Normal file
57
src/modules/modmenu/utils/enter-car-as-passenger.cpp
Normal file
@ -0,0 +1,57 @@
|
||||
#include "enter-car-as-passenger.h"
|
||||
|
||||
Game::Car* GetCarToEnterAsPassenger(Game::Ped* ped)
|
||||
{
|
||||
if (!ped || !ped->gameObject || !ped->gameObject->sprite) return nullptr;
|
||||
|
||||
Game::TrafficManager* trafficManager = Game::Memory::GetTrafficManager();
|
||||
if (!trafficManager) return nullptr;
|
||||
|
||||
// logic below is based on 0x004a76d0
|
||||
if (ped->state == Game::PED_STATE_WASTED) return nullptr;
|
||||
if (ped->currentCar) return nullptr;
|
||||
if (ped->objective == Game::PED_OBJECTIVE_LEAVE_CAR) return nullptr;
|
||||
return Game::Functions::GetNearestCarForEnter(
|
||||
trafficManager,
|
||||
0,
|
||||
ped->gameObject->sprite, 3
|
||||
);
|
||||
}
|
||||
|
||||
static Game::byte GetDoorToEnterAsPassenger(Game::Car* car)
|
||||
{
|
||||
Game::byte doorIndex = 1;
|
||||
Game::Passenger* passenger = car->lastPassenger;
|
||||
while (passenger) {
|
||||
if (passenger->ped && passenger->ped->targetCarDoor == doorIndex) {
|
||||
passenger = car->lastPassenger;
|
||||
doorIndex++;
|
||||
}
|
||||
else {
|
||||
passenger = passenger->prev;
|
||||
}
|
||||
}
|
||||
|
||||
return doorIndex;
|
||||
}
|
||||
|
||||
bool ModMenuModule::Utils::EnterCarAsPassenger()
|
||||
{
|
||||
Game::Ped* playerPed = Game::Utils::GetPlayerCurrentPed();
|
||||
Game::Car* targetCar = GetCarToEnterAsPassenger(playerPed);
|
||||
if (!targetCar) return false;
|
||||
|
||||
// logic below is based on 0x004a76d0
|
||||
bool isTrain = Game::Functions::IsCarATrain(targetCar);
|
||||
Game::PED_OBJECTIVE newObjective = isTrain ?
|
||||
Game::PED_OBJECTIVE_ENTER_TRAIN :
|
||||
Game::PED_OBJECTIVE_ENTER_CAR;
|
||||
|
||||
Game::Functions::UpdatePedStatesFromObjective(playerPed, 0, Game::PED_OBJECTIVE_NO_OBJ, 9999);
|
||||
Game::Functions::PedSetObjective(playerPed, 0, newObjective, 9999);
|
||||
playerPed->objectiveTargetCar = targetCar;
|
||||
playerPed->enterCarAsPassenger = 1;
|
||||
playerPed->targetCarDoor = GetDoorToEnterAsPassenger(targetCar);
|
||||
|
||||
return true;
|
||||
}
|
||||
6
src/modules/modmenu/utils/enter-car-as-passenger.h
Normal file
6
src/modules/modmenu/utils/enter-car-as-passenger.h
Normal file
@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
#include "../common.h"
|
||||
|
||||
namespace ModMenuModule::Utils {
|
||||
bool EnterCarAsPassenger();
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user