diff --git a/code/components/citizen-server-impl/include/packethandlers/NetGameEventPacketHandler.h b/code/components/citizen-server-impl/include/packethandlers/NetGameEventPacketHandler.h index 204bae6487..558d98cba2 100644 --- a/code/components/citizen-server-impl/include/packethandlers/NetGameEventPacketHandler.h +++ b/code/components/citizen-server-impl/include/packethandlers/NetGameEventPacketHandler.h @@ -16,8 +16,10 @@ class NetGameEventPacketHandlerV2 } static void COMPONENT_EXPORT(CITIZEN_SERVER_IMPL) RouteEvent(const fwRefContainer& sgs, uint32_t bucket, const std::vector& targetPlayers, const fwRefContainer& clientRegistry, const net::Buffer& data); - + void COMPONENT_EXPORT(CITIZEN_SERVER_IMPL) Handle(fx::ServerInstanceBase* instance, const fx::ClientSharedPtr& client, net::Buffer& packet); + + static void COMPONENT_EXPORT(CITIZEN_SERVER_IMPL) HandleNetEvent(fx::ServerInstanceBase* instance, const fx::ClientSharedPtr& client, const net::Buffer& packet); static constexpr const char* GetPacketId() { diff --git a/code/components/citizen-server-impl/src/packethandlers/NetGameEventPacketHandler.cpp b/code/components/citizen-server-impl/src/packethandlers/NetGameEventPacketHandler.cpp index 8c76bbc5a3..04ca90fb37 100644 --- a/code/components/citizen-server-impl/src/packethandlers/NetGameEventPacketHandler.cpp +++ b/code/components/citizen-server-impl/src/packethandlers/NetGameEventPacketHandler.cpp @@ -31,7 +31,15 @@ void NetGameEventPacketHandlerV2::RouteEvent(const fwRefContainer(); static size_t kServerMaxReplySize = net::SerializableComponent::GetMaxSize(); diff --git a/code/components/citizen-server-impl/src/state/ServerGameState.cpp b/code/components/citizen-server-impl/src/state/ServerGameState.cpp index 38cc268272..65f77febe7 100644 --- a/code/components/citizen-server-impl/src/state/ServerGameState.cpp +++ b/code/components/citizen-server-impl/src/state/ServerGameState.cpp @@ -6754,7 +6754,7 @@ inline auto GetHandler(fx::ServerInstanceBase* instance, const fx::ClientSharedP return [instance, client, ev = std::move(ev)]() { auto evComponent = instance->GetComponent()->GetComponent(); - return evComponent->TriggerEvent2(ev->GetName(), { }, fmt::sprintf("%d", client->GetNetId()), *ev); + return evComponent->TriggerEvent2(ev->GetName(), { }, std::to_string(client->GetNetId()), *ev); }; } @@ -6776,7 +6776,7 @@ inline auto GetHandlerWithEvent(fx::ServerInstanceBase* instance, const fx::Clie return [instance, client, ev = std::move(ev)]() { auto evComponent = instance->GetComponent()->GetComponent(); - return evComponent->TriggerEvent2(ev->GetName(), { }, fmt::sprintf("%d", client->GetNetId()), *ev); + return evComponent->TriggerEvent2(ev->GetName(), { }, std::to_string(client->GetNetId()), *ev); }; } diff --git a/code/components/gta-net-five/include/NetGameEventV2PacketHandler.h b/code/components/gta-net-five/include/NetGameEventV2PacketHandler.h index 4da37b0122..ce8afb6f30 100644 --- a/code/components/gta-net-five/include/NetGameEventV2PacketHandler.h +++ b/code/components/gta-net-five/include/NetGameEventV2PacketHandler.h @@ -20,7 +20,7 @@ class NetGameEventV2PacketHandler : public net::PacketHandler eventData; + uint8_t retries; - ReEventQueueItem(net::packet::ServerNetGameEventV2& serverNetGameEvent): + ReEventQueueItem(net::packet::ServerNetGameEventV2& serverNetGameEvent, uint8_t retries): eventNameHash(serverNetGameEvent.eventNameHash), clientNetId(serverNetGameEvent.clientNetId), eventId(serverNetGameEvent.eventId), isReply(serverNetGameEvent.isReply), - eventData(serverNetGameEvent.data.GetValue().begin(), serverNetGameEvent.data.GetValue().end()) + eventData(serverNetGameEvent.data.GetValue().begin(), serverNetGameEvent.data.GetValue().end()), + retries(retries) { } @@ -543,13 +545,18 @@ void rage::HandleNetGameEvent(const char* idata, size_t len) } } -void rage::HandleNetGameEventV2(net::packet::ServerNetGameEventV2& serverNetGameEventV2) +void rage::HandleNetGameEventV2(net::packet::ServerNetGameEventV2& serverNetGameEventV2, uint8_t retries) { if (!icgi->HasVariable("networkInited")) { return; } + if (retries > 100) + { + return; + } + // TODO: use a real player for some things that _are_ 32-safe rage::EnsurePlayer31(); @@ -641,7 +648,7 @@ void rage::HandleNetGameEventV2(net::packet::ServerNetGameEventV2& serverNetGame if (rejected) { - g_reEventQueueV2.emplace_back(serverNetGameEventV2); + g_reEventQueueV2.emplace_back(serverNetGameEventV2, retries + 1); } } } @@ -1167,7 +1174,7 @@ namespace rage serverNetGameEvent.isReply = g_reEventQueueV2.front().isReply; serverNetGameEvent.data = {g_reEventQueueV2.front().eventData.data(), g_reEventQueueV2.front().eventData.size()}; - HandleNetGameEventV2(serverNetGameEvent); + HandleNetGameEventV2(serverNetGameEvent, g_reEventQueueV2.front().retries); g_reEventQueueV2.pop_front(); } @@ -1235,6 +1242,7 @@ static InitFunction initFunction([]() g_events.clear(); g_eventsV2.clear(); g_reEventQueue.clear(); + g_reEventQueueV2.clear(); }); });