C#:
namespace Oxide.Plugins
{
[Info("FDroneDeliverySpeed", "fufeldev", "1.0.0")]
public class FDroneDeliverySpeed : RustPlugin
{
private const int MaxAttempts = 10;
private const float RetryDelay = 0.05f;
private void OnServerInitialized()
{
foreach (BaseNetworkable entity in BaseNetworkable.serverEntities)
{
DeliveryDrone drone = entity as DeliveryDrone;
if (drone == null || drone.IsDestroyed) continue;
CompleteDrone(drone, 0);
}
}
private void OnEntitySpawned(DeliveryDrone drone)
{
if (drone == null || drone.IsDestroyed) return;
NextTick(() => CompleteDrone(drone, 0));
}
private void CompleteDrone(DeliveryDrone drone, int attempt)
{
if (drone == null || drone.IsDestroyed) return;
Marketplace marketplace;
MarketTerminal terminal;
VendingMachine vending;
if (!drone.sourceMarketplace.TryGet(true, out marketplace) || !drone.sourceTerminal.TryGet(true, out terminal) || !drone.targetVendingMachine.TryGet(true, out vending))
{
drone.Kill();
return;
}
if (!terminal.HasPendingOrderFor(vending.net.ID))
{
if (attempt >= MaxAttempts)
{
drone.Kill();
return;
}
timer.Once(RetryDelay, () => CompleteDrone(drone, attempt + 1));
return;
}
marketplace.ReturnDrone(drone);
}
}
}