实体

载具 CVehicle

修车、司机乘客、部件与姿态

CVehicle.h

逻辑帧改状态。先 FindPlayerVehicle 判空。

修复车辆

Fix / m_fHealth

车血约 1000 满,0 炸。逻辑帧。

void Fix();
float m_fHealth;

司机乘客与车色

m_pDriver / m_apPassengers / m_nPrimaryColor
CPed* m_pDriver;
CPed* m_apPassengers[8];
unsigned char m_nPrimaryColor;
void SetDriver(CPed* driver);
bool AddPassenger(CPed* passenger);
bool AddPassenger(CPed* passenger, unsigned char seatNumber);
void RemovePassenger(CPed* passenger);
bool IsDriver(CPed* ped);
bool IsPassenger(CPed* ped);

炸车与灭火

BlowUpCar / ExtinguishCarFire

damager 可 null。

void BlowUpCar(CEntity* damager, bool bHideExplosion);
void ExtinguishCarFire();

贴图与升级件

SetRemap / AddVehicleUpgrade
void SetRemap(int remapIndex);
void SetRemapTexDictionary(int txdId);
void AddVehicleUpgrade(int modelId);
int GetRemapIndex();

是否可上车

CanPedEnterCar / CanPedOpenLocks
bool CanPedEnterCar();
bool CanPedOpenLocks(CPed* ped);
bool CanPedStepOutCar(bool arg0);
bool CanPedJumpOutCar(CPed* ped);

引擎灯光锁

bEngineOn / bLightsOn / bIsLocked
// CVehicle bitfields
// bool bEngineOn; bool bLightsOn; bool bIsLocked; ...

门与部件

OpenDoor / IsDoorReady / GetComponentWorldPosition
void OpenDoor(CPed* ped, int componentId, eDoors door, float doorOpenRatio, bool playSound);
bool IsDoorReady(eDoors door);
bool IsDoorFullyOpen(eDoors door);
bool IsDoorClosed(eDoors door);
bool IsDoorMissing(eDoors door);
void GetComponentWorldPosition(int componentId, CVector& posnOut);
bool IsComponentPresent(int componentId);

车身姿态

IsUpsideDown / IsOnItsSide / IsLawEnforcementVehicle
bool IsUpsideDown();
bool IsOnItsSide();
bool IsLawEnforcementVehicle();
int GetVehicleAppearance();

轮胎损坏

BurstTyre
bool BurstTyre(unsigned char tyreComponentId, bool bPhysicalEffect);

在车上每帧逻辑

plugin::Events::processScriptsEvent += [] {
    CVehicle* veh = FindPlayerVehicle();
    if (!veh) {
        return;
    }
    veh->m_fHealth = 1000.0f;
};

On this page