Skip to main content

LootAPI

LootAPI finds and works with LootingLevelObject instances in the Unity scene. These are the physical loot objects placed in the world — different from server-side loot tracked by ActorAPI.

Getting loot

GetAllLoot()

public static LootingLevelObject[] GetAllLoot()

All active (visible) loot objects in the scene.

var loot = LootAPI.GetAllLoot();
MelonLogger.Msg($"{loot.Length} loot objects active");

GetInactiveLoot()

public static LootingLevelObject[] GetInactiveLoot()

Loot that exists in the scene but is currently hidden/disabled.

GetLootByName()

public static LootingLevelObject[] GetLootByName(string name)

Partial name match against the GameObject name.

var medkits = LootAPI.GetLootByName("medkit");

Finding nearby loot

GetLootNearby()

public static LootingLevelObject[] GetLootNearby(float maxDistance, Vector3? searchCenter = null)

searchCenter defaults to the local player position.

var nearby = LootAPI.GetLootNearby(15f);
MelonLogger.Msg($"{nearby.Length} loot items within 15m");

GetNearestLoot()

public static LootingLevelObject? GetNearestLoot(Vector3? searchCenter = null)
var nearest = LootAPI.GetNearestLoot();
if (nearest != null)
{
float dist = LootAPI.GetDistanceToLoot(nearest);
MelonLogger.Msg($"Nearest loot: {nearest.gameObject.name} at {dist:F1}m");
}

GetNearestLootInRange()

public static LootingLevelObject? GetNearestLootInRange(float maxDistance, Vector3? searchCenter = null)

Like GetNearestLoot() but only considers loot within maxDistance.

FilterLootByDistance()

public static LootingLevelObject[] FilterLootByDistance(float minDistance, float maxDistance, Vector3? searchCenter = null)

Find loot in a distance band — useful for ignoring loot that's too close or too far.

var midRange = LootAPI.FilterLootByDistance(5f, 30f);

Checking for loot

HasLoot()

public static bool HasLoot()

HasLootNearby()

public static bool HasLootNearby(float maxDistance, Vector3? searchCenter = null)
if (LootAPI.HasLootNearby(10f))
MelonLogger.Msg("Loot nearby!");

Position and distance

GetLootPosition()

public static Vector3 GetLootPosition(LootingLevelObject loot)

GetDistanceToLoot()

public static float GetDistanceToLoot(LootingLevelObject loot, Vector3? center = null)

center defaults to the local player position.

Full example — loot HUD

public override void OnGUI()
{
if (!LootAPI.HasLoot()) return;

var allLoot = LootAPI.GetAllLoot()
.OrderBy(l => LootAPI.GetDistanceToLoot(l))
.Take(5)
.ToArray();

GUILayout.BeginArea(new Rect(10, 100, 280, 200));
GUILayout.Label("Nearby loot:");

foreach (var loot in allLoot)
{
float dist = LootAPI.GetDistanceToLoot(loot);
GUILayout.Label($" {loot.gameObject.name} {dist:F0}m");
}

GUILayout.EndArea();
}

See also

  • ActorAPI — server-side loot objects (VLootingObject) inside rooms
  • PlayerAPI — player position used as default search center