mirror of
https://github.com/halpz/re3.git
synced 2025-07-01 14:06:22 +00:00
Merge branch 'master' of https://github.com/GTAmodding/re3
This commit is contained in:
@ -103,9 +103,9 @@ void CAutoPilot::Load(uint8*& buf)
|
||||
m_nNextDirection = ReadSaveBuf<int8>(buf);
|
||||
m_nCurrentLane = ReadSaveBuf<int8>(buf);
|
||||
m_nNextLane = ReadSaveBuf<int8>(buf);
|
||||
m_nDrivingStyle = (eCarDrivingStyle)ReadSaveBuf<uint8>(buf);
|
||||
m_nCarMission = (eCarMission)ReadSaveBuf<uint8>(buf);
|
||||
m_nTempAction = (eCarTempAction)ReadSaveBuf<uint8>(buf);
|
||||
m_nDrivingStyle = ReadSaveBuf<uint8>(buf);
|
||||
m_nCarMission = ReadSaveBuf<uint8>(buf);
|
||||
m_nTempAction = ReadSaveBuf<uint8>(buf);
|
||||
m_nTimeTempAction = ReadSaveBuf<uint32>(buf);
|
||||
m_fMaxTrafficSpeed = ReadSaveBuf<float>(buf);
|
||||
m_nCruiseSpeed = ReadSaveBuf<uint8>(buf);
|
||||
|
@ -4,7 +4,7 @@
|
||||
class CVehicle;
|
||||
struct CPathNode;
|
||||
|
||||
enum eCarMission : uint8
|
||||
enum eCarMission
|
||||
{
|
||||
MISSION_NONE,
|
||||
MISSION_CRUISE,
|
||||
@ -28,7 +28,7 @@ enum eCarMission : uint8
|
||||
MISSION_BLOCKCAR_HANDBRAKESTOP,
|
||||
};
|
||||
|
||||
enum eCarTempAction : uint8
|
||||
enum eCarTempAction
|
||||
{
|
||||
TEMPACT_NONE,
|
||||
TEMPACT_WAIT,
|
||||
@ -43,7 +43,7 @@ enum eCarTempAction : uint8
|
||||
TEMPACT_SWERVERIGHT
|
||||
};
|
||||
|
||||
enum eCarDrivingStyle : uint8
|
||||
enum eCarDrivingStyle
|
||||
{
|
||||
DRIVINGSTYLE_STOP_FOR_CARS,
|
||||
DRIVINGSTYLE_SLOW_DOWN_FOR_CARS,
|
||||
@ -69,9 +69,9 @@ public:
|
||||
int8 m_nNextDirection;
|
||||
int8 m_nCurrentLane;
|
||||
int8 m_nNextLane;
|
||||
eCarDrivingStyle m_nDrivingStyle;
|
||||
eCarMission m_nCarMission;
|
||||
eCarTempAction m_nTempAction;
|
||||
uint8 m_nDrivingStyle;
|
||||
uint8 m_nCarMission;
|
||||
uint8 m_nTempAction;
|
||||
uint32 m_nTimeTempAction;
|
||||
float m_fMaxTrafficSpeed;
|
||||
uint8 m_nCruiseSpeed;
|
||||
|
@ -539,7 +539,7 @@ void CCarAI::TellCarToBlockOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = Max(6, pVehicle->AutoPilot.m_nCruiseSpeed);
|
||||
}
|
||||
|
||||
eCarMission CCarAI::FindPoliceCarMissionForWantedLevel()
|
||||
uint8 CCarAI::FindPoliceCarMissionForWantedLevel()
|
||||
{
|
||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel){
|
||||
case 0:
|
||||
|
@ -19,7 +19,7 @@ public:
|
||||
static void TellOccupantsToLeaveCar(CVehicle*);
|
||||
static void TellCarToRamOtherCar(CVehicle*, CVehicle*);
|
||||
static void TellCarToBlockOtherCar(CVehicle*, CVehicle*);
|
||||
static eCarMission FindPoliceCarMissionForWantedLevel();
|
||||
static uint8 FindPoliceCarMissionForWantedLevel();
|
||||
static int32 FindPoliceCarSpeedForWantedLevel(CVehicle*);
|
||||
static void MellowOutChaseSpeed(CVehicle*);
|
||||
static void MakeWayForCarWithSiren(CVehicle *veh);
|
||||
|
@ -408,11 +408,6 @@ CCarCtrl::GenerateOneRandomCar()
|
||||
float directionNextLinkX;
|
||||
float directionNextLinkY;
|
||||
if (positionBetweenNodes < 0.5f) {
|
||||
float currentPathLinkForwardX = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirX();
|
||||
float currentPathLinkForwardY = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirY();
|
||||
float nextPathLinkForwardX = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirX();
|
||||
float nextPathLinkForwardY = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirY();
|
||||
|
||||
pCurrentLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo];
|
||||
pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo];
|
||||
positionOnCurrentLinkIncludingLane = CVector(
|
||||
@ -442,11 +437,6 @@ CCarCtrl::GenerateOneRandomCar()
|
||||
pVehicle->AutoPilot.m_nTimeEnteredCurve = CTimer::GetTimeInMilliseconds() -
|
||||
(uint32)((positionBetweenNodes - 0.5f) * pVehicle->AutoPilot.m_nTimeToSpendOnCurrentCurve);
|
||||
|
||||
float currentPathLinkForwardX = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirX();
|
||||
float currentPathLinkForwardY = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirY();
|
||||
float nextPathLinkForwardX = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirX();
|
||||
float nextPathLinkForwardY = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirY();
|
||||
|
||||
pCurrentLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo];
|
||||
pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo];
|
||||
positionOnCurrentLinkIncludingLane = CVector(
|
||||
@ -2348,7 +2338,11 @@ void CCarCtrl::SteerAICarWithPhysicsFollowPath(CVehicle* pVehicle, float* pSwerv
|
||||
switch (pVehicle->AutoPilot.m_nDrivingStyle) {
|
||||
case DRIVINGSTYLE_STOP_FOR_CARS:
|
||||
case DRIVINGSTYLE_SLOW_DOWN_FOR_CARS:
|
||||
speedStyleMultiplier = FindMaximumSpeedForThisCarInTraffic(pVehicle) / pVehicle->AutoPilot.m_nCruiseSpeed;
|
||||
speedStyleMultiplier = FindMaximumSpeedForThisCarInTraffic(pVehicle);
|
||||
#ifdef FIX_BUGS
|
||||
if (pVehicle->AutoPilot.m_nCruiseSpeed != 0)
|
||||
#endif
|
||||
speedStyleMultiplier /= pVehicle->AutoPilot.m_nCruiseSpeed;
|
||||
break;
|
||||
default:
|
||||
speedStyleMultiplier = 1.0f;
|
||||
|
@ -179,10 +179,8 @@ void CGarages::Shutdown(void)
|
||||
void CGarages::Update(void)
|
||||
{
|
||||
static int GarageToBeTidied = 0;
|
||||
#ifndef GTA_PS2
|
||||
if (CReplay::IsPlayingBack())
|
||||
return;
|
||||
#endif
|
||||
bCamShouldBeOutisde = false;
|
||||
TheCamera.pToGarageWeAreIn = nil;
|
||||
TheCamera.pToGarageWeAreInForHackAvoidFirstPerson = nil;
|
||||
@ -202,7 +200,7 @@ void CGarages::Update(void)
|
||||
aGarages[GarageToBeTidied].TidyUpGarage();
|
||||
}
|
||||
|
||||
int16 CGarages::AddOne(CVector p1, CVector p2, eGarageType type, int32 targetId)
|
||||
int16 CGarages::AddOne(CVector p1, CVector p2, uint8 type, int32 targetId)
|
||||
{
|
||||
if (NumGarages >= NUM_GARAGES) {
|
||||
assert(0);
|
||||
@ -285,7 +283,7 @@ int16 CGarages::AddOne(CVector p1, CVector p2, eGarageType type, int32 targetId)
|
||||
return NumGarages++;
|
||||
}
|
||||
|
||||
void CGarages::ChangeGarageType(int16 garage, eGarageType type, int32 mi)
|
||||
void CGarages::ChangeGarageType(int16 garage, uint8 type, int32 mi)
|
||||
{
|
||||
CGarage* pGarage = &aGarages[garage];
|
||||
pGarage->m_eGarageType = type;
|
||||
@ -2198,7 +2196,7 @@ void CGarages::CloseHideOutGaragesBeforeSave()
|
||||
}
|
||||
}
|
||||
|
||||
int32 CGarages::CountCarsInHideoutGarage(eGarageType type)
|
||||
int32 CGarages::CountCarsInHideoutGarage(uint8 type)
|
||||
{
|
||||
int32 total = 0;
|
||||
for (int i = 0; i < NUM_GARAGE_STORED_CARS; i++) {
|
||||
@ -2218,7 +2216,7 @@ int32 CGarages::CountCarsInHideoutGarage(eGarageType type)
|
||||
return total;
|
||||
}
|
||||
|
||||
int32 CGarages::FindMaxNumStoredCarsForGarage(eGarageType type)
|
||||
int32 CGarages::FindMaxNumStoredCarsForGarage(uint8 type)
|
||||
{
|
||||
switch (type) {
|
||||
case GARAGE_HIDEOUT_ONE:
|
||||
|
@ -7,7 +7,7 @@
|
||||
class CVehicle;
|
||||
class CCamera;
|
||||
|
||||
enum eGarageState : int8
|
||||
enum eGarageState
|
||||
{
|
||||
GS_FULLYCLOSED,
|
||||
GS_OPENED,
|
||||
@ -18,7 +18,7 @@ enum eGarageState : int8
|
||||
GS_AFTERDROPOFF,
|
||||
};
|
||||
|
||||
enum eGarageType : int8
|
||||
enum eGarageType
|
||||
{
|
||||
GARAGE_NONE,
|
||||
GARAGE_MISSION,
|
||||
@ -81,8 +81,8 @@ VALIDATE_SIZE(CStoredCar, 0x28);
|
||||
|
||||
class CGarage
|
||||
{
|
||||
eGarageType m_eGarageType;
|
||||
eGarageState m_eGarageState;
|
||||
uint8 m_eGarageType;
|
||||
uint8 m_eGarageState;
|
||||
bool field_2; // unused
|
||||
bool m_bClosingWithoutTargetCar;
|
||||
bool m_bDeactivated;
|
||||
@ -207,8 +207,8 @@ public:
|
||||
#endif
|
||||
static void Update(void);
|
||||
|
||||
static int16 AddOne(CVector pos1, CVector pos2, eGarageType type, int32 targetId);
|
||||
static void ChangeGarageType(int16, eGarageType, int32);
|
||||
static int16 AddOne(CVector pos1, CVector pos2, uint8 type, int32 targetId);
|
||||
static void ChangeGarageType(int16, uint8, int32);
|
||||
static void PrintMessages(void);
|
||||
static void TriggerMessage(const char* text, int16, uint16 time, int16);
|
||||
static void SetTargetCarForMissonGarage(int16, CVehicle*);
|
||||
@ -244,11 +244,14 @@ private:
|
||||
static bool IsCarSprayable(CVehicle*);
|
||||
static float FindDoorHeightForMI(int32);
|
||||
static void CloseHideOutGaragesBeforeSave(void);
|
||||
static int32 CountCarsInHideoutGarage(eGarageType);
|
||||
static int32 FindMaxNumStoredCarsForGarage(eGarageType);
|
||||
static int32 GetBombTypeForGarageType(eGarageType type) { return type - GARAGE_BOMBSHOP1 + 1; }
|
||||
static int32 GetCarsCollectedIndexForGarageType(eGarageType type) { return type - GARAGE_COLLECTCARS_1; }
|
||||
static int32 CountCarsInHideoutGarage(uint8);
|
||||
static int32 FindMaxNumStoredCarsForGarage(uint8);
|
||||
static int32 GetBombTypeForGarageType(uint8 type) { return type - GARAGE_BOMBSHOP1 + 1; }
|
||||
static int32 GetCarsCollectedIndexForGarageType(uint8 type) { return type - GARAGE_COLLECTCARS_1; }
|
||||
|
||||
friend class cAudioManager;
|
||||
friend class CGarage;
|
||||
#ifdef FIX_BUGS
|
||||
friend class CReplay;
|
||||
#endif
|
||||
};
|
||||
|
@ -67,7 +67,7 @@ CPhoneInfo::Update(void)
|
||||
} else {
|
||||
CPad::GetPad(0)->SetEnablePlayerControls(PLAYERCONTROL_PHONE);
|
||||
if (player->m_nPedState == PED_MAKE_CALL)
|
||||
player->m_nPedState = PED_IDLE;
|
||||
player->SetPedState(PED_IDLE);
|
||||
}
|
||||
}
|
||||
bool notInCar;
|
||||
@ -114,7 +114,7 @@ CPhoneInfo::Update(void)
|
||||
player->m_fRotationCur = angleToFace;
|
||||
player->m_fRotationDest = angleToFace;
|
||||
player->SetHeading(angleToFace);
|
||||
player->m_nPedState = PED_MAKE_CALL;
|
||||
player->SetPedState(PED_MAKE_CALL);
|
||||
CPad::GetPad(0)->SetDisablePlayerControls(PLAYERCONTROL_PHONE);
|
||||
TheCamera.SetWideScreenOn();
|
||||
playerInfo->MakePlayerSafe(true);
|
||||
@ -412,7 +412,7 @@ PhonePutDownCB(CAnimBlendAssociation *assoc, void *arg)
|
||||
ped->bUpdateAnimHeading = true;
|
||||
|
||||
if (ped->m_nPedState == PED_MAKE_CALL)
|
||||
ped->m_nPedState = PED_IDLE;
|
||||
ped->SetPedState(PED_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -535,7 +535,7 @@ CPickups::GenerateNewOne(CVector pos, uint32 modelIndex, uint8 type, uint32 quan
|
||||
|
||||
if (slot >= NUMPICKUPS) return -1;
|
||||
|
||||
aPickUps[slot].m_eType = (ePickupType)type;
|
||||
aPickUps[slot].m_eType = type;
|
||||
aPickUps[slot].m_bRemoved = false;
|
||||
aPickUps[slot].m_nQuantity = quantity;
|
||||
if (type == PICKUP_ONCE_TIMEOUT)
|
||||
|
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
#include "Weapon.h"
|
||||
|
||||
enum ePickupType : uint8
|
||||
enum ePickupType
|
||||
{
|
||||
PICKUP_NONE = 0,
|
||||
PICKUP_IN_SHOP,
|
||||
@ -29,7 +29,7 @@ class CPlayerPed;
|
||||
class CPickup
|
||||
{
|
||||
public:
|
||||
ePickupType m_eType;
|
||||
uint8 m_eType;
|
||||
bool m_bRemoved;
|
||||
uint16 m_nQuantity;
|
||||
CObject *m_pObject;
|
||||
|
@ -391,15 +391,17 @@ void CRecordDataForChase::ProcessControlCars(void)
|
||||
}
|
||||
}
|
||||
|
||||
#if (defined(GTA_PS2) || defined(FIX_BUGS))
|
||||
bool CRecordDataForChase::ShouldThisPadBeLeftAlone(uint8 pad)
|
||||
{
|
||||
// may be wrong
|
||||
if (Status == STATE_NONE || Status == STATE_PLAYBACK)
|
||||
if (Status == STATE_PLAYBACK_INIT) // this is useless but ps2 def checks if it's STATE_PLAYBACK_INIT
|
||||
return false;
|
||||
return pad != 0;
|
||||
|
||||
if (Status == STATE_RECORD)
|
||||
return pad != 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
void CRecordDataForChase::GiveUsACar(int32 mi, CVector pos, float angle, CAutomobile** ppCar, uint8 colour1, uint8 colour2)
|
||||
{
|
||||
|
@ -57,9 +57,7 @@ public:
|
||||
static void RestoreInfoForMatrix(CMatrix&, CCarStateEachFrame*);
|
||||
static void RestoreInfoForCar(CAutomobile*, CCarStateEachFrame*, bool);
|
||||
static void ProcessControlCars(void);
|
||||
#if (defined(GTA_PS2) || defined(FIX_BUGS))
|
||||
static bool ShouldThisPadBeLeftAlone(uint8 pad);
|
||||
#endif
|
||||
static void GiveUsACar(int32, CVector, float, CAutomobile**, uint8, uint8);
|
||||
static void StartChaseScene(float);
|
||||
static void CleanUpChaseScene(void);
|
||||
|
@ -10,6 +10,10 @@
|
||||
#include "DMAudio.h"
|
||||
#include "Draw.h"
|
||||
#include "FileMgr.h"
|
||||
#ifdef FIX_BUGS
|
||||
#include "Fire.h"
|
||||
#include "Garages.h"
|
||||
#endif
|
||||
#include "Heli.h"
|
||||
#include "main.h"
|
||||
#include "Matrix.h"
|
||||
@ -22,6 +26,10 @@
|
||||
#include "Plane.h"
|
||||
#include "Pools.h"
|
||||
#include "Population.h"
|
||||
#ifdef FIX_BUGS
|
||||
#include "Projectile.h"
|
||||
#include "ProjectileInfo.h"
|
||||
#endif
|
||||
#include "Replay.h"
|
||||
#include "References.h"
|
||||
#include "Pools.h"
|
||||
@ -102,6 +110,11 @@ float CReplay::fDistanceLookAroundCam;
|
||||
float CReplay::fBetaAngleLookAroundCam;
|
||||
float CReplay::fAlphaAngleLookAroundCam;
|
||||
#ifdef FIX_BUGS
|
||||
uint8* CReplay::pGarages;
|
||||
CFire* CReplay::FireArray;
|
||||
uint32 CReplay::NumOfFires;
|
||||
uint8* CReplay::paProjectileInfo;
|
||||
uint8* CReplay::paProjectiles;
|
||||
int CReplay::nHandleOfPlayerPed[NUMPLAYERS];
|
||||
#endif
|
||||
|
||||
@ -1025,10 +1038,10 @@ void CReplay::ProcessReplayCamera(void)
|
||||
TheCamera.GetUp() = CVector(0.0f, 1.0f, 0.0f);
|
||||
TheCamera.GetRight() = CVector(1.0f, 0.0f, 0.0f);
|
||||
RwMatrix* pm = RwFrameGetMatrix(RwCameraGetFrame(TheCamera.m_pRwCamera));
|
||||
pm->pos = *(RwV3d*)&TheCamera.GetPosition();
|
||||
pm->at = *(RwV3d*)&TheCamera.GetForward();
|
||||
pm->up = *(RwV3d*)&TheCamera.GetUp();
|
||||
pm->right = *(RwV3d*)&TheCamera.GetRight();
|
||||
pm->pos = TheCamera.GetPosition();
|
||||
pm->at = TheCamera.GetForward();
|
||||
pm->up = TheCamera.GetUp();
|
||||
pm->right = TheCamera.GetRight();
|
||||
break;
|
||||
}
|
||||
case REPLAYCAMMODE_FIXED:
|
||||
@ -1044,10 +1057,10 @@ void CReplay::ProcessReplayCamera(void)
|
||||
TheCamera.GetMatrix().GetUp() = up;
|
||||
TheCamera.GetMatrix().GetRight() = right;
|
||||
RwMatrix* pm = RwFrameGetMatrix(RwCameraGetFrame(TheCamera.m_pRwCamera));
|
||||
pm->pos = *(RwV3d*)&TheCamera.GetMatrix().GetPosition();
|
||||
pm->at = *(RwV3d*)&TheCamera.GetMatrix().GetForward();
|
||||
pm->up = *(RwV3d*)&TheCamera.GetMatrix().GetUp();
|
||||
pm->right = *(RwV3d*)&TheCamera.GetMatrix().GetRight();
|
||||
pm->pos = TheCamera.GetMatrix().GetPosition();
|
||||
pm->at = TheCamera.GetMatrix().GetForward();
|
||||
pm->up = TheCamera.GetMatrix().GetUp();
|
||||
pm->right = TheCamera.GetMatrix().GetRight();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -1156,6 +1169,17 @@ void CReplay::StoreStuffInMem(void)
|
||||
if (ped)
|
||||
StoreDetailedPedAnimation(ped, &pPedAnims[i]);
|
||||
}
|
||||
#ifdef FIX_BUGS
|
||||
pGarages = new uint8[sizeof(CGarages::aGarages)];
|
||||
memcpy(pGarages, CGarages::aGarages, sizeof(CGarages::aGarages));
|
||||
FireArray = new CFire[NUM_FIRES];
|
||||
memcpy(FireArray, gFireManager.m_aFires, sizeof(gFireManager.m_aFires));
|
||||
NumOfFires = gFireManager.m_nTotalFires;
|
||||
paProjectileInfo = new uint8[sizeof(gaProjectileInfo)];
|
||||
memcpy(paProjectileInfo, gaProjectileInfo, sizeof(gaProjectileInfo));
|
||||
paProjectiles = new uint8[sizeof(CProjectileInfo::ms_apProjectile)];
|
||||
memcpy(paProjectiles, CProjectileInfo::ms_apProjectile, sizeof(CProjectileInfo::ms_apProjectile));
|
||||
#endif
|
||||
}
|
||||
|
||||
void CReplay::RestoreStuffFromMem(void)
|
||||
@ -1206,7 +1230,7 @@ void CReplay::RestoreStuffFromMem(void)
|
||||
ped->m_rwObject = nil;
|
||||
ped->m_modelIndex = -1;
|
||||
ped->SetModelIndex(mi);
|
||||
ped->m_pVehicleAnim = 0;
|
||||
ped->m_pVehicleAnim = nil;
|
||||
ped->m_audioEntityId = DMAudio.CreateEntity(AUDIOTYPE_PHYSICAL, ped);
|
||||
DMAudio.SetEntityStatus(ped->m_audioEntityId, true);
|
||||
CPopulation::UpdatePedCount((ePedType)ped->m_nPedType, false);
|
||||
@ -1322,6 +1346,22 @@ void CReplay::RestoreStuffFromMem(void)
|
||||
}
|
||||
delete[] pPedAnims;
|
||||
pPedAnims = nil;
|
||||
#ifdef FIX_BUGS
|
||||
memcpy(CGarages::aGarages, pGarages, sizeof(CGarages::aGarages));
|
||||
delete[] pGarages;
|
||||
pGarages = nil;
|
||||
memcpy(gFireManager.m_aFires, FireArray, sizeof(gFireManager.m_aFires));
|
||||
delete[] FireArray;
|
||||
FireArray = nil;
|
||||
gFireManager.m_nTotalFires = NumOfFires;
|
||||
memcpy(gaProjectileInfo, paProjectileInfo, sizeof(gaProjectileInfo));
|
||||
delete[] paProjectileInfo;
|
||||
paProjectileInfo = nil;
|
||||
memcpy(CProjectileInfo::ms_apProjectile, paProjectiles, sizeof(CProjectileInfo::ms_apProjectile));
|
||||
delete[] paProjectiles;
|
||||
paProjectiles = nil;
|
||||
//CExplosion::ClearAllExplosions(); not in III
|
||||
#endif
|
||||
DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND);
|
||||
DMAudio.SetRadioInCar(OldRadioStation);
|
||||
DMAudio.ChangeMusicMode(MUSICMODE_GAME);
|
||||
@ -1541,10 +1581,10 @@ void CReplay::ProcessLookAroundCam(void)
|
||||
TheCamera.GetRight() = right;
|
||||
TheCamera.SetPosition(camera_pt);
|
||||
RwMatrix* pm = RwFrameGetMatrix(RwCameraGetFrame(TheCamera.m_pRwCamera));
|
||||
pm->pos = *(RwV3d*)&TheCamera.GetPosition();
|
||||
pm->at = *(RwV3d*)&TheCamera.GetForward();
|
||||
pm->up = *(RwV3d*)&TheCamera.GetUp();
|
||||
pm->right = *(RwV3d*)&TheCamera.GetRight();
|
||||
pm->pos = TheCamera.GetPosition();
|
||||
pm->at = TheCamera.GetForward();
|
||||
pm->up = TheCamera.GetUp();
|
||||
pm->right = TheCamera.GetRight();
|
||||
TheCamera.CalculateDerivedValues();
|
||||
RwMatrixUpdate(RwFrameGetMatrix(RwCameraGetFrame(TheCamera.m_pRwCamera)));
|
||||
RwFrameUpdateObjects(RwCameraGetFrame(TheCamera.m_pRwCamera));
|
||||
|
@ -275,6 +275,11 @@ private:
|
||||
static float fAlphaAngleLookAroundCam;
|
||||
static float fBetaAngleLookAroundCam;
|
||||
#ifdef FIX_BUGS
|
||||
static uint8* pGarages;
|
||||
static CFire* FireArray;
|
||||
static uint32 NumOfFires;
|
||||
static uint8* paProjectileInfo;
|
||||
static uint8* paProjectiles;
|
||||
static int nHandleOfPlayerPed[NUMPLAYERS];
|
||||
#endif
|
||||
|
||||
|
@ -90,8 +90,7 @@ CRoadBlocks::GenerateRoadBlockCopsForCar(CVehicle* pVehicle, int32 roadBlockType
|
||||
pCopPed->m_nRoadblockNode = roadBlockNode;
|
||||
pCopPed->bCrouchWhenShooting = roadBlockType != 2;
|
||||
if (pEntityToAttack) {
|
||||
pCopPed->m_pPointGunAt = pEntityToAttack;
|
||||
pEntityToAttack->RegisterReference(&pCopPed->m_pPointGunAt);
|
||||
pCopPed->SetWeaponLockOnTarget(pEntityToAttack);
|
||||
pCopPed->SetAttack(pEntityToAttack);
|
||||
}
|
||||
pCopPed->m_pMyVehicle = pVehicle;
|
||||
|
@ -238,12 +238,12 @@ const tScriptCommandData commands[] = {
|
||||
REGISTER_COMMAND(COMMAND_DIV_FLOAT_VAR_BY_FLOAT_LVAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " /="),
|
||||
REGISTER_COMMAND(COMMAND_DIV_INT_LVAR_BY_INT_VAR, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT,), OUTPUT_ARGUMENTS(), false, 0, " /="),
|
||||
REGISTER_COMMAND(COMMAND_DIV_FLOAT_LVAR_BY_FLOAT_VAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " /="),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_VAL_TO_FLOAT_VAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " -=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_VAL_TO_FLOAT_LVAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " -=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_FLOAT_VAR_TO_FLOAT_VAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " -=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_LVAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " -=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_VAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " -=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_FLOAT_VAR_TO_FLOAT_LVAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " -=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_VAL_TO_FLOAT_VAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " +=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_VAL_TO_FLOAT_LVAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " +=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_FLOAT_VAR_TO_FLOAT_VAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " +=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_LVAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " +=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_VAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " +=@"),
|
||||
REGISTER_COMMAND(COMMAND_ADD_TIMED_FLOAT_VAR_TO_FLOAT_LVAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " +=@"),
|
||||
REGISTER_COMMAND(COMMAND_SUB_TIMED_VAL_FROM_FLOAT_VAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " -=@"),
|
||||
REGISTER_COMMAND(COMMAND_SUB_TIMED_VAL_FROM_FLOAT_LVAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " -=@"),
|
||||
REGISTER_COMMAND(COMMAND_SUB_TIMED_FLOAT_VAR_FROM_FLOAT_VAR, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT,), OUTPUT_ARGUMENTS(), false, 0, " -=@"),
|
||||
@ -3593,7 +3593,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
||||
CollectParameters(&m_nIp, 2);
|
||||
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||
script_assert(car);
|
||||
car->AutoPilot.m_nDrivingStyle = (eCarDrivingStyle)ScriptParams[1];
|
||||
car->AutoPilot.m_nDrivingStyle = (uint8)ScriptParams[1];
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_SET_CAR_MISSION:
|
||||
@ -3601,7 +3601,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
||||
CollectParameters(&m_nIp, 2);
|
||||
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||
script_assert(car);
|
||||
car->AutoPilot.m_nCarMission = (eCarMission)ScriptParams[1];
|
||||
car->AutoPilot.m_nCarMission = (uint8)ScriptParams[1];
|
||||
car->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds();
|
||||
car->bEngineOn = true;
|
||||
return 0;
|
||||
|
@ -396,7 +396,7 @@ private:
|
||||
friend class CRunningScript;
|
||||
friend class CHud;
|
||||
friend void CMissionCleanup::Process();
|
||||
#ifdef FIX_BUGS
|
||||
#ifdef MISSION_REPLAY
|
||||
friend void RetryMission(int, int);
|
||||
#endif
|
||||
|
||||
|
@ -291,7 +291,7 @@ int8 CRunningScript::ProcessCommands500To599(int32 command)
|
||||
infZ = *(float*)&ScriptParams[5];
|
||||
supZ = *(float*)&ScriptParams[2];
|
||||
}
|
||||
ScriptParams[0] = CGarages::AddOne(CVector(infX, infY, infZ), CVector(supX, supY, supZ), (eGarageType)ScriptParams[6], 0);
|
||||
ScriptParams[0] = CGarages::AddOne(CVector(infX, infY, infZ), CVector(supX, supY, supZ), ScriptParams[6], 0);
|
||||
StoreParameters(&m_nIp, 1);
|
||||
return 0;
|
||||
}
|
||||
@ -316,7 +316,7 @@ int8 CRunningScript::ProcessCommands500To599(int32 command)
|
||||
infZ = *(float*)&ScriptParams[5];
|
||||
supZ = *(float*)&ScriptParams[2];
|
||||
}
|
||||
ScriptParams[0] = CGarages::AddOne(CVector(infX, infY, infZ), CVector(supX, supY, supZ), (eGarageType)ScriptParams[6], ScriptParams[7]);
|
||||
ScriptParams[0] = CGarages::AddOne(CVector(infX, infY, infZ), CVector(supX, supY, supZ), ScriptParams[6], ScriptParams[7]);
|
||||
StoreParameters(&m_nIp, 1);
|
||||
return 0;
|
||||
}
|
||||
@ -996,7 +996,7 @@ int8 CRunningScript::ProcessCommands600To699(int32 command)
|
||||
CollectParameters(&m_nIp, 4);
|
||||
int mi = ScriptParams[0] >= 0 ? ScriptParams[0] : CTheScripts::UsedObjectArray[-ScriptParams[0]].index;
|
||||
CObject* pObj = new CObject(mi, false);
|
||||
; pObj->ObjectCreatedBy = MISSION_OBJECT;
|
||||
pObj->ObjectCreatedBy = MISSION_OBJECT;
|
||||
CVector pos = *(CVector*)&ScriptParams[1];
|
||||
if (pos.z <= MAP_Z_LOW_LIMIT)
|
||||
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
|
||||
@ -1826,7 +1826,7 @@ int8 CRunningScript::ProcessCommands700To799(int32 command)
|
||||
}
|
||||
case COMMAND_CHANGE_GARAGE_TYPE:
|
||||
CollectParameters(&m_nIp, 2);
|
||||
CGarages::ChangeGarageType(ScriptParams[0], (eGarageType)ScriptParams[1], 0);
|
||||
CGarages::ChangeGarageType(ScriptParams[0], ScriptParams[1], 0);
|
||||
return 0;
|
||||
case COMMAND_ACTIVATE_CRUSHER_CRANE:
|
||||
{
|
||||
|
@ -1436,7 +1436,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
||||
CollectParameters(&m_nIp, 2);
|
||||
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||
script_assert(pVehicle);
|
||||
pVehicle->SetStatus((eEntityStatus)ScriptParams[1]);
|
||||
pVehicle->SetStatus(ScriptParams[1]);
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_IS_CHAR_MALE:
|
||||
@ -1459,7 +1459,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
||||
case COMMAND_CHANGE_GARAGE_TYPE_WITH_CAR_MODEL:
|
||||
{
|
||||
CollectParameters(&m_nIp, 3);
|
||||
CGarages::ChangeGarageType(ScriptParams[0], (eGarageType)ScriptParams[1], ScriptParams[2]);
|
||||
CGarages::ChangeGarageType(ScriptParams[0], ScriptParams[1], ScriptParams[2]);
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_FIND_DRUG_PLANE_COORDINATES:
|
||||
@ -2025,3 +2025,143 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int32 CTheScripts::GetNewUniqueScriptSphereIndex(int32 index)
|
||||
{
|
||||
if (ScriptSphereArray[index].m_Index >= UINT16_MAX - 1)
|
||||
ScriptSphereArray[index].m_Index = 1;
|
||||
else
|
||||
ScriptSphereArray[index].m_Index++;
|
||||
return (uint16)index | ScriptSphereArray[index].m_Index << 16;
|
||||
}
|
||||
|
||||
int32 CTheScripts::GetActualScriptSphereIndex(int32 index)
|
||||
{
|
||||
if (index == -1)
|
||||
return -1;
|
||||
uint16 check = (uint32)index >> 16;
|
||||
uint16 array_idx = index & (0xFFFF);
|
||||
script_assert(array_idx < ARRAY_SIZE(ScriptSphereArray));
|
||||
if (check != ScriptSphereArray[array_idx].m_Index)
|
||||
return -1;
|
||||
return array_idx;
|
||||
}
|
||||
|
||||
void CTheScripts::DrawScriptSpheres()
|
||||
{
|
||||
for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
|
||||
if (ScriptSphereArray[i].m_bInUse)
|
||||
C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, MARKERTYPE_CYLINDER, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
|
||||
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
|
||||
}
|
||||
}
|
||||
|
||||
int32 CTheScripts::AddScriptSphere(int32 id, CVector pos, float radius)
|
||||
{
|
||||
int16 i = 0;
|
||||
for (i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
|
||||
if (!ScriptSphereArray[i].m_bInUse)
|
||||
break;
|
||||
}
|
||||
#ifdef FIX_BUGS
|
||||
if (i == MAX_NUM_SCRIPT_SPHERES)
|
||||
return -1;
|
||||
#endif
|
||||
ScriptSphereArray[i].m_bInUse = true;
|
||||
ScriptSphereArray[i].m_Id = id;
|
||||
ScriptSphereArray[i].m_vecCenter = pos;
|
||||
ScriptSphereArray[i].m_fRadius = radius;
|
||||
return GetNewUniqueScriptSphereIndex(i);
|
||||
}
|
||||
|
||||
void CTheScripts::RemoveScriptSphere(int32 index)
|
||||
{
|
||||
index = GetActualScriptSphereIndex(index);
|
||||
if (index == -1)
|
||||
return;
|
||||
ScriptSphereArray[index].m_bInUse = false;
|
||||
ScriptSphereArray[index].m_Id = 0;
|
||||
}
|
||||
|
||||
void CTheScripts::AddToBuildingSwapArray(CBuilding* pBuilding, int32 old_model, int32 new_model)
|
||||
{
|
||||
int i = 0;
|
||||
bool found = false;
|
||||
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
|
||||
if (BuildingSwapArray[i].m_pBuilding == pBuilding)
|
||||
found = true;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
if (found) {
|
||||
if (BuildingSwapArray[i].m_nOldModel == new_model) {
|
||||
BuildingSwapArray[i].m_pBuilding = nil;
|
||||
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
|
||||
}
|
||||
else {
|
||||
BuildingSwapArray[i].m_nNewModel = new_model;
|
||||
}
|
||||
}
|
||||
else {
|
||||
i = 0;
|
||||
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
|
||||
if (BuildingSwapArray[i].m_pBuilding == nil)
|
||||
found = true;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
if (found) {
|
||||
BuildingSwapArray[i].m_pBuilding = pBuilding;
|
||||
BuildingSwapArray[i].m_nNewModel = new_model;
|
||||
BuildingSwapArray[i].m_nOldModel = old_model;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CTheScripts::AddToInvisibilitySwapArray(CEntity* pEntity, bool remove)
|
||||
{
|
||||
int i = 0;
|
||||
bool found = false;
|
||||
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
|
||||
if (InvisibilitySettingArray[i] == pEntity)
|
||||
found = true;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
if (found) {
|
||||
if (remove)
|
||||
InvisibilitySettingArray[i] = nil;
|
||||
}
|
||||
else if (!remove) {
|
||||
i = 0;
|
||||
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
|
||||
if (InvisibilitySettingArray[i] == nil)
|
||||
found = true;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
if (found)
|
||||
InvisibilitySettingArray[i] = pEntity;
|
||||
}
|
||||
}
|
||||
|
||||
void CTheScripts::UndoBuildingSwaps()
|
||||
{
|
||||
for (int i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) {
|
||||
if (BuildingSwapArray[i].m_pBuilding) {
|
||||
BuildingSwapArray[i].m_pBuilding->ReplaceWithNewModel(BuildingSwapArray[i].m_nOldModel);
|
||||
BuildingSwapArray[i].m_pBuilding = nil;
|
||||
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CTheScripts::UndoEntityInvisibilitySettings()
|
||||
{
|
||||
for (int i = 0; i < MAX_NUM_INVISIBILITY_SETTINGS; i++) {
|
||||
if (InvisibilitySettingArray[i]) {
|
||||
InvisibilitySettingArray[i]->bIsVisible = true;
|
||||
InvisibilitySettingArray[i] = nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,147 +17,6 @@
|
||||
#include "World.h"
|
||||
#include "main.h"
|
||||
|
||||
int32 CTheScripts::GetNewUniqueScriptSphereIndex(int32 index)
|
||||
{
|
||||
if (ScriptSphereArray[index].m_Index >= UINT16_MAX - 1)
|
||||
ScriptSphereArray[index].m_Index = 1;
|
||||
else
|
||||
ScriptSphereArray[index].m_Index++;
|
||||
return (uint16)index | ScriptSphereArray[index].m_Index << 16;
|
||||
}
|
||||
|
||||
int32 CTheScripts::GetActualScriptSphereIndex(int32 index)
|
||||
{
|
||||
if (index == -1)
|
||||
return -1;
|
||||
uint16 check = (uint32)index >> 16;
|
||||
uint16 array_idx = index & (0xFFFF);
|
||||
script_assert(array_idx < ARRAY_SIZE(ScriptSphereArray));
|
||||
if (check != ScriptSphereArray[array_idx].m_Index)
|
||||
return -1;
|
||||
return array_idx;
|
||||
}
|
||||
|
||||
void CTheScripts::DrawScriptSpheres()
|
||||
{
|
||||
for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
|
||||
if (ScriptSphereArray[i].m_bInUse)
|
||||
C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, MARKERTYPE_CYLINDER, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
|
||||
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
|
||||
}
|
||||
}
|
||||
|
||||
int32 CTheScripts::AddScriptSphere(int32 id, CVector pos, float radius)
|
||||
{
|
||||
int16 i = 0;
|
||||
for (i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
|
||||
if (!ScriptSphereArray[i].m_bInUse)
|
||||
break;
|
||||
}
|
||||
#ifdef FIX_BUGS
|
||||
if (i == MAX_NUM_SCRIPT_SPHERES)
|
||||
return -1;
|
||||
#endif
|
||||
ScriptSphereArray[i].m_bInUse = true;
|
||||
ScriptSphereArray[i].m_Id = id;
|
||||
ScriptSphereArray[i].m_vecCenter = pos;
|
||||
ScriptSphereArray[i].m_fRadius = radius;
|
||||
return GetNewUniqueScriptSphereIndex(i);
|
||||
}
|
||||
|
||||
void CTheScripts::RemoveScriptSphere(int32 index)
|
||||
{
|
||||
index = GetActualScriptSphereIndex(index);
|
||||
if (index == -1)
|
||||
return;
|
||||
ScriptSphereArray[index].m_bInUse = false;
|
||||
ScriptSphereArray[index].m_Id = 0;
|
||||
}
|
||||
|
||||
void CTheScripts::AddToBuildingSwapArray(CBuilding* pBuilding, int32 old_model, int32 new_model)
|
||||
{
|
||||
int i = 0;
|
||||
bool found = false;
|
||||
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
|
||||
if (BuildingSwapArray[i].m_pBuilding == pBuilding)
|
||||
found = true;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
if (found) {
|
||||
if (BuildingSwapArray[i].m_nOldModel == new_model) {
|
||||
BuildingSwapArray[i].m_pBuilding = nil;
|
||||
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
|
||||
}
|
||||
else {
|
||||
BuildingSwapArray[i].m_nNewModel = new_model;
|
||||
}
|
||||
}
|
||||
else {
|
||||
i = 0;
|
||||
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
|
||||
if (BuildingSwapArray[i].m_pBuilding == nil)
|
||||
found = true;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
if (found) {
|
||||
BuildingSwapArray[i].m_pBuilding = pBuilding;
|
||||
BuildingSwapArray[i].m_nNewModel = new_model;
|
||||
BuildingSwapArray[i].m_nOldModel = old_model;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CTheScripts::AddToInvisibilitySwapArray(CEntity* pEntity, bool remove)
|
||||
{
|
||||
int i = 0;
|
||||
bool found = false;
|
||||
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
|
||||
if (InvisibilitySettingArray[i] == pEntity)
|
||||
found = true;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
if (found) {
|
||||
if (remove)
|
||||
InvisibilitySettingArray[i] = nil;
|
||||
}
|
||||
else if (!remove) {
|
||||
i = 0;
|
||||
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
|
||||
if (InvisibilitySettingArray[i] == nil)
|
||||
found = true;
|
||||
else
|
||||
i++;
|
||||
}
|
||||
if (found)
|
||||
InvisibilitySettingArray[i] = pEntity;
|
||||
}
|
||||
}
|
||||
|
||||
void CTheScripts::UndoBuildingSwaps()
|
||||
{
|
||||
for (int i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) {
|
||||
if (BuildingSwapArray[i].m_pBuilding) {
|
||||
BuildingSwapArray[i].m_pBuilding->ReplaceWithNewModel(BuildingSwapArray[i].m_nOldModel);
|
||||
BuildingSwapArray[i].m_pBuilding = nil;
|
||||
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CTheScripts::UndoEntityInvisibilitySettings()
|
||||
{
|
||||
for (int i = 0; i < MAX_NUM_INVISIBILITY_SETTINGS; i++) {
|
||||
if (InvisibilitySettingArray[i]) {
|
||||
InvisibilitySettingArray[i]->bIsVisible = true;
|
||||
InvisibilitySettingArray[i] = nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CRunningScript::UpdateCompareFlag(bool flag)
|
||||
{
|
||||
if (m_bNotFlag)
|
||||
@ -1921,7 +1780,7 @@ void CTheScripts::CleanUpThisPed(CPed* pPed)
|
||||
if (pPed->IsPedInControl())
|
||||
pPed->SetWanderPath(CGeneral::GetRandomNumber() & 7);
|
||||
if (flees) {
|
||||
pPed->m_nPedState = state;
|
||||
pPed->SetPedState(state);
|
||||
pPed->SetMoveState(ms);
|
||||
}
|
||||
--CPopulation::ms_nTotalMissionPeds;
|
||||
|
@ -545,7 +545,14 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
|
||||
CStats::RegisterHighestScore(ScriptParams[0], ScriptParams[1]);
|
||||
return 0;
|
||||
//case COMMAND_WARP_CHAR_INTO_CAR_AS_PASSENGER:
|
||||
//case COMMAND_IS_CAR_PASSENGER_SEAT_FREE:
|
||||
case COMMAND_IS_CAR_PASSENGER_SEAT_FREE:
|
||||
{
|
||||
CollectParameters(&m_nIp, 2);
|
||||
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||
script_assert(pVehicle);
|
||||
UpdateCompareFlag(ScriptParams[1] < pVehicle->m_nNumMaxPassengers && pVehicle->pPassengers[ScriptParams[1]] == nil);
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_GET_CHAR_IN_CAR_PASSENGER_SEAT:
|
||||
{
|
||||
CollectParameters(&m_nIp, 2);
|
||||
|
Reference in New Issue
Block a user