Added some more functionality to the copy method of objects, as well as some minor fixes.
This commit is contained in:
parent
3c96dc9cc9
commit
cc6fa079b6
3 changed files with 30 additions and 20 deletions
|
|
@ -825,8 +825,20 @@ class ObjectDB(TypedObject):
|
||||||
<old_key>_copy by default.
|
<old_key>_copy by default.
|
||||||
Returns: Object (copy of this one)
|
Returns: Object (copy of this one)
|
||||||
"""
|
"""
|
||||||
if not new_key:
|
def find_clone_key():
|
||||||
new_key = "%s_copy" % self.key
|
"""
|
||||||
|
Append 01, 02 etc to obj.key. Checks next higher number in the
|
||||||
|
same location, then adds the next number available
|
||||||
|
|
||||||
|
returns the new clone name on the form keyXX
|
||||||
|
"""
|
||||||
|
key = self.key
|
||||||
|
num = 1
|
||||||
|
for obj in (obj for obj in self.location.contents
|
||||||
|
if obj.key.startswith(key) and obj.key.lstrip(key).isdigit()):
|
||||||
|
num += 1
|
||||||
|
return "%s%02i" % (key, num)
|
||||||
|
new_key = new_key or find_clone_key(self)
|
||||||
return ObjectDB.objects.copy_object(self, new_key=new_key)
|
return ObjectDB.objects.copy_object(self, new_key=new_key)
|
||||||
|
|
||||||
delete_iter = 0
|
delete_iter = 0
|
||||||
|
|
|
||||||
|
|
@ -389,15 +389,14 @@ class Object(TypeClass):
|
||||||
# controller, for example)
|
# controller, for example)
|
||||||
|
|
||||||
dbref = self.dbobj.dbref
|
dbref = self.dbobj.dbref
|
||||||
|
self.locks.add(";".join("control:perm(Immortals)", # edit locks/permissions, delete
|
||||||
self.locks.add("control:perm(Immortals)") # edit locks/permissions, delete
|
"examine:perm(Builders)", # examine properties
|
||||||
self.locks.add("examine:perm(Builders)") # examine properties
|
"view:all()", # look at object (visibility)
|
||||||
self.locks.add("view:all()") # look at object (visibility)
|
"edit:perm(Wizards)", # edit properties/attributes
|
||||||
self.locks.add("edit:perm(Wizards)") # edit properties/attributes
|
"delete:perm(Wizards)", # delete object
|
||||||
self.locks.add("delete:perm(Wizards)") # delete object
|
"get:all()", # pick up object
|
||||||
self.locks.add("get:all()") # pick up object
|
"call:true()", # allow to call commands on this object
|
||||||
self.locks.add("call:true()") # allow to call commands on this object
|
"puppet:id(%s) or perm(Immortals) or pperm(Immortals)" % dbref)) # restricts puppeting of this object
|
||||||
self.locks.add("puppet:id(%s) or perm(Immortals) or pperm(Immortals)" % dbref) # restricts puppeting of this object
|
|
||||||
|
|
||||||
def basetype_posthook_setup(self):
|
def basetype_posthook_setup(self):
|
||||||
"""
|
"""
|
||||||
|
|
@ -721,9 +720,8 @@ class Character(Object):
|
||||||
overload the defaults (it is called after this one).
|
overload the defaults (it is called after this one).
|
||||||
"""
|
"""
|
||||||
super(Character, self).basetype_setup()
|
super(Character, self).basetype_setup()
|
||||||
self.locks.add("get:false()") # noone can pick up the character
|
self.locks.add(";".join("get:false()", # noone can pick up the character
|
||||||
self.locks.add("call:false()") # no commands can be called on character from outside
|
"call:false()")) # no commands can be called on character from outside
|
||||||
|
|
||||||
# add the default cmdset
|
# add the default cmdset
|
||||||
from settings import CMDSET_DEFAULT
|
from settings import CMDSET_DEFAULT
|
||||||
self.cmdset.add_default(CMDSET_DEFAULT, permanent=True)
|
self.cmdset.add_default(CMDSET_DEFAULT, permanent=True)
|
||||||
|
|
@ -790,10 +788,10 @@ class Room(Object):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
super(Room, self).basetype_setup()
|
super(Room, self).basetype_setup()
|
||||||
self.locks.add("get:false();puppet:false()") # would be weird to puppet a room ...
|
self.locks.add(";".join("get:false()",
|
||||||
|
"puppet:false()")) # would be weird to puppet a room ...
|
||||||
self.location = None
|
self.location = None
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Exits
|
# Exits
|
||||||
#
|
#
|
||||||
|
|
@ -886,9 +884,9 @@ class Exit(Object):
|
||||||
super(Exit, self).basetype_setup()
|
super(Exit, self).basetype_setup()
|
||||||
|
|
||||||
# setting default locks (overload these in at_object_creation()
|
# setting default locks (overload these in at_object_creation()
|
||||||
self.locks.add("puppet:false()") # would be weird to puppet an exit ...
|
self.locks.add(";".join("puppet:false()", # would be weird to puppet an exit ...
|
||||||
self.locks.add("traverse:all()") # who can pass through exit by default
|
"traverse:all()", # who can pass through exit by default
|
||||||
self.locks.add("get:false()") # noone can pick up the exit
|
"get:false()")) # noone can pick up the exit
|
||||||
|
|
||||||
# an exit should have a destination (this is replaced at creation time)
|
# an exit should have a destination (this is replaced at creation time)
|
||||||
if self.dbobj.location:
|
if self.dbobj.location:
|
||||||
|
|
|
||||||
|
|
@ -539,7 +539,7 @@ def from_pickle(data, do_pickle=True):
|
||||||
return item
|
return item
|
||||||
elif _IS_PACKED_DBOBJ(item): # this is a tuple and must be done before tuple-check
|
elif _IS_PACKED_DBOBJ(item): # this is a tuple and must be done before tuple-check
|
||||||
#print item[1], item[2]
|
#print item[1], item[2]
|
||||||
if item[2]: #TODO Not sure why this could ever be None, but it can
|
if item[2]: #Not sure why this could ever be None, but it can
|
||||||
return _TO_TYPECLASS(_TO_MODEL_MAP[item[1]].objects.get(id=item[2]))
|
return _TO_TYPECLASS(_TO_MODEL_MAP[item[1]].objects.get(id=item[2]))
|
||||||
return None
|
return None
|
||||||
elif dtype == tuple:
|
elif dtype == tuple:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue