mirror of
https://github.com/GTAmodding/re3.git
synced 2024-12-25 05:55:40 +00:00
CRemote
This commit is contained in:
parent
8373db1e7a
commit
43bd2227a8
7 changed files with 74 additions and 11 deletions
|
@ -68,7 +68,6 @@ CPlayerPed
|
||||||
CPopulation
|
CPopulation
|
||||||
CRadar
|
CRadar
|
||||||
CRecordDataForChase
|
CRecordDataForChase
|
||||||
CRemote
|
|
||||||
CRoadBlocks
|
CRoadBlocks
|
||||||
CRubbish
|
CRubbish
|
||||||
CSceneEdit
|
CSceneEdit
|
||||||
|
|
|
@ -2541,7 +2541,7 @@ bool CCarCtrl::JoinCarWithRoadSystemGotoCoors(CVehicle* pVehicle, CVector vecTar
|
||||||
pVehicle->AutoPilot.m_aPathFindNodesInfo, &pVehicle->AutoPilot.m_nPathFindNodesCount);
|
pVehicle->AutoPilot.m_aPathFindNodesInfo, &pVehicle->AutoPilot.m_nPathFindNodesCount);
|
||||||
if (pVehicle->AutoPilot.m_nPathFindNodesCount < 2){
|
if (pVehicle->AutoPilot.m_nPathFindNodesCount < 2){
|
||||||
pVehicle->AutoPilot.m_nPrevRouteNode = pVehicle->AutoPilot.m_nCurrentRouteNode = pVehicle->AutoPilot.m_nNextRouteNode = 0;
|
pVehicle->AutoPilot.m_nPrevRouteNode = pVehicle->AutoPilot.m_nCurrentRouteNode = pVehicle->AutoPilot.m_nNextRouteNode = 0;
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
pVehicle->AutoPilot.m_nPrevRouteNode = 0;
|
pVehicle->AutoPilot.m_nPrevRouteNode = 0;
|
||||||
pVehicle->AutoPilot.m_nCurrentRouteNode = pVehicle->AutoPilot.m_aPathFindNodesInfo[0] - ThePaths.m_pathNodes;
|
pVehicle->AutoPilot.m_nCurrentRouteNode = pVehicle->AutoPilot.m_aPathFindNodesInfo[0] - ThePaths.m_pathNodes;
|
||||||
|
@ -2550,7 +2550,7 @@ bool CCarCtrl::JoinCarWithRoadSystemGotoCoors(CVehicle* pVehicle, CVector vecTar
|
||||||
pVehicle->AutoPilot.RemoveOnePathNode();
|
pVehicle->AutoPilot.RemoveOnePathNode();
|
||||||
FindLinksToGoWithTheseNodes(pVehicle);
|
FindLinksToGoWithTheseNodes(pVehicle);
|
||||||
pVehicle->AutoPilot.m_nNextLane = pVehicle->AutoPilot.m_nCurrentLane = 0;
|
pVehicle->AutoPilot.m_nNextLane = pVehicle->AutoPilot.m_nCurrentLane = 0;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCarCtrl::FindLinksToGoWithTheseNodes(CVehicle* pVehicle)
|
void CCarCtrl::FindLinksToGoWithTheseNodes(CVehicle* pVehicle)
|
||||||
|
|
|
@ -1,6 +1,56 @@
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "patcher.h"
|
#include "patcher.h"
|
||||||
|
#include "Automobile.h"
|
||||||
|
#include "CarCtrl.h"
|
||||||
|
#include "Camera.h"
|
||||||
#include "Remote.h"
|
#include "Remote.h"
|
||||||
|
#include "Timer.h"
|
||||||
|
#include "World.h"
|
||||||
|
#include "PlayerInfo.h"
|
||||||
|
#include "Vehicle.h"
|
||||||
|
|
||||||
WRAPPER void CRemote::GivePlayerRemoteControlledCar(float, float, float, float, uint16) { EAXJMP(0x435C30); }
|
void
|
||||||
WRAPPER void CRemote::TakeRemoteControlledCarFromPlayer(void) { EAXJMP(0x435DA0); }
|
CRemote::GivePlayerRemoteControlledCar(float x, float y, float z, float rot, uint16 model)
|
||||||
|
{
|
||||||
|
CAutomobile *car = new CAutomobile(model, MISSION_VEHICLE);
|
||||||
|
bool found;
|
||||||
|
|
||||||
|
z = car->GetDistanceFromCentreOfMassToBaseOfModel() + CWorld::FindGroundZFor3DCoord(x, y, z + 2.0f, &found);
|
||||||
|
|
||||||
|
car->GetMatrix().SetRotateZOnly(rot);
|
||||||
|
car->GetPosition() = CVector(x, y, z);
|
||||||
|
car->m_status = STATUS_PLAYER_REMOTE;
|
||||||
|
car->bIsLocked = true;
|
||||||
|
|
||||||
|
CCarCtrl::JoinCarWithRoadSystem(car);
|
||||||
|
car->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||||
|
car->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
||||||
|
car->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS;
|
||||||
|
car->AutoPilot.m_nCruiseSpeed = car->AutoPilot.m_fMaxTrafficSpeed = 9.0f;
|
||||||
|
car->AutoPilot.m_nNextLane = car->AutoPilot.m_nCurrentLane = 0;
|
||||||
|
car->bEngineOn = true;
|
||||||
|
CWorld::Add(car);
|
||||||
|
if (FindPlayerVehicle() != nil)
|
||||||
|
FindPlayerVehicle()->m_status = STATUS_PLAYER_DISABLED;
|
||||||
|
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = car;
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->RegisterReference((CEntity**)&CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle);
|
||||||
|
TheCamera.TakeControl(car, CCam::MODE_BEHINDCAR, INTERPOLATION, CAM_CONTROLLER_1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CRemote::TakeRemoteControlledCarFromPlayer(void)
|
||||||
|
{
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->VehicleCreatedBy = RANDOM_VEHICLE;
|
||||||
|
CCarCtrl::NumMissionCars--;
|
||||||
|
CCarCtrl::NumRandomCars++;
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->bIsLocked = false;
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_nTimeLostRemoteCar = CTimer::GetTimeInMilliseconds();
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_bInRemoteMode = true;
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->bRemoveFromWorld = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
STARTPATCHES
|
||||||
|
InjectHook(0x435C30, &CRemote::GivePlayerRemoteControlledCar, PATCH_JUMP);
|
||||||
|
InjectHook(0x435DA0, &CRemote::TakeRemoteControlledCarFromPlayer, PATCH_JUMP);
|
||||||
|
ENDPATCHES
|
|
@ -3081,7 +3081,7 @@ int8 CRunningScript::ProcessCommandsFrom300To399(int32 command)
|
||||||
{
|
{
|
||||||
CollectParameters(&m_nIp, 3);
|
CollectParameters(&m_nIp, 3);
|
||||||
// ScriptParams[0] is unused.
|
// ScriptParams[0] is unused.
|
||||||
TheCamera.TakeControl(nil, ScriptParams[1], ScriptParams[2], 1);
|
TheCamera.TakeControl(nil, ScriptParams[1], ScriptParams[2], CAM_CONTROLLER_1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case COMMAND_POINT_CAMERA_AT_CAR:
|
case COMMAND_POINT_CAMERA_AT_CAR:
|
||||||
|
@ -3089,7 +3089,7 @@ int8 CRunningScript::ProcessCommandsFrom300To399(int32 command)
|
||||||
CollectParameters(&m_nIp, 3);
|
CollectParameters(&m_nIp, 3);
|
||||||
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||||
assert(pVehicle);
|
assert(pVehicle);
|
||||||
TheCamera.TakeControl(pVehicle, ScriptParams[1], ScriptParams[2], 1);
|
TheCamera.TakeControl(pVehicle, ScriptParams[1], ScriptParams[2], CAM_CONTROLLER_1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case COMMAND_POINT_CAMERA_AT_CHAR:
|
case COMMAND_POINT_CAMERA_AT_CHAR:
|
||||||
|
@ -3097,7 +3097,7 @@ int8 CRunningScript::ProcessCommandsFrom300To399(int32 command)
|
||||||
CollectParameters(&m_nIp, 3);
|
CollectParameters(&m_nIp, 3);
|
||||||
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
|
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
|
||||||
assert(pPed);
|
assert(pPed);
|
||||||
TheCamera.TakeControl(pPed, ScriptParams[1], ScriptParams[2], 1);
|
TheCamera.TakeControl(pPed, ScriptParams[1], ScriptParams[2], CAM_CONTROLLER_1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case COMMAND_RESTORE_CAMERA:
|
case COMMAND_RESTORE_CAMERA:
|
||||||
|
@ -3148,7 +3148,7 @@ int8 CRunningScript::ProcessCommandsFrom300To399(int32 command)
|
||||||
CVector pos = *(CVector*)&ScriptParams[0];
|
CVector pos = *(CVector*)&ScriptParams[0];
|
||||||
if (pos.z <= MAP_Z_LOW_LIMIT)
|
if (pos.z <= MAP_Z_LOW_LIMIT)
|
||||||
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
|
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
|
||||||
TheCamera.TakeControlNoEntity(pos, ScriptParams[3], 1);
|
TheCamera.TakeControlNoEntity(pos, ScriptParams[3], CAM_CONTROLLER_1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case COMMAND_ADD_BLIP_FOR_CAR_OLD:
|
case COMMAND_ADD_BLIP_FOR_CAR_OLD:
|
||||||
|
|
|
@ -289,7 +289,7 @@ CAnimViewer::Update(void)
|
||||||
}
|
}
|
||||||
newEntity->GetPosition() = CVector(0.0f, 0.0f, 0.0f);
|
newEntity->GetPosition() = CVector(0.0f, 0.0f, 0.0f);
|
||||||
CWorld::Add(newEntity);
|
CWorld::Add(newEntity);
|
||||||
TheCamera.TakeControl(pTarget, 9, 2, 1);
|
TheCamera.TakeControl(pTarget, CCam::MODE_MODELVIEW, JUMP_CUT, CAM_CONTROLLER_1);
|
||||||
}
|
}
|
||||||
if (pTarget->m_type == ENTITY_TYPE_VEHICLE || pTarget->m_type == ENTITY_TYPE_PED || pTarget->m_type == ENTITY_TYPE_OBJECT) {
|
if (pTarget->m_type == ENTITY_TYPE_VEHICLE || pTarget->m_type == ENTITY_TYPE_PED || pTarget->m_type == ENTITY_TYPE_OBJECT) {
|
||||||
((CPhysical*)pTarget)->m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
|
((CPhysical*)pTarget)->m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
|
|
@ -239,6 +239,20 @@ enum
|
||||||
MBLUR_UNUSED, // pinkish
|
MBLUR_UNUSED, // pinkish
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
NONE = 0,
|
||||||
|
INTERPOLATION,
|
||||||
|
JUMP_CUT
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
CAM_CONTROLLER_0,
|
||||||
|
CAM_CONTROLLER_1,
|
||||||
|
CAM_CONTROLLER_2
|
||||||
|
};
|
||||||
|
|
||||||
struct CCamera : public CPlaceable
|
struct CCamera : public CPlaceable
|
||||||
{
|
{
|
||||||
bool m_bAboveGroundTrainNodesLoaded;
|
bool m_bAboveGroundTrainNodesLoaded;
|
||||||
|
|
|
@ -256,7 +256,7 @@ void
|
||||||
CCutsceneMgr::SetupCutsceneToStart(void)
|
CCutsceneMgr::SetupCutsceneToStart(void)
|
||||||
{
|
{
|
||||||
TheCamera.SetCamCutSceneOffSet(ms_cutsceneOffset);
|
TheCamera.SetCamCutSceneOffSet(ms_cutsceneOffset);
|
||||||
TheCamera.TakeControlWithSpline(2);
|
TheCamera.TakeControlWithSpline(JUMP_CUT);
|
||||||
TheCamera.SetWideScreenOn();
|
TheCamera.SetWideScreenOn();
|
||||||
|
|
||||||
ms_cutsceneOffset.z++;
|
ms_cutsceneOffset.z++;
|
||||||
|
|
Loading…
Reference in a new issue