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:
parent
50f4d04096
commit
9407eb0ee4
20 changed files with 680 additions and 712 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue