From 840067c267f55e222a39d02ddea88aeab08dc7e7 Mon Sep 17 00:00:00 2001 From: Vladimir <68227685+NoPressF@users.noreply.github.com> Date: Sun, 27 Oct 2024 17:18:19 +0100 Subject: [PATCH 1/2] Implement vehicle's callbacks (OnVehicleTrailerAttach & OnVehicleTrailerDetach) --- SDK | 2 +- .../Pawn/Scripting/Vehicle/Events.hpp | 20 +++++++++++++++++++ Server/Components/TestComponent/dllmain.cpp | 10 ++++++++++ Server/Components/Vehicles/vehicle.cpp | 10 ++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/SDK b/SDK index 3dc9cf854..8cc0b2277 160000 --- a/SDK +++ b/SDK @@ -1 +1 @@ -Subproject commit 3dc9cf854c2a002a683baf50d5845f396c634e2c +Subproject commit 8cc0b22770e3576a1685b4147751af5335ee0d2a diff --git a/Server/Components/Pawn/Scripting/Vehicle/Events.hpp b/Server/Components/Pawn/Scripting/Vehicle/Events.hpp index 0f898e70e..41770b048 100644 --- a/Server/Components/Pawn/Scripting/Vehicle/Events.hpp +++ b/Server/Components/Pawn/Scripting/Vehicle/Events.hpp @@ -121,4 +121,24 @@ struct VehicleEvents : public VehicleEventHandler, public SingletonCallInSides("OnVehicleTrailerAttach", DefaultReturnValue_False, player.getID(), vehicle.getID(), trailer.getID()); + if (!ret) + { + ret = PawnManager::Get()->CallInEntry("OnVehicleTrailerAttach", DefaultReturnValue_True, player.getID(), vehicle.getID(), trailer.getID()); + } + return !!ret; + } + + bool onVehicleTrailerDetach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override + { + cell ret = PawnManager::Get()->CallInSides("OnVehicleTrailerDetach", DefaultReturnValue_False, player.getID(), vehicle.getID(), trailer.getID()); + if (!ret) + { + ret = PawnManager::Get()->CallInEntry("OnVehicleTrailerDetach", DefaultReturnValue_True, player.getID(), vehicle.getID(), trailer.getID()); + } + return !!ret; + } }; diff --git a/Server/Components/TestComponent/dllmain.cpp b/Server/Components/TestComponent/dllmain.cpp index 70c4d129c..d2e7534bc 100644 --- a/Server/Components/TestComponent/dllmain.cpp +++ b/Server/Components/TestComponent/dllmain.cpp @@ -149,6 +149,16 @@ struct TestComponent : public IComponent, public PlayerDamageEventHandler, publi player.sendClientMessage(Colour::White(), "onVehicleSirenStateChange(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string((int)sirenState) + ")"); return true; } + bool onVehicleTrailerAttach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override + { + player.sendClientMessage(Colour::White(), "onVehicleTrailerAttach(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string(vehicle.getTrailer()->getID()) + ")"); + return true; + } + bool onVehicleTrailerDetach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override + { + player.sendClientMessage(Colour::White(), "onVehicleTrailerDetach(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string(vehicle.getTrailer()->getID()) + ")"); + return true; + } } vehicleEventWatcher; void onPlayerConnect(IPlayer& player) override diff --git a/Server/Components/Vehicles/vehicle.cpp b/Server/Components/Vehicles/vehicle.cpp index c269ebea4..510f9aa2d 100644 --- a/Server/Components/Vehicles/vehicle.cpp +++ b/Server/Components/Vehicles/vehicle.cpp @@ -241,6 +241,11 @@ bool Vehicle::updateFromDriverSync(const VehicleDriverSyncPacket& vehicleSync, I else { trailer->cab = this; + + static_cast&>(pool->getEventDispatcher()).stopAtFalse([&player, this](VehicleEventHandler* handler) + { + return handler->onVehicleTrailerAttach(player, *this, *trailer); + }); } } } @@ -253,6 +258,11 @@ bool Vehicle::updateFromDriverSync(const VehicleDriverSyncPacket& vehicleSync, I // Client is reporting no trailer (probably lost it) but server thinks there's still one. Detaching it server side. if (trailer && Time::now() - trailer->trailerUpdateTime > Seconds(0)) { + static_cast&>(pool->getEventDispatcher()).stopAtFalse([&player, this](VehicleEventHandler* handler) + { + return handler->onVehicleTrailerDetach(player, *this, *trailer); + }); + trailer->cab = nullptr; trailer = nullptr; } From 382d92fc77acd1adfb9d6bcdd63ea4c321c0c46f Mon Sep 17 00:00:00 2001 From: Vladimir <68227685+NoPressF@users.noreply.github.com> Date: Sat, 24 May 2025 20:00:34 +0200 Subject: [PATCH 2/2] Renamed callbacks --- SDK | 2 +- .../Pawn/Scripting/Vehicle/Events.hpp | 12 ++-- Server/Components/TestComponent/dllmain.cpp | 64 ++----------------- Server/Components/Vehicles/vehicle.cpp | 4 +- lib/RakNet | 2 +- 5 files changed, 16 insertions(+), 68 deletions(-) diff --git a/SDK b/SDK index 8cc0b2277..bea039215 160000 --- a/SDK +++ b/SDK @@ -1 +1 @@ -Subproject commit 8cc0b22770e3576a1685b4147751af5335ee0d2a +Subproject commit bea039215233df2eda0e0ae361437e861b18862a diff --git a/Server/Components/Pawn/Scripting/Vehicle/Events.hpp b/Server/Components/Pawn/Scripting/Vehicle/Events.hpp index 41770b048..e1bbff8f7 100644 --- a/Server/Components/Pawn/Scripting/Vehicle/Events.hpp +++ b/Server/Components/Pawn/Scripting/Vehicle/Events.hpp @@ -122,22 +122,22 @@ struct VehicleEvents : public VehicleEventHandler, public SingletonCallInSides("OnVehicleTrailerAttach", DefaultReturnValue_False, player.getID(), vehicle.getID(), trailer.getID()); + cell ret = PawnManager::Get()->CallInSides("OnTrailerAttach", DefaultReturnValue_False, player.getID(), vehicle.getID(), trailer.getID()); if (!ret) { - ret = PawnManager::Get()->CallInEntry("OnVehicleTrailerAttach", DefaultReturnValue_True, player.getID(), vehicle.getID(), trailer.getID()); + ret = PawnManager::Get()->CallInEntry("OnTrailerAttach", DefaultReturnValue_True, player.getID(), vehicle.getID(), trailer.getID()); } return !!ret; } - bool onVehicleTrailerDetach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override + bool onTrailerDetach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override { - cell ret = PawnManager::Get()->CallInSides("OnVehicleTrailerDetach", DefaultReturnValue_False, player.getID(), vehicle.getID(), trailer.getID()); + cell ret = PawnManager::Get()->CallInSides("OnTrailerDetach", DefaultReturnValue_False, player.getID(), vehicle.getID(), trailer.getID()); if (!ret) { - ret = PawnManager::Get()->CallInEntry("OnVehicleTrailerDetach", DefaultReturnValue_True, player.getID(), vehicle.getID(), trailer.getID()); + ret = PawnManager::Get()->CallInEntry("OnTrailerDetach", DefaultReturnValue_True, player.getID(), vehicle.getID(), trailer.getID()); } return !!ret; } diff --git a/Server/Components/TestComponent/dllmain.cpp b/Server/Components/TestComponent/dllmain.cpp index d2e7534bc..2d3162a94 100644 --- a/Server/Components/TestComponent/dllmain.cpp +++ b/Server/Components/TestComponent/dllmain.cpp @@ -149,14 +149,14 @@ struct TestComponent : public IComponent, public PlayerDamageEventHandler, publi player.sendClientMessage(Colour::White(), "onVehicleSirenStateChange(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string((int)sirenState) + ")"); return true; } - bool onVehicleTrailerAttach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override + bool onTrailerAttach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override { - player.sendClientMessage(Colour::White(), "onVehicleTrailerAttach(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string(vehicle.getTrailer()->getID()) + ")"); + player.sendClientMessage(Colour::White(), "onTrailerAttach(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string(vehicle.getTrailer()->getID()) + ")"); return true; } - bool onVehicleTrailerDetach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override + bool onTrailerDetach(IPlayer& player, IVehicle& vehicle, IVehicle& trailer) override { - player.sendClientMessage(Colour::White(), "onVehicleTrailerDetach(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string(vehicle.getTrailer()->getID()) + ")"); + player.sendClientMessage(Colour::White(), "onTrailerDetach(" + std::to_string(player.getID()) + ", " + std::to_string(vehicle.getID()) + ", " + std::to_string(vehicle.getTrailer()->getID()) + ")"); return true; } } vehicleEventWatcher; @@ -955,58 +955,6 @@ struct TestComponent : public IComponent, public PlayerDamageEventHandler, publi bool onPlayerUpdate(IPlayer& player, TimePoint now) override { - IPlayerTextDrawData* tdData = queryExtension(player); - if (tdData) - { - String text; - - auto td = tdData->get(1); - String lookAt = "Looking at"; - IPlayer* lookatPlayer = player.getCameraTargetPlayer(); - if (lookatPlayer) - { - lookAt += "~n~Player " + String(lookatPlayer->getName()); - } - IVehicle* lookAtVehicle = player.getCameraTargetVehicle(); - if (lookAtVehicle) - { - lookAt += "~n~Vehicle " + std::to_string(lookAtVehicle->getID()); - } - IObject* lookAtObject = player.getCameraTargetObject(); - if (lookAtObject) - { - lookAt += "~n~Object " + std::to_string(lookAtObject->getID()); - } - IActor* lookAtActor = player.getCameraTargetActor(); - if (lookAtActor) - { - lookAt += "~n~Actor " + std::to_string(lookAtActor->getID()); - } - - String aimAt = "Aiming at"; - IPlayer* targetPlayer = player.getTargetPlayer(); - if (targetPlayer) - { - aimAt += "~n~Player " + String(targetPlayer->getName()); - } - IActor* targetActor = player.getTargetActor(); - if (targetActor) - { - aimAt += "~n~Actor " + std::to_string(targetActor->getID()); - } - - if (lookatPlayer || lookAtVehicle || lookAtObject || lookAtActor) - { - text += lookAt + "~n~"; - } - - if (targetPlayer || targetActor) - { - text += aimAt + "~n~"; - } - - td->setText(text); - } return true; } @@ -1108,8 +1056,8 @@ struct TestComponent : public IComponent, public PlayerDamageEventHandler, publi { vehicle = vehicles->create(false, 411, Vector3(0.0f, 5.0f, 3.5f)); // Create infernus vehicles->create(false, 488, Vector3(-12.0209f, 1.4806f, 3.1172f)); // Create news maverick - tower = vehicles->create(false, 583, Vector3(15.0209f, 1.4806f, 3.1172f)); - trailer = vehicles->create(false, 606, Vector3(12.0209f, 5.4806f, 3.1172f)); + tower = vehicles->create(false, 403, Vector3(15.0209f, 1.4806f, 3.1172f)); + trailer = vehicles->create(false, 435, Vector3(0.0209f, 5.4806f, 3.1172f)); tower->attachTrailer(*trailer); train = vehicles->create(false, 537, Vector3(-1943.2583f, 163.6151f, 25.8754f)); vehicles->getEventDispatcher().addEventHandler(&vehicleEventWatcher); diff --git a/Server/Components/Vehicles/vehicle.cpp b/Server/Components/Vehicles/vehicle.cpp index 510f9aa2d..c3837a827 100644 --- a/Server/Components/Vehicles/vehicle.cpp +++ b/Server/Components/Vehicles/vehicle.cpp @@ -244,7 +244,7 @@ bool Vehicle::updateFromDriverSync(const VehicleDriverSyncPacket& vehicleSync, I static_cast&>(pool->getEventDispatcher()).stopAtFalse([&player, this](VehicleEventHandler* handler) { - return handler->onVehicleTrailerAttach(player, *this, *trailer); + return handler->onTrailerAttach(player, *this, *trailer); }); } } @@ -260,7 +260,7 @@ bool Vehicle::updateFromDriverSync(const VehicleDriverSyncPacket& vehicleSync, I { static_cast&>(pool->getEventDispatcher()).stopAtFalse([&player, this](VehicleEventHandler* handler) { - return handler->onVehicleTrailerDetach(player, *this, *trailer); + return handler->onTrailerDetach(player, *this, *trailer); }); trailer->cab = nullptr; diff --git a/lib/RakNet b/lib/RakNet index 7bfb64ad9..03d7129e2 160000 --- a/lib/RakNet +++ b/lib/RakNet @@ -1 +1 @@ -Subproject commit 7bfb64ad99584ba2efcff68a2e096f6edc276291 +Subproject commit 03d7129e2c5e3b7efa851cf889dacf0a0d167aa1