Skip to content

Commit 840067c

Browse files
committed
Implement vehicle's callbacks (OnVehicleTrailerAttach & OnVehicleTrailerDetach)
1 parent 596ece7 commit 840067c

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

SDK

Server/Components/Pawn/Scripting/Vehicle/Events.hpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,24 @@ struct VehicleEvents : public VehicleEventHandler, public Singleton<VehicleEvent
121121
}
122122
return !!ret;
123123
}
124+
125+
bool onVehicleTrailerAttach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override
126+
{
127+
cell ret = PawnManager::Get()->CallInSides("OnVehicleTrailerAttach", DefaultReturnValue_False, player.getID(), vehicle.getID(), trailer.getID());
128+
if (!ret)
129+
{
130+
ret = PawnManager::Get()->CallInEntry("OnVehicleTrailerAttach", DefaultReturnValue_True, player.getID(), vehicle.getID(), trailer.getID());
131+
}
132+
return !!ret;
133+
}
134+
135+
bool onVehicleTrailerDetach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override
136+
{
137+
cell ret = PawnManager::Get()->CallInSides("OnVehicleTrailerDetach", DefaultReturnValue_False, player.getID(), vehicle.getID(), trailer.getID());
138+
if (!ret)
139+
{
140+
ret = PawnManager::Get()->CallInEntry("OnVehicleTrailerDetach", DefaultReturnValue_True, player.getID(), vehicle.getID(), trailer.getID());
141+
}
142+
return !!ret;
143+
}
124144
};

Server/Components/TestComponent/dllmain.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,16 @@ struct TestComponent : public IComponent, public PlayerDamageEventHandler, publi
149149
player.sendClientMessage(Colour::White(), "onVehicleSirenStateChange(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string((int)sirenState) + ")");
150150
return true;
151151
}
152+
bool onVehicleTrailerAttach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override
153+
{
154+
player.sendClientMessage(Colour::White(), "onVehicleTrailerAttach(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string(vehicle.getTrailer()->getID()) + ")");
155+
return true;
156+
}
157+
bool onVehicleTrailerDetach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override
158+
{
159+
player.sendClientMessage(Colour::White(), "onVehicleTrailerDetach(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string(vehicle.getTrailer()->getID()) + ")");
160+
return true;
161+
}
152162
} vehicleEventWatcher;
153163

154164
void onPlayerConnect(IPlayer& player) override

Server/Components/Vehicles/vehicle.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,11 @@ bool Vehicle::updateFromDriverSync(const VehicleDriverSyncPacket& vehicleSync, I
241241
else
242242
{
243243
trailer->cab = this;
244+
245+
static_cast<DefaultEventDispatcher<VehicleEventHandler>&>(pool->getEventDispatcher()).stopAtFalse([&player, this](VehicleEventHandler* handler)
246+
{
247+
return handler->onVehicleTrailerAttach(player, *this, *trailer);
248+
});
244249
}
245250
}
246251
}
@@ -253,6 +258,11 @@ bool Vehicle::updateFromDriverSync(const VehicleDriverSyncPacket& vehicleSync, I
253258
// Client is reporting no trailer (probably lost it) but server thinks there's still one. Detaching it server side.
254259
if (trailer && Time::now() - trailer->trailerUpdateTime > Seconds(0))
255260
{
261+
static_cast<DefaultEventDispatcher<VehicleEventHandler>&>(pool->getEventDispatcher()).stopAtFalse([&player, this](VehicleEventHandler* handler)
262+
{
263+
return handler->onVehicleTrailerDetach(player, *this, *trailer);
264+
});
265+
256266
trailer->cab = nullptr;
257267
trailer = nullptr;
258268
}

0 commit comments

Comments
 (0)