# locate proc

Source: https://ref.dm-lang.org/proc/locate

### Format
- `locate(Type) in Container`
- `locate(X,Y,Z)`
- `locate(Tag)`
- `locate(TextRef)`


### Returns
> An object of the specified type or the turf at the given coordinates. If a text string is given in place of an object type, the object with the same tag is found. If a container is given, only objects directly within that object are searched.

### Args
- `Type`: An object prototype or tag. If locate() is being used in an assignment to a variable with a declared type, this argument is optional and will default to the type of the variable being assigned.
- `Container`: An optional container object. (The default is `world`.)
- `X,Y,Z`: A set of numerical coordinates.
- `Tag`: The value of an object's tag variable (must be unique).
- `TextRef`: An embedded object reference created by the \\ref text macro.


Types are matched in the same manner as istype(). In other words, locate(/obj) could return an instance of something derived from /obj, such as /obj/armor.

If there is more than one instance of the specified type, the first one found will be chosen.

```dm /locate/
var/mob/shopkeeper/M = locate()
if(M)
  usr << "Found the shopkeeper."
else
  usr << "Could not find the shopkeeper."
```

This looks for a mob of a type /mob/shopkeeper in the world (world.contents).

```dm /locate/
usr.Move(locate(/turf/Home))
```

This "teleports" the usr to a turf of the type /turf/Home.

```dm /locate/
usr.Move(locate(1,2,3))
```

This moves the usr to the turf at coordinates (x,y,z) = (1,2,3).

### See also
- [istype proc](https://ref.dm-lang.org/proc/istype.md)
- [tag var (datum)](https://ref.dm-lang.org/datum/var/tag.md)
- [__IMPLIED_TYPE__ macro](https://ref.dm-lang.org/DM/preprocessor/__IMPLIED_TYPE__.md)
