Skip to content

Commit 203fb7c

Browse files
author
G_Moris
committed
Fix by TracerDS 1
1 parent 6e8565e commit 203fb7c

21 files changed

+263
-310
lines changed

Client/game_sa/CHandlingEntrySA.cpp

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,44 +19,33 @@ extern CGameSA* pGame;
1919
CHandlingEntrySA::CHandlingEntrySA()
2020
{
2121
// Create a new interface and zero it
22-
m_pHandlingSA = new (std::nothrow) tHandlingDataSA;
23-
if (m_pHandlingSA)
22+
m_HandlingSA = std::make_unique<tHandlingDataSA>();
23+
if (m_HandlingSA)
2424
{
25-
memset(m_pHandlingSA, 0, sizeof(tHandlingDataSA));
25+
memset(m_HandlingSA.get(), 0, sizeof(tHandlingDataSA));
2626
}
27-
m_bDeleteInterface = true;
2827
}
2928

30-
CHandlingEntrySA::CHandlingEntrySA(tHandlingDataSA* pOriginal)
29+
CHandlingEntrySA::CHandlingEntrySA(const tHandlingDataSA* const pOriginal)
3130
{
3231
// Store gta's pointer
33-
m_pHandlingSA = nullptr;
34-
m_bDeleteInterface = false;
35-
32+
m_HandlingSA = nullptr;
3633
if (pOriginal)
3734
{
3835
memcpy(&m_Handling, pOriginal, sizeof(tHandlingDataSA));
3936
}
4037
}
4138

