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. 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])`) - `EvTable` now supports passing `EvColumn`s as a list directly, (`EvTable(table=[colA,colB])`)
- Add `tags=` search criterion to `DefaultObject.search`. - Add `tags=` search criterion to `DefaultObject.search`.
- Add `AT_EXIT_TRAVERSE` signal, firing when an exit is traversed.
## Evennia 0.9.5 ## 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_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_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_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 The `evennia.signals` module also gives you conveneient access to the default Django signals (these
use a use a

View file

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

View file

@ -87,13 +87,17 @@ SIGNAL_HELPENTRY_POST_CREATE = Signal()
# first created, after all hooks. # first created, after all hooks.
SIGNAL_CHANNEL_POST_CREATE = Signal() 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/) # 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_finished # " ends.
from django.core.signals import request_started # Sent when HTTP request begins. 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, 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 m2m_changed # Sent when a ManyToManyField changes.
from django.db.models.signals import post_delete # after " from django.db.models.signals import post_delete # after "
from django.db.models.signals import post_init # end 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 post_save # after "
from django.db.models.signals import pre_delete # Sent before an object is deleted. 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_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 ( 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, pre_init,
) ) # Sent at start of typeclass __init__ (before at_init)
from django.test.signals import ( from django.test.signals import setting_changed # Sent when setting changes from override
setting_changed, # Sent when setting changes from override from django.test.signals import template_rendered # Sent when test system renders template
)
from django.test.signals import (
template_rendered, # Sent when test system renders template
)