Updated the tutorial world's lockfuncs to work correctly. Resolves #682.

This commit is contained in:
Griatch 2015-03-02 21:35:55 +01:00
parent d1c7111db1
commit 9ffba037f8
3 changed files with 23 additions and 3 deletions

View file

@ -354,7 +354,7 @@ start
# Lock exit from view/traverse until we climbed that tree (which is
# when tutorial_climbed_tree Tag gets assigned to us).
#
@lock north = view:tag(tutorial_climbed_tree) ; traverse:tag(tutorial_climbed_tree)
@lock north = view:tag(tutorial_climbed_tree, tutorial_world) ; traverse:tag(tutorial_climbed_tree, tutorial_world)
#
@desc north =
This is a hardly visible footpath leading off through the rain-beaten
@ -364,7 +364,7 @@ start
@set north/tutorial_info =
This exit is locked with a lock string that looks like this:
view:tag(tutorial_climbed_tree) ; traverse:tag(tutorial_climbed_tree)
view:tag(tutorial_climbed_tree, tutorial_world) ; traverse:tag(tutorial_climbed_tree, tutorial_world)
This checks if Character has a Tag tutorial_climbed_tree set before it
allows itself to be displayed. This Tag is set by the tree object when

View file

@ -537,7 +537,7 @@ class CmdPressButton(Command):
# the Attribute button_exposed on the Wall object so that
# you can only push the button when the puzzle is solved. It also
# checks the is_lit Attribute on the location.
locks = "cmd:objattr(button_exposed) and locattr(is_lit)"
locks = "cmd:objattr(button_exposed) and objlocattr(is_lit)"
help_category = "TutorialWorld"
def func(self):

View file

@ -376,6 +376,25 @@ def locattr(accessing_obj, accessed_obj, *args, **kwargs):
if hasattr(accessing_obj, "location"):
return attr(accessing_obj.location, accessed_obj, *args, **kwargs)
def objlocattr(accessing_obj, accessed_obj, *args, **kwargs):
"""
Usage:
locattr(attrname)
locattr(attrname, value)
locattr(attrname, value, compare=type)
Works like attr, except it looks for an attribute on
accessed_obj.location, if such an entity exists.
if accessed_obj has a property ".obj" (such as is the case for a
Command), then accessing_obj.obj.location is used instead.
"""
if hasattr(accessed_obj, "obj"):
accessed_obj = accessed_obj.obj
if hasattr(accessed_obj, "location"):
return attr(accessed_obj.location, accessed_obj, *args, **kwargs)
def attr_eq(accessing_obj, accessed_obj, *args, **kwargs):
"""
@ -447,6 +466,7 @@ def tag(accessing_obj, accessed_obj, *args, **kwargs):
"""
if hasattr(accessing_obj, "obj"):
accessing_obj = accessing_obj = accessing_obj.obj
print "tag:", args, accessing_obj, accessing_obj.tags.get(*args)
return accessing_obj.tags.get(*args)
def objtag(accessing_obj, accessed_obj, *args, **kwargs):