# evennia.contrib.full_systems.evscaperoom.objects

Base objects for the Evscaperoom contrib.

The object class itself provide the actions possible to use on that object. This makes these objects suitable for use with multi-inheritance. For example, to make an object both possible to smell and eat or drink, find the appropriate parents in this module and make an object like this:

class Apple(Edible, Smellable):

> def at_drink(self, caller):

>   # …

> def at_smell(self, caller):

>   # …

Various object parents could be more complex, so read the class for more info.

Available parents:

- EvscapeRoomObject - parent class for all Evscaperoom entities (also the room itself)

- Feelable

- Listenable

- Smellable

- Rotatable

- Openable

- Readable

- IndexReadable (like a lexicon you have to give a search term in)

- Movable

- Edible

- Drinkable

- Usable

- Insertable (can be inserted into a target)

- Combinable (combines with another object to create a new one)

- Mixable (used for mixing potions into it)

- HasButtons (an object with buttons on it)

- CodeInput (code locks)

- Sittable (can be sat on)

- Liable (can be lied down on)

- Kneeable (can be kneed down on)

- Climbable (can be climbed on)

- Positionable (supports sit/lie/knee/climb at once)

class `evennia.contrib.full_systems.evscaperoom.objects.``EvscaperoomObject`(*args, **kwargs)

  Bases: `evennia.objects.objects.DefaultObject`

  Default object base for all objects related to the contrib.

  `action_prepositions` = ('in', 'with', 'on', 'into', 'to')
  `position_prep_map` = {'climb': 'standing', 'kneel': 'kneeling', 'lie': 'lying', 'sit': 'sitting'}
  `at_object_creation`()

    Called once when object is first created.

  property `tagcategory`
  property `room`
  property `roomstate`
  `next_state`(statename=None)

    Helper to have the object switch the room to next state

    Parameters

      statename (str, optional) – If given, move to this state next. Otherwise use the default next-state of the current state.

  `set_flag`(flagname)

    Set flag on object

  `unset_flag`(flagname)

    Unset flag on object

  `check_flag`(flagname)

    Check if flag is set on this object

  `set_character_flag`(char, flagname, value=True)

    Set flag on character

  `unset_character_flag`(char, flagname)

    Set flag on character

  `check_character_flag`(char, flagname)

    Check if flag is set on character

  `msg_room`(caller, string, skip_caller=False)

    Message everyone in the room with a message that is parsed for ~first/third person grammar, as well as for *thing markers.

    Parameters

      - caller (Object or None) – Sender of the message. If None, there is no sender.

      - string (str) – Message to parse and send to the room.

      - skip_caller (bool) – Send to everyone except caller.

    Notes

    Messages sent by this method will be tagged with a type of ‘your_action’ and others_action. This is an experiment for allowing users of e.g. the webclient to redirect messages to differnt windows.

  `msg_char`(caller, string, client_type='your_action')

    Send message only to caller (not to the room at large)

  `msg_system`(message, target=None, borders=True)

    Send a ‘system message’ by using the State.msg function.

  `get_position`(caller)

    Get position of caller on this object (like lying, sitting, kneeling, standing). See the Positionable child class.

    Parameters

      caller (Object) – The one position we seek.

    Returns

      obj, pos (Object, str) –

      The object we have a position relative to,

        as well as the name of that position (lying, sitting, kneeling, standing). If these are None, it means we are standing on the floor.

  `set_position`(caller, new_position)

    Set position of caller (like lying, sitting, kneeling, standing) on this object. See Positionable child class.

    Parameters

      - caller (Object) – The one positioning themselves on this object.

      - new_position (str, None) – One of “lie”, “kneel”, “sit” or “stand”. If None, remove position (character stands normally on the floor).

  `at_focus`(caller)

    Called when somone is focusing on this object.

    Parameters

      caller (Character) – The one doing the focusing.

  `at_unfocus`(caller)

    Called when focus leaves this object. Note that more than one caller may be focusing on the object at the same time, so we should not change the state of the object itself here!

    Parameters

      caller (Character) – The one doing the unfocusing.

  `at_speech`(speaker, action)

    We don’t use the default at_say hook since we handle the send logic in the command. This is only meant to trigger eventual game-events when speaking to an object or the room.

    Parameters

      - speaker (Character) – The one speaking.

      - action (str) – One of ‘say’, ‘whisper’ or ‘shout’

  `parse`(args)

    Simple parser of focus arguments starting with a preposition, like ‘combine with <object>’ <- we want to strip out the preposition here.

  `get_cmd_signatures`()

    This allows the object to return more detailed call signs for each of their at_focus_* methods. This is useful for things like detailed arguments (only ‘move’ but ‘move left/right’)

    Returns

      callsigns (list, None) –

      List of strings to inject into the

        available action list produced by self.get_help. If None, automatically find actions based on the method names.

      custom_helpstr (str): This should be the help text for

        the command with a marker {callsigns} for where to inject the list of callsigns.

  `get_short_desc`(full_desc)

    Extract the first sentence from the desc and use as the short desc.

  `get_help`(caller)

    Get help about this object. By default we return a listing of all actions you can do on this object.

  `return_appearance`(looker, **kwargs)

    Could be modified per state. We generally don’t worry about the contents of the object by default.

  exception `DoesNotExist`

    Bases: `evennia.objects.objects.DefaultObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.objects.objects.DefaultObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject'
  `typename` = 'EvscaperoomObject'

class `evennia.contrib.full_systems.evscaperoom.objects.``Feelable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object that you can feel the surface of.

  `at_focus_feel`(caller, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Feelable'
  `typename` = 'Feelable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Listenable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object one can listen to.

  `at_focus_listen`(caller, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Listenable'
  `typename` = 'Listenable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Smellable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object you can smell.

  `at_focus_smell`(caller, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Smellable'
  `typename` = 'Smellable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Rotatable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object that you can lift up and look at from different angles

  `rotate_flag` = 'rotatable'
  `start_rotatable` = True
  `at_object_creation`()

    Called once when object is first created.

  `at_focus_rotate`(caller, **kwargs)
  `at_focus_turn`(caller, **kwargs)
  `at_rotate`(caller)
  `at_cannot_rotate`(caller)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Rotatable'
  `typename` = 'Rotatable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Openable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object that you can open/close. It’s lockable with a flag.

  `unlock_flag` = 'unlocked'
  `open_flag` = 'open'
  `start_open` = False
  `at_object_creation`()

    Called once when object is first created.

  `at_focus_open`(caller, **kwargs)
  `at_focus_close`(caller, **kwargs)
  `at_open`(caller)
  `at_already_open`(caller)
  `at_locked`(caller)
  `at_close`(caller)
  `at_already_closed`(caller)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Openable'
  `typename` = 'Openable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Readable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object that you can read from. This is controlled from a flag.

  `read_flag` = 'readable'
  `start_readable` = True
  `at_object_creation`()

    Called once when object is first created.

  `at_focus_read`(caller, **kwargs)
  `at_read`(caller, *args, **kwargs)
  `at_cannot_read`(caller, *args, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Readable'
  `typename` = 'Readable'

class `evennia.contrib.full_systems.evscaperoom.objects.``IndexReadable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.Readable`

  Any object for which you need to specify a key/index to get a given result back. For example a lexicon or book where you enter a topic or a page number to see what’s to be read on that page.

  `index` = {'page two': 'page2', 'page1': 'This is page1', 'page2': 'This is page2'}
  `at_focus_read`(caller, **kwargs)
  `get_cmd_signatures`()

    This allows the object to return more detailed call signs for each of their at_focus_* methods. This is useful for things like detailed arguments (only ‘move’ but ‘move left/right’)

    Returns

      callsigns (list, None) –

      List of strings to inject into the

        available action list produced by self.get_help. If None, automatically find actions based on the method names.

      custom_helpstr (str): This should be the help text for

        the command with a marker {callsigns} for where to inject the list of callsigns.

  `at_cannot_read`(caller, topic, *args, **kwargs)
  `at_read`(caller, topic, entry, *args, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.Readable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.Readable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.IndexReadable'
  `typename` = 'IndexReadable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Movable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object that can be moved from one place to another or in one direction or another.

  Once moved to a given position, the object’s state will change.

  `move_positions` = {'left': 'at_left', 'right': 'at_right'}
  `start_position` = 'left'
  `at_object_creation`()

    Called once when object is first created.

  `get_cmd_signatures`()

    This allows the object to return more detailed call signs for each of their at_focus_* methods. This is useful for things like detailed arguments (only ‘move’ but ‘move left/right’)

    Returns

      callsigns (list, None) –

      List of strings to inject into the

        available action list produced by self.get_help. If None, automatically find actions based on the method names.

      custom_helpstr (str): This should be the help text for

        the command with a marker {callsigns} for where to inject the list of callsigns.

  `at_focus_move`(caller, **kwargs)
  `at_focus_shove`(caller, **kwargs)
  `at_focus_push`(caller, **kwargs)
  `at_cannot_move`(caller)
  `at_already_moved`(caller, position)
  `at_left`(caller)
  `at_right`(caller)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Movable'
  `typename` = 'Movable'

class `evennia.contrib.full_systems.evscaperoom.objects.``BaseConsumable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object that is consumable in some way. This acts as an abstract parent.

  This sets a flag that is unique for each person consuming, allowing it to e.g. only be consumed once (don’t support multi-uses here, that’s left for a custom object if needed).

  `consume_flag` = 'consume'
  `one_consume_only` = True
  `handle_consume`(caller, action, **kwargs)

    Wrap this by the at_focus method

  `has_consumed`(caller, setflag=False)

    Check if caller already consumed at least once

  `at_consume`(caller, action)
  `at_already_consumed`(caller, action)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.BaseConsumable'
  `typename` = 'BaseConsumable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Edible`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseConsumable`

  Any object specifically possible to eat.

  `consume_flag` = 'eat'
  `at_focus_eat`(caller, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseConsumable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseConsumable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Edible'
  `typename` = 'Edible'

class `evennia.contrib.full_systems.evscaperoom.objects.``Drinkable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseConsumable`

  Any object specifically possible to drink.

  `consume_flag` = 'drink'
  `at_focus_drink`(caller, **kwargs)
  `at_focus_sip`(caller, **kwargs)
  `at_consume`(caller, action)
  `at_already_consumed`(caller, action)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseConsumable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseConsumable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Drinkable'
  `typename` = 'Drinkable'

class `evennia.contrib.full_systems.evscaperoom.objects.``BaseApplicable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object that can be applied/inserted/used on another object in some way. This acts an an abstract base class.

  `target_flag` = 'applicable'
  `handle_apply`(caller, action, **kwargs)

    Wrap this with the at_focus methods in the child classes

  `at_apply`(caller, action, obj)
  `at_cannot_apply`(caller, action, obj)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable'
  `typename` = 'BaseApplicable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Usable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable`

  Any object that can be used with another object.

  `target_flag` = 'usable'
  `at_focus_use`(caller, **kwargs)
  `at_apply`(caller, action, obj)
  `at_cannot_apply`(caller, action, obj)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Usable'
  `typename` = 'Usable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Insertable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable`

  Any object that can be inserted into another object.

  This would cover a key, for example.

  `target_flag` = 'insertable'
  `at_focus_insert`(caller, **kwargs)
  `at_apply`(caller, action, obj)
  `get_cmd_signatures`()

    This allows the object to return more detailed call signs for each of their at_focus_* methods. This is useful for things like detailed arguments (only ‘move’ but ‘move left/right’)

    Returns

      callsigns (list, None) –

      List of strings to inject into the

        available action list produced by self.get_help. If None, automatically find actions based on the method names.

      custom_helpstr (str): This should be the help text for

        the command with a marker {callsigns} for where to inject the list of callsigns.

  `at_cannot_apply`(caller, action, obj)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Insertable'
  `typename` = 'Insertable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Combinable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable`

  Any object that combines with another object to create a new one.

  `target_flag` = 'combinable'
  `new_create_dict` = {'aliases': ['combined'], 'key': 'sword', 'typeclass': 'evscaperoom.objects.Combinable'}
  `destroy_components` = True
  `at_focus_combine`(caller, **kwargs)
  `get_cmd_signatures`()

    This allows the object to return more detailed call signs for each of their at_focus_* methods. This is useful for things like detailed arguments (only ‘move’ but ‘move left/right’)

    Returns

      callsigns (list, None) –

      List of strings to inject into the

        available action list produced by self.get_help. If None, automatically find actions based on the method names.

      custom_helpstr (str): This should be the help text for

        the command with a marker {callsigns} for where to inject the list of callsigns.

  `at_cannot_apply`(caller, action, obj)
  `at_apply`(caller, action, other_obj)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BaseApplicable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Combinable'
  `typename` = 'Combinable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Mixable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object into which you can mix ingredients (such as when mixing a potion). This offers no actions on its own, instead the ingredients should be ‘used’ with this object in order mix, calling at_mix when they do.

  `mixer_flag` = 'mixer'
  `ingredient_recipe` = ['ingredient1', 'ingredient2', 'ingredient3']
  `at_object_creation`()

    Called once when object is first created.

  `check_mixture`()

    check so mixture is correct, returning True/False.

  `handle_mix`(caller, ingredient, **kwargs)

    Add ingredient object to mixture.

    Called by the mixing ingredient. We assume the ingredient has already checked to make sure they allow themselves to be mixed into an object with this mixer_flag.

  `at_mix`(caller, ingredient, **kwargs)
  `at_mix_failure`(caller, ingredient, **kwargs)
  `at_mix_success`(caller, ingredient, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Mixable'
  `typename` = 'Mixable'

class `evennia.contrib.full_systems.evscaperoom.objects.``HasButtons`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object with buttons to push/press

  `buttons` = {'green': 'at_green_button', 'green button': 'at_green_button', 'red': 'at_red_button', 'red button': 'at_red_button'}
  `get_cmd_signatures`()

    This allows the object to return more detailed call signs for each of their at_focus_* methods. This is useful for things like detailed arguments (only ‘move’ but ‘move left/right’)

    Returns

      callsigns (list, None) –

      List of strings to inject into the

        available action list produced by self.get_help. If None, automatically find actions based on the method names.

      custom_helpstr (str): This should be the help text for

        the command with a marker {callsigns} for where to inject the list of callsigns.

  `at_focus_press`(caller, **kwargs)
  `at_focus_push`(caller, **kwargs)
  `at_nomatch`(caller)
  `at_green_button`(caller)
  `at_red_button`(caller)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.HasButtons'
  `typename` = 'HasButtons'

class `evennia.contrib.full_systems.evscaperoom.objects.``CodeInput`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object where you can enter a code of some sort to have an effect happen.

  `code` = 'PASSWORD'
  `code_hint` = 'eight letters A-Z'
  `case_insensitive` = True
  `infinitely_locked` = False
  `at_focus_code`(caller, **kwargs)
  `get_cmd_signatures`()

    This allows the object to return more detailed call signs for each of their at_focus_* methods. This is useful for things like detailed arguments (only ‘move’ but ‘move left/right’)

    Returns

      callsigns (list, None) –

      List of strings to inject into the

        available action list produced by self.get_help. If None, automatically find actions based on the method names.

      custom_helpstr (str): This should be the help text for

        the command with a marker {callsigns} for where to inject the list of callsigns.

  `at_no_code`(caller)
  `at_code_correct`(caller, code_tried)
  `at_code_incorrect`(caller, code_tried)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.CodeInput'
  `typename` = 'CodeInput'

class `evennia.contrib.full_systems.evscaperoom.objects.``BasePositionable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject`

  Any object a character can be positioned on. This is meant as an abstract parent.

  This is a little special since a char can only have one position at a time and must therefore be aware of the other ‘positional’ actions any object may support (otherwise you may end up sitting/standing/etc on more than one object at once!)

  We set a Attribute (obj, position) on the caller to indicate that they have a position on an object. This is necessary so as to not have the caller sit on more than one sittable object at a time, for example. The ‘positions’ Attribute on this object holds a mapping of who is sitting lying etc on this object. We don’t add a limit to how many chars could have a position on an object - it’s not realistic, but this goes with the philosophy that one character should not be able to block others if they go inactive etc.

  This state is also tied to the general ‘stand’ command, which should return the player to the normal standing state regardless of if they focus on this object or not.

  `at_object_creation`()

    Called once when object is first created.

  `handle_position`(caller, new_pos, **kwargs)

    Wrap this with the at_focus_ method of the child class.

  `at_cannot_position`(caller, position, old_obj, old_pos)
  `at_again_position`(caller, position)
  `at_position`(caller, position)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.BasePositionable'
  `typename` = 'BasePositionable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Sittable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable`

  Any object you can sit on.

  `at_focus_sit`(caller, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Sittable'
  `typename` = 'Sittable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Liable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable`

  Any object you can lie down on.

  `at_focus_lie`(caller, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Liable'
  `typename` = 'Liable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Kneelable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable`

  Any object you can kneel on.

  `at_focus_kneel`(caller, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Kneelable'
  `typename` = 'Kneelable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Climbable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable`

  Any object you can climb up to stand on. We name this ‘climb’ so as to not collide with the general ‘stand’ command, which resets your position.

  `at_focus_climb`(caller, **kwargs)
  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.BasePositionable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Climbable'
  `typename` = 'Climbable'

class `evennia.contrib.full_systems.evscaperoom.objects.``Positionable`(*args, **kwargs)

  Bases: `evennia.contrib.full_systems.evscaperoom.objects.Sittable`, `evennia.contrib.full_systems.evscaperoom.objects.Liable`, `evennia.contrib.full_systems.evscaperoom.objects.Kneelable`, `evennia.contrib.full_systems.evscaperoom.objects.Climbable`

  An object on which you can position yourself in one of the supported ways (sit, lie, kneel or climb)

  `get_cmd_signatures`()

    This allows the object to return more detailed call signs for each of their at_focus_* methods. This is useful for things like detailed arguments (only ‘move’ but ‘move left/right’)

    Returns

      callsigns (list, None) –

      List of strings to inject into the

        available action list produced by self.get_help. If None, automatically find actions based on the method names.

      custom_helpstr (str): This should be the help text for

        the command with a marker {callsigns} for where to inject the list of callsigns.

  exception `DoesNotExist`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.Sittable.DoesNotExist`, `evennia.contrib.full_systems.evscaperoom.objects.Liable.DoesNotExist`, `evennia.contrib.full_systems.evscaperoom.objects.Kneelable.DoesNotExist`, `evennia.contrib.full_systems.evscaperoom.objects.Climbable.DoesNotExist`

  exception `MultipleObjectsReturned`

    Bases: `evennia.contrib.full_systems.evscaperoom.objects.Sittable.MultipleObjectsReturned`, `evennia.contrib.full_systems.evscaperoom.objects.Liable.MultipleObjectsReturned`, `evennia.contrib.full_systems.evscaperoom.objects.Kneelable.MultipleObjectsReturned`, `evennia.contrib.full_systems.evscaperoom.objects.Climbable.MultipleObjectsReturned`

  `path` = 'evennia.contrib.full_systems.evscaperoom.objects.Positionable'
  `typename` = 'Positionable'