Huge overhaul in the way objects and sessions are used with commands. We now pass all commands through objects (aside from unlogged commands), which means session.msg() is now deprecated for any use other than unlogged out.

As a side-effect of all of this, logging in more than once acts as behaves now. Also, this will allow things/rooms/exits (IE: not players) or un-logged in players to run commands or be forced to run them via @fo. All of this will bring us more in-line with MUX behavior.
This commit is contained in:
Greg Taylor 2009-01-24 20:30:46 +00:00
parent 50f4d04096
commit 9407eb0ee4
20 changed files with 680 additions and 712 deletions

View file

@ -5,17 +5,15 @@ from src.objects.models import Object, Attribute
# We'll import this as the full path to avoid local variable clashes.
import src.flags
from src import ansi
from src import session_mgr
def cmd_teleport(command):
"""
Teleports an object somewhere.
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("Teleport where/what?")
source_object.emit_to("Teleport where/what?")
return
eq_args = command.command_argument.split('=', 1)
@ -31,96 +29,80 @@ def cmd_teleport(command):
# a direct teleport, @tel <destination>.
if len(eq_args) > 1:
# Equal sign teleport.
victim = Object.objects.standard_plr_objsearch(session, eq_args[0])
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
victim = Object.objects.standard_objsearch(source_object, eq_args[0])
# Use standard_objsearch to handle duplicate/nonexistant results.
if not victim:
return
destination = Object.objects.standard_plr_objsearch(session, eq_args[1])
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
destination = Object.objects.standard_objsearch(source_object, eq_args[1])
# Use standard_objsearch to handle duplicate/nonexistant results.
if not destination:
return
if victim.is_room():
session.msg("You can't teleport a room.")
source_object.emit_to("You can't teleport a room.")
return
if victim == destination:
session.msg("You can't teleport an object inside of itself!")
source_object.emit_to("You can't teleport an object inside of itself!")
return
session.msg("Teleported.")
source_object.emit_to("Teleported.")
victim.move_to(destination, quiet=tel_quietly)
else:
# Direct teleport (no equal sign)
target_obj = Object.objects.standard_plr_objsearch(session,
target_obj = Object.objects.standard_objsearch(source_object,
command.command_argument)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
if target_obj == pobject:
session.msg("You can't teleport inside yourself!")
if target_obj == source_object:
source_object.emit_to("You can't teleport inside yourself!")
return
session.msg("Teleported.")
source_object.emit_to("Teleported.")
pobject.move_to(target_obj, quiet=tel_quietly)
def cmd_stats(command):
"""
Shows stats about the database.
4012 objects = 144 rooms, 212 exits, 613 things, 1878 players. (1165 garbage)
"""
session = command.session
stats_dict = Object.objects.object_totals()
session.msg("%d objects = %d rooms, %d exits, %d things, %d players. (%d garbage)" %
(stats_dict["objects"],
stats_dict["rooms"],
stats_dict["exits"],
stats_dict["things"],
stats_dict["players"],
stats_dict["garbage"]))
source_object.move_to(target_obj, quiet=tel_quietly)
def cmd_alias(command):
"""
Assigns an alias to a player object for ease of paging, etc.
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("Alias whom?")
source_object.emit_to("Alias whom?")
return
eq_args = command.command_argument.split('=', 1)
if len(eq_args) < 2:
session.msg("Alias missing.")
source_object.emit_to("Alias missing.")
return
target_string = eq_args[0]
new_alias = eq_args[1]
# An Object instance for the victim.
target = Object.objects.standard_plr_objsearch(session, target_string)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
target = Object.objects.standard_objsearch(source_object, target_string)
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target:
session.msg("I can't find that player.")
source_object.emit_to("I can't find that player.")
return
old_alias = target.get_attribute_value('ALIAS')
duplicates = Object.objects.player_alias_search(pobject, new_alias)
duplicates = Object.objects.player_alias_search(source_object, new_alias)
if not duplicates or old_alias.lower() == new_alias.lower():
# Either no duplicates or just changing the case of existing alias.
if pobject.controls_other(target):
if source_object.controls_other(target):
target.set_attribute('ALIAS', new_alias)
session.msg("Alias '%s' set for %s." % (new_alias,
source_object.emit_to("Alias '%s' set for %s." % (new_alias,
target.get_name()))
else:
session.msg("You do not have access to set an alias for %s." %
source_object.emit_to("You do not have access to set an alias for %s." %
(target.get_name(),))
else:
# Duplicates were found.
session.msg("Alias '%s' is already in use." % (new_alias,))
source_object.emit_to("Alias '%s' is already in use." % (new_alias,))
return
def cmd_wipe(command):
@ -128,12 +110,11 @@ def cmd_wipe(command):
Wipes an object's attributes, or optionally only those matching a search
string.
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
attr_search = False
if not command.command_argument:
session.msg("Wipe what?")
source_object.emit_to("Wipe what?")
return
# Look for a slash in the input, indicating an attribute wipe.
@ -149,8 +130,8 @@ def cmd_wipe(command):
else:
searchstr = command.command_argument
target_obj = Object.objects.standard_plr_objsearch(session, attr_split[0])
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
target_obj = Object.objects.standard_objsearch(source_object, attr_split[0])
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
@ -162,43 +143,43 @@ def cmd_wipe(command):
if attr_matches:
for attr in attr_matches:
target_obj.clear_attribute(attr.get_name())
session.msg("%s - %d attributes wiped." % (target_obj.get_name(),
len(attr_matches)))
source_object.emit_to("%s - %d attributes wiped." % (
target_obj.get_name(),
len(attr_matches)))
else:
session.msg("No matching attributes found.")
source_object.emit_to("No matching attributes found.")
else:
# User didn't specify a wild-card string, wipe entire object.
attr_matches = target_obj.attribute_namesearch("*", exclude_noset=True)
for attr in attr_matches:
target_obj.clear_attribute(attr.get_name())
session.msg("%s - %d attributes wiped." % (target_obj.get_name(),
source_object.emit_to("%s - %d attributes wiped." % (target_obj.get_name(),
len(attr_matches)))
def cmd_set(command):
"""
Sets flags or attributes on objects.
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("Set what?")
source_object.emit_to("Set what?")
return
# Break into target and value by the equal sign.
eq_args = command.command_argument.split('=', 1)
if len(eq_args) < 2:
# Equal signs are not optional for @set.
session.msg("Set what?")
source_object.emit_to("Set what?")
return
victim = Object.objects.standard_plr_objsearch(session, eq_args[0])
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
victim = Object.objects.standard_objsearch(source_object, eq_args[0])
# Use standard_objsearch to handle duplicate/nonexistant results.
if not victim:
return
if not pobject.controls_other(victim):
session.msg(defines_global.NOCONTROL_MSG)
if not source_object.controls_other(victim):
source_object.emit_to(defines_global.NOCONTROL_MSG)
return
attrib_args = eq_args[1].split(':', 1)
@ -209,8 +190,8 @@ def cmd_set(command):
attrib_value = eq_args[1][splicenum:]
# In global_defines.py, see NOSET_ATTRIBS for protected attribute names.
if not Attribute.objects.is_modifiable_attrib(attrib_name) and not pobject.is_superuser():
session.msg("You can't modify that attribute.")
if not Attribute.objects.is_modifiable_attrib(attrib_name) and not source_object.is_superuser():
source_object.emit_to("You can't modify that attribute.")
return
if attrib_value:
@ -221,7 +202,7 @@ def cmd_set(command):
# No value was given, this means we delete the attribute.
verb = 'cleared'
victim.clear_attribute(attrib_name)
session.msg("%s - %s %s." % (victim.get_name(), attrib_name, verb))
source_object.emit_to("%s - %s %s." % (victim.get_name(), attrib_name, verb))
else:
# Flag manipulation form.
flag_list = eq_args[1].split()
@ -232,62 +213,60 @@ def cmd_set(command):
# We're un-setting the flag.
flag = flag[1:]
if not src.flags.is_modifiable_flag(flag):
session.msg("You can't set/unset the flag - %s." % (flag,))
source_object.emit_to("You can't set/unset the flag - %s." % (flag,))
else:
session.msg('%s - %s cleared.' % (victim.get_name(),
flag.upper(),))
source_object.emit_to('%s - %s cleared.' % (victim.get_name(),
flag.upper(),))
victim.set_flag(flag, False)
else:
# We're setting the flag.
if not src.flags.is_modifiable_flag(flag):
session.msg("You can't set/unset the flag - %s." % (flag,))
source_object.emit_to("You can't set/unset the flag - %s." % (flag,))
else:
session.msg('%s - %s set.' % (victim.get_name(),
flag.upper(),))
source_object.emit_to('%s - %s set.' % (victim.get_name(),
flag.upper(),))
victim.set_flag(flag, True)
def cmd_find(command):
"""
Searches for an object of a particular name.
"""
session = command.session
pobject = session.get_pobject()
can_find = pobject.user_has_perm("genperms.builder")
source_object = command.source_object
can_find = source_object.has_perm("genperms.builder")
if not command.command_argument:
session.msg("No search pattern given.")
source_object.emit_to("No search pattern given.")
return
searchstring = command.command_argument
results = Object.objects.global_object_name_search(searchstring)
if len(results) > 0:
session.msg("Name matches for: %s" % (searchstring,))
source_object.emit_to("Name matches for: %s" % (searchstring,))
for result in results:
session.msg(" %s" % (result.get_name(fullname=True),))
session.msg("%d matches returned." % (len(results),))
source_object.emit_to(" %s" % (result.get_name(fullname=True),))
source_object.emit_to("%d matches returned." % (len(results),))
else:
session.msg("No name matches found for: %s" % (searchstring,))
source_object.emit_to("No name matches found for: %s" % (searchstring,))
def cmd_create(command):
"""
Creates a new object of type 'THING'.
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("You must supply a name!")
source_object.emit_to("You must supply a name!")
else:
# Create and set the object up.
# TODO: This dictionary stuff is silly. Feex.
odat = {"name": command.command_argument,
"type": 3,
"location": pobject,
"owner": pobject}
"location": source_object,
"owner": source_object}
new_object = Object.objects.create_object(odat)
session.msg("You create a new thing: %s" % (new_object,))
source_object.emit_to("You create a new thing: %s" % (new_object,))
def cmd_cpattr(command):
"""
@ -295,12 +274,10 @@ def cmd_cpattr(command):
@cpattr <source object>/<attribute> = <target1>/[<attrname>] <target n>/[<attrname n>]
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("What do you want to copy?")
source_object.emit_to("What do you want to copy?")
return
# Split up source and target[s] via the equals sign.
@ -308,7 +285,7 @@ def cmd_cpattr(command):
if len(eq_args) < 2:
# There must be both a source and a target pair for cpattr
session.msg("You have not supplied both a source and a target[s]")
source_object.emit_to("You have not supplied both a source and a target[s]")
return
# Check that the source object and attribute exists, by splitting the eq_args 'source' entry with '/'
@ -317,17 +294,17 @@ def cmd_cpattr(command):
source_attr_string = source[1].strip().upper()
# Check whether src_obj exists
src_obj = Object.objects.standard_plr_objsearch(session, source_string)
src_obj = Object.objects.standard_objsearch(source_object, source_string)
if not src_obj:
session.msg("Source object does not exist")
source_object.emit_to("Source object does not exist")
return
# Check whether src_obj has src_attr
src_attr = src_obj.attribute_namesearch(source_attr_string)
if not src_attr:
session.msg("Source object does not have attribute " + source[1].strip())
source_object.emit_to("Source object does not have attribute " + source[1].strip())
return
# For each target object, check it exists
@ -343,7 +320,7 @@ def cmd_cpattr(command):
# Does target exist?
if not tar_obj:
session.msg("Target object does not exist: " + tar_string)
source_object.emit_to("Target object does not exist: " + tar_string)
# Continue if target does not exist, but give error on this item
continue
@ -355,9 +332,8 @@ def cmd_cpattr(command):
# If however, the target attribute is given, check it exists and update
# accordingly.
# Does target attribute exist?
tar_attr = tar_obj.attribute_namesearch(tar_attr_string)
# If the target object does not have the given attribute, make a new attr
@ -374,11 +350,9 @@ def cmd_cpattr(command):
def cmd_nextfree(command):
"""
Returns the next free object number.
"""
session = command.session
"""
nextfree = Object.objects.get_nextfree_dbnum()
session.msg("Next free object number: #%s" % (nextfree,))
command.source_object.emit_to("Next free object number: #%s" % (nextfree,))
def cmd_open(command):
"""
@ -389,18 +363,17 @@ def cmd_open(command):
@open <Name>=<Dbref>
@open <Name>=<Dbref>,<Name>
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("Open an exit to where?")
source_object.emit_to("Open an exit to where?")
return
eq_args = command.command_argument.split('=', 1)
exit_name = eq_args[0]
if len(exit_name) == 0:
session.msg("You must supply an exit name.")
source_object.emit_to("You must supply an exit name.")
return
# If we have more than one entry in our '=' delimited argument list,
@ -409,47 +382,48 @@ def cmd_open(command):
if len(eq_args) > 1:
# Opening an exit to another location via @open <Name>=<Dbref>[,<Name>].
comma_split = eq_args[1].split(',', 1)
destination = Object.objects.standard_plr_objsearch(session,
destination = Object.objects.standard_objsearch(source_object,
comma_split[0])
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
# Use standard_objsearch to handle duplicate/nonexistant results.
if not destination:
return
if destination.is_exit():
session.msg("You can't open an exit to an exit!")
source_object.emit_to("You can't open an exit to an exit!")
return
odat = {"name": exit_name,
"type": 4,
"location": pobject.get_location(),
"owner": pobject,
"home":destination}
"location": source_object.get_location(),
"owner": source_object,
"home": destination}
new_object = Object.objects.create_object(odat)
session.msg("You open the an exit - %s to %s" % (new_object.get_name(),
destination.get_name()))
source_object.emit_to("You open the an exit - %s to %s" % (
new_object.get_name(),
destination.get_name()))
if len(comma_split) > 1:
second_exit_name = ','.join(comma_split[1:])
odat = {"name": second_exit_name,
"type": 4,
"location": destination,
"owner": pobject,
"home": pobject.get_location()}
"owner": source_object,
"home": source_object.get_location()}
new_object = Object.objects.create_object(odat)
session.msg("You open the an exit - %s to %s" % (
source_object.emit_to("You open the an exit - %s to %s" % (
new_object.get_name(),
pobject.get_location().get_name()))
source_object.get_location().get_name()))
else:
# Create an un-linked exit.
odat = {"name": exit_name,
"type": 4,
"location": pobject.get_location(),
"owner": pobject,
"home":None}
"location": source_object.get_location(),
"owner": source_object,
"home": None}
new_object = Object.objects.create_object(odat)
session.msg("You open an unlinked exit - %s" % (new_object,))
source_object.emit_to("You open an unlinked exit - %s" % (new_object,))
def cmd_chown(command):
"""
@ -459,11 +433,10 @@ def cmd_chown(command):
Forms:
@chown <Object>=<NewOwner>
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("Change the ownership of what?")
source_object.emit_to("Change the ownership of what?")
return
eq_args = command.command_argument.split('=', 1)
@ -471,37 +444,35 @@ def cmd_chown(command):
owner_name = eq_args[1]
if len(target_name) == 0:
session.msg("Change the ownership of what?")
source_object.emit_to("Change the ownership of what?")
return
if len(eq_args) > 1:
target_obj = Object.objects.standard_plr_objsearch(session, target_name)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
target_obj = Object.objects.standard_objsearch(source_object, target_name)
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
if not pobject.controls_other(target_obj):
session.msg(defines_global.NOCONTROL_MSG)
if not source_object.controls_other(target_obj):
source_object.emit_to(defines_global.NOCONTROL_MSG)
return
owner_obj = Object.objects.standard_plr_objsearch(session, owner_name)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
owner_obj = Object.objects.standard_objsearch(source_object, owner_name)
# Use standard_objsearch to handle duplicate/nonexistant results.
if not owner_obj:
return
if not owner_obj.is_player():
session.msg("Only players may own objects.")
source_object.emit_to("Only players may own objects.")
return
if target_obj.is_player():
session.msg("You may not change the ownership of player objects.")
source_object.emit_to("You may not change the ownership of player objects.")
return
target_obj.set_owner(owner_obj)
session.msg("%s now owns %s." % (owner_obj, target_obj))
source_object.emit_to("%s now owns %s." % (owner_obj, target_obj))
else:
# We haven't provided a target.
session.msg("Who should be the new owner of the object?")
source_object.emit_to("Who should be the new owner of the object?")
return
def cmd_chzone(command):
@ -512,11 +483,10 @@ def cmd_chzone(command):
Forms:
@chzone <Object>=<NewZone>
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("Change the zone of what?")
source_object.emit_to("Change the zone of what?")
return
eq_args = command.command_argument.split('=', 1)
@ -524,36 +494,36 @@ def cmd_chzone(command):
zone_name = eq_args[1]
if len(target_name) == 0:
session.msg("Change the zone of what?")
source_object.emit_to("Change the zone of what?")
return
if len(eq_args) > 1:
target_obj = Object.objects.standard_plr_objsearch(session, target_name)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
target_obj = Object.objects.standard_objsearch(source_object, target_name)
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
if not pobject.controls_other(target_obj):
session.msg(defines_global.NOCONTROL_MSG)
if not source_object.controls_other(target_obj):
source_object.emit_to(defines_global.NOCONTROL_MSG)
return
# Allow the clearing of a zone
if zone_name.lower() == "none":
target_obj.set_zone(None)
session.msg("%s is no longer zoned." % (target_obj))
source_object.emit_to("%s is no longer zoned." % (target_obj))
return
zone_obj = Object.objects.standard_plr_objsearch(session, zone_name)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
zone_obj = Object.objects.standard_objsearch(source_object, zone_name)
# Use standard_objsearch to handle duplicate/nonexistant results.
if not zone_obj:
return
target_obj.set_zone(zone_obj)
session.msg("%s is now in zone %s." % (target_obj, zone_obj))
source_object.emit_to("%s is now in zone %s." % (target_obj, zone_obj))
else:
# We haven't provided a target zone.
session.msg("What should the object's zone be set to?")
source_object.emit_to("What should the object's zone be set to?")
return
def cmd_link(command):
@ -563,11 +533,10 @@ def cmd_link(command):
Forms:
@link <Object>=<Target>
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("Link what?")
source_object.emit_to("Link what?")
return
eq_args = command.command_argument.split('=', 1)
@ -575,36 +544,36 @@ def cmd_link(command):
dest_name = eq_args[1]
if len(target_name) == 0:
session.msg("What do you want to link?")
source_object.emit_to("What do you want to link?")
return
if len(eq_args) > 1:
target_obj = Object.objects.standard_plr_objsearch(session, target_name)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
target_obj = Object.objects.standard_objsearch(source_object, target_name)
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
if not pobject.controls_other(target_obj):
session.msg(defines_global.NOCONTROL_MSG)
if not source_object.controls_other(target_obj):
source_object.emit_to(defines_global.NOCONTROL_MSG)
return
# If we do something like "@link blah=", we unlink the object.
if len(dest_name) == 0:
target_obj.set_home(None)
session.msg("You have unlinked %s." % (target_obj,))
source_object.emit_to("You have unlinked %s." % (target_obj,))
return
destination = Object.objects.standard_plr_objsearch(session, dest_name)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
destination = Object.objects.standard_objsearch(source_object, dest_name)
# Use standard_objsearch to handle duplicate/nonexistant results.
if not destination:
return
target_obj.set_home(destination)
session.msg("You link %s to %s." % (target_obj,destination))
source_object.emit_to("You link %s to %s." % (target_obj, destination))
else:
# We haven't provided a target.
session.msg("You must provide a destination to link to.")
source_object.emit_to("You must provide a destination to link to.")
return
def cmd_unlink(command):
@ -613,25 +582,24 @@ def cmd_unlink(command):
@unlink <Object>
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("Unlink what?")
source_object.emit_to("Unlink what?")
return
else:
target_obj = Object.objects.standard_plr_objsearch(session,
target_obj = Object.objects.standard_objsearch(source_object,
command.command_argument)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
if not pobject.controls_other(target_obj):
session.msg(defines_global.NOCONTROL_MSG)
if not source_object.controls_other(target_obj):
source_object.emit_to(defines_global.NOCONTROL_MSG)
return
target_obj.set_home(None)
session.msg("You have unlinked %s." % (target_obj.get_name(),))
source_object.emit_to("You have unlinked %s." % (target_obj.get_name(),))
def cmd_dig(command):
"""
@ -639,21 +607,20 @@ def cmd_dig(command):
@dig <Name>
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
roomname = command.command_argument
if not roomname:
session.msg("You must supply a name!")
source_object.emit_to("You must supply a name!")
else:
# Create and set the object up.
odat = {"name": roomname,
"type": 2,
"location": None,
"owner": pobject}
"owner": source_object}
new_object = Object.objects.create_object(odat)
session.msg("You create a new room: %s" % (new_object,))
source_object.emit_to("You create a new room: %s" % (new_object,))
def cmd_name(command):
"""
@ -661,94 +628,102 @@ def cmd_name(command):
@name <Object>=<Value>
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("What do you want to name?")
source_object.emit_to("What do you want to name?")
return
eq_args = command.command_argument.split('=', 1)
if len(eq_args) < 2:
source_object.emit_to("Name it what?")
return
# Only strip spaces from right side in case they want to be silly and
# have a left-padded object name.
new_name = eq_args[1].rstrip()
if len(eq_args) < 2 or eq_args[1] == '':
session.msg("What would you like to name that object?")
source_object.emit_to("What would you like to name that object?")
else:
target_obj = Object.objects.standard_plr_objsearch(session, eq_args[0])
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
target_obj = Object.objects.standard_objsearch(source_object, eq_args[0])
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
ansi_name = ansi.parse_ansi(new_name, strip_formatting=True)
session.msg("You have renamed %s to %s." % (target_obj, ansi_name))
source_object.emit_to("You have renamed %s to %s." % (target_obj,
ansi_name))
target_obj.set_name(new_name)
def cmd_description(command):
"""
Set an object's description.
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
if not command.command_argument:
session.msg("What do you want to describe?")
source_object.emit_to("What do you want to describe?")
return
eq_args = command.command_argument.split('=', 1)
if len(eq_args) < 2 or eq_args[1] == '':
session.msg("How would you like to describe that object?")
if len(eq_args) < 2:
source_object.emit_to("How would you like to describe that object?")
return
target_obj = Object.objects.standard_objsearch(source_object, eq_args[0])
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
if not source_object.controls_other(target_obj):
source_object.emit_to(defines_global.NOCONTROL_MSG)
return
new_desc = eq_args[1]
if new_desc == '':
source_object.emit_to("%s - DESCRIPTION cleared." % target_obj)
target_obj.set_description(None)
else:
target_obj = Object.objects.standard_plr_objsearch(session, eq_args[0])
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
if not pobject.controls_other(target_obj):
session.msg(defines_global.NOCONTROL_MSG)
return
new_desc = eq_args[1]
session.msg("%s - DESCRIPTION set." % (target_obj,))
source_object.emit_to("%s - DESCRIPTION set." % target_obj)
target_obj.set_description(new_desc)
def cmd_destroy(command):
"""
Destroy an object.
"""
session = command.session
pobject = session.get_pobject()
source_object = command.source_object
switch_override = False
if not command.command_argument:
session.msg("Destroy what?")
source_object.emit_to("Destroy what?")
return
# Safety feature. Switch required to delete players and SAFE objects.
if "override" in command.command_switches:
switch_override = True
target_obj = Object.objects.standard_plr_objsearch(session,
command.command_argument)
# Use standard_plr_objsearch to handle duplicate/nonexistant results.
target_obj = Object.objects.standard_objsearch(source_object,
command.command_argument)
# Use standard_objsearch to handle duplicate/nonexistant results.
if not target_obj:
return
if target_obj.is_player():
if pobject.id == target_obj.id:
session.msg("You can't destroy yourself.")
if source_object.id == target_obj.id:
source_object.emit_to("You can't destroy yourself.")
return
if not switch_override:
session.msg("You must use @destroy/override on players.")
source_object.emit_to("You must use @destroy/override on players.")
return
if target_obj.is_superuser():
session.msg("You can't destroy a superuser.")
source_object.emit_to("You can't destroy a superuser.")
return
elif target_obj.is_going() or target_obj.is_garbage():
session.msg("That object is already destroyed.")
source_object.emit_to("That object is already destroyed.")
return
session.msg("You destroy %s." % (target_obj.get_name(),))
source_object.emit_to("You destroy %s." % target_obj.get_name())
target_obj.destroy()