Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 39 additions & 3 deletions Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1463,7 +1463,19 @@ bool CStaticFunctionDefinitions::SetElementModel(CClientEntity& Entity, unsigned
CLuaArguments Arguments;
Arguments.PushNumber(usCurrentModel);
Arguments.PushNumber(usModel);
Ped.CallEvent("onClientElementModelChange", Arguments, true);
bool bContinue = Ped.CallEvent("onClientElementModelChange", Arguments, true);

// Check for another call to setElementModel
if (usModel != Ped.GetModel())
return false;

if (!bContinue)
{
// Change canceled
Ped.SetModel(usCurrentModel);
return false;
}

break;
}
case CCLIENTVEHICLE:
Expand All @@ -1482,7 +1494,19 @@ bool CStaticFunctionDefinitions::SetElementModel(CClientEntity& Entity, unsigned
CLuaArguments Arguments;
Arguments.PushNumber(usCurrentModel);
Arguments.PushNumber(usModel);
Vehicle.CallEvent("onClientElementModelChange", Arguments, true);
bool bContinue = Vehicle.CallEvent("onClientElementModelChange", Arguments, true);

// Check for another call to setElementModel
if (usModel != Vehicle.GetModel())
return false;

if (!bContinue)
{
// Change canceled
Vehicle.SetModelBlocking(usCurrentModel, 255, 255);
return false;
}

break;
}
case CCLIENTOBJECT:
Expand All @@ -1502,7 +1526,19 @@ bool CStaticFunctionDefinitions::SetElementModel(CClientEntity& Entity, unsigned
CLuaArguments Arguments;
Arguments.PushNumber(usCurrentModel);
Arguments.PushNumber(usModel);
Object.CallEvent("onClientElementModelChange", Arguments, true);
bool bContinue = Object.CallEvent("onClientElementModelChange", Arguments, true);

// Check for another call to setElementModel
if (usModel != Object.GetModel())
return false;

if (!bContinue)
{
// Change canceled
Object.SetModel(usCurrentModel);
return false;
}

break;
}
case CCLIENTPROJECTILE:
Expand Down
46 changes: 40 additions & 6 deletions Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1699,11 +1699,22 @@ bool CStaticFunctionDefinitions::SetElementModel(CElement* pElement, unsigned sh
return false;
if (!CPlayerManager::IsValidPlayerModel(usModel))
return false;
unsigned short usOldModel = pPed->GetModel(); // Get the old model
CLuaArguments Arguments;
Arguments.PushNumber(pPed->GetModel()); // Get the old model
Arguments.PushNumber(usOldModel);
pPed->SetModel(usModel); // Set the new model
Arguments.PushNumber(usModel); // Get the new model
pPed->CallEvent("onElementModelChange", Arguments);
bool bContinue = pPed->CallEvent("onElementModelChange", Arguments);
// Check for another call to setElementModel
if (usModel != pPed->GetModel())
return false;

if (!bContinue)
{
// Change canceled
pPed->SetModel(usOldModel);
return false;
}
break;
}
case CElement::VEHICLE:
Expand All @@ -1713,11 +1724,22 @@ bool CStaticFunctionDefinitions::SetElementModel(CElement* pElement, unsigned sh
return false;
if (!CVehicleManager::IsValidModel(usModel))
return false;
unsigned short usOldModel = pVehicle->GetModel(); // Get the old model
CLuaArguments Arguments;
Arguments.PushNumber(pVehicle->GetModel()); // Get the old model
Arguments.PushNumber(usOldModel);
pVehicle->SetModel(usModel); // Set the new model
Arguments.PushNumber(usModel); // Get the new model
pVehicle->CallEvent("onElementModelChange", Arguments);
bool bContinue = pVehicle->CallEvent("onElementModelChange", Arguments);
// Check for another call to setElementModel
if (usModel != pVehicle->GetModel())
return false;

if (!bContinue)
{
// Change canceled
pVehicle->SetModel(usOldModel);
return false;
}

// Check for any passengers above the max seat list
unsigned char ucMaxPassengers = pVehicle->GetMaxPassengers();
Expand All @@ -1735,6 +1757,7 @@ bool CStaticFunctionDefinitions::SetElementModel(CElement* pElement, unsigned sh
RemovePedFromVehicle(pPed);
}
}

break;
}
case CElement::OBJECT:
Expand All @@ -1744,11 +1767,22 @@ bool CStaticFunctionDefinitions::SetElementModel(CElement* pElement, unsigned sh
return false;
if (!CObjectManager::IsValidModel(usModel))
return false;
unsigned short usOldModel = pObject->GetModel(); // Get the old model
CLuaArguments Arguments;
Arguments.PushNumber(pObject->GetModel()); // Get the old model
Arguments.PushNumber(usOldModel);
pObject->SetModel(usModel); // Set the new model
Arguments.PushNumber(usModel); // Get the new model
pObject->CallEvent("onElementModelChange", Arguments);
bool bContinue = pObject->CallEvent("onElementModelChange", Arguments);
// Check for another call to setElementModel
if (usModel != pObject->GetModel())
return false;

if (!bContinue)
{
// Change canceled
pObject->SetModel(usOldModel);
return false;
}
break;
}
default:
Expand Down