From a6df975624e31d4fd468ce05aae365f94e01660b Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 25 Feb 2023 19:58:12 +0100 Subject: [PATCH] Add teleport: and teleport_here: default locks to in-game entities. Resolve #3029 --- CHANGELOG.md | 3 + docs/source/Coding/Changelog.md | 7 ++ evennia/commands/default/building.py | 1 - evennia/objects/objects.py | 16 ++++- evennia/prototypes/tests.py | 99 +++++++++++++++++++++------- 5 files changed, 99 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13a1d1adbf..60c2288f9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ ## Main - Bug fix: Evtable options showed spurious empty lines if set without desc +- Usage fix: The `teleport:` and `teleport_here:` locks where checked in + `CmdTeleport`, but not actually set on any entities. These locks are now + set with defaults on all objects,characters,rooms and exits. ## Evennia 1.2.0 diff --git a/docs/source/Coding/Changelog.md b/docs/source/Coding/Changelog.md index a1b94734c0..60c2288f9f 100644 --- a/docs/source/Coding/Changelog.md +++ b/docs/source/Coding/Changelog.md @@ -1,5 +1,12 @@ # Changelog +## Main + +- Bug fix: Evtable options showed spurious empty lines if set without desc +- Usage fix: The `teleport:` and `teleport_here:` locks where checked in + `CmdTeleport`, but not actually set on any entities. These locks are now + set with defaults on all objects,characters,rooms and exits. + ## Evennia 1.2.0 - Bug fix: `TagHandler.get` did not consistently cast to string (aMiss-aWry) diff --git a/evennia/commands/default/building.py b/evennia/commands/default/building.py index e47941709f..81ef7fd7c6 100644 --- a/evennia/commands/default/building.py +++ b/evennia/commands/default/building.py @@ -6,7 +6,6 @@ import re from django.conf import settings from django.core.paginator import Paginator from django.db.models import Max, Min, Q - from evennia import InterruptCommand from evennia.commands.cmdhandler import get_and_merge_cmdsets from evennia.locks.lockhandler import LockException diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 085ae8767c..77c7ee446b 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -13,7 +13,6 @@ from collections import defaultdict import inflect from django.conf import settings from django.utils.translation import gettext as _ - from evennia.commands import cmdset from evennia.commands.cmdsethandler import CmdSetHandler from evennia.objects.manager import ObjectManager @@ -1546,6 +1545,8 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): "call:true()", # allow to call commands on this object "tell:perm(Admin)", # allow emits to this object "puppet:pperm(Developer)", + "teleport:true()", + "teleport_here:true()", ] ) ) # lock down puppeting only to staff by default @@ -2635,7 +2636,14 @@ class DefaultCharacter(DefaultObject): """ super().basetype_setup() self.locks.add( - ";".join(["get:false()", "call:false()"]) # noone can pick up the character + ";".join( + [ + "get:false()", + "call:false()", + "teleport:perm(Admin)", + "teleport_here:perm(Admin)", + ] + ) # noone can pick up the character ) # no commands can be called on character from outside # add the default cmdset self.cmdset.add_default(settings.CMDSET_CHARACTER, persistent=True) @@ -2862,7 +2870,7 @@ class DefaultRoom(DefaultObject): super().basetype_setup() self.locks.add( - ";".join(["get:false()", "puppet:false()"]) + ";".join(["get:false()", "puppet:false()", "teleport:false()", "teleport_here:true()"]) ) # would be weird to puppet a room ... self.location = None @@ -3078,6 +3086,8 @@ class DefaultExit(DefaultObject): "puppet:false()", # would be weird to puppet an exit ... "traverse:all()", # who can pass through exit by default "get:false()", # noone can pick up the exit + "teleport:false()", + "teleport_here:false()", ] ) ) diff --git a/evennia/prototypes/tests.py b/evennia/prototypes/tests.py index c4e77299e4..42e69986be 100644 --- a/evennia/prototypes/tests.py +++ b/evennia/prototypes/tests.py @@ -10,7 +10,6 @@ from time import time import mock from anything import Something from django.test.utils import override_settings - from evennia.prototypes import menus as olc_menus from evennia.prototypes import protfuncs as protofuncs from evennia.prototypes import prototypes as protlib @@ -116,6 +115,8 @@ class TestUtils(BaseEvenniaTest): "examine:perm(Builder)", "get:all()", "puppet:pperm(Developer)", + "teleport:true()", + "teleport_here:true()", "tell:perm(Admin)", "view:all()", ] @@ -170,11 +171,21 @@ class TestUtils(BaseEvenniaTest): "key": "Obj", "home": Something, "location": Something, - "locks": ( - "call:true();control:perm(Developer);delete:perm(Admin);" - "drop:holds();" - "edit:perm(Admin);examine:perm(Builder);get:all();" - "puppet:pperm(Developer);tell:perm(Admin);view:all()" + "locks": ";".join( + [ + "call:true()", + "control:perm(Developer)", + "delete:perm(Admin)", + "drop:holds()", + "edit:perm(Admin)", + "examine:perm(Builder)", + "get:all()", + "puppet:pperm(Developer)", + "teleport:true()", + "teleport_here:true()", + "tell:perm(Admin)", + "view:all()", + ] ), "prototype_desc": "Built from Obj", "prototype_key": Something, @@ -192,11 +203,21 @@ class TestUtils(BaseEvenniaTest): "home": Something, "key": "Obj", "location": Something, - "locks": ( - "call:true();control:perm(Developer);delete:perm(Admin);" - "drop:holds();" - "edit:perm(Admin);examine:perm(Builder);get:all();" - "puppet:pperm(Developer);tell:perm(Admin);view:all()" + "locks": ";".join( + [ + "call:true()", + "control:perm(Developer)", + "delete:perm(Admin)", + "drop:holds()", + "edit:perm(Admin)", + "examine:perm(Builder)", + "get:all()", + "puppet:pperm(Developer)", + "teleport:true()", + "teleport_here:true()", + "tell:perm(Admin)", + "view:all()", + ] ), "new": "new_val", "permissions": ["Builder"], @@ -217,12 +238,38 @@ class TestUtils(BaseEvenniaTest): "prototype_key": (Something, Something, "UPDATE"), "location": (Something, Something, "KEEP"), "locks": ( - "call:true();control:perm(Developer);delete:perm(Admin);" - "drop:holds();edit:perm(Admin);examine:perm(Builder);" - "get:all();puppet:pperm(Developer);tell:perm(Admin);view:all()", - "call:true();control:perm(Developer);delete:perm(Admin);drop:holds();" - "edit:perm(Admin);examine:perm(Builder);get:all();" - "puppet:pperm(Developer);tell:perm(Admin);view:all()", + ";".join( + [ + "call:true()", + "control:perm(Developer)", + "delete:perm(Admin)", + "drop:holds()", + "edit:perm(Admin)", + "examine:perm(Builder)", + "get:all()", + "puppet:pperm(Developer)", + "teleport:true()", + "teleport_here:true()", + "tell:perm(Admin)", + "view:all()", + ] + ), + ";".join( + [ + "call:true()", + "control:perm(Developer)", + "delete:perm(Admin)", + "drop:holds()", + "edit:perm(Admin)", + "examine:perm(Builder)", + "get:all()", + "puppet:pperm(Developer)", + "teleport:true()", + "teleport_here:true()", + "tell:perm(Admin)", + "view:all()", + ] + ), "KEEP", ), "prototype_tags": (None, None, "KEEP"), @@ -303,6 +350,8 @@ class TestUtils(BaseEvenniaTest): "examine:perm(Builder)", "get:all()", "puppet:pperm(Developer)", + "teleport:true()", + "teleport_here:true()", "tell:perm(Admin)", "view:all()", ] @@ -700,12 +749,16 @@ class TestMenuModule(BaseEvenniaTest): "home": ("#2", "#2", "KEEP"), "key": ("TestChar", "TestChar", "KEEP"), "locks": ( - "boot:false();call:false();control:perm(Developer);delete:false();" - "edit:false();examine:perm(Developer);get:false();msg:all();" - "puppet:false();tell:perm(Admin);view:all()", - "boot:false();call:false();control:perm(Developer);delete:false();" - "edit:false();examine:perm(Developer);get:false();msg:all();" - "puppet:false();tell:perm(Admin);view:all()", + ( + "boot:false();call:false();control:perm(Developer);delete:false();" + "edit:false();examine:perm(Developer);get:false();msg:all();" + "puppet:false();tell:perm(Admin);view:all()" + ), + ( + "boot:false();call:false();control:perm(Developer);delete:false();" + "edit:false();examine:perm(Developer);get:false();msg:all();" + "puppet:false();tell:perm(Admin);view:all()" + ), "KEEP", ), "permissions": {"developer": ("developer", "developer", "KEEP")},