Skip to content

Commit c27d6b3

Browse files
committed
Fix SA crash at 0x002a65ef
1 parent f17490e commit c27d6b3

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

Client/game_sa/CVehicleSA.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1809,7 +1809,7 @@ void CVehicleSA::RecalculateSuspensionLines()
18091809

18101810
DWORD dwModel = GetModelIndex();
18111811
CModelInfo* pModelInfo = pGame->GetModelInfo(dwModel);
1812-
if (pModelInfo && pModelInfo->IsMonsterTruck() || pModelInfo->IsCar())
1812+
if (pModelInfo && (pModelInfo->IsCar() || pModelInfo->IsMonsterTruck() || pModelInfo->IsTrailer()))
18131813
{
18141814
// Trains (Their trailers do as well!)
18151815
if (pModelInfo->IsTrain() || dwModel == 571 || dwModel == 570 || dwModel == 569 || dwModel == 590)

Client/mods/deathmatch/logic/CClientVehicle.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4300,6 +4300,11 @@ void CClientVehicle::ApplyHandling()
43004300
if (!m_pVehicle)
43014301
return;
43024302

4303+
// Ensure model is loaded before recalculating handling
4304+
CModelInfo* pModelInfo = g_pGame->GetModelInfo(GetModel());
4305+
if (!pModelInfo || !pModelInfo->IsLoaded())
4306+
return;
4307+
43034308
m_pVehicle->RecalculateHandling();
43044309

43054310
if (m_eVehicleType == CLIENTVEHICLE_BMX || m_eVehicleType == CLIENTVEHICLE_BIKE)

Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8905,6 +8905,10 @@ bool CStaticFunctionDefinitions::SetVehicleHandling(CClientVehicle* pVehicle, Ha
89058905
{
89068906
if (SetEntryHandling(pEntry, eProperty, ucValue))
89078907
{
8908+
CModelInfo* pModelInfo = g_pGame->GetModelInfo(pVehicle->GetModel());
8909+
if (!pModelInfo || !pModelInfo->IsLoaded())
8910+
return false;
8911+
89088912
pVehicle->ApplyHandling();
89098913
return true;
89108914
}
@@ -8922,6 +8926,10 @@ bool CStaticFunctionDefinitions::SetVehicleHandling(CClientVehicle* pVehicle, Ha
89228926
{
89238927
if (SetEntryHandling(pEntry, eProperty, uiValue))
89248928
{
8929+
CModelInfo* pModelInfo = g_pGame->GetModelInfo(pVehicle->GetModel());
8930+
if (!pModelInfo || !pModelInfo->IsLoaded())
8931+
return false;
8932+
89258933
pVehicle->ApplyHandling();
89268934
return true;
89278935
}
@@ -8939,6 +8947,10 @@ bool CStaticFunctionDefinitions::SetVehicleHandling(CClientVehicle* pVehicle, Ha
89398947
{
89408948
if (SetEntryHandling(pEntry, eProperty, fValue))
89418949
{
8950+
CModelInfo* pModelInfo = g_pGame->GetModelInfo(pVehicle->GetModel());
8951+
if (!pModelInfo || !pModelInfo->IsLoaded())
8952+
return false;
8953+
89428954
pVehicle->ApplyHandling();
89438955
return true;
89448956
}
@@ -8956,6 +8968,10 @@ bool CStaticFunctionDefinitions::SetVehicleHandling(CClientVehicle* pVehicle, Ha
89568968
{
89578969
if (SetEntryHandling(pEntry, eProperty, strValue))
89588970
{
8971+
CModelInfo* pModelInfo = g_pGame->GetModelInfo(pVehicle->GetModel());
8972+
if (!pModelInfo || !pModelInfo->IsLoaded())
8973+
return false;
8974+
89598975
pVehicle->ApplyHandling();
89608976
return true;
89618977
}
@@ -8973,6 +8989,10 @@ bool CStaticFunctionDefinitions::SetVehicleHandling(CClientVehicle* pVehicle, Ha
89738989
{
89748990
if (SetEntryHandling(pEntry, eProperty, vecValue))
89758991
{
8992+
CModelInfo* pModelInfo = g_pGame->GetModelInfo(pVehicle->GetModel());
8993+
if (!pModelInfo || !pModelInfo->IsLoaded())
8994+
return false;
8995+
89768996
pVehicle->ApplyHandling();
89778997
return true;
89788998
}
@@ -9031,6 +9051,10 @@ bool CStaticFunctionDefinitions::ResetVehicleHandling(CClientVehicle* pVehicle)
90319051
pEntry->SetSuspensionUpperLimit(pEntry->GetSuspensionLowerLimit() - 0.1f);
90329052
}
90339053

9054+
CModelInfo* pModelInfo = g_pGame->GetModelInfo(pVehicle->GetModel());
9055+
if (!pModelInfo || !pModelInfo->IsLoaded())
9056+
return false;
9057+
90349058
pVehicle->ApplyHandling();
90359059

90369060
return true;
@@ -9080,6 +9104,10 @@ bool CStaticFunctionDefinitions::ResetVehicleHandlingProperty(CClientVehicle* pV
90809104
return false;
90819105
}
90829106

9107+
CModelInfo* pModelInfo = g_pGame->GetModelInfo(pVehicle->GetModel());
9108+
if (!pModelInfo || !pModelInfo->IsLoaded())
9109+
return false;
9110+
90839111
pVehicle->ApplyHandling();
90849112

90859113
return true;

Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2518,6 +2518,15 @@ int CLuaVehicleDefs::SetVehicleHandling(lua_State* luaVM)
25182518

25192519
if (!argStream.HasErrors())
25202520
{
2521+
// Check if the vehicle model is loaded
2522+
CModelInfo* pModelInfo = g_pGame->GetModelInfo(pVehicle->GetModel());
2523+
if (!pModelInfo || !pModelInfo->IsLoaded())
2524+
{
2525+
m_pScriptDebugging->LogWarning(luaVM, "setVehicleHandling failed: vehicle model not loaded");
2526+
lua_pushboolean(luaVM, false);
2527+
return 1;
2528+
}
2529+
25212530
if (argStream.NextIsString())
25222531
{
25232532
SString strProperty;

0 commit comments

Comments
 (0)