gangs, script and replay fixes

This commit is contained in:
Nikolay Korolev
2020-05-16 17:00:40 +03:00
parent 40ee29fb99
commit e3291b0cb1
10 changed files with 156 additions and 67 deletions

View File

@ -2,12 +2,17 @@
#include "ModelIndices.h"
#include "Gangs.h"
#include "General.h"
#include "Streaming.h"
#include "Weapon.h"
CGangInfo CGangs::Gang[NUM_GANGS];
bool CGangs::GangAttackWithCops[NUM_GANGS];
CGangInfo::CGangInfo() :
m_nVehicleMI(MI_BUS),
m_nVehicleMI(-1),
m_nPedModel1MI(-1),
m_nPedModel2MI(-1),
m_nPedModelOverride(-1),
m_Weapon1(WEAPONTYPE_UNARMED),
m_Weapon2(WEAPONTYPE_UNARMED)
@ -15,21 +20,63 @@ CGangInfo::CGangInfo() :
void CGangs::Initialise(void)
{
Gang[GANG_MAFIA].m_nVehicleMI = -1;
Gang[GANG_TRIAD].m_nVehicleMI = -1;
Gang[GANG_DIABLOS].m_nVehicleMI = -1;
Gang[GANG_YAKUZA].m_nVehicleMI = -1;
Gang[GANG_YARDIE].m_nVehicleMI = -1;
Gang[GANG_COLUMB].m_nVehicleMI = -1;
Gang[GANG_HOODS].m_nVehicleMI = -1;
Gang[GANG_7].m_nVehicleMI = -1;
Gang[GANG_8].m_nVehicleMI = -1;
SetGangPedModels(GANG_CUBAN, MI_CBA, MI_CBB);
SetGangPedModels(GANG_HAITIAN, MI_HNA, MI_HNB);
SetGangPedModels(GANG_STREET, MI_SGA, MI_SGB);
SetGangPedModels(GANG_DIAZ, MI_CLA, MI_CLB);
SetGangPedModels(GANG_SECURITY, MI_GDA, MI_GDB);
SetGangPedModels(GANG_BIKER, MI_BKA, MI_BKB);
SetGangPedModels(GANG_PLAYER, MI_PGA, MI_PGB);
SetGangPedModels(GANG_GOLFER, MI_WFOGO, MI_WMOGO);
SetGangVehicleModel(GANG_CUBAN, MI_CUBAN);
SetGangVehicleModel(GANG_HAITIAN, MI_VOODOO);
SetGangVehicleModel(GANG_STREET, MI_GANGBUR);
SetGangVehicleModel(GANG_DIAZ, -1);
SetGangVehicleModel(GANG_SECURITY, -1);
SetGangVehicleModel(GANG_BIKER, MI_ANGEL);
SetGangVehicleModel(GANG_PLAYER, -1);
SetGangVehicleModel(GANG_GOLFER, MI_CADDY);
//SetGangWeapons(GANG_GOLFER, WEAPONTYPE_GOLFCLUB, WEAPONTYPE_GOLFCLUB); // TODO(MIAMI)
#ifdef FIX_BUGS
for (int i = 0; i < NUM_GANGS; i++)
Gang[i].m_nPedModelOverride = -1;
SetGangPedModelOverride(i, -1);
#endif
}
bool CGangs::HaveGangModelsLoaded(int16 gang)
{
CGangInfo* pGangInfo = GetGangInfo(gang);
return CStreaming::HasModelLoaded(pGangInfo->m_nPedModel1MI) && CStreaming::HasModelLoaded(pGangInfo->m_nPedModel2MI);
}
void CGangs::SetGangPedModels(int16 gang, int32 mi1, int32 mi2)
{
GetGangInfo(gang)->m_nPedModel1MI = mi1;
GetGangInfo(gang)->m_nPedModel2MI = mi2;
}
void CGangs::SetWillAttackPlayerWithCops(ePedType type, bool will)
{
if (type >= PEDTYPE_GANG1 && type <= PEDTYPE_GANG9)
GangAttackWithCops[type - PEDTYPE_GANG1] = will;
}
bool CGangs::GetWillAttackPlayerWithCops(ePedType type)
{
if (type >= PEDTYPE_GANG1 && type <= PEDTYPE_GANG9)
return GangAttackWithCops[type - PEDTYPE_GANG1];
return false;
}
int32 CGangs::ChooseGangPedModel(int16 gang)
{
CGangInfo* pGangInfo = GetGangInfo(gang);
if (pGangInfo->m_nPedModelOverride != -1 || CGeneral::GetRandomTrueFalse())
return pGangInfo->m_nPedModel1MI;
else
return pGangInfo->m_nPedModel2MI;
}
void CGangs::SetGangVehicleModel(int16 gang, int32 model)
{
GetGangInfo(gang)->m_nVehicleMI = model;

View File

@ -1,8 +1,12 @@
#pragma once
#include "PedType.h"
struct CGangInfo
{
int32 m_nVehicleMI;
int32 m_nPedModel1MI;
int32 m_nPedModel2MI;
int8 m_nPedModelOverride;
int32 m_Weapon1;
int32 m_Weapon2;
@ -13,15 +17,15 @@ struct CGangInfo
VALIDATE_SIZE(CGangInfo, 0x10);
enum {
GANG_MAFIA = 0,
GANG_TRIAD,
GANG_DIABLOS,
GANG_YAKUZA,
GANG_YARDIE,
GANG_COLUMB,
GANG_HOODS,
GANG_7,
GANG_8,
GANG_CUBAN = 0,
GANG_HAITIAN,
GANG_STREET,
GANG_DIAZ,
GANG_SECURITY,
GANG_BIKER,
GANG_PLAYER,
GANG_GOLFER,
GANG_9,
NUM_GANGS
};
@ -36,9 +40,18 @@ public:
static void SaveAllGangData(uint8 *, uint32 *);
static void LoadAllGangData(uint8 *, uint32);
static void SetGangPedModels(int16, int32, int32);
static void SetWillAttackPlayerWithCops(ePedType type, bool will);
static bool GetWillAttackPlayerWithCops(ePedType type);
static int32 ChooseGangPedModel(int16);
static bool HaveGangModelsLoaded(int16 gang);
static int32 GetGangPedModel1(int16 gang) { return Gang[gang].m_nPedModel1MI; }
static int32 GetGangPedModel2(int16 gang) { return Gang[gang].m_nPedModel2MI; }
static int32 GetGangVehicleModel(int16 gang) { return Gang[gang].m_nVehicleMI; }
static CGangInfo *GetGangInfo(int16 gang) { return &Gang[gang]; }
private:
static CGangInfo Gang[NUM_GANGS];
static bool GangAttackWithCops[NUM_GANGS];
};

View File

@ -329,19 +329,7 @@ CPopulation::UpdatePedCount(ePedType pedType, bool decrease)
int
CPopulation::ChooseGangOccupation(int gangId)
{
int8 modelOverride = CGangs::GetGangPedModelOverride(gangId);
// All gangs have 2 models
int firstGangModel = 2 * gangId + MI_GANG01;
// GetRandomNumberInRange never returns max. value
if (modelOverride == -1)
return CGeneral::GetRandomNumberInRange(firstGangModel, firstGangModel + 2);
if (modelOverride != 0)
return firstGangModel + 1;
else
return firstGangModel;
return CGangs::ChooseGangPedModel(gangId);
}
//--MIAMI: done