Add AT_EXIT_TRAVERSE signal. Resolve #2687

This commit is contained in:
Griatch 2022-11-28 21:40:20 +01:00
parent 3084da788f
commit caa7347fab
4 changed files with 14 additions and 12 deletions

View file

@ -219,6 +219,7 @@ Increase requirements: Django 4.1+, Twisted 22.10+ Python 3.9, 3.10, 3.11. Post
the given left indent but crops/fills to the width. Used in EvCells.
- `EvTable` now supports passing `EvColumn`s as a list directly, (`EvTable(table=[colA,colB])`)
- Add `tags=` search criterion to `DefaultObject.search`.
- Add `AT_EXIT_TRAVERSE` signal, firing when an exit is traversed.
## Evennia 0.9.5

View file

@ -93,6 +93,7 @@ Extra
- `SIGNAL_SCRIPT_POST_CREATE` - fires when a script is first created, after any hooks.
- `SIGNAL_CHANNEL_POST_CREATE` - fires when a Channel is first created, after any hooks.
- `SIGNAL_HELPENTRY_POST_CREATE` - fires when a help entry is first created.
- `SIGNAL_EXIT_TRAVERSED` - fires when an exit is traversed, just after `at_traverse` hook. The `sender` is the exit itself, `traverser=` keyword hold the one traversing the exit.
The `evennia.signals` module also gives you conveneient access to the default Django signals (these
use a

View file

@ -18,6 +18,7 @@ from evennia.commands.cmdsethandler import CmdSetHandler
from evennia.objects.manager import ObjectManager
from evennia.objects.models import ObjectDB
from evennia.scripts.scripthandler import ScriptHandler
from evennia.server.signals import SIGNAL_EXIT_TRAVERSED
from evennia.typeclasses.attributes import ModelAttributeBackend, NickHandler
from evennia.typeclasses.models import TypeclassBase
from evennia.utils import ansi, create, funcparser, logger, search
@ -2886,6 +2887,7 @@ class ExitCommand(_COMMAND_DEFAULT_CLASS):
if self.obj.access(self.caller, "traverse"):
# we may traverse the exit.
self.obj.at_traverse(self.caller, self.obj.destination)
SIGNAL_EXIT_TRAVERSED.send(sender=self.obj, traverser=self.caller)
else:
# exit is locked
if self.obj.db.err_traverse:

View file

@ -87,13 +87,17 @@ SIGNAL_HELPENTRY_POST_CREATE = Signal()
# first created, after all hooks.
SIGNAL_CHANNEL_POST_CREATE = Signal()
# The sender is the exit used when traversing, as well as 'traverser', for the one traversing
# Called just after at_traverse hook.
SIGNAL_EXIT_TRAVERSED = Signal()
# Django default signals (https://docs.djangoproject.com/en/2.2/topics/signals/)
from django.core.signals import request_finished # " ends.
from django.core.signals import request_started # Sent when HTTP request begins.
from django.db.backends.signals import ( # Sent when making initial connection to database
from django.db.backends.signals import (
connection_created,
)
) # Sent when making initial connection to database
from django.db.models.signals import m2m_changed # Sent when a ManyToManyField changes.
from django.db.models.signals import post_delete # after "
from django.db.models.signals import post_init # end
@ -101,15 +105,9 @@ from django.db.models.signals import post_migrate # after "
from django.db.models.signals import post_save # after "
from django.db.models.signals import pre_delete # Sent before an object is deleted.
from django.db.models.signals import pre_migrate # Sent before migration starts
from django.db.models.signals import pre_save # Sent before a typeclass' .save is called.
from django.db.models.signals import (
pre_save, # Sent before a typeclass' .save is called.
)
from django.db.models.signals import ( # Sent at start of typeclass __init__ (before at_init)
pre_init,
)
from django.test.signals import (
setting_changed, # Sent when setting changes from override
)
from django.test.signals import (
template_rendered, # Sent when test system renders template
)
) # Sent at start of typeclass __init__ (before at_init)
from django.test.signals import setting_changed # Sent when setting changes from override
from django.test.signals import template_rendered # Sent when test system renders template