Skip to content

Commit 05550c5

Browse files
Fixed #5807: onClientVehicleStartEnter is now cancellable if the local player is entering the vehicle
https://bugs.mtasa.com/view.php?id=5807
1 parent f71c0a2 commit 05550c5

File tree

2 files changed

+52
-38
lines changed

2 files changed

+52
-38
lines changed

MTA10/mods/deathmatch/logic/CClientGame.cpp

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4955,32 +4955,43 @@ void CClientGame::ProcessVehicleInOutKey ( bool bPassenger )
49554955
// If the vehicle's a boat, make sure we're standing on it (we need a dif task to enter boats properly)
49564956
if ( pVehicle->GetVehicleType () != CLIENTVEHICLE_BOAT || m_pLocalPlayer->GetContactEntity () == pVehicle )
49574957
{
4958-
// Send an in request
4959-
NetBitStreamInterface* pBitStream = g_pNet->AllocateNetBitStream ();
4960-
if ( pBitStream )
4958+
// Call the onClientVehicleStartEnter event for remote players
4959+
// Local player triggered before sending packet in CClientGame
4960+
CLuaArguments Arguments;
4961+
Arguments.PushElement(m_pLocalPlayer); // player
4962+
Arguments.PushNumber(uiSeat); // seat
4963+
Arguments.PushNumber(uiDoor); // Door
4964+
4965+
if ( pVehicle->CallEvent("onClientVehicleStartEnter", Arguments, true) )
49614966
{
4962-
// Write the vehicle id to it and that we're requesting to get into it
4963-
pBitStream->Write ( pVehicle->GetID () );
4964-
unsigned char ucAction = static_cast < unsigned char > ( VEHICLE_REQUEST_IN );
4965-
unsigned char ucSeat = static_cast < unsigned char > ( uiSeat );
4966-
bool bIsOnWater = pVehicle->IsOnWater ();
4967-
unsigned char ucDoor = static_cast < unsigned char > ( uiDoor );
4968-
pBitStream->WriteBits ( &ucAction, 4 );
4969-
pBitStream->WriteBits ( &ucSeat, 4 );
4970-
pBitStream->WriteBit ( bIsOnWater );
4971-
pBitStream->WriteBits ( &ucDoor, 3 );
4972-
4973-
// Send and destroy it
4974-
g_pNet->SendPacket ( PACKET_ID_VEHICLE_INOUT, pBitStream, PACKET_PRIORITY_HIGH, PACKET_RELIABILITY_RELIABLE_ORDERED );
4975-
g_pNet->DeallocateNetBitStream ( pBitStream );
4976-
4977-
// We're now entering a vehicle
4978-
m_bIsGettingIntoVehicle = true;
4979-
m_ulLastVehicleInOutTime = CClientTime::GetTime ();
49804967

4981-
#ifdef MTA_DEBUG
4982-
g_pCore->GetConsole ()->Printf ( "* Sent_InOut: vehicle_request_in" );
4983-
#endif
4968+
// Send an in request
4969+
NetBitStreamInterface* pBitStream = g_pNet->AllocateNetBitStream ();
4970+
if ( pBitStream )
4971+
{
4972+
// Write the vehicle id to it and that we're requesting to get into it
4973+
pBitStream->Write ( pVehicle->GetID () );
4974+
unsigned char ucAction = static_cast < unsigned char > ( VEHICLE_REQUEST_IN );
4975+
unsigned char ucSeat = static_cast < unsigned char > ( uiSeat );
4976+
bool bIsOnWater = pVehicle->IsOnWater ();
4977+
unsigned char ucDoor = static_cast < unsigned char > ( uiDoor );
4978+
pBitStream->WriteBits ( &ucAction, 4 );
4979+
pBitStream->WriteBits ( &ucSeat, 4 );
4980+
pBitStream->WriteBit ( bIsOnWater );
4981+
pBitStream->WriteBits ( &ucDoor, 3 );
4982+
4983+
// Send and destroy it
4984+
g_pNet->SendPacket ( PACKET_ID_VEHICLE_INOUT, pBitStream, PACKET_PRIORITY_HIGH, PACKET_RELIABILITY_RELIABLE_ORDERED );
4985+
g_pNet->DeallocateNetBitStream ( pBitStream );
4986+
4987+
// We're now entering a vehicle
4988+
m_bIsGettingIntoVehicle = true;
4989+
m_ulLastVehicleInOutTime = CClientTime::GetTime ();
4990+
4991+
#ifdef MTA_DEBUG
4992+
g_pCore->GetConsole ()->Printf ( "* Sent_InOut: vehicle_request_in" );
4993+
#endif
4994+
}
49844995
}
49854996
}
49864997
}