42-
CHandlingEntrySA::~CHandlingEntrySA()
43-
{
44-
if (m_bDeleteInterface)
45-
{
46-
SAFE_DELETE(m_pHandlingSA);
47-
}
48-
}
49-
5039
// Apply the handlingdata from another data
51-
void CHandlingEntrySA::Assign(const CHandlingEntry* pEntry) noexcept
40+
void CHandlingEntrySA::Assign(const CHandlingEntry* const pEntry) noexcept
5241
{
5342
if (!pEntry)
5443
return;
5544

5645
try
5746
{
5847
// Copy the data
59-
const CHandlingEntrySA* pEntrySA = static_cast<const CHandlingEntrySA*>(pEntry);
48+
const CHandlingEntrySA* const pEntrySA = static_cast<const CHandlingEntrySA const*>(pEntry);
6049
m_Handling = pEntrySA->m_Handling;
6150
}
6251
catch (...)
@@ -67,14 +56,14 @@ void CHandlingEntrySA::Assign(const CHandlingEntry* pEntry) noexcept
6756
void CHandlingEntrySA::Recalculate() noexcept
6857
{
6958
// Real GTA class?
70-
if (!m_pHandlingSA)
59+
if (!m_HandlingSA)
7160
return;
7261

7362
try
7463
{
7564
// Copy our stored field to GTA's
76-
memcpy(m_pHandlingSA, &m_Handling, sizeof(m_Handling));
77-
((void(_stdcall*)(tHandlingDataSA*))FUNC_HandlingDataMgr_ConvertDataToGameUnits)(m_pHandlingSA);
65+
memcpy(m_HandlingSA.get(), &m_Handling, sizeof(m_Handling));
66+
((void(_stdcall*)(tHandlingDataSA*))FUNC_HandlingDataMgr_ConvertDataToGameUnits)(m_HandlingSA.get());
7867
}
7968
catch (...)
8069
{

Client/game_sa/CHandlingEntrySA.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@ class CHandlingEntrySA : public CHandlingEntry
9191
CHandlingEntrySA();
9292

9393
// Constructor for original entries
94-
CHandlingEntrySA(tHandlingDataSA* pOriginal);
94+
CHandlingEntrySA(const tHandlingDataSA* const pOriginal);
9595

96-
virtual ~CHandlingEntrySA();
96+
virtual ~CHandlingEntrySA(){};
9797

9898
// Use this to copy data from an another handling class to this
99-
void Assign(const CHandlingEntry* pEntry) noexcept;
99+
void Assign(const CHandlingEntry* const pEntry) noexcept;
100100

101101
// Get functions
102102
float GetMass() const noexcept { return m_Handling.fMass; }
@@ -142,7 +142,7 @@ class CHandlingEntrySA : public CHandlingEntry
142142
eLightType GetTailLight() const noexcept { return static_cast<eLightType>(m_Handling.ucTailLight); }
143143
unsigned char GetAnimGroup() const noexcept { return m_Handling.ucAnimGroup; }
144144

145-
eHandlingTypes GetHandlingID() const noexcept { return static_cast<eHandlingTypes>(m_Handling.iVehicleID); }
145+
eHandlingTypes GetVehicleID() const noexcept { return static_cast<eHandlingTypes>(m_Handling.iVehicleID); }
146146

147147
// Set functions
148148
void SetMass(float fMass) noexcept { m_Handling.fMass = fMass; }
@@ -192,11 +192,9 @@ class CHandlingEntrySA : public CHandlingEntry
192192

193193
void Recalculate() noexcept;
194194

195-
tHandlingDataSA* GetInterface() const noexcept { return m_pHandlingSA; }
195+
tHandlingDataSA* GetInterface() const noexcept { return m_HandlingSA.get(); }
196196

197197
private:
198-
tHandlingDataSA* m_pHandlingSA;
199-
bool m_bDeleteInterface;
200-
201-
tHandlingDataSA m_Handling;
198+
std::unique_ptr<tHandlingDataSA> m_HandlingSA;
199+
tHandlingDataSA m_Handling;
202200
};

Client/game_sa/CHandlingManagerSA.cpp

Lines changed: 56 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ extern CGameSA* pGame;
2727
#define DUMP_HANDLING_DATA 0
2828

2929
// Original handling data unaffected by handling.cfg changes
30-
tHandlingDataSA m_OriginalHandlingData[HT_MAX];
31-
CHandlingEntrySA* m_pOriginalEntries[HT_MAX];
30+
tHandlingDataSA m_OriginalHandlingData[HT_MAX];
31+
std::unique_ptr<CHandlingEntrySA> m_OriginalEntries[HT_MAX];
3232

33-
tFlyingHandlingDataSA m_OriginalFlyingHandlingData[24];
34-
CFlyingHandlingEntrySA* m_pOriginalFlyingEntries[24];
33+
tFlyingHandlingDataSA m_OriginalFlyingHandlingData[24];
34+
std::unique_ptr<CFlyingHandlingEntrySA> m_OriginalFlyingEntries[24];
3535

36-
tBoatHandlingDataSA m_OriginalBoatHandlingData[12];
37-
CBoatHandlingEntrySA* m_pOriginalBoatEntries[12];
36+
tBoatHandlingDataSA m_OriginalBoatHandlingData[12];
37+
std::unique_ptr<CBoatHandlingEntrySA> m_OriginalBoatEntries[12];
3838

39-
tBikeHandlingDataSA m_OriginalBikeHandlingData[14];
40-
CBikeHandlingEntrySA* m_pOriginalBikeEntries[14];
39+
tBikeHandlingDataSA m_OriginalBikeHandlingData[14];
40+
std::unique_ptr<CBikeHandlingEntrySA> m_OriginalBikeEntries[14];
4141

4242
std::map<std::string, eHandlingProperty> m_HandlingNames;
4343

@@ -120,11 +120,11 @@ static __declspec(naked) void Hook_Calculate()
120120
}
121121
}
122122

