Correct for PEP8 compliance. Add contrib entry to README.

This commit is contained in:
Griatch 2017-04-17 08:43:01 +02:00
parent 011ba18d5b
commit 0fb7d13d63
2 changed files with 116 additions and 106 deletions

View file

@ -19,6 +19,8 @@ things you want from here into your game folder and change them there.
for any game. Allows safe trading of any godds (including coin) for any game. Allows safe trading of any godds (including coin)
* CharGen (Griatch 2011) - A simple Character creator for OOC mode. * CharGen (Griatch 2011) - A simple Character creator for OOC mode.
Meant as a starting point for a more fleshed-out system. Meant as a starting point for a more fleshed-out system.
* Clothing (BattleJenkins 2017) - A layered clothing system with
slots for different types of garments auto-showing in description.
* Custom gametime (Griatch, vlgeoff 2017) - Implements Evennia's * Custom gametime (Griatch, vlgeoff 2017) - Implements Evennia's
gametime module but for custom game world-specific calendars. gametime module but for custom game world-specific calendars.
* Dice (Griatch 2012) - A fully featured dice rolling system. * Dice (Griatch 2012) - A fully featured dice rolling system.

View file

@ -63,13 +63,13 @@ with which to test the system:
@create a pretty shirt : evennia.contrib.clothing.Clothing @create a pretty shirt : evennia.contrib.clothing.Clothing
@set shirt/clothing_type = 'top' @set shirt/clothing_type = 'top'
""" """
from evennia import DefaultObject from evennia import DefaultObject
from evennia import DefaultCharacter from evennia import DefaultCharacter
from evennia import default_cmds from evennia import default_cmds
from evennia.commands.default.muxcommand import MuxCommand from evennia.commands.default.muxcommand import MuxCommand
from evennia.utils import search
from evennia.utils import list_to_string from evennia.utils import list_to_string
from evennia.utils import evtable from evennia.utils import evtable
@ -77,13 +77,14 @@ from evennia.utils import evtable
# Maximum character length of 'wear style' strings, or None for unlimited. # Maximum character length of 'wear style' strings, or None for unlimited.
WEARSTYLE_MAXLENGTH = 50 WEARSTYLE_MAXLENGTH = 50
# The order in which clothing types appear on the description. Untyped clothing goes last. # The order in which clothing types appear on the description. Untyped clothing goes last.
CLOTHING_TYPE_ORDER = ['hat','jewelry','top','undershirt','gloves','fullbody','bottom','underpants','socks','shoes','accessory'] CLOTHING_TYPE_ORDER = ['hat', 'jewelry', 'top', 'undershirt', 'gloves', 'fullbody', 'bottom',
'underpants', 'socks', 'shoes', 'accessory']
# The maximum number of each type of clothes that can be worn. Unlimited if untyped or not specified. # The maximum number of each type of clothes that can be worn. Unlimited if untyped or not specified.
CLOTHING_TYPE_LIMIT = { CLOTHING_TYPE_LIMIT = {
'hat':1, 'hat': 1,
'gloves':1, 'gloves': 1,
'socks':1, 'socks': 1,
'shoes':1 'shoes': 1
} }
# The maximum number of clothing items that can be worn, or None for unlimited. # The maximum number of clothing items that can be worn, or None for unlimited.
CLOTHING_OVERALL_LIMIT = 20 CLOTHING_OVERALL_LIMIT = 20
@ -92,19 +93,16 @@ CLOTHING_OVERALL_LIMIT = 20
# on that auto-covers it - for example, it's perfectly possible to have your underpants # on that auto-covers it - for example, it's perfectly possible to have your underpants
# showing if you put them on after your pants! # showing if you put them on after your pants!
CLOTHING_TYPE_AUTOCOVER = { CLOTHING_TYPE_AUTOCOVER = {
'top':['undershirt'], 'top': ['undershirt'],
'bottom':['underpants'], 'bottom': ['underpants'],
'fullbody':['undershirt','underpants'], 'fullbody': ['undershirt', 'underpants'],
'shoes':['socks'] 'shoes': ['socks']
} }
# Types of clothes that can't be used to cover other clothes. # Types of clothes that can't be used to cover other clothes.
CLOTHING_TYPE_CANT_COVER_WITH = ['jewelry'] CLOTHING_TYPE_CANT_COVER_WITH = ['jewelry']
"""
---------------------------------------------------------------------------- # HELPER FUNCTIONS START HERE
HELPER FUNCTIONS START HERE
----------------------------------------------------------------------------
"""
def order_clothes_list(clothes_list): def order_clothes_list(clothes_list):
""" """
@ -133,6 +131,7 @@ def order_clothes_list(clothes_list):
ordered_clothes_list.insert(0, clothes) ordered_clothes_list.insert(0, clothes)
return ordered_clothes_list return ordered_clothes_list
def get_worn_clothes(character, exclude_covered=False): def get_worn_clothes(character, exclude_covered=False):
""" """
Get a list of clothes worn by a given character. Get a list of clothes worn by a given character.
@ -153,7 +152,7 @@ def get_worn_clothes(character, exclude_covered=False):
clothes_list = [] clothes_list = []
for thing in character.contents: for thing in character.contents:
# If uncovered or not excluding covered items # If uncovered or not excluding covered items
if not thing.db.covered_by or exclude_covered == False: if not thing.db.covered_by or exclude_covered is False:
# If 'worn' is True, add to the list # If 'worn' is True, add to the list
if thing.db.worn: if thing.db.worn:
clothes_list.append(thing) clothes_list.append(thing)
@ -161,6 +160,7 @@ def get_worn_clothes(character, exclude_covered=False):
ordered_clothes_list = order_clothes_list(clothes_list) ordered_clothes_list = order_clothes_list(clothes_list)
return ordered_clothes_list return ordered_clothes_list
def clothing_type_count(clothes_list): def clothing_type_count(clothes_list):
""" """
Returns a dictionary of the number of each clothing type Returns a dictionary of the number of each clothing type
@ -186,6 +186,7 @@ def clothing_type_count(clothes_list):
types_count[type] += 1 types_count[type] += 1
return types_count return types_count
def single_type_count(clothes_list, type): def single_type_count(clothes_list, type):
""" """
Returns an integer value of the number of a given type of clothing in a list. Returns an integer value of the number of a given type of clothing in a list.
@ -205,6 +206,7 @@ def single_type_count(clothes_list, type):
type_count += 1 type_count += 1
return type_count return type_count
class Clothing(DefaultObject): class Clothing(DefaultObject):
def wear(self, wearer, wearstyle, quiet=False): def wear(self, wearer, wearstyle, quiet=False):
@ -230,7 +232,8 @@ class Clothing(DefaultObject):
to_cover = [] to_cover = []
if self.db.clothing_type and self.db.clothing_type in CLOTHING_TYPE_AUTOCOVER: if self.db.clothing_type and self.db.clothing_type in CLOTHING_TYPE_AUTOCOVER:
for garment in get_worn_clothes(wearer): for garment in get_worn_clothes(wearer):
if garment.db.clothing_type and garment.db.clothing_type in CLOTHING_TYPE_AUTOCOVER[self.db.clothing_type]: if garment.db.clothing_type and garment.db.clothing_type \
in CLOTHING_TYPE_AUTOCOVER[self.db.clothing_type]:
to_cover.append(garment) to_cover.append(garment)
garment.db.covered_by = self garment.db.covered_by = self
# Return if quiet # Return if quiet
@ -238,7 +241,7 @@ class Clothing(DefaultObject):
return return
# Echo a message to the room # Echo a message to the room
message = "%s puts on %s" % (wearer, self.name) message = "%s puts on %s" % (wearer, self.name)
if not wearstyle == True: if wearstyle is not True:
message = "%s wears %s %s" % (wearer, self.name, wearstyle) message = "%s wears %s %s" % (wearer, self.name, wearstyle)
if to_cover: if to_cover:
message = message + ", covering %s" % list_to_string(to_cover) message = message + ", covering %s" % list_to_string(to_cover)
@ -278,6 +281,7 @@ class Clothing(DefaultObject):
""" """
self.db.worn = False self.db.worn = False
class ClothedCharacter(DefaultCharacter): class ClothedCharacter(DefaultCharacter):
""" """
Character that displays worn clothing when looked at. You can also Character that displays worn clothing when looked at. You can also
@ -309,7 +313,7 @@ class ClothedCharacter(DefaultCharacter):
# Append worn, uncovered clothing to the description # Append worn, uncovered clothing to the description
for garment in clothes_list: for garment in clothes_list:
# If 'worn' is True, just append the name # If 'worn' is True, just append the name
if garment.db.worn == True: if garment.db.worn is True:
worn_string_list.append(garment.name) worn_string_list.append(garment.name)
# Otherwise, append the name and the string value of 'worn' # Otherwise, append the name and the string value of 'worn'
elif garment.db.worn: elif garment.db.worn:
@ -323,36 +327,8 @@ class ClothedCharacter(DefaultCharacter):
string += "|/|/%s is not wearing anything." % self string += "|/|/%s is not wearing anything." % self
return string return string
"""
----------------------------------------------------------------------------
COMMANDS START HERE
----------------------------------------------------------------------------
"""
class ClothedCharacterCmdSet(default_cmds.CharacterCmdSet): # COMMANDS START HERE
"""
Command set for clothing, including new versions of 'give' and 'drop'
that take worn and covered clothing into account, as well as a new
version of 'inventory' that differentiates between carried and worn
items.
"""
key = "DefaultCharacter"
def at_cmdset_creation(self):
"""
Populates the cmdset
"""
super(ClothedCharacterCmdSet, self).at_cmdset_creation()
#
# any commands you add below will overload the default ones.
#
self.add(CmdWear())
self.add(CmdRemove())
self.add(CmdCover())
self.add(CmdUncover())
self.add(CmdGive())
self.add(CmdDrop())
self.add(CmdInventory())
class CmdWear(MuxCommand): class CmdWear(MuxCommand):
""" """
@ -414,6 +390,7 @@ class CmdWear(MuxCommand):
wearstyle = wearstring wearstyle = wearstring
clothing.wear(self.caller, wearstyle) clothing.wear(self.caller, wearstyle)
class CmdRemove(MuxCommand): class CmdRemove(MuxCommand):
""" """
Takes off an item of clothing. Takes off an item of clothing.
@ -444,6 +421,7 @@ class CmdRemove(MuxCommand):
return return
clothing.remove(self.caller) clothing.remove(self.caller)
class CmdCover(MuxCommand): class CmdCover(MuxCommand):
""" """
Covers a worn item of clothing with another you're holding or wearing. Covers a worn item of clothing with another you're holding or wearing.
@ -497,10 +475,11 @@ class CmdCover(MuxCommand):
self.caller.msg("%s is already covered by %s." % (cover_with.name, to_cover.db.covered_by.name)) self.caller.msg("%s is already covered by %s." % (cover_with.name, to_cover.db.covered_by.name))
return return
if not cover_with.db.worn: if not cover_with.db.worn:
cover_with.wear(self.caller, True) #Put on the item to cover with if it's not on already cover_with.wear(self.caller, True) # Put on the item to cover with if it's not on already
self.caller.location.msg_contents("%s covers %s with %s." % (self.caller, to_cover.name, cover_with.name)) self.caller.location.msg_contents("%s covers %s with %s." % (self.caller, to_cover.name, cover_with.name))
to_cover.db.covered_by = cover_with to_cover.db.covered_by = cover_with
class CmdUncover(MuxCommand): class CmdUncover(MuxCommand):
""" """
Reveals a worn item of clothing that's currently covered up. Reveals a worn item of clothing that's currently covered up.
@ -542,6 +521,7 @@ class CmdUncover(MuxCommand):
self.caller.location.msg_contents("%s uncovers %s." % (self.caller, to_uncover.name)) self.caller.location.msg_contents("%s uncovers %s." % (self.caller, to_uncover.name))
to_uncover.db.covered_by = None to_uncover.db.covered_by = None
class CmdDrop(MuxCommand): class CmdDrop(MuxCommand):
""" """
drop something drop something
@ -590,6 +570,7 @@ class CmdDrop(MuxCommand):
# Call the object script's at_drop() method. # Call the object script's at_drop() method.
obj.at_drop(caller) obj.at_drop(caller)
class CmdGive(MuxCommand): class CmdGive(MuxCommand):
""" """
give away something to someone give away something to someone
@ -638,6 +619,7 @@ class CmdGive(MuxCommand):
# Call the object script's at_give() method. # Call the object script's at_give() method.
to_give.at_give(caller, target) to_give.at_give(caller, target)
class CmdInventory(MuxCommand): class CmdInventory(MuxCommand):
""" """
view inventory view inventory
@ -679,3 +661,29 @@ class CmdInventory(MuxCommand):
wear_table.add_row("|CNothing.|n", "") wear_table.add_row("|CNothing.|n", "")
string += "|/|wYou are wearing:\n%s" % wear_table string += "|/|wYou are wearing:\n%s" % wear_table
self.caller.msg(string) self.caller.msg(string)
class ClothedCharacterCmdSet(default_cmds.CharacterCmdSet):
"""
Command set for clothing, including new versions of 'give' and 'drop'
that take worn and covered clothing into account, as well as a new
version of 'inventory' that differentiates between carried and worn
items.
"""
key = "DefaultCharacter"
def at_cmdset_creation(self):
"""
Populates the cmdset
"""
super(ClothedCharacterCmdSet, self).at_cmdset_creation()
#
# any commands you add below will overload the default ones.
#
self.add(CmdWear())
self.add(CmdRemove())
self.add(CmdCover())
self.add(CmdUncover())
self.add(CmdGive())
self.add(CmdDrop())
self.add(CmdInventory())