Fix bugs with cutscene player
This commit is contained in:
parent
5311ada582
commit
28f21de664
@ -46,6 +46,8 @@ CameraZoom = "Camera zoom"
|
|||||||
CameraZoomLock = "Lock camera zoom"
|
CameraZoomLock = "Lock camera zoom"
|
||||||
CameraZoomLockFreecam = "Freecam is enabled. Camera zoom can't work together with freecam mode"
|
CameraZoomLockFreecam = "Freecam is enabled. Camera zoom can't work together with freecam mode"
|
||||||
CameraZoomLockInfo = "Note: This will permanently lock camera zoom. Snipers or scopes won't work properly!"
|
CameraZoomLockInfo = "Note: This will permanently lock camera zoom. Snipers or scopes won't work properly!"
|
||||||
|
ChangeRadioStaion = "Change radio station"
|
||||||
|
CurrentStation = "Current staion"
|
||||||
Cloudy = "Cloudy"
|
Cloudy = "Cloudy"
|
||||||
Country = "Country"
|
Country = "Country"
|
||||||
CurrentDay = "Current day"
|
CurrentDay = "Current day"
|
||||||
@ -95,6 +97,7 @@ Mission loader may cause,
|
|||||||
It's recommanded not to save after using the mission loader. Use it at your own risk!"""
|
It's recommanded not to save after using the mission loader. Use it at your own risk!"""
|
||||||
Missions = "Missions"
|
Missions = "Missions"
|
||||||
MissionStartFailed = "Can't start mission now"
|
MissionStartFailed = "Can't start mission now"
|
||||||
|
MobileRadio = "Mobile radio"
|
||||||
MovementSpeed = "Movement speed"
|
MovementSpeed = "Movement speed"
|
||||||
Ninja = "Ninja"
|
Ninja = "Ninja"
|
||||||
NoWaterPhysics = "No water physics"
|
NoWaterPhysics = "No water physics"
|
||||||
|
@ -32,6 +32,20 @@ void Cutscene::Play(std::string& rootKey, std::string& cutsceneId, std::string&
|
|||||||
if (pPlayer)
|
if (pPlayer)
|
||||||
{
|
{
|
||||||
m_SceneName = cutsceneId;
|
m_SceneName = cutsceneId;
|
||||||
|
m_pLastVeh = pPlayer->m_nPedFlags.bInVehicle ? pPlayer->m_pVehicle : nullptr;
|
||||||
|
m_nVehSeat = -1;
|
||||||
|
|
||||||
|
if (m_pLastVeh->m_pDriver != pPlayer)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i != 8; ++i)
|
||||||
|
{
|
||||||
|
if (m_pLastVeh->m_apPassengers[i] == pPlayer)
|
||||||
|
{
|
||||||
|
m_nVehSeat = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Command<Commands::LOAD_CUTSCENE>(cutsceneId.c_str());
|
Command<Commands::LOAD_CUTSCENE>(cutsceneId.c_str());
|
||||||
m_nInterior = pPlayer->m_nAreaCode;
|
m_nInterior = pPlayer->m_nAreaCode;
|
||||||
pPlayer->m_nAreaCode = std::stoi(interior);
|
pPlayer->m_nAreaCode = std::stoi(interior);
|
||||||
@ -358,12 +372,23 @@ void Animation::ShowPage()
|
|||||||
{
|
{
|
||||||
if (Cutscene::m_bRunning)
|
if (Cutscene::m_bRunning)
|
||||||
{
|
{
|
||||||
|
CPlayerPed* player = FindPlayerPed();
|
||||||
|
int hPlayer = CPools::GetPedRef(player);
|
||||||
|
int hVeh = CPools::GetVehicleRef(Cutscene::m_pLastVeh);
|
||||||
Command<Commands::CLEAR_CUTSCENE>();
|
Command<Commands::CLEAR_CUTSCENE>();
|
||||||
Cutscene::m_bRunning = false;
|
Cutscene::m_bRunning = false;
|
||||||
Cutscene::m_SceneName = "";
|
Cutscene::m_SceneName = "";
|
||||||
CPlayerPed* player = FindPlayerPed();
|
|
||||||
player->m_nAreaCode = Cutscene::m_nInterior;
|
player->m_nAreaCode = Cutscene::m_nInterior;
|
||||||
Command<Commands::SET_AREA_VISIBLE>(player->m_nAreaCode);
|
Command<Commands::SET_AREA_VISIBLE>(player->m_nAreaCode);
|
||||||
|
|
||||||
|
if (Cutscene::m_nVehSeat == -1)
|
||||||
|
{
|
||||||
|
Command<Commands::WARP_CHAR_INTO_CAR>(hPlayer, hVeh);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Command<Commands::WARP_CHAR_INTO_CAR_AS_PASSENGER>(hPlayer, hVeh, Cutscene::m_nVehSeat);
|
||||||
|
}
|
||||||
Cutscene::m_nInterior = 0;
|
Cutscene::m_nInterior = 0;
|
||||||
TheCamera.Fade(0, 1);
|
TheCamera.Fade(0, 1);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,8 @@ public:
|
|||||||
static inline std::string m_SceneName;
|
static inline std::string m_SceneName;
|
||||||
static inline int m_nInterior; // player interior backup
|
static inline int m_nInterior; // player interior backup
|
||||||
static inline bool m_bRunning;
|
static inline bool m_bRunning;
|
||||||
|
static inline CVehicle *m_pLastVeh;
|
||||||
|
static inline int m_nVehSeat;
|
||||||
|
|
||||||
static void Play(std::string& rootKey, std::string& cutsceneId, std::string& interior);
|
static void Play(std::string& rootKey, std::string& cutsceneId, std::string& interior);
|
||||||
};
|
};
|
||||||
|
79
src/game.cpp
79
src/game.cpp
@ -7,6 +7,7 @@
|
|||||||
#include <CIplStore.h>
|
#include <CIplStore.h>
|
||||||
#include <CMessages.h>
|
#include <CMessages.h>
|
||||||
#include <CSprite2d.h>
|
#include <CSprite2d.h>
|
||||||
|
#include <CAERadioTrackManager.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
@ -575,6 +576,45 @@ void Game::ShowPage()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
|
if (Widget::Checkbox(TEXT("Game.MobileRadio"), &m_bMobileRadio))
|
||||||
|
{
|
||||||
|
// AERadioTrackManager.StartRadio(5, 0, 0, 0);
|
||||||
|
CallMethodAndReturn<int, 0x4EB3C0, int, int, int, int, int>((int)&AERadioTrackManager, 5, 0, 0, 0);
|
||||||
|
patch::Nop(0x576C4E, 30);
|
||||||
|
// CVehicle *pVeh = FindPlayerVehicle(-1, false);
|
||||||
|
// static tVehicleAudioSettings settings;
|
||||||
|
// if (m_bMobileRadio)
|
||||||
|
// {
|
||||||
|
// patch::PutRetn(0x4F5BA0);
|
||||||
|
// patch::PutRetn(0x4FCF40);
|
||||||
|
// patch::PutRetn(0x4F5B60);
|
||||||
|
// patch::PutRetn(0x4F5700);
|
||||||
|
|
||||||
|
// patch::PutRetn(0x4E9820);
|
||||||
|
|
||||||
|
// if (!pVeh)
|
||||||
|
// {
|
||||||
|
// settings.m_nRadioType = RADIO_CIVILIAN;
|
||||||
|
// settings.m_nRadioID = RADIO_K_DST;
|
||||||
|
// settings.m_fBassEq = 1.0;
|
||||||
|
// settings.m_nBassSetting = 1;
|
||||||
|
// CAEVehicleAudioEntity::s_pVehicleAudioSettingsForRadio = &settings;
|
||||||
|
// // CAEVehicleAudioEntity::s_pPlayerDriver = FindPlayerPed();
|
||||||
|
// CallMethod<0x4EB550, int, int>(0x8CB6F8, (int)&settings);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// patch::Set<uint8_t>(0x4F5BA0, 0x90);
|
||||||
|
// patch::Set<uint8_t>(0x4FCF40, 0x51);
|
||||||
|
// patch::Set<uint8_t>(0x4F5B60, 0x0F);
|
||||||
|
// patch::Set<uint8_t>(0x4F5700, 0x51);
|
||||||
|
// CAEVehicleAudioEntity::s_pVehicleAudioSettingsForRadio = nullptr;
|
||||||
|
// // CAEVehicleAudioEntity::s_pPlayerDriver = nullptr;
|
||||||
|
// // AERadioTrackManager.StopRadio(&settings, 0);
|
||||||
|
// Call<0x4E9820, int, int, int>((int)&AERadioTrackManager, 0, 0);
|
||||||
|
// }
|
||||||
|
}
|
||||||
if (Widget::Checkbox(TEXT("Game.NoWaterPhysics"), &m_bNoWaterPhysics))
|
if (Widget::Checkbox(TEXT("Game.NoWaterPhysics"), &m_bNoWaterPhysics))
|
||||||
{
|
{
|
||||||
if (m_bNoWaterPhysics)
|
if (m_bNoWaterPhysics)
|
||||||
@ -663,6 +703,45 @@ void Game::ShowPage()
|
|||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
}
|
}
|
||||||
|
if (ImGui::CollapsingHeader(TEXT("Game.ChangeRadioStaion")))
|
||||||
|
{
|
||||||
|
static std::string channels[] = {
|
||||||
|
"Playback FM", "KRose", "KDST", "Bounce FM", "SFUR", "Radio Los Santos", "Radio X",
|
||||||
|
"CSR ", "KJah West", "Master Sounds", "WCTR", "User Tracks", "None"
|
||||||
|
};
|
||||||
|
|
||||||
|
int channelIndex = 0;
|
||||||
|
Command<Commands::GET_RADIO_CHANNEL>(&channelIndex);
|
||||||
|
if (ImGui::ArrowButton("Left", ImGuiDir_Left))
|
||||||
|
{
|
||||||
|
if (channelIndex == 0)
|
||||||
|
{
|
||||||
|
channelIndex = 12;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--channelIndex;
|
||||||
|
}
|
||||||
|
Command<Commands::SET_RADIO_CHANNEL>(channelIndex);
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::Text("%s: %s",TEXT("Game.CurrentStation"), channels[channelIndex].c_str());
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::ArrowButton("Right", ImGuiDir_Right))
|
||||||
|
{
|
||||||
|
if (channelIndex == 12)
|
||||||
|
{
|
||||||
|
channelIndex = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++channelIndex;
|
||||||
|
}
|
||||||
|
Command<Commands::SET_RADIO_CHANNEL>(channelIndex);
|
||||||
|
}
|
||||||
|
ImGui::Spacing();
|
||||||
|
ImGui::Separator();
|
||||||
|
}
|
||||||
if (ImGui::CollapsingHeader(TEXT("Game.CurrentDay")))
|
if (ImGui::CollapsingHeader(TEXT("Game.CurrentDay")))
|
||||||
{
|
{
|
||||||
int day = CClock::CurrentDay - 1;
|
int day = CClock::CurrentDay - 1;
|
||||||
|
@ -45,6 +45,7 @@ private:
|
|||||||
static inline bool m_bDisableCheats;
|
static inline bool m_bDisableCheats;
|
||||||
static inline bool m_bDisableReplay;
|
static inline bool m_bDisableReplay;
|
||||||
static inline bool m_bMissionTimer;
|
static inline bool m_bMissionTimer;
|
||||||
|
static inline bool m_bMobileRadio;
|
||||||
|
|
||||||
struct HardMode
|
struct HardMode
|
||||||
{
|
{
|
||||||
|
@ -505,7 +505,7 @@ void Menu::ShowPage()
|
|||||||
{
|
{
|
||||||
ImGui::TextWrapped(TEXT("Menu.OpenCMDUsing"), commandWindow.GetNameString().c_str());
|
ImGui::TextWrapped(TEXT("Menu.OpenCMDUsing"), commandWindow.GetNameString().c_str());
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
if (ImGui::CollapsingHeader(TEXT("Menu.SeArmourCMD")))
|
if (ImGui::CollapsingHeader(TEXT("Menu.SetArmourCMD")))
|
||||||
{
|
{
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::TextWrapped(TEXT("Menu.SetArmourCMDText"));
|
ImGui::TextWrapped(TEXT("Menu.SetArmourCMDText"));
|
||||||
|
@ -808,7 +808,7 @@ void Player::ShowPage()
|
|||||||
{
|
{
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
|
|
||||||
if (Widget::Checkbox(TEXT("Player.AimSkinChanger"), &m_bAimSkinChanger, TEXT("Player.AimSkinChangerTip") + aimSkinChanger.Pressed()))
|
if (Widget::Checkbox(TEXT("Player.AimSkinChanger"), &m_bAimSkinChanger, (TEXT_S("Player.AimSkinChangerTip") + aimSkinChanger.GetNameString()).c_str()))
|
||||||
{
|
{
|
||||||
gConfig.Set("Features.AimSkinChanger", m_bAimSkinChanger);
|
gConfig.Set("Features.AimSkinChanger", m_bAimSkinChanger);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user