123-
static bool IsVehicleModel(std::uint32_t uiModel)
123+
static bool IsVehicleModel(std::uint32_t model) noexcept
124124
{
125125
try
126126
{
127-
const CModelInfo* pModelInfo = pGame->GetModelInfo(uiModel);
127+
const CModelInfo* pModelInfo = pGame->GetModelInfo(model);
128128
return pModelInfo && pModelInfo->IsVehicle();
129129
}
130130
catch (...)
@@ -141,22 +141,22 @@ CHandlingManagerSA::CHandlingManagerSA()
141141
// Create a handling entry for every original handling data.
142142
for (std::size_t i = 0; i < HT_MAX; i++)
143143
{
144-
m_pOriginalEntries[i] = new CHandlingEntrySA(&m_OriginalHandlingData[i]);
144+
m_OriginalEntries[i] = std::make_unique<CHandlingEntrySA>(&m_OriginalHandlingData[i]);
145145
}
146146

147147
for (std::size_t i = 0; i < 24; i++)
148148
{
149-
m_pOriginalFlyingEntries[i] = new CFlyingHandlingEntrySA(&m_OriginalFlyingHandlingData[i]);
149+
m_OriginalFlyingEntries[i] = std::make_unique<CFlyingHandlingEntrySA>(&m_OriginalFlyingHandlingData[i]);
150150
}
151151

152152
for (std::size_t i = 0; i < 12; i++)
153153
{
154-
m_pOriginalBoatEntries[i] = new CBoatHandlingEntrySA(&m_OriginalBoatHandlingData[i]);
154+
m_OriginalBoatEntries[i] = std::make_unique<CBoatHandlingEntrySA>(&m_OriginalBoatHandlingData[i]);
155155
}
156156

157157
for (std::size_t i = 0; i < 14; i++)
158158
{
159-
m_pOriginalBikeEntries[i] = new CBikeHandlingEntrySA(&m_OriginalBikeHandlingData[i]);
159+
m_OriginalBikeEntries[i] = std::make_unique<CBikeHandlingEntrySA>(&m_OriginalBikeHandlingData[i]);
160160
}
161161

162162
#if DUMP_HANDLING_DATA
@@ -200,116 +200,96 @@ CHandlingManagerSA::CHandlingManagerSA()
200200

201201
CHandlingManagerSA::~CHandlingManagerSA()
202202
{
203-
// Destroy all original handling entries
204-
for (std::size_t i = 0; i < HT_MAX; i++)
205-
{
206-
delete m_pOriginalEntries[i];
207-
}
208-
209-
for (std::size_t i = 0; i < 24; i++)
210-
{
211-
delete m_pOriginalFlyingEntries[i];
212-
}
213-
214-
for (std::size_t i = 0; i < 12; i++)
215-
{
216-
delete m_pOriginalBoatEntries[i];
217-
}
218-
219-
for (std::size_t i = 0; i < 14; i++)
220-
{
221-
delete m_pOriginalBikeEntries[i];
222-
}
223203
}
224204

225-
eHandlingProperty CHandlingManagerSA::GetPropertyEnumFromName(const std::string& strName) const noexcept
205+
eHandlingProperty CHandlingManagerSA::GetPropertyEnumFromName(const std::string& name) const noexcept
226206
{
227-
const auto it = m_HandlingNames.find(strName);
207+
const auto it = m_HandlingNames.find(name);
228208
return it != m_HandlingNames.end() ? it->second : HANDLING_MAX;
229209
}
230210

231-
CHandlingEntry* CHandlingManagerSA::CreateHandlingData() const noexcept
211+
std::unique_ptr<CHandlingEntry> CHandlingManagerSA::CreateHandlingData() const noexcept
232212
{
233-
return new (std::nothrow) CHandlingEntrySA;
213+
return std::make_unique<CHandlingEntrySA>();
234214
}
235215

236-
CFlyingHandlingEntry* CHandlingManagerSA::CreateFlyingHandlingData() const noexcept
216+
std::unique_ptr<CFlyingHandlingEntry> CHandlingManagerSA::CreateFlyingHandlingData() const noexcept
237217
{
238-
return new (std::nothrow) CFlyingHandlingEntrySA;
218+
return std::make_unique<CFlyingHandlingEntrySA>();
239219
}
240220

241-
CBoatHandlingEntry* CHandlingManagerSA::CreateBoatHandlingData() const noexcept
221+
std::unique_ptr<CBoatHandlingEntry> CHandlingManagerSA::CreateBoatHandlingData() const noexcept
242222
{
243-
return new (std::nothrow) CBoatHandlingEntrySA;
223+
return std::make_unique<CBoatHandlingEntrySA>();
244224
}
245225

246-
CBikeHandlingEntry* CHandlingManagerSA::CreateBikeHandlingData() const noexcept
226+
std::unique_ptr<CBikeHandlingEntry> CHandlingManagerSA::CreateBikeHandlingData() const noexcept
247227
{
248-
return new (std::nothrow) CBikeHandlingEntrySA;
228+
return std::make_unique<CBikeHandlingEntrySA>();
249229
}
250230

251-
const CHandlingEntry* CHandlingManagerSA::GetOriginalHandlingData(std::uint32_t uiModel) const noexcept
231+
const CHandlingEntry* CHandlingManagerSA::GetOriginalHandlingData(std::uint32_t model) const noexcept
252232
{
253233
// Vehicle?
254-
if (!IsVehicleModel(uiModel))
234+
if (!IsVehicleModel(model))
255235
return nullptr;
256236

257237
// Get our Handling ID, the default value will be HT_LANDSTAL
258-
const eHandlingTypes eHandling = GetHandlingID(uiModel);
238+
const eHandlingTypes eHandling = GetHandlingID(model);
259239
// Return it
260-
return m_pOriginalEntries[eHandling];
240+
return m_OriginalEntries[eHandling].get();
261241
}
262242

263-
const CFlyingHandlingEntry* CHandlingManagerSA::GetOriginalFlyingHandlingData(std::uint32_t uiModel) const noexcept
243+
const CFlyingHandlingEntry* CHandlingManagerSA::GetOriginalFlyingHandlingData(std::uint32_t model) const noexcept
264244
{
265245
// Vehicle?
266-
if (!IsVehicleModel(uiModel))
246+
if (!IsVehicleModel(model))
267247
return nullptr;
268248

269249
// Get our Handling ID, the default value will be HT_LANDSTAL
270-
const eHandlingTypes eHandling = GetHandlingID(uiModel);
250+
const eHandlingTypes eHandling = GetHandlingID(model);
271251
// Original GTA:SA behavior
272252
if (eHandling < HT_SEAPLANE || eHandling > HT_RCRAIDER)
273-
return m_pOriginalFlyingEntries[0];
253+
return m_OriginalFlyingEntries[0].get();
274254
else
275-
return m_pOriginalFlyingEntries[eHandling - HT_SEAPLANE];
255+
return m_OriginalFlyingEntries[eHandling - HT_SEAPLANE].get();
276256
}
277257

278-
const CBoatHandlingEntry* CHandlingManagerSA::GetOriginalBoatHandlingData(std::uint32_t uiModel) const noexcept
258+
const CBoatHandlingEntry* CHandlingManagerSA::GetOriginalBoatHandlingData(std::uint32_t model) const noexcept
279259
{
280260
// Vehicle?
281-
if (!IsVehicleModel(uiModel))
261+
if (!IsVehicleModel(model))
282262
return nullptr;
283263

284264
// Get our Handling ID, the default value will be HT_LANDSTAL
285-
const eHandlingTypes eHandling = GetHandlingID(uiModel);
265+
const eHandlingTypes eHandling = GetHandlingID(model);
286266
// Original GTA:SA behavior
287267
if (eHandling < HT_PREDATOR || eHandling > HT_SEAPLANE)
288-
return m_pOriginalBoatEntries[0];
268+
return m_OriginalBoatEntries[0].get();
289269
else
290-
return m_pOriginalBoatEntries[eHandling - HT_PREDATOR];
270+
return m_OriginalBoatEntries[eHandling - HT_PREDATOR].get();
291271
}
292272

293-
const CBikeHandlingEntry* CHandlingManagerSA::GetOriginalBikeHandlingData(std::uint32_t uiModel) const noexcept
273+
const CBikeHandlingEntry* CHandlingManagerSA::GetOriginalBikeHandlingData(std::uint32_t model) const noexcept
294274
{
295275
// Vehicle?
296-
if (!IsVehicleModel(uiModel))
276+
if (!IsVehicleModel(model))
297277
return nullptr;
298278

299279
// Get our Handling ID, the default value will be HT_LANDSTAL
300-
const eHandlingTypes eHandling = GetHandlingID(uiModel);
280+
const eHandlingTypes eHandling = GetHandlingID(model);
301281
if (eHandling >= HT_BIKE && eHandling <= HT_FREEWAY)
302-
return m_pOriginalBikeEntries[eHandling - HT_BIKE];
282+
return m_OriginalBikeEntries[eHandling - HT_BIKE].get();
303283
else if (eHandling == HT_FAGGIO)
304-
return m_pOriginalBikeEntries[13];
284+
return m_OriginalBikeEntries[13].get();
305285
else
306286
return nullptr;
307287
}
308288

309289
// Return the handling manager id
310-
eHandlingTypes CHandlingManagerSA::GetHandlingID(std::uint32_t uiModel) const noexcept
290+
eHandlingTypes CHandlingManagerSA::GetHandlingID(std::uint32_t model) const noexcept
311291
{
312-
switch (uiModel)
292+
switch (model)
313293
{
314294
case VT_LANDSTAL:
315295
return HT_LANDSTAL;
@@ -9161,7 +9141,7 @@ void CHandlingManagerSA::InitializeDefaultHandlings() noexcept
91619141
m_OriginalBikeHandlingData[13].iVehicleID = 214;
91629142
}
91639143

9164-
void CHandlingManagerSA::CheckSuspensionChanges(const CHandlingEntry* pEntry) const noexcept
9144+
void CHandlingManagerSA::CheckSuspensionChanges(const CHandlingEntry* const pEntry) const noexcept
91659145
{
91669146
try
91679147
{
@@ -9175,31 +9155,31 @@ void CHandlingManagerSA::CheckSuspensionChanges(const CHandlingEntry* pEntry) co
91759155
return;
91769156

91779157
// Get Handling ID
9178-
const eHandlingTypes eHandling = pEntry->GetHandlingID();
9158+
const eHandlingTypes eHandling = pEntry->GetVehicleID();
91799159
if (eHandling >= HT_MAX)
91809160
return;
91819161

9182-
const CHandlingEntrySA* pOriginal = m_pOriginalEntries[eHandling];
9183-
if (!pOriginal)
9162+
const auto& OriginalEntries = m_OriginalEntries[eHandling];
9163+
if (!OriginalEntries)
91849164
return;
91859165

91869166
// Default bChanged to false
91879167
bool bChanged = false;
91889168

91899169
// Set bChanged to true if we find ANY change.
9190-
if (pEntry->GetSuspensionAntiDiveMultiplier() != pOriginal->GetSuspensionAntiDiveMultiplier())
9170+
if (pEntry->GetSuspensionAntiDiveMultiplier() != OriginalEntries->GetSuspensionAntiDiveMultiplier())
91919171
bChanged = true;
9192-
else if (pEntry->GetSuspensionDamping() != pOriginal->GetSuspensionDamping())
9172+
else if (pEntry->GetSuspensionDamping() != OriginalEntries->GetSuspensionDamping())
91939173
bChanged = true;
9194-
else if (pEntry->GetSuspensionForceLevel() != pOriginal->GetSuspensionForceLevel())
9174+
else if (pEntry->GetSuspensionForceLevel() != OriginalEntries->GetSuspensionForceLevel())
91959175
bChanged = true;
9196-
else if (pEntry->GetSuspensionFrontRearBias() != pOriginal->GetSuspensionFrontRearBias())
9176+
else if (pEntry->GetSuspensionFrontRearBias() != OriginalEntries->GetSuspensionFrontRearBias())
91979177
bChanged = true;
9198-
else if (pEntry->GetSuspensionHighSpeedDamping() != pOriginal->GetSuspensionHighSpeedDamping())
9178+
else if (pEntry->GetSuspensionHighSpeedDamping() != OriginalEntries->GetSuspensionHighSpeedDamping())
91999179
bChanged = true;
9200-
else if (pEntry->GetSuspensionLowerLimit() != pOriginal->GetSuspensionLowerLimit())
9180+
else if (pEntry->GetSuspensionLowerLimit() != OriginalEntries->GetSuspensionLowerLimit())
92019181
bChanged = true;
9202-
else if (pEntry->GetSuspensionUpperLimit() != pOriginal->GetSuspensionUpperLimit())
9182+
else if (pEntry->GetSuspensionUpperLimit() != OriginalEntries->GetSuspensionUpperLimit())
92039183
bChanged = true;
92049184

92059185
if (!bChanged)

0 commit comments

Comments
 (0)