From 7b014f0fa0fb531f2f2fd9470ac7e48988cfc88d Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 9 Jan 2022 00:49:57 +0100 Subject: [PATCH] Allow scripts command to operate on range dbrefs. Resolve #2397. --- evennia/commands/default/building.py | 8 ++++++++ evennia/commands/default/tests.py | 19 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/evennia/commands/default/building.py b/evennia/commands/default/building.py index 8cf4700f93..5848d374ca 100644 --- a/evennia/commands/default/building.py +++ b/evennia/commands/default/building.py @@ -3129,6 +3129,7 @@ class CmdScripts(COMMAND_DEFAULT_CLASS): script/stop myobj = scriptname - stop script on object script/pause foo.Bar.Script - pause global script script/delete myobj - delete ALL scripts on object + script/delete #dbref[-#dbref] - delete script or range by dbref When given with an `` as left-hand-side, this creates and assigns a new script to that object. Without an ``, this @@ -3170,6 +3171,13 @@ class CmdScripts(COMMAND_DEFAULT_CLASS): scripts = ScriptDB.objects.filter(db_typeclass_path__iendswith=args) if scripts: return scripts + if "-" in args: + # may be a dbref-range + val1, val2 = (dbref(part.strip()) for part in args.split('-', 1)) + if val1 and val2: + scripts = ScriptDB.objects.filter(id__in=(range(val1, val2 + 1))) + if scripts: + return scripts def func(self): """implement method""" diff --git a/evennia/commands/default/tests.py b/evennia/commands/default/tests.py index 8be9c0d391..9b6ac7d1ab 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -40,7 +40,7 @@ from evennia.commands.default.muxcommand import MuxCommand from evennia.commands.command import Command, InterruptCommand from evennia.commands import cmdparser from evennia.commands.cmdset import CmdSet -from evennia.utils import ansi, utils, gametime +from evennia.utils import ansi, utils, gametime, create from evennia.server.sessionhandler import SESSIONS from evennia import search_object from evennia import DefaultObject, DefaultCharacter @@ -1728,6 +1728,23 @@ class TestBuilding(EvenniaCommandTest): "Global Script Deleted -" ) + def test_script_multi_delete(self): + + script1 = create.create_script() + script2 = create.create_script() + script3 = create.create_script() + + self.call( + building.CmdScripts(), + "/delete #{}-#{}".format(script1.id, script3.id), + "Global Script Deleted - #2 (evennia.scripts.scripts.DefaultScript)|" + "Global Script Deleted - #3 (evennia.scripts.scripts.DefaultScript)|" + "Global Script Deleted - #4 (evennia.scripts.scripts.DefaultScript)", + inputs=["y"] + ) + self.assertFalse(script1.pk) + self.assertFalse(script2.pk) + self.assertFalse(script3.pk) def test_teleport(self): oid = self.obj1.id