Merge branch 'master' into erorcun

This commit is contained in:
aap
2019-07-16 18:31:18 +02:00
committed by GitHub
32 changed files with 1386 additions and 447 deletions

View File

@ -7,7 +7,7 @@ WRAPPER void CCivilianPed::ProcessControl(void) { EAXJMP(0x4BFFE0); }
CCivilianPed::CCivilianPed(int pedtype, int mi) : CPed(pedtype)
{
CPed::SetModelIndex(mi);
SetModelIndex(mi);
for (int i = 0; i < 10; i++)
{
m_nearPeds[i] = nil;

View File

@ -1,6 +1,64 @@
#include "common.h"
#include "patcher.h"
#include "CopPed.h"
#include "ModelIndices.h"
WRAPPER void CCopPed::ProcessControl() { EAXJMP(0x4C1400); }
CCopPed::CCopPed(eCopType copType) : CPed(PEDTYPE_COP)
{
m_nCopType = copType;
switch (copType) {
case COP_STREET:
SetModelIndex(MI_COP);
GiveWeapon(WEAPONTYPE_COLT45, 1000);
m_currentWeapon = WEAPONTYPE_UNARMED;
m_fArmour = 0.0f;
m_wepSkills = 208; /* TODO: what is this? seems unused */
m_wepAccuracy = 60;
break;
case COP_FBI:
SetModelIndex(MI_FBI);
GiveWeapon(WEAPONTYPE_COLT45, 1000);
GiveWeapon(WEAPONTYPE_AK47, 1000);
SetCurrentWeapon(WEAPONTYPE_AK47);
m_fArmour = 100.0f;
m_wepSkills = 176; /* TODO: what is this? seems unused */
m_wepAccuracy = 76;
break;
case COP_SWAT:
SetModelIndex(MI_SWAT);
GiveWeapon(WEAPONTYPE_COLT45, 1000);
GiveWeapon(WEAPONTYPE_UZI, 1000);
SetCurrentWeapon(WEAPONTYPE_UZI);
m_fArmour = 50.0f;
m_wepSkills = 32; /* TODO: what is this? seems unused */
m_wepAccuracy = 64;
break;
case COP_ARMY:
SetModelIndex(MI_ARMY);
GiveWeapon(WEAPONTYPE_COLT45, 1000);
GiveWeapon(WEAPONTYPE_M16, 1000);
GiveWeapon(WEAPONTYPE_GRENADE, 10);
SetCurrentWeapon(WEAPONTYPE_M16);
m_fArmour = 100.0f;
m_wepSkills = 32; /* TODO: what is this? seems unused */
m_wepAccuracy = 84;
break;
default:
break;
}
m_bIsInPursuit = false;
field_1350 = 1;
m_bIsDisabledCop = false;
field_1356 = 0;
m_attackTimer = 0;
field_1351 = 0;
m_bZoneDisabledButClose = false;
m_bZoneDisabled = false;
field_1364 = -1;
m_pPointGunAt = nil;
}
CCopPed::~CCopPed()
{
@ -12,9 +70,11 @@ WRAPPER void CCopPed::ClearPursuit(void) { EAXJMP(0x4C28C0); }
class CCopPed_ : public CCopPed
{
public:
CCopPed *ctor(eCopType type) { return ::new (this) CCopPed(type); };
void dtor(void) { CCopPed::~CCopPed(); }
};
STARTPATCHES
InjectHook(0x4C11B0, &CCopPed_::ctor, PATCH_JUMP);
InjectHook(0x4C13E0, &CCopPed_::dtor, PATCH_JUMP);
ENDPATCHES

View File

@ -31,9 +31,11 @@ public:
int8 field_1366;
int8 field_1367;
CCopPed(eCopType);
~CCopPed();
void ClearPursuit(void);
void ProcessControl(void);
};
static_assert(sizeof(CCopPed) == 0x558, "CCopPed: error");

View File

@ -1,13 +1,38 @@
#include "common.h"
#include "patcher.h"
#include "EmergencyPed.h"
#include "ModelIndices.h"
class CEmergencyPed_ : public CEmergencyPed
{
public:
CEmergencyPed *ctor(int pedtype) { return ::new (this) CEmergencyPed(pedtype); };
void dtor(void) { CEmergencyPed::~CEmergencyPed(); }
};
WRAPPER void CEmergencyPed::ProcessControl(void) { EAXJMP(0x4C2F10); }
CEmergencyPed::CEmergencyPed(uint32 type) : CPed(type)
{
switch (type){
case PEDTYPE_EMERGENCY:
SetModelIndex(MI_MEDIC);
m_pRevivedPed = nil;
field_1360 = 0;
break;
case PEDTYPE_FIREMAN:
SetModelIndex(MI_FIREMAN);
m_pRevivedPed = nil;
break;
default:
break;
}
m_nEmergencyPedState = 0;
m_pAttendedAccident = nil;
field_1356 = 0;
}
STARTPATCHES
InjectHook(0x4C2E40, &CEmergencyPed_::ctor, PATCH_JUMP);
InjectHook(0x4C2EF0, &CEmergencyPed_::dtor, PATCH_JUMP);
ENDPATCHES

View File

@ -1,11 +1,20 @@
#pragma once
#include "Fire.h"
#include "Ped.h"
class CEmergencyPed : public CPed
{
public:
// 0x53C
uint8 stuff[24];
CPed* m_pRevivedPed;
int32 m_nEmergencyPedState; // looks like flags
void* m_pAttendedAccident; //TODO: CAccident*
CFire* m_pAttendedFire;
int8 field_1356;
int32 field_1360;
CEmergencyPed(uint32);
void ProcessControl(void);
};
static_assert(sizeof(CEmergencyPed) == 0x554, "CEmergencyPed: error");

View File

@ -47,6 +47,10 @@ WRAPPER void CPed::SetDuck(uint32) { EAXJMP(0x4E4920); }
WRAPPER void CPed::RegisterThreatWithGangPeds(CEntity*) { EAXJMP(0x4E3870); }
WRAPPER void CPed::MakeChangesForNewWeapon(int8) { EAXJMP(0x4F2560); }
WRAPPER void CPed::SetSeek(CVector, float) { EAXJMP(0x4D14B0); }
WRAPPER bool CPed::Seek(void) { EAXJMP(0x4D1640); }
WRAPPER void CPed::ClearAll(void) { EAXJMP(0x4C7F20); }
WRAPPER void CPed::SetWanderPath(int8) { EAXJMP(0x4D2750); }
WRAPPER void CPed::SetFollowPath(CVector) { EAXJMP(0x4D2EA0); }
bool &CPed::bNastyLimbsCheat = *(bool*)0x95CD44;
bool &CPed::bPedCheat2 = *(bool*)0x95CD5A;
@ -394,7 +398,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
m_ped_flagD10 = false;
m_ped_flagD20 = false;
m_ped_flagD40 = false;
m_ped_flagD80 = false;
m_bScriptObjectiveCompleted = false;
m_ped_flagE1 = false;
m_ped_flagE2 = false;
@ -1405,7 +1409,7 @@ CPed::PedSetDraggedOutCarCB(CAnimBlendAssociation *dragAssoc, void *arg)
if (vehicle->pDriver == ped) {
vehicle->RemoveDriver();
if (vehicle->m_nDoorLock == CARLOCK_COP_CAR)
if (vehicle->m_nDoorLock == CARLOCK_LOCKED_INITIALLY)
vehicle->m_nDoorLock = CARLOCK_UNLOCKED;
if (ped->m_nPedType == PEDTYPE_COP && vehicle->IsLawEnforcementVehicle())

View File

@ -210,7 +210,7 @@ public:
uint8 m_ped_flagD10 : 1;
uint8 m_ped_flagD20 : 1;
uint8 m_ped_flagD40 : 1; // reset when objective changes
uint8 m_ped_flagD80 : 1;
uint8 m_bScriptObjectiveCompleted : 1;
uint8 m_ped_flagE1 : 1;
uint8 m_ped_flagE2 : 1;
@ -469,6 +469,9 @@ public:
bool CheckIfInTheAir(void);
void ClearAll(void);
void SetPointGunAt(CEntity*);
bool Seek(void);
void SetWanderPath(int8);
void SetFollowPath(CVector);
// Static methods
static void GetLocalPositionToOpenCarDoor(CVector *output, CVehicle *veh, uint32 enterType, float offset);