Format

Entered(atom/movable/Obj,atom/OldLoc)

When

Called when an object has entered the contents list through Move(). Directly setting the object’s loc or step_x/y vars does not result in a call to Entered() or any other movement side-effects. The same goes for creation or deletion of an object at a location.

Args

  • Obj: the object that entered (a mob or obj).
  • OldLoc: the previous location of the object.

Default action

None for most atoms, but turfs will call Crossed().

turf/pit
   Entered(O)
      O << "OUCH.  You fell in a pit!"

The mob’s Entered() and Exited() procs can be used to control what happens when objects are added or removed from the mob’s inventory. Of course that could all be done within get() and drop() verbs, but the following code separates user interface from lower-level functions.

obj
   var
      weight = 10
   verb
      get()
         set src in oview(1)
         if(Move(usr))
            usr << "You pick up \a [src]."
         else
            usr << "You cannot pick up [src]."
      drop()
         set src in usr
         if(Move(usr.loc))
            usr << "You drop \a [src]."
mob
   var
      weight
      max_weight = 50
 
   Entered(obj/O)
      weight += O.weight
   Exited(obj/O)
      weight -= O.weight
   Enter(obj/O)
      //only allow entrance if weight is within the limit
      if(O.weight + weight <= max_weight)
         return ..()

To see the advantages of this arrangement, imagine that there are certain situations in which an object may be created directly within the mob’s inventory without the mob picking it up. You can still run it through your normal movement rules without calling get().

mob/verb/wish()
   var/obj/O = new() //create it with loc=null
   if(O.Move(usr))   //and then move it into inventory
      usr << "Your wish has been granted!"
   else
      usr << "You are too greedy!"
      del O

See also