Allow scripts command to operate on range dbrefs. Resolve #2397.

This commit is contained in:
Griatch 2022-01-09 00:49:57 +01:00
parent e70337b6d2
commit 7b014f0fa0
2 changed files with 26 additions and 1 deletions

View file

@ -3129,6 +3129,7 @@ class CmdScripts(COMMAND_DEFAULT_CLASS):
script/stop myobj = scriptname - stop script on object script/stop myobj = scriptname - stop script on object
script/pause foo.Bar.Script - pause global script script/pause foo.Bar.Script - pause global script
script/delete myobj - delete ALL scripts on object script/delete myobj - delete ALL scripts on object
script/delete #dbref[-#dbref] - delete script or range by dbref
When given with an `<obj>` as left-hand-side, this creates and When given with an `<obj>` as left-hand-side, this creates and
assigns a new script to that object. Without an `<obj>`, this assigns a new script to that object. Without an `<obj>`, this
@ -3170,6 +3171,13 @@ class CmdScripts(COMMAND_DEFAULT_CLASS):
scripts = ScriptDB.objects.filter(db_typeclass_path__iendswith=args) scripts = ScriptDB.objects.filter(db_typeclass_path__iendswith=args)
if scripts: if scripts:
return 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): def func(self):
"""implement method""" """implement method"""

View file

@ -40,7 +40,7 @@ from evennia.commands.default.muxcommand import MuxCommand
from evennia.commands.command import Command, InterruptCommand from evennia.commands.command import Command, InterruptCommand
from evennia.commands import cmdparser from evennia.commands import cmdparser
from evennia.commands.cmdset import CmdSet 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.server.sessionhandler import SESSIONS
from evennia import search_object from evennia import search_object
from evennia import DefaultObject, DefaultCharacter from evennia import DefaultObject, DefaultCharacter
@ -1728,6 +1728,23 @@ class TestBuilding(EvenniaCommandTest):
"Global Script Deleted -" "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): def test_teleport(self):
oid = self.obj1.id oid = self.obj1.id