From 9d67838f8fa51d60e515bcd3e1dc90814c19ba18 Mon Sep 17 00:00:00 2001 From: SaltySnail Date: Thu, 13 Jun 2024 19:15:33 +0200 Subject: [PATCH 1/4] fix #225 --- src/TNetwork.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/TNetwork.cpp b/src/TNetwork.cpp index e08d78d..c2e1893 100644 --- a/src/TNetwork.cpp +++ b/src/TNetwork.cpp @@ -656,8 +656,7 @@ void TNetwork::OnDisconnect(const std::weak_ptr& ClientPtr) { VehicleData = *LockedData.VehicleData; } // End Vehicle Data Lock Scope for (auto& v : VehicleData) { - Packet = "Od:" + std::to_string(c.GetID()) + "-" + std::to_string(v.ID()); - SendToAll(&c, StringToVector(Packet), false, true); + LuaAPI::MP::Engine->ReportErrors(LuaAPI::MP::Engine->TriggerEvent("onVehicleDeleted", "", c.GetID(), v.ID())); } Packet = ("L") + c.GetName() + (" left the server!"); SendToAll(&c, StringToVector(Packet), false, true); From bfb2086e0586bcd2413f9afb42464bc62996f792 Mon Sep 17 00:00:00 2001 From: SaltySnail Date: Thu, 13 Jun 2024 23:00:52 +0200 Subject: [PATCH 2/4] fix all other places where onVehicleDeleted isn't triggered after a delete packet is sent --- src/LuaAPI.cpp | 1 + src/TServer.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/LuaAPI.cpp b/src/LuaAPI.cpp index 015f4bf..bc8c94f 100644 --- a/src/LuaAPI.cpp +++ b/src/LuaAPI.cpp @@ -217,6 +217,7 @@ std::pair LuaAPI::MP::RemoveVehicle(int PID, int VID) { auto c = MaybeClient.value().lock(); if (!c->GetCarData(VID).empty()) { std::string Destroy = "Od:" + std::to_string(PID) + "-" + std::to_string(VID); + LuaAPI::MP::Engine->ReportErrors(LuaAPI::MP::Engine->TriggerEvent("onVehicleDeleted", "", PID, VID)); Engine->Network().SendToAll(nullptr, StringToVector(Destroy), true, true); c->DeleteCar(VID); Result.first = true; diff --git a/src/TServer.cpp b/src/TServer.cpp index 22e7c53..2e37eb1 100644 --- a/src/TServer.cpp +++ b/src/TServer.cpp @@ -322,6 +322,7 @@ void TServer::ParseVehicle(TClient& c, const std::string& Pckt, TNetwork& Networ // TODO: handle } std::string Destroy = "Od:" + std::to_string(c.GetID()) + "-" + std::to_string(CarID); + //LuaAPI::MP::Engine->ReportErrors(LuaAPI::MP::Engine->TriggerEvent("onVehicleDeleted", "", c.GetID(), CarID)); //uncomment if this packet is sent to everyone instead of to the client that spawned too many vehicles if (!Network.Respond(c, StringToVector(Destroy), true)) { // TODO: handle } @@ -355,6 +356,7 @@ void TServer::ParseVehicle(TClient& c, const std::string& Pckt, TNetwork& Networ } std::string Destroy = "Od:" + std::to_string(c.GetID()) + "-" + std::to_string(VID); Network.SendToAll(nullptr, StringToVector(Destroy), true, true); + LuaAPI::MP::Engine->ReportErrors(LuaAPI::MP::Engine->TriggerEvent("onVehicleDeleted", "", c.GetID(), VID)); c.DeleteCar(VID); } } From 0cc73e70c90e53330e33c7e8fceb326f10492226 Mon Sep 17 00:00:00 2001 From: SaltySnail Date: Mon, 17 Jun 2024 00:13:09 +0200 Subject: [PATCH 3/4] fix onVehicleDeleted not being triggered when onVehicleSpawn is triggered --- src/TServer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TServer.cpp b/src/TServer.cpp index 2e37eb1..cd0eb7e 100644 --- a/src/TServer.cpp +++ b/src/TServer.cpp @@ -322,7 +322,7 @@ void TServer::ParseVehicle(TClient& c, const std::string& Pckt, TNetwork& Networ // TODO: handle } std::string Destroy = "Od:" + std::to_string(c.GetID()) + "-" + std::to_string(CarID); - //LuaAPI::MP::Engine->ReportErrors(LuaAPI::MP::Engine->TriggerEvent("onVehicleDeleted", "", c.GetID(), CarID)); //uncomment if this packet is sent to everyone instead of to the client that spawned too many vehicles + LuaAPI::MP::Engine->ReportErrors(LuaAPI::MP::Engine->TriggerEvent("onVehicleDeleted", "", c.GetID(), CarID)); if (!Network.Respond(c, StringToVector(Destroy), true)) { // TODO: handle } From 3068a0e5c49fc37fcf4ae1cfd5705b731435fe2f Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Wed, 18 Sep 2024 16:46:11 +0200 Subject: [PATCH 4/4] add back car deletion --- src/TNetwork.cpp | 2 ++ src/TServer.cpp | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/TNetwork.cpp b/src/TNetwork.cpp index c2e1893..e9cc718 100644 --- a/src/TNetwork.cpp +++ b/src/TNetwork.cpp @@ -657,6 +657,8 @@ void TNetwork::OnDisconnect(const std::weak_ptr& ClientPtr) { } // End Vehicle Data Lock Scope for (auto& v : VehicleData) { LuaAPI::MP::Engine->ReportErrors(LuaAPI::MP::Engine->TriggerEvent("onVehicleDeleted", "", c.GetID(), v.ID())); + Packet = "Od:" + std::to_string(c.GetID()) + "-" + std::to_string(v.ID()); + SendToAll(&c, StringToVector(Packet), false, true); } Packet = ("L") + c.GetName() + (" left the server!"); SendToAll(&c, StringToVector(Packet), false, true); diff --git a/src/TServer.cpp b/src/TServer.cpp index cd0eb7e..ec714ce 100644 --- a/src/TServer.cpp +++ b/src/TServer.cpp @@ -137,7 +137,6 @@ void TServer::RemoveClient(const std::weak_ptr& WeakClientPtr) { beammp_assert(LockedClientPtr != nullptr); TClient& Client = *LockedClientPtr; beammp_debug("removing client " + Client.GetName() + " (" + std::to_string(ClientCount()) + ")"); - // TODO: Send delete packets for all cars Client.ClearCars(); WriteLock Lock(mClientsMutex); mClients.erase(WeakClientPtr.lock());