MTA10/mods/deathmatch/logic/CPacketHandler.cpp

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,6 +1612,15 @@ void CPacketHandler::Packet_Vehicle_InOut ( NetBitStreamInterface& bitStream )
16121612
static_cast < CDeathmatchVehicle* > ( pVehicle )->SetTyresCanBurst ( true );
16131613
*/
16141614
}
1615+
else
1616+
{
1617+
// Call the onClientVehicleStartEnter event for remote players
1618+
CLuaArguments Arguments;
1619+
Arguments.PushElement ( pPlayer ); // player
1620+
Arguments.PushNumber ( ucSeat ); // seat
1621+
Arguments.PushNumber ( ucDoor ); // Door
1622+
pVehicle->CallEvent ( "onClientVehicleStartEnter", Arguments, true );
1623+
}
16151624

16161625
// Start animating him in
16171626
pPlayer->GetIntoVehicle ( pVehicle, ucSeat, ucDoor + 2 );
@@ -1621,13 +1630,6 @@ void CPacketHandler::Packet_Vehicle_InOut ( NetBitStreamInterface& bitStream )
16211630

16221631
pVehicle->CalcAndUpdateCanBeDamagedFlag ();
16231632
pVehicle->CalcAndUpdateTyresCanBurstFlag ();
1624-
1625-
// Call the onClientVehicleStartEnter event
1626-
CLuaArguments Arguments;
1627-
Arguments.PushElement ( pPlayer ); // player
1628-
Arguments.PushNumber ( ucSeat ); // seat
1629-
Arguments.PushNumber ( ucDoor ); // Door
1630-
pVehicle->CallEvent ( "onClientVehicleStartEnter", Arguments, true );
16311633
break;
16321634
}
16331635

@@ -1834,6 +1836,14 @@ void CPacketHandler::Packet_Vehicle_InOut ( NetBitStreamInterface& bitStream )
18341836
g_pClientGame->m_bIsGettingJacked = true;
18351837
g_pClientGame->m_pGettingJackedBy = pPlayer;
18361838
}
1839+
1840+
// Call the onClientVehicleStartEnter event for remote players
1841+
// Local player triggered before sending packet in CClientGame
1842+
CLuaArguments Arguments;
1843+
Arguments.PushElement(pPlayer); // player
1844+
Arguments.PushNumber(ucSeat); // seat
1845+
Arguments.PushNumber(ucDoor); // Door
1846+
pVehicle->CallEvent("onClientVehicleStartEnter", Arguments, true);
18371847
}
18381848

18391849
// Remember that this player is working on leaving a vehicle
@@ -1846,13 +1856,6 @@ void CPacketHandler::Packet_Vehicle_InOut ( NetBitStreamInterface& bitStream )
18461856
// Remember that this player is working on leaving a vehicle
18471857
pPlayer->SetVehicleInOutState ( VEHICLE_INOUT_JACKING );
18481858

1849-
// Call the onClientVehicleStartEnter event
1850-
CLuaArguments Arguments;
1851-
Arguments.PushElement ( pPlayer ); // player
1852-
Arguments.PushNumber ( ucSeat ); // seat
1853-
Arguments.PushNumber ( ucDoor ); // Door
1854-
pVehicle->CallEvent ( "onClientVehicleStartEnter", Arguments, true );
1855-
18561859
CLuaArguments Arguments2;
18571860
Arguments2.PushElement ( pJacked ); // player
18581861
Arguments2.PushNumber ( ucSeat ); // seat

0 commit comments

Comments
 (0)