mirror of
https://gitlab.com/GaryOderNichts/re3-wiiu.git
synced 2024-12-25 01:01:49 +01:00
P.e.d.s.
This commit is contained in:
parent
4041159855
commit
88f0ef75e8
@ -67,6 +67,7 @@ int32 (&CCarCtrl::TotalNumOfCarsOfRating)[7] = *(int32(*)[7])*(uintptr*)0x8F1A60
|
|||||||
int32 (&CCarCtrl::NextCarOfRating)[7] = *(int32(*)[7])*(uintptr*)0x9412AC;
|
int32 (&CCarCtrl::NextCarOfRating)[7] = *(int32(*)[7])*(uintptr*)0x9412AC;
|
||||||
int32 (&CCarCtrl::CarArrays)[7][MAX_CAR_MODELS_IN_ARRAY] = *(int32(*)[7][MAX_CAR_MODELS_IN_ARRAY])*(uintptr*)0x6EB860;
|
int32 (&CCarCtrl::CarArrays)[7][MAX_CAR_MODELS_IN_ARRAY] = *(int32(*)[7][MAX_CAR_MODELS_IN_ARRAY])*(uintptr*)0x6EB860;
|
||||||
CVehicle* (&apCarsToKeep)[MAX_CARS_TO_KEEP] = *(CVehicle*(*)[MAX_CARS_TO_KEEP])*(uintptr*)0x70D830;
|
CVehicle* (&apCarsToKeep)[MAX_CARS_TO_KEEP] = *(CVehicle*(*)[MAX_CARS_TO_KEEP])*(uintptr*)0x70D830;
|
||||||
|
uint32 (&aCarsToKeepTime)[MAX_CARS_TO_KEEP] = *(uint32(*)[MAX_CARS_TO_KEEP])*(uintptr*)0x87F9A8;
|
||||||
|
|
||||||
WRAPPER void CCarCtrl::SwitchVehicleToRealPhysics(CVehicle*) { EAXJMP(0x41F7F0); }
|
WRAPPER void CCarCtrl::SwitchVehicleToRealPhysics(CVehicle*) { EAXJMP(0x41F7F0); }
|
||||||
WRAPPER void CCarCtrl::UpdateCarCount(CVehicle*, bool) { EAXJMP(0x4202E0); }
|
WRAPPER void CCarCtrl::UpdateCarCount(CVehicle*, bool) { EAXJMP(0x4202E0); }
|
||||||
@ -745,6 +746,34 @@ CCarCtrl::IsThisVehicleInteresting(CVehicle* pVehicle)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CCarCtrl::RegisterVehicleOfInterest(CVehicle* pVehicle)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < MAX_CARS_TO_KEEP; i++) {
|
||||||
|
if (apCarsToKeep[i] == pVehicle) {
|
||||||
|
aCarsToKeepTime[i] = CTimer::GetTimeInMilliseconds();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < MAX_CARS_TO_KEEP; i++) {
|
||||||
|
if (!apCarsToKeep[i]) {
|
||||||
|
apCarsToKeep[i] = pVehicle;
|
||||||
|
aCarsToKeepTime[i] = CTimer::GetTimeInMilliseconds();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uint32 oldestCarWeKeepTime = UINT_MAX;
|
||||||
|
int oldestCarWeKeepIndex = 0;
|
||||||
|
for (int i = 0; i < MAX_CARS_TO_KEEP; i++) {
|
||||||
|
if (apCarsToKeep[i] && aCarsToKeepTime[i] < oldestCarWeKeepTime) {
|
||||||
|
oldestCarWeKeepTime = aCarsToKeepTime[i];
|
||||||
|
oldestCarWeKeepIndex = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
apCarsToKeep[oldestCarWeKeepIndex] = pVehicle;
|
||||||
|
aCarsToKeepTime[oldestCarWeKeepIndex] = CTimer::GetTimeInMilliseconds();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CCarCtrl::UpdateCarOnRails(CVehicle* pVehicle)
|
CCarCtrl::UpdateCarOnRails(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
|
@ -58,6 +58,7 @@ public:
|
|||||||
static void RemoveDistantCars(void);
|
static void RemoveDistantCars(void);
|
||||||
static void PossiblyRemoveVehicle(CVehicle*);
|
static void PossiblyRemoveVehicle(CVehicle*);
|
||||||
static bool IsThisVehicleInteresting(CVehicle*);
|
static bool IsThisVehicleInteresting(CVehicle*);
|
||||||
|
static void RegisterVehicleOfInterest(CVehicle*);
|
||||||
static int32 CountCarsOfType(int32 mi);
|
static int32 CountCarsOfType(int32 mi);
|
||||||
static void SlowCarOnRailsDownForTrafficAndLights(CVehicle*);
|
static void SlowCarOnRailsDownForTrafficAndLights(CVehicle*);
|
||||||
static bool PickNextNodeAccordingStrategy(CVehicle*);
|
static bool PickNextNodeAccordingStrategy(CVehicle*);
|
||||||
|
@ -1459,7 +1459,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists)
|
|||||||
A->m_phy_flagA80 = true;
|
A->m_phy_flagA80 = true;
|
||||||
}else if(A->IsPed() && Aped->m_pCollidingEntity == B){
|
}else if(A->IsPed() && Aped->m_pCollidingEntity == B){
|
||||||
skipCollision = true;
|
skipCollision = true;
|
||||||
if(!Aped->m_ped_flagH1)
|
if(!Aped->bKnockedUpIntoAir)
|
||||||
A->m_phy_flagA80 = true;
|
A->m_phy_flagA80 = true;
|
||||||
}else if(B->IsPed() && Bped->m_pCollidingEntity == A){
|
}else if(B->IsPed() && Bped->m_pCollidingEntity == A){
|
||||||
skipCollision = true;
|
skipCollision = true;
|
||||||
|
485
src/peds/Ped.cpp
485
src/peds/Ped.cpp
@ -38,6 +38,8 @@
|
|||||||
#include "Font.h"
|
#include "Font.h"
|
||||||
#include "Text.h"
|
#include "Text.h"
|
||||||
#include "CopPed.h"
|
#include "CopPed.h"
|
||||||
|
#include "Script.h"
|
||||||
|
#include "CarCtrl.h"
|
||||||
|
|
||||||
WRAPPER void CPed::SpawnFlyingComponent(int, int8) { EAXJMP(0x4EB060); }
|
WRAPPER void CPed::SpawnFlyingComponent(int, int8) { EAXJMP(0x4EB060); }
|
||||||
WRAPPER void CPed::SetPedPositionInCar(void) { EAXJMP(0x4D4970); }
|
WRAPPER void CPed::SetPedPositionInCar(void) { EAXJMP(0x4D4970); }
|
||||||
@ -61,6 +63,7 @@ WRAPPER void CPed::WanderPath(void) { EAXJMP(0x4D28D0); }
|
|||||||
WRAPPER void CPed::ReactToPointGun(CEntity*) { EAXJMP(0x4DD980); }
|
WRAPPER void CPed::ReactToPointGun(CEntity*) { EAXJMP(0x4DD980); }
|
||||||
WRAPPER void CPed::SeekCar(void) { EAXJMP(0x4D3F90); }
|
WRAPPER void CPed::SeekCar(void) { EAXJMP(0x4D3F90); }
|
||||||
WRAPPER void CPed::SeekBoatPosition(void) { EAXJMP(0x4E4C70); }
|
WRAPPER void CPed::SeekBoatPosition(void) { EAXJMP(0x4E4C70); }
|
||||||
|
WRAPPER bool CPed::PositionPedOutOfCollision(void) { EAXJMP(0x4E4F30); }
|
||||||
|
|
||||||
CPed *gapTempPedList[50];
|
CPed *gapTempPedList[50];
|
||||||
uint16 gnNumTempPedList;
|
uint16 gnNumTempPedList;
|
||||||
@ -468,7 +471,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
|
|||||||
m_ped_flagC40 = false;
|
m_ped_flagC40 = false;
|
||||||
bFindNewNodeAfterStateRestore = false;
|
bFindNewNodeAfterStateRestore = false;
|
||||||
|
|
||||||
m_ped_flagD1 = false;
|
bHasACamera = false;
|
||||||
m_ped_flagD2 = false;
|
m_ped_flagD2 = false;
|
||||||
m_ped_flagD4 = false;
|
m_ped_flagD4 = false;
|
||||||
m_ped_flagD8 = false;
|
m_ped_flagD8 = false;
|
||||||
@ -484,7 +487,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
|
|||||||
bIsDucking = false;
|
bIsDucking = false;
|
||||||
bGetUpAnimStarted = false;
|
bGetUpAnimStarted = false;
|
||||||
bDoBloodyFootprints = false;
|
bDoBloodyFootprints = false;
|
||||||
m_ped_flagE80 = false;
|
bFleeAfterExitingCar = false;
|
||||||
|
|
||||||
bWanderPathAfterExitingCar = false;
|
bWanderPathAfterExitingCar = false;
|
||||||
m_ped_flagF2 = false;
|
m_ped_flagF2 = false;
|
||||||
@ -501,10 +504,10 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
|
|||||||
bStartWanderPathOnFoot = false;
|
bStartWanderPathOnFoot = false;
|
||||||
m_ped_flagG10 = false;
|
m_ped_flagG10 = false;
|
||||||
bBusJacked = false;
|
bBusJacked = false;
|
||||||
m_ped_flagG40 = false;
|
bGonnaKillTheCarJacker = false;
|
||||||
bFadeOut = false;
|
bFadeOut = false;
|
||||||
|
|
||||||
m_ped_flagH1 = false;
|
bKnockedUpIntoAir = false;
|
||||||
m_ped_flagH2 = false;
|
m_ped_flagH2 = false;
|
||||||
m_ped_flagH4 = false;
|
m_ped_flagH4 = false;
|
||||||
bClearObjective = false;
|
bClearObjective = false;
|
||||||
@ -523,7 +526,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((CGeneral::GetRandomNumber() & 3) == 0)
|
if ((CGeneral::GetRandomNumber() & 3) == 0)
|
||||||
m_ped_flagD1 = true;
|
bHasACamera = true;
|
||||||
|
|
||||||
m_audioEntityId = DMAudio.CreateEntity(AUDIOTYPE_PHYSICAL, this);
|
m_audioEntityId = DMAudio.CreateEntity(AUDIOTYPE_PHYSICAL, this);
|
||||||
DMAudio.SetEntityStatus(m_audioEntityId, 1);
|
DMAudio.SetEntityStatus(m_audioEntityId, 1);
|
||||||
@ -2476,7 +2479,7 @@ CPed::SetLeader(CEntity *leader)
|
|||||||
void
|
void
|
||||||
CPed::SetObjective(eObjective newObj, void *entity)
|
CPed::SetObjective(eObjective newObj, void *entity)
|
||||||
{
|
{
|
||||||
if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD)
|
if (DyingOrDead())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_prevObjective == newObj) {
|
if (m_prevObjective == newObj) {
|
||||||
@ -2635,7 +2638,7 @@ CPed::SetIdle(void)
|
|||||||
void
|
void
|
||||||
CPed::SetObjective(eObjective newObj)
|
CPed::SetObjective(eObjective newObj)
|
||||||
{
|
{
|
||||||
if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD)
|
if (DyingOrDead())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (newObj == OBJECTIVE_NONE) {
|
if (newObj == OBJECTIVE_NONE) {
|
||||||
@ -2691,7 +2694,7 @@ CPed::SetObjective(eObjective newObj)
|
|||||||
void
|
void
|
||||||
CPed::SetObjective(eObjective newObj, int16 routePoint, int16 routeType)
|
CPed::SetObjective(eObjective newObj, int16 routePoint, int16 routeType)
|
||||||
{
|
{
|
||||||
if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD)
|
if (DyingOrDead())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_prevObjective == newObj && m_prevObjective != OBJECTIVE_NONE)
|
if (m_prevObjective == newObj && m_prevObjective != OBJECTIVE_NONE)
|
||||||
@ -2805,7 +2808,7 @@ CPed::QuitEnteringCar(void)
|
|||||||
CWeaponInfo *curWeapon = CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType);
|
CWeaponInfo *curWeapon = CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType);
|
||||||
AddWeaponModel(curWeapon->m_nModelId);
|
AddWeaponModel(curWeapon->m_nModelId);
|
||||||
}
|
}
|
||||||
if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD) {
|
if (DyingOrDead()) {
|
||||||
animAssoc = m_pVehicleAnim;
|
animAssoc = m_pVehicleAnim;
|
||||||
if (animAssoc) {
|
if (animAssoc) {
|
||||||
animAssoc->blendDelta = -4.0f;
|
animAssoc->blendDelta = -4.0f;
|
||||||
@ -3200,7 +3203,7 @@ CPed::ClearAll(void)
|
|||||||
ClearLookFlag();
|
ClearLookFlag();
|
||||||
bIsPointingGunAt = false;
|
bIsPointingGunAt = false;
|
||||||
bRenderPedInCar = true;
|
bRenderPedInCar = true;
|
||||||
m_ped_flagH1 = false;
|
bKnockedUpIntoAir = false;
|
||||||
m_pCollidingEntity = nil;
|
m_pCollidingEntity = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3284,7 +3287,7 @@ CPed::SetDie(AnimationId animId, float delta, float speed)
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_threatEntity = nil;
|
m_threatEntity = nil;
|
||||||
if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD)
|
if (DyingOrDead())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_nPedState == PED_FALL || m_nPedState == PED_GETUP)
|
if (m_nPedState == PED_FALL || m_nPedState == PED_GETUP)
|
||||||
@ -3346,7 +3349,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
|
|||||||
player->AnnoyPlayerPed(false);
|
player->AnnoyPlayerPed(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD)
|
if (DyingOrDead())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!bUsesCollision && method != WEAPONTYPE_WATER)
|
if (!bUsesCollision && method != WEAPONTYPE_WATER)
|
||||||
@ -3789,7 +3792,7 @@ CPed::SetGetUp(void)
|
|||||||
}
|
}
|
||||||
bGetUpAnimStarted = true;
|
bGetUpAnimStarted = true;
|
||||||
m_pCollidingEntity = nil;
|
m_pCollidingEntity = nil;
|
||||||
m_ped_flagH1 = false;
|
bKnockedUpIntoAir = false;
|
||||||
CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_SPRINT);
|
CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_SPRINT);
|
||||||
if (animAssoc) {
|
if (animAssoc) {
|
||||||
if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN)) {
|
if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN)) {
|
||||||
@ -3867,12 +3870,11 @@ void
|
|||||||
CPed::ClearObjective(void)
|
CPed::ClearObjective(void)
|
||||||
{
|
{
|
||||||
if (IsPedInControl() || m_nPedState == PED_DRIVING) {
|
if (IsPedInControl() || m_nPedState == PED_DRIVING) {
|
||||||
|
|
||||||
m_objective = OBJECTIVE_NONE;
|
m_objective = OBJECTIVE_NONE;
|
||||||
|
|
||||||
if (m_nPedState == PED_DRIVING && m_pMyVehicle) {
|
if (m_nPedState == PED_DRIVING && m_pMyVehicle) {
|
||||||
|
|
||||||
if (m_pMyVehicle->pDriver != this) {
|
if (m_pMyVehicle->pDriver != this) {
|
||||||
|
|
||||||
bWanderPathAfterExitingCar = true;
|
bWanderPathAfterExitingCar = true;
|
||||||
SetObjective(OBJECTIVE_LEAVE_VEHICLE, m_pMyVehicle);
|
SetObjective(OBJECTIVE_LEAVE_VEHICLE, m_pMyVehicle);
|
||||||
}
|
}
|
||||||
@ -4735,7 +4737,7 @@ CPed::FightStrike(CVector &touchedNodePos)
|
|||||||
PlayHitSound(nearPed);
|
PlayHitSound(nearPed);
|
||||||
m_fightState = FIGHTSTATE_JUST_ATTACKED;
|
m_fightState = FIGHTSTATE_JUST_ATTACKED;
|
||||||
RpAnimBlendClumpGetAssociation(GetClump(), tFightMoves[m_lastFightMove].animId)->speed = 0.6f;
|
RpAnimBlendClumpGetAssociation(GetClump(), tFightMoves[m_lastFightMove].animId)->speed = 0.6f;
|
||||||
if (nearPed->m_nPedState != PED_DIE && nearPed->m_nPedState != PED_DEAD) {
|
if (!nearPed->DyingOrDead()) {
|
||||||
nearPed->InflictDamage(this, WEAPONTYPE_UNARMED, damageMult * 3.0f, closestPedPiece, direction);
|
nearPed->InflictDamage(this, WEAPONTYPE_UNARMED, damageMult * 3.0f, closestPedPiece, direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4795,7 +4797,7 @@ CPed::FightStrike(CVector &touchedNodePos)
|
|||||||
void
|
void
|
||||||
CPed::SetFall(int extraTime, AnimationId animId, uint8 evenIfNotInControl)
|
CPed::SetFall(int extraTime, AnimationId animId, uint8 evenIfNotInControl)
|
||||||
{
|
{
|
||||||
if (!IsPedInControl() && (!evenIfNotInControl || m_nPedState == PED_DIE || m_nPedState == PED_DEAD))
|
if (!IsPedInControl() && (!evenIfNotInControl || DyingOrDead()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ClearLookFlag();
|
ClearLookFlag();
|
||||||
@ -5820,7 +5822,7 @@ CPed::EndFight(uint8 endType)
|
|||||||
void
|
void
|
||||||
CPed::EnterCar(void)
|
CPed::EnterCar(void)
|
||||||
{
|
{
|
||||||
if (m_pMyVehicle && m_pMyVehicle->m_status != STATUS_WRECKED && m_fHealth > 0.0f) {
|
if (!m_pMyVehicle->IsWrecked() && m_fHealth > 0.0f) {
|
||||||
CVehicle *veh = (CVehicle*)m_pSeekTarget;
|
CVehicle *veh = (CVehicle*)m_pSeekTarget;
|
||||||
|
|
||||||
// Not used.
|
// Not used.
|
||||||
@ -6597,7 +6599,7 @@ CPed::Wait(void)
|
|||||||
CAnimBlendAssociation *animAssoc;
|
CAnimBlendAssociation *animAssoc;
|
||||||
CPed *pedWeLook;
|
CPed *pedWeLook;
|
||||||
|
|
||||||
if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD) {
|
if (DyingOrDead()) {
|
||||||
m_nWaitState = WAITSTATE_FALSE;
|
m_nWaitState = WAITSTATE_FALSE;
|
||||||
RestoreHeadingRate();
|
RestoreHeadingRate();
|
||||||
return;
|
return;
|
||||||
@ -7612,7 +7614,7 @@ CPed::InTheAir(void)
|
|||||||
bitBelow.z -= 4.04f;
|
bitBelow.z -= 4.04f;
|
||||||
|
|
||||||
if (m_vecMoveSpeed.z < 0.0f && !bIsPedDieAnimPlaying) {
|
if (m_vecMoveSpeed.z < 0.0f && !bIsPedDieAnimPlaying) {
|
||||||
if (m_nPedState != PED_DIE && m_nPedState != PED_DEAD) {
|
if (!DyingOrDead()) {
|
||||||
if (CWorld::ProcessLineOfSight(ourPos, bitBelow, foundCol, foundEnt, true, true, false, true, false, false, false)) {
|
if (CWorld::ProcessLineOfSight(ourPos, bitBelow, foundCol, foundEnt, true, true, false, true, false, false, false)) {
|
||||||
if (GetPosition().z - foundCol.point.z < 1.3f)
|
if (GetPosition().z - foundCol.point.z < 1.3f)
|
||||||
SetLanding();
|
SetLanding();
|
||||||
@ -7629,7 +7631,7 @@ CPed::InTheAir(void)
|
|||||||
void
|
void
|
||||||
CPed::SetLanding(void)
|
CPed::SetLanding(void)
|
||||||
{
|
{
|
||||||
if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD)
|
if (DyingOrDead())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CAnimBlendAssociation *fallAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FALL_FALL);
|
CAnimBlendAssociation *fallAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FALL_FALL);
|
||||||
@ -7802,7 +7804,7 @@ CPed::InvestigateEvent(void)
|
|||||||
case EVENT_FIRE:
|
case EVENT_FIRE:
|
||||||
case EVENT_EXPLOSION:
|
case EVENT_EXPLOSION:
|
||||||
|
|
||||||
if (m_ped_flagD1 && CTimer::GetTimeInMilliseconds() > m_lookTimer) {
|
if (bHasACamera && CTimer::GetTimeInMilliseconds() > m_lookTimer) {
|
||||||
animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_CAM);
|
animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_CAM);
|
||||||
if (!animAssoc)
|
if (!animAssoc)
|
||||||
animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE);
|
animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE);
|
||||||
@ -8001,6 +8003,7 @@ CPed::KillPedWithCar(CVehicle *car, float impulse)
|
|||||||
if (m_pCurSurface->IsVehicle() && (((CVehicle*)m_pCurSurface)->m_vehType == VEHICLE_TYPE_BOAT || IsPlayer()))
|
if (m_pCurSurface->IsVehicle() && (((CVehicle*)m_pCurSurface)->m_vehType == VEHICLE_TYPE_BOAT || IsPlayer()))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CVector distVec = GetPosition() - car->GetPosition();
|
CVector distVec = GetPosition() - car->GetPosition();
|
||||||
|
|
||||||
if ((impulse > 12.0f || car->m_modelIndex == MI_TRAIN) && !IsPlayer()) {
|
if ((impulse > 12.0f || car->m_modelIndex == MI_TRAIN) && !IsPlayer()) {
|
||||||
@ -8157,14 +8160,14 @@ CPed::KillPedWithCar(CVehicle *car, float impulse)
|
|||||||
}
|
}
|
||||||
CPed::InflictDamage(car, killMethod, 1000.0f, pieceToDamage, damageDir);
|
CPed::InflictDamage(car, killMethod, 1000.0f, pieceToDamage, damageDir);
|
||||||
|
|
||||||
if ((m_nPedState == PED_DIE || m_nPedState == PED_DEAD)
|
if (DyingOrDead()
|
||||||
&& bIsPedDieAnimPlaying && !m_pCollidingEntity) {
|
&& bIsPedDieAnimPlaying && !m_pCollidingEntity) {
|
||||||
m_pCollidingEntity = car;
|
m_pCollidingEntity = car;
|
||||||
}
|
}
|
||||||
if (nodeToDamage == PED_MID)
|
if (nodeToDamage == PED_MID)
|
||||||
m_ped_flagH1 = true;
|
bKnockedUpIntoAir = true;
|
||||||
else
|
else
|
||||||
m_ped_flagH1 = false;
|
bKnockedUpIntoAir = false;
|
||||||
|
|
||||||
distVec.Normalise();
|
distVec.Normalise();
|
||||||
car->ApplyMoveForce(distVec * -100.0f);
|
car->ApplyMoveForce(distVec * -100.0f);
|
||||||
@ -8191,7 +8194,7 @@ CPed::KillPedWithCar(CVehicle *car, float impulse)
|
|||||||
m_pCollidingEntity = car;
|
m_pCollidingEntity = car;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ped_flagH1 = false;
|
bKnockedUpIntoAir = false;
|
||||||
if (car->m_modelIndex != MI_TRAIN && !m_ped_flagD2) {
|
if (car->m_modelIndex != MI_TRAIN && !m_ped_flagD2) {
|
||||||
m_vecMoveSpeed = car->m_vecMoveSpeed * 0.75f;
|
m_vecMoveSpeed = car->m_vecMoveSpeed * 0.75f;
|
||||||
}
|
}
|
||||||
@ -8653,7 +8656,9 @@ CPed::PedAnimAlignCB(CAnimBlendAssociation *animAssoc, void *arg)
|
|||||||
if (animAssoc)
|
if (animAssoc)
|
||||||
animAssoc->blendDelta = -1000.0f;
|
animAssoc->blendDelta = -1000.0f;
|
||||||
|
|
||||||
if (veh && veh->m_status != STATUS_WRECKED) {
|
if (veh->IsWrecked())
|
||||||
|
return;
|
||||||
|
|
||||||
if (ped->m_nPedState != PED_ENTER_CAR && ped->m_nPedState != PED_CARJACK) {
|
if (ped->m_nPedState != PED_ENTER_CAR && ped->m_nPedState != PED_CARJACK) {
|
||||||
ped->QuitEnteringCar();
|
ped->QuitEnteringCar();
|
||||||
return;
|
return;
|
||||||
@ -8748,18 +8753,15 @@ CPed::PedAnimAlignCB(CAnimBlendAssociation *animAssoc, void *arg)
|
|||||||
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorOpenCB, ped);
|
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorOpenCB, ped);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
AnimationId animToPlay;
|
|
||||||
if (enterDoor != DOOR_FRONT_LEFT && enterDoor != DOOR_REAR_LEFT)
|
if (enterDoor != DOOR_FRONT_LEFT && enterDoor != DOOR_REAR_LEFT)
|
||||||
animToPlay = ANIM_CAR_DOORLOCKED_RHS;
|
ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_DOORLOCKED_RHS);
|
||||||
else
|
else
|
||||||
animToPlay = ANIM_CAR_DOORLOCKED_LHS;
|
ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_DOORLOCKED_LHS);
|
||||||
|
|
||||||
ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, animToPlay);
|
|
||||||
ped->bCancelEnteringCar = true;
|
ped->bCancelEnteringCar = true;
|
||||||
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorOpenCB, ped);
|
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorOpenCB, ped);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CPed::ProcessControl(void)
|
CPed::ProcessControl(void)
|
||||||
@ -8806,14 +8808,13 @@ CPed::ProcessControl(void)
|
|||||||
|
|
||||||
for (int i = 0; i < m_numNearPeds; ++i) {
|
for (int i = 0; i < m_numNearPeds; ++i) {
|
||||||
CPed *nearPed = m_nearPeds[i];
|
CPed *nearPed = m_nearPeds[i];
|
||||||
PedState nearPedState = nearPed->m_nPedState;
|
if (!nearPed->DyingOrDead()) {
|
||||||
if (nearPedState != PED_DIE && nearPedState != PED_DEAD) {
|
|
||||||
CVector dist = nearPed->GetPosition() - GetPosition();
|
CVector dist = nearPed->GetPosition() - GetPosition();
|
||||||
if (dist.MagnitudeSqr() < sq(timeDependentDist)) {
|
if (dist.MagnitudeSqr() < sq(timeDependentDist)) {
|
||||||
nearPed->m_bloodyFootprintCount = 200;
|
nearPed->m_bloodyFootprintCount = 200;
|
||||||
nearPed->bDoBloodyFootprints = true;
|
nearPed->bDoBloodyFootprints = true;
|
||||||
if (nearPed->IsPlayer()) {
|
if (nearPed->IsPlayer()) {
|
||||||
if (!nearPed->bIsLooking && nearPedState != PED_ATTACK) {
|
if (!nearPed->bIsLooking && nearPed->m_nPedState != PED_ATTACK) {
|
||||||
int16 camMode = TheCamera.Cams[TheCamera.ActiveCam].Mode;
|
int16 camMode = TheCamera.Cams[TheCamera.ActiveCam].Mode;
|
||||||
if (camMode != CCam::MODE_SNIPER
|
if (camMode != CCam::MODE_SNIPER
|
||||||
&& camMode != CCam::MODE_ROCKET
|
&& camMode != CCam::MODE_ROCKET
|
||||||
@ -9275,7 +9276,7 @@ CPed::ProcessControl(void)
|
|||||||
|
|
||||||
ApplyMoveForce(forceDir);
|
ApplyMoveForce(forceDir);
|
||||||
}
|
}
|
||||||
if (bIsInTheAir && m_nPedState != PED_DIE && m_nPedState != PED_DEAD) {
|
if (bIsInTheAir && !DyingOrDead()) {
|
||||||
if (m_nPedStateTimer <= 1000 && m_nPedStateTimer) {
|
if (m_nPedStateTimer <= 1000 && m_nPedStateTimer) {
|
||||||
forceDir = GetPosition() - m_vecHitLastPos;
|
forceDir = GetPosition() - m_vecHitLastPos;
|
||||||
} else {
|
} else {
|
||||||
@ -9831,7 +9832,7 @@ CPed::PedAnimDoorCloseCB(CAnimBlendAssociation *animAssoc, void *arg)
|
|||||||
|
|
||||||
CAutomobile *veh = (CAutomobile*)(ped->m_pMyVehicle);
|
CAutomobile *veh = (CAutomobile*)(ped->m_pMyVehicle);
|
||||||
|
|
||||||
if (!veh || veh->m_status == STATUS_WRECKED || ped->m_nPedState == PED_DIE || ped->m_nPedState == PED_DEAD)
|
if (veh->IsWrecked() || ped->DyingOrDead())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (ped->m_nPedState == PED_CARJACK || ped->m_nPedState == PED_ENTER_CAR) {
|
if (ped->m_nPedState == PED_CARJACK || ped->m_nPedState == PED_ENTER_CAR) {
|
||||||
@ -9867,7 +9868,7 @@ CPed::PedAnimDoorCloseCB(CAnimBlendAssociation *animAssoc, void *arg)
|
|||||||
|
|
||||||
ped->SetObjective(OBJECTIVE_LEAVE_VEHICLE, veh);
|
ped->SetObjective(OBJECTIVE_LEAVE_VEHICLE, veh);
|
||||||
if (!ped->IsPlayer())
|
if (!ped->IsPlayer())
|
||||||
ped->m_ped_flagE80 = true;
|
ped->bFleeAfterExitingCar = true;
|
||||||
|
|
||||||
ped->bUsePedNodeSeek = true;
|
ped->bUsePedNodeSeek = true;
|
||||||
ped->m_pNextPathNode = nil;
|
ped->m_pNextPathNode = nil;
|
||||||
@ -9920,7 +9921,7 @@ CPed::PedAnimDoorOpenCB(CAnimBlendAssociation* animAssoc, void* arg)
|
|||||||
if (animAssoc)
|
if (animAssoc)
|
||||||
animAssoc->blendDelta = -1000.0f;
|
animAssoc->blendDelta = -1000.0f;
|
||||||
|
|
||||||
if (!veh || veh->m_status == STATUS_WRECKED)
|
if (veh->IsWrecked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (ped->m_nPedState != PED_CARJACK && ped->m_nPedState != PED_ENTER_CAR) {
|
if (ped->m_nPedState != PED_CARJACK && ped->m_nPedState != PED_ENTER_CAR) {
|
||||||
@ -10155,19 +10156,19 @@ CPed::PedAnimGetInCB(CAnimBlendAssociation *animAssoc, void *arg)
|
|||||||
if (animAssoc)
|
if (animAssoc)
|
||||||
animAssoc->blendDelta = -1000.0f;
|
animAssoc->blendDelta = -1000.0f;
|
||||||
|
|
||||||
if (!veh || veh->m_status == STATUS_WRECKED)
|
if (veh->IsWrecked() || ped->DyingOrDead())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (ped->m_nPedState != PED_DIE && ped->m_nPedState != PED_DEAD) {
|
|
||||||
if (ped->m_nPedState != PED_CARJACK && ped->m_nPedState != PED_ENTER_CAR) {
|
if (ped->m_nPedState != PED_CARJACK && ped->m_nPedState != PED_ENTER_CAR) {
|
||||||
ped->QuitEnteringCar();
|
ped->QuitEnteringCar();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ped->IsPlayer() && ped->m_ped_flagG40 && ((CPlayerPed*)ped)->m_pArrestingCop) {
|
|
||||||
|
if (ped->IsPlayer() && ped->bGonnaKillTheCarJacker && ((CPlayerPed*)ped)->m_pArrestingCop) {
|
||||||
PedSetInCarCB(nil, ped);
|
PedSetInCarCB(nil, ped);
|
||||||
ped->m_nLastPedState = ped->m_nPedState;
|
ped->m_nLastPedState = ped->m_nPedState;
|
||||||
ped->m_nPedState = PED_ARRESTED;
|
ped->m_nPedState = PED_ARRESTED;
|
||||||
ped->m_ped_flagG40 = false;
|
ped->bGonnaKillTheCarJacker = false;
|
||||||
if (veh) {
|
if (veh) {
|
||||||
veh->m_nNumGettingIn = 0;
|
veh->m_nNumGettingIn = 0;
|
||||||
veh->m_nGettingInFlags = 0;
|
veh->m_nGettingInFlags = 0;
|
||||||
@ -10237,9 +10238,9 @@ CPed::PedAnimGetInCB(CAnimBlendAssociation *animAssoc, void *arg)
|
|||||||
if (driver->m_pedStats->m_temper <= driver->m_pedStats->m_fear
|
if (driver->m_pedStats->m_temper <= driver->m_pedStats->m_fear
|
||||||
|| driver->CharCreatedBy == MISSION_CHAR
|
|| driver->CharCreatedBy == MISSION_CHAR
|
||||||
|| veh->VehicleCreatedBy == MISSION_VEHICLE) {
|
|| veh->VehicleCreatedBy == MISSION_VEHICLE) {
|
||||||
driver->m_ped_flagE80 = true;
|
driver->bFleeAfterExitingCar = true;
|
||||||
} else {
|
} else {
|
||||||
driver->m_ped_flagG40 = true;
|
driver->bGonnaKillTheCarJacker = true;
|
||||||
veh->pDriver->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, ped);
|
veh->pDriver->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, ped);
|
||||||
|
|
||||||
if (veh->pDriver->m_nPedType == PEDTYPE_COP && ped->IsPlayer()) {
|
if (veh->pDriver->m_nPedType == PEDTYPE_COP && ped->IsPlayer()) {
|
||||||
@ -10279,7 +10280,6 @@ CPed::PedAnimGetInCB(CAnimBlendAssociation *animAssoc, void *arg)
|
|||||||
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorCloseCB, ped);
|
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorCloseCB, ped);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CPed::SetPedPositionInTrain(void)
|
CPed::SetPedPositionInTrain(void)
|
||||||
@ -10297,7 +10297,7 @@ CPed::PedAnimPullPedOutCB(CAnimBlendAssociation* animAssoc, void* arg)
|
|||||||
animAssoc->blendDelta = -1000.0f;
|
animAssoc->blendDelta = -1000.0f;
|
||||||
|
|
||||||
if (ped->m_nPedState == PED_CARJACK || ped->m_nPedState == PED_ENTER_CAR) {
|
if (ped->m_nPedState == PED_CARJACK || ped->m_nPedState == PED_ENTER_CAR) {
|
||||||
if (!veh || veh->m_status == STATUS_WRECKED)
|
if (veh->IsWrecked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bool isLow = veh->bLowVehicle;
|
bool isLow = veh->bLowVehicle;
|
||||||
@ -10455,7 +10455,7 @@ CPed::PedAnimStepOutCarCB(CAnimBlendAssociation* animAssoc, void* arg)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ped->m_ped_flagE80 || ped->m_ped_flagG40) {
|
if (ped->bFleeAfterExitingCar || ped->bGonnaKillTheCarJacker) {
|
||||||
// POTENTIAL BUG? Why DOOR_FRONT_LEFT instead of door variable? or vice versa?
|
// POTENTIAL BUG? Why DOOR_FRONT_LEFT instead of door variable? or vice versa?
|
||||||
if (!veh->IsDoorMissing(door))
|
if (!veh->IsDoorMissing(door))
|
||||||
((CAutomobile*)veh)->Damage.SetDoorStatus(DOOR_FRONT_LEFT, DOOR_STATUS_SWINGING);
|
((CAutomobile*)veh)->Damage.SetDoorStatus(DOOR_FRONT_LEFT, DOOR_STATUS_SWINGING);
|
||||||
@ -10483,16 +10483,387 @@ CPed::PedAnimStepOutCarCB(CAnimBlendAssociation* animAssoc, void* arg)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRAPPER void CPed::PedGetupCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE810); }
|
void
|
||||||
|
CPed::PedEvadeCB(CAnimBlendAssociation* animAssoc, void* arg)
|
||||||
|
{
|
||||||
|
CPed* ped = (CPed*)arg;
|
||||||
|
|
||||||
|
if (!animAssoc) {
|
||||||
|
ped->ClearLookFlag();
|
||||||
|
if (ped->m_nPedState != PED_DIVE_AWAY && ped->m_nPedState != PED_STEP_AWAY)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ped->RestorePreviousState();
|
||||||
|
} else if (animAssoc->animId == ANIM_EV_DIVE) {
|
||||||
|
ped->bUpdateAnimHeading = true;
|
||||||
|
ped->ClearLookFlag();
|
||||||
|
if (ped->m_nPedState == PED_DIVE_AWAY)
|
||||||
|
{
|
||||||
|
ped->m_getUpTimer = CTimer::GetTimeInMilliseconds() + 1;
|
||||||
|
ped->m_nPedState = PED_FALL;
|
||||||
|
}
|
||||||
|
animAssoc->flags &= ~ASSOC_FADEOUTWHENDONE;
|
||||||
|
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
|
||||||
|
} else if (animAssoc->flags & ASSOC_FADEOUTWHENDONE) {
|
||||||
|
ped->ClearLookFlag();
|
||||||
|
if (ped->m_nPedState != PED_DIVE_AWAY && ped->m_nPedState != PED_STEP_AWAY)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ped->RestorePreviousState();
|
||||||
|
} else if (ped->m_nPedState != PED_ARRESTED) {
|
||||||
|
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
|
||||||
|
if (animAssoc->blendDelta >= 0.0f)
|
||||||
|
animAssoc->blendDelta = -4.0f;
|
||||||
|
|
||||||
|
ped->ClearLookFlag();
|
||||||
|
if (ped->m_nPedState == PED_DIVE_AWAY || ped->m_nPedState == PED_STEP_AWAY) {
|
||||||
|
ped->RestorePreviousState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CPed::PedGetupCB(CAnimBlendAssociation* animAssoc, void* arg)
|
||||||
|
{
|
||||||
|
CPed* ped = (CPed*)arg;
|
||||||
|
|
||||||
|
if (ped->m_nPedState == PED_GETUP)
|
||||||
|
RpAnimBlendClumpSetBlendDeltas(ped->GetClump(), ASSOC_PARTIAL, -1000.0f);
|
||||||
|
|
||||||
|
ped->bFallenDown = false;
|
||||||
|
animAssoc->blendDelta = -1000.0f;
|
||||||
|
if (ped->m_nPedState == PED_GETUP)
|
||||||
|
ped->RestorePreviousState();
|
||||||
|
|
||||||
|
if (ped->m_nPedState != PED_FLEE_POS && ped->m_nPedState != PED_FLEE_ENTITY)
|
||||||
|
ped->SetMoveState(PEDMOVE_STILL);
|
||||||
|
else
|
||||||
|
ped->SetMoveState(PEDMOVE_RUN);
|
||||||
|
|
||||||
|
ped->SetMoveAnim();
|
||||||
|
ped->bGetUpAnimStarted = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CPed::PedLandCB(CAnimBlendAssociation* animAssoc, void* arg)
|
||||||
|
{
|
||||||
|
CPed* ped = (CPed*)arg;
|
||||||
|
|
||||||
|
animAssoc->blendDelta = -1000.0f;
|
||||||
|
ped->bIsLanding = false;
|
||||||
|
|
||||||
|
if (ped->m_nPedState == PED_JUMP)
|
||||||
|
ped->RestorePreviousState();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CPed::PedSetDraggedOutCarPositionCB(CAnimBlendAssociation* animAssoc, void* arg)
|
||||||
|
{
|
||||||
|
CPed *ped = (CPed*)arg;
|
||||||
|
|
||||||
|
ped->bUsesCollision = true;
|
||||||
|
ped->RestartNonPartialAnims();
|
||||||
|
bool itsRearDoor = false;
|
||||||
|
|
||||||
|
if (ped->m_vehEnterType == CAR_DOOR_RF || ped->m_vehEnterType == CAR_DOOR_RR)
|
||||||
|
itsRearDoor = true;
|
||||||
|
|
||||||
|
CMatrix pedMat(ped->GetMatrix());
|
||||||
|
CVector posAfterBeingDragged = Multiply3x3(pedMat, (itsRearDoor ? -vecPedDraggedOutCarAnimOffset : vecPedDraggedOutCarAnimOffset));
|
||||||
|
posAfterBeingDragged += ped->GetPosition();
|
||||||
|
posAfterBeingDragged.z += 1.0f;
|
||||||
|
CPedPlacement::FindZCoorForPed(&posAfterBeingDragged);
|
||||||
|
ped->m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
ped->GetPosition() = posAfterBeingDragged;
|
||||||
|
|
||||||
|
if (ped->m_pMyVehicle && !ped->m_pMyVehicle->IsRoomForPedToLeaveCar(ped->m_vehEnterType, &vecPedDraggedOutCarAnimOffset)) {
|
||||||
|
ped->PositionPedOutOfCollision();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ped->CanSetPedState())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!ped->m_pMyVehicle) {
|
||||||
|
ped->SetIdle();
|
||||||
|
ped->SetGetUp();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CPed *driver = ped->m_pMyVehicle->pDriver;
|
||||||
|
|
||||||
|
if (ped->IsPlayer()) {
|
||||||
|
ped->SetIdle();
|
||||||
|
|
||||||
|
} else if (ped->bFleeAfterExitingCar) {
|
||||||
|
ped->bFleeAfterExitingCar = false;
|
||||||
|
ped->SetFlee(ped->m_pMyVehicle->GetPosition(), 4000);
|
||||||
|
|
||||||
|
} else if (ped->bWanderPathAfterExitingCar) {
|
||||||
|
ped->SetWanderPath(CGeneral::GetRandomNumberInRange(0.0f, 8.0f));
|
||||||
|
ped->bWanderPathAfterExitingCar = false;
|
||||||
|
|
||||||
|
} else if (ped->bGonnaKillTheCarJacker) {
|
||||||
|
// Kill objective is already set at this point.
|
||||||
|
|
||||||
|
ped->bGonnaKillTheCarJacker = false;
|
||||||
|
if (!ped->m_pedInObjective || !(CGeneral::GetRandomNumber() & 1)) {
|
||||||
|
if (!driver || driver == ped || driver->IsPlayer() && CTheScripts::IsPlayerOnAMission()) {
|
||||||
|
ped->m_nPedState = PED_NONE;
|
||||||
|
ped->m_nLastPedState = PED_NONE;
|
||||||
|
ped->SetFlee(ped->m_pMyVehicle->GetPosition(), 4000);
|
||||||
|
} else {
|
||||||
|
ped->ClearObjective();
|
||||||
|
ped->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, ped->m_pMyVehicle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (ped->m_pedStats->m_temper > ped->m_pedStats->m_fear && ped->CharCreatedBy != MISSION_CHAR
|
||||||
|
&& ped->m_pMyVehicle->VehicleCreatedBy != MISSION_VEHICLE && driver
|
||||||
|
&& driver->IsPlayer() && !CTheScripts::IsPlayerOnAMission()) {
|
||||||
|
|
||||||
|
if (CGeneral::GetRandomNumber() & 1)
|
||||||
|
ped->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, driver);
|
||||||
|
else
|
||||||
|
ped->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, ped->m_pMyVehicle);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ped->m_nPedState = PED_NONE;
|
||||||
|
ped->m_nLastPedState = PED_NONE;
|
||||||
|
ped->SetFlee(ped->m_pMyVehicle->GetPosition(), 10000);
|
||||||
|
ped->bUsePedNodeSeek = true;
|
||||||
|
ped->m_pNextPathNode = nil;
|
||||||
|
}
|
||||||
|
ped->SetGetUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg)
|
||||||
|
{
|
||||||
|
CPed *ped = (CPed*)arg;
|
||||||
|
|
||||||
|
CVehicle *veh = ped->m_pMyVehicle;
|
||||||
|
|
||||||
|
// Pointless code
|
||||||
|
if (!veh)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (veh->IsWrecked() || ped->DyingOrDead())
|
||||||
|
return;
|
||||||
|
|
||||||
|
ped->bInVehicle = true;
|
||||||
|
if (ped->m_nPedType == PEDTYPE_PROSTITUTE) {
|
||||||
|
if (veh->pDriver) {
|
||||||
|
if (veh->pDriver->IsPlayer() && ped->CharCreatedBy == RANDOM_CHAR) {
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_nSexFrequency = 1000;
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_nNextSexMoneyUpdateTime = CTimer::GetTimeInMilliseconds() + 1000;
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_nNextSexFrequencyUpdateTime = CTimer::GetTimeInMilliseconds() + 3000;
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_pHooker = (CCivilianPed*)ped;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER)
|
||||||
|
veh->m_veh_flagC10 = false;
|
||||||
|
|
||||||
|
if (veh->m_nNumGettingIn)
|
||||||
|
--veh->m_nNumGettingIn;
|
||||||
|
|
||||||
|
if (ped->IsPlayer() && ((CPlayerPed*)ped)->m_bAdrenalineActive)
|
||||||
|
((CPlayerPed*)ped)->ClearAdrenaline();
|
||||||
|
|
||||||
|
if (veh->IsBoat()) {
|
||||||
|
if (ped->IsPlayer()) {
|
||||||
|
if (veh->m_status == STATUS_SIMPLE) {
|
||||||
|
veh->m_vecMoveSpeed = CVector(0.0f, 0.0f, -0.00001f);
|
||||||
|
veh->m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
}
|
||||||
|
veh->m_status = STATUS_PLAYER;
|
||||||
|
AudioManager.PlayerJustGotInCar();
|
||||||
|
}
|
||||||
|
veh->SetDriver(ped);
|
||||||
|
if (!veh->bEngineOn)
|
||||||
|
veh->bEngineOn = true;
|
||||||
|
|
||||||
|
ped->m_nPedState = PED_DRIVING;
|
||||||
|
ped->StopNonPartialAnims();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ped->m_pVehicleAnim)
|
||||||
|
ped->m_pVehicleAnim->blendDelta = -1000.0f;
|
||||||
|
|
||||||
|
ped->bDoBloodyFootprints = false;
|
||||||
|
if (veh->m_nAlarmState == -1)
|
||||||
|
veh->m_nAlarmState = 15000;
|
||||||
|
|
||||||
|
if (ped->IsPlayer()) {
|
||||||
|
if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER) {
|
||||||
|
if (veh->m_status == STATUS_SIMPLE) {
|
||||||
|
veh->m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
veh->m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
}
|
||||||
|
veh->m_status = STATUS_PLAYER;
|
||||||
|
}
|
||||||
|
AudioManager.PlayerJustGotInCar();
|
||||||
|
} else if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER) {
|
||||||
|
if (veh->m_status == STATUS_SIMPLE) {
|
||||||
|
veh->m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
veh->m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
}
|
||||||
|
veh->m_status = STATUS_PHYSICS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER) {
|
||||||
|
for (int i = 0; i < veh->m_nNumMaxPassengers; ++i) {
|
||||||
|
CPed *passenger = veh->pPassengers[i];
|
||||||
|
if (passenger && passenger->CharCreatedBy == RANDOM_CHAR)
|
||||||
|
passenger->SetObjective(OBJECTIVE_LEAVE_VEHICLE, veh);
|
||||||
|
}
|
||||||
|
} else if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_PASSENGER) {
|
||||||
|
if (ped->m_nPedState == PED_CARJACK) {
|
||||||
|
veh->AddPassenger(ped, 0);
|
||||||
|
ped->m_nPedState = PED_DRIVING;
|
||||||
|
ped->RestorePreviousObjective();
|
||||||
|
ped->SetObjective(OBJECTIVE_LEAVE_VEHICLE, veh);
|
||||||
|
} else if (veh->pDriver && ped->CharCreatedBy == RANDOM_CHAR) {
|
||||||
|
veh->AutoPilot.m_nCruiseSpeed = 17;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER || ped->m_nPedState == PED_CARJACK) {
|
||||||
|
veh->SetDriver(ped);
|
||||||
|
if (veh->VehicleCreatedBy == PARKED_VEHICLE) {
|
||||||
|
veh->VehicleCreatedBy = RANDOM_VEHICLE;
|
||||||
|
++CCarCtrl::NumRandomCars;
|
||||||
|
--CCarCtrl::NumParkedCars;
|
||||||
|
}
|
||||||
|
if (veh->bIsAmbulanceOnDuty) {
|
||||||
|
veh->bIsAmbulanceOnDuty = false;
|
||||||
|
--CCarCtrl::NumAmbulancesOnDuty;
|
||||||
|
}
|
||||||
|
if (veh->bIsFireTruckOnDuty) {
|
||||||
|
veh->bIsFireTruckOnDuty = false;
|
||||||
|
--CCarCtrl::NumFiretrucksOnDuty;
|
||||||
|
}
|
||||||
|
if (ped->m_nPedType == PEDTYPE_COP && veh->IsLawEnforcementVehicle())
|
||||||
|
veh->ChangeLawEnforcerState(true);
|
||||||
|
|
||||||
|
if (!veh->bEngineOn) {
|
||||||
|
veh->bEngineOn = true;
|
||||||
|
DMAudio.PlayOneShot(ped->m_audioEntityId, SOUND_CAR_ENGINE_START, 1.0f);
|
||||||
|
}
|
||||||
|
if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER && ped->CharCreatedBy == RANDOM_CHAR
|
||||||
|
&& ped != FindPlayerPed() && ped->m_nPedType != PEDTYPE_EMERGENCY) {
|
||||||
|
|
||||||
|
CCarCtrl::JoinCarWithRoadSystem(veh);
|
||||||
|
veh->AutoPilot.m_nCarMission = MISSION_CRUISE;
|
||||||
|
veh->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
||||||
|
veh->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_AVOID_CARS;
|
||||||
|
veh->AutoPilot.m_nCruiseSpeed = 25;
|
||||||
|
}
|
||||||
|
ped->m_nPedState = PED_DRIVING;
|
||||||
|
if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER) {
|
||||||
|
|
||||||
|
if (ped->m_prevObjective == OBJECTIVE_RUN_TO_AREA || ped->m_prevObjective == OBJECTIVE_GOTO_CHAR_ON_FOOT || ped->m_prevObjective == OBJECTIVE_KILL_CHAR_ON_FOOT)
|
||||||
|
ped->m_prevObjective = OBJECTIVE_NONE;
|
||||||
|
|
||||||
|
ped->RestorePreviousObjective();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_PASSENGER) {
|
||||||
|
switch (ped->m_vehEnterType) {
|
||||||
|
if (!veh->bIsBus) {
|
||||||
|
case CAR_DOOR_RF:
|
||||||
|
veh->AddPassenger(ped, 0);
|
||||||
|
break;
|
||||||
|
case CAR_DOOR_RR:
|
||||||
|
veh->AddPassenger(ped, 2);
|
||||||
|
break;
|
||||||
|
case CAR_DOOR_LR:
|
||||||
|
veh->AddPassenger(ped, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
veh->AddPassenger(ped);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ped->m_nPedState = PED_DRIVING;
|
||||||
|
if (ped->m_prevObjective == OBJECTIVE_RUN_TO_AREA || ped->m_prevObjective == OBJECTIVE_GOTO_CHAR_ON_FOOT || ped->m_prevObjective == OBJECTIVE_KILL_CHAR_ON_FOOT)
|
||||||
|
ped->m_prevObjective = OBJECTIVE_NONE;
|
||||||
|
|
||||||
|
ped->RestorePreviousObjective();
|
||||||
|
}
|
||||||
|
|
||||||
|
veh->m_nGettingInFlags &= ~GetCarDoorFlag(ped->m_vehEnterType);
|
||||||
|
|
||||||
|
if (veh->bIsBus && !veh->m_nGettingInFlags)
|
||||||
|
((CAutomobile*)veh)->SetBusDoorTimer(1000, 1);
|
||||||
|
|
||||||
|
switch (ped->m_objective) {
|
||||||
|
case OBJECTIVE_KILL_CHAR_ON_FOOT:
|
||||||
|
case OBJECTIVE_KILL_CHAR_ANY_MEANS:
|
||||||
|
case OBJECTIVE_LEAVE_VEHICLE:
|
||||||
|
case OBJECTIVE_FOLLOW_CAR_IN_CAR:
|
||||||
|
case OBJECTIVE_GOTO_AREA_ANY_MEANS:
|
||||||
|
case OBJECTIVE_GOTO_AREA_ON_FOOT:
|
||||||
|
case OBJECTIVE_RUN_TO_AREA:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ped->SetObjective(OBJECTIVE_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (veh->pDriver == ped) {
|
||||||
|
if (veh->bLowVehicle) {
|
||||||
|
ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_LSIT, 100.0f);
|
||||||
|
} else {
|
||||||
|
ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f);
|
||||||
|
}
|
||||||
|
} else if (veh->bLowVehicle) {
|
||||||
|
ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SITPLO, 100.0f);
|
||||||
|
} else {
|
||||||
|
ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SITP, 100.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
ped->StopNonPartialAnims();
|
||||||
|
if (veh->bIsBus)
|
||||||
|
ped->bRenderPedInCar = false;
|
||||||
|
|
||||||
|
// FIX: RegisterVehicleOfInterest not just registers the vehicle, but also updates register time. So remove the IsThisVehicleInteresting check.
|
||||||
|
#ifndef FIX_BUGS
|
||||||
|
if (ped->IsPlayer() && !CCarCtrl::IsThisVehicleInteresting(veh) && veh->VehicleCreatedBy != MISSION_VEHICLE) {
|
||||||
|
#else
|
||||||
|
if (ped->IsPlayer() && veh->VehicleCreatedBy != MISSION_VEHICLE) {
|
||||||
|
#endif
|
||||||
|
CCarCtrl::RegisterVehicleOfInterest(veh);
|
||||||
|
|
||||||
|
if (!veh->bHasBeenOwnedByPlayer && veh->VehicleCreatedBy != MISSION_VEHICLE)
|
||||||
|
CEventList::RegisterEvent(EVENT_STEAL_CAR, EVENT_ENTITY_VEHICLE, veh, ped, 1500);
|
||||||
|
|
||||||
|
veh->bHasBeenOwnedByPlayer = true;
|
||||||
|
}
|
||||||
|
ped->bChangedSeat = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CPed::PedSetInTrainCB(CAnimBlendAssociation* animAssoc, void* arg)
|
||||||
|
{
|
||||||
|
CPed* ped = (CPed*)arg;
|
||||||
|
|
||||||
|
CVehicle* veh = ped->m_pMyVehicle;
|
||||||
|
|
||||||
|
if (!veh)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ped->bInVehicle = true;
|
||||||
|
ped->m_nPedState = PED_DRIVING;
|
||||||
|
ped->RestorePreviousObjective();
|
||||||
|
ped->SetMoveState(PEDMOVE_STILL);
|
||||||
|
veh->AddPassenger(ped);
|
||||||
|
}
|
||||||
|
|
||||||
WRAPPER void CPed::PedStaggerCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE8D0); }
|
WRAPPER void CPed::PedStaggerCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE8D0); }
|
||||||
WRAPPER void CPed::PedEvadeCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4D36E0); }
|
|
||||||
WRAPPER void CPed::PedSetInCarCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CF220); }
|
|
||||||
WRAPPER void CPed::PedSetOutCarCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE8F0); }
|
WRAPPER void CPed::PedSetOutCarCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE8F0); }
|
||||||
WRAPPER void CPed::PedSetQuickDraggedOutCarPositionCB(CAnimBlendAssociation *dragAssoc, void *arg) { EAXJMP(0x4E2480); }
|
WRAPPER void CPed::PedSetQuickDraggedOutCarPositionCB(CAnimBlendAssociation *dragAssoc, void *arg) { EAXJMP(0x4E2480); }
|
||||||
WRAPPER void CPed::PedSetDraggedOutCarPositionCB(CAnimBlendAssociation *dragAssoc, void *arg) { EAXJMP(0x4E2920); }
|
|
||||||
WRAPPER void CPed::PedSetInTrainCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4E3290); }
|
|
||||||
WRAPPER void CPed::PedSetOutTrainCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4E36E0); }
|
WRAPPER void CPed::PedSetOutTrainCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4E36E0); }
|
||||||
WRAPPER void CPed::PedLandCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE8A0); }
|
|
||||||
|
|
||||||
class CPed_ : public CPed
|
class CPed_ : public CPed
|
||||||
{
|
{
|
||||||
@ -10677,4 +11048,10 @@ STARTPATCHES
|
|||||||
InjectHook(0x4DEC80, &CPed::PedAnimGetInCB, PATCH_JUMP);
|
InjectHook(0x4DEC80, &CPed::PedAnimGetInCB, PATCH_JUMP);
|
||||||
InjectHook(0x4DEAF0, &CPed::PedAnimPullPedOutCB, PATCH_JUMP);
|
InjectHook(0x4DEAF0, &CPed::PedAnimPullPedOutCB, PATCH_JUMP);
|
||||||
InjectHook(0x4DF5C0, &CPed::PedAnimStepOutCarCB, PATCH_JUMP);
|
InjectHook(0x4DF5C0, &CPed::PedAnimStepOutCarCB, PATCH_JUMP);
|
||||||
|
InjectHook(0x4D36E0, &CPed::PedEvadeCB, PATCH_JUMP);
|
||||||
|
InjectHook(0x4CE810, &CPed::PedGetupCB, PATCH_JUMP);
|
||||||
|
InjectHook(0x4CE8A0, &CPed::PedLandCB, PATCH_JUMP);
|
||||||
|
InjectHook(0x4E2920, &CPed::PedSetDraggedOutCarPositionCB, PATCH_JUMP);
|
||||||
|
InjectHook(0x4CF220, &CPed::PedSetInCarCB, PATCH_JUMP);
|
||||||
|
InjectHook(0x4E3290, &CPed::PedSetInTrainCB, PATCH_JUMP);
|
||||||
ENDPATCHES
|
ENDPATCHES
|
@ -277,7 +277,7 @@ public:
|
|||||||
uint8 bIsLanding : 1;
|
uint8 bIsLanding : 1;
|
||||||
uint8 bIsRunning : 1; // on some conditions
|
uint8 bIsRunning : 1; // on some conditions
|
||||||
uint8 bHitSomethingLastFrame : 1;
|
uint8 bHitSomethingLastFrame : 1;
|
||||||
uint8 m_ped_flagB80 : 1; // something related with reaction to colliding vehicle
|
uint8 m_ped_flagB80 : 1; // bIsNearCar? something related with reaction to colliding vehicle
|
||||||
|
|
||||||
uint8 m_ped_flagC1 : 1;
|
uint8 m_ped_flagC1 : 1;
|
||||||
uint8 bRespondsToThreats : 1;
|
uint8 bRespondsToThreats : 1;
|
||||||
@ -288,9 +288,9 @@ public:
|
|||||||
uint8 m_ped_flagC40 : 1;
|
uint8 m_ped_flagC40 : 1;
|
||||||
uint8 bFindNewNodeAfterStateRestore : 1;
|
uint8 bFindNewNodeAfterStateRestore : 1;
|
||||||
|
|
||||||
uint8 m_ped_flagD1 : 1; // so far only used for reaction type to fire/explosion
|
uint8 bHasACamera : 1; // does ped possess a camera to document accidents involves fire/explosion
|
||||||
uint8 m_ped_flagD2 : 1; // set when event has been seen
|
uint8 m_ped_flagD2 : 1; // set when ped witnessed an event
|
||||||
uint8 m_ped_flagD4 : 1; // so far only creates blood pool in hands up state
|
uint8 m_ped_flagD4 : 1; // bPedIsBleeding? so far only creates blood pool in hands up state
|
||||||
uint8 m_ped_flagD8 : 1;
|
uint8 m_ped_flagD8 : 1;
|
||||||
uint8 bIsPedDieAnimPlaying : 1;
|
uint8 bIsPedDieAnimPlaying : 1;
|
||||||
uint8 bUsePedNodeSeek : 1;
|
uint8 bUsePedNodeSeek : 1;
|
||||||
@ -304,11 +304,11 @@ public:
|
|||||||
uint8 bIsDucking : 1;
|
uint8 bIsDucking : 1;
|
||||||
uint8 bGetUpAnimStarted : 1;
|
uint8 bGetUpAnimStarted : 1;
|
||||||
uint8 bDoBloodyFootprints : 1;
|
uint8 bDoBloodyFootprints : 1;
|
||||||
uint8 m_ped_flagE80 : 1; // bDontDragMeOutCar? bStayInCarOnJack?
|
uint8 bFleeAfterExitingCar : 1;
|
||||||
|
|
||||||
uint8 bWanderPathAfterExitingCar : 1;
|
uint8 bWanderPathAfterExitingCar : 1;
|
||||||
uint8 m_ped_flagF2 : 1;
|
uint8 m_ped_flagF2 : 1;
|
||||||
uint8 m_ped_flagF4 : 1; // Unfinished feature from VC
|
uint8 m_ped_flagF4 : 1; // Unfinished feature from VC, probably bDontDragMeOutCar
|
||||||
uint8 m_ped_flagF8 : 1;
|
uint8 m_ped_flagF8 : 1;
|
||||||
uint8 bWillBeQuickJacked : 1;
|
uint8 bWillBeQuickJacked : 1;
|
||||||
uint8 bCancelEnteringCar : 1; // after door is opened or couldn't be opened due to it's locked
|
uint8 bCancelEnteringCar : 1; // after door is opened or couldn't be opened due to it's locked
|
||||||
@ -317,14 +317,14 @@ public:
|
|||||||
|
|
||||||
uint8 m_ped_flagG1 : 1;
|
uint8 m_ped_flagG1 : 1;
|
||||||
uint8 m_ped_flagG2 : 1;
|
uint8 m_ped_flagG2 : 1;
|
||||||
uint8 m_ped_flagG4 : 1;
|
uint8 m_ped_flagG4 : 1; // bStillOnValidPoly?
|
||||||
uint8 bStartWanderPathOnFoot : 1; // exits the car if he's in it, reset after path found
|
uint8 bStartWanderPathOnFoot : 1; // exits the car if he's in it, reset after path found
|
||||||
uint8 m_ped_flagG10 : 1;
|
uint8 m_ped_flagG10 : 1; // bOnBoat? (but not in the sense of driving)
|
||||||
uint8 bBusJacked : 1;
|
uint8 bBusJacked : 1;
|
||||||
uint8 m_ped_flagG40 : 1; // had to exit car due to someone jacked it from RF door
|
uint8 bGonnaKillTheCarJacker : 1; // only set when car is jacked from right door
|
||||||
uint8 bFadeOut : 1;
|
uint8 bFadeOut : 1;
|
||||||
|
|
||||||
uint8 m_ped_flagH1 : 1;
|
uint8 bKnockedUpIntoAir : 1; // has ped been knocked up into the air by a car collision
|
||||||
uint8 m_ped_flagH2 : 1;
|
uint8 m_ped_flagH2 : 1;
|
||||||
uint8 m_ped_flagH4 : 1;
|
uint8 m_ped_flagH4 : 1;
|
||||||
uint8 bClearObjective : 1;
|
uint8 bClearObjective : 1;
|
||||||
@ -645,6 +645,7 @@ public:
|
|||||||
void ReactToPointGun(CEntity*);
|
void ReactToPointGun(CEntity*);
|
||||||
void SeekCar(void);
|
void SeekCar(void);
|
||||||
void SeekBoatPosition(void);
|
void SeekBoatPosition(void);
|
||||||
|
bool PositionPedOutOfCollision(void);
|
||||||
|
|
||||||
// Static methods
|
// Static methods
|
||||||
static CVector GetLocalPositionToOpenCarDoor(CVehicle *veh, uint32 component, float offset);
|
static CVector GetLocalPositionToOpenCarDoor(CVehicle *veh, uint32 component, float offset);
|
||||||
@ -722,6 +723,7 @@ public:
|
|||||||
RwFrame *GetNodeFrame(int nodeId) { return m_pFrames[nodeId]->frame; }
|
RwFrame *GetNodeFrame(int nodeId) { return m_pFrames[nodeId]->frame; }
|
||||||
PedState GetPedState(void) { return m_nPedState; }
|
PedState GetPedState(void) { return m_nPedState; }
|
||||||
void SetPedState(PedState state) { m_nPedState = state; }
|
void SetPedState(PedState state) { m_nPedState = state; }
|
||||||
|
bool DyingOrDead(void) { return m_nPedState == PED_DIE || m_nPedState == PED_DEAD; }
|
||||||
|
|
||||||
// set by 0482:set_threat_reaction_range_multiplier opcode
|
// set by 0482:set_threat_reaction_range_multiplier opcode
|
||||||
static uint16 &nThreatReactionRangeMultiplier;
|
static uint16 &nThreatReactionRangeMultiplier;
|
||||||
|
@ -94,6 +94,15 @@ CPlayerPed::AnnoyPlayerPed(bool annoyedByPassingEntity)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CPlayerPed::ClearAdrenaline(void)
|
||||||
|
{
|
||||||
|
if (m_bAdrenalineActive && m_nAdrenalineTime != 0) {
|
||||||
|
m_nAdrenalineTime = 0;
|
||||||
|
CTimer::SetTimeStep(1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class CPlayerPed_ : public CPlayerPed
|
class CPlayerPed_ : public CPlayerPed
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -29,7 +29,7 @@ public:
|
|||||||
bool m_bHasLockOnTarget;
|
bool m_bHasLockOnTarget;
|
||||||
int8 field_1406;
|
int8 field_1406;
|
||||||
int8 field_1407;
|
int8 field_1407;
|
||||||
uint32 m_bAdrenalineTime;
|
uint32 m_nAdrenalineTime;
|
||||||
bool m_bCanBeDamaged;
|
bool m_bCanBeDamaged;
|
||||||
int8 field_1413;
|
int8 field_1413;
|
||||||
int8 field_1414;
|
int8 field_1414;
|
||||||
@ -52,6 +52,7 @@ public:
|
|||||||
void SetInitialState(void);
|
void SetInitialState(void);
|
||||||
void SetMoveAnim(void);
|
void SetMoveAnim(void);
|
||||||
void ProcessControl(void);
|
void ProcessControl(void);
|
||||||
|
void ClearAdrenaline(void);
|
||||||
|
|
||||||
static void SetupPlayerPed(int32);
|
static void SetupPlayerPed(int32);
|
||||||
static void DeactivatePlayerPed(int32);
|
static void DeactivatePlayerPed(int32);
|
||||||
|
@ -269,7 +269,7 @@ public:
|
|||||||
bool ShufflePassengersToMakeSpace(void);
|
bool ShufflePassengersToMakeSpace(void);
|
||||||
|
|
||||||
bool IsAlarmOn(void) { return m_nAlarmState != 0 && m_nAlarmState != -1; }
|
bool IsAlarmOn(void) { return m_nAlarmState != 0 && m_nAlarmState != -1; }
|
||||||
|
bool IsWrecked(void) { return !this || m_status == STATUS_WRECKED; }
|
||||||
CVehicleModelInfo* GetModelInfo() { return (CVehicleModelInfo*)CModelInfo::GetModelInfo(GetModelIndex()); }
|
CVehicleModelInfo* GetModelInfo() { return (CVehicleModelInfo*)CModelInfo::GetModelInfo(GetModelIndex()); }
|
||||||
|
|
||||||
static bool &bWheelsOnlyCheat;
|
static bool &bWheelsOnlyCheat;
|
||||||
|
Loading…
Reference in New Issue
Block a user