def func(self): arglist = self.arglist args = self.args rhs = self.rhs lhs = self.lhs switches = self.switches if not args: self.caller.msg(evtable.EvTable("Downtime",table=self.caller.db.timelog)) return elif self.IsInt(lhs): if rhs != "": if int(lhs) <= self.caller.db.downtime: self.caller.db.timelog.append(self.TimeLog(int(lhs),self.caller.location.name,rhs)) self.caller.msg("Spending "+lhs+" hours of downtime for "+rhs) self.caller.db.downtime -= int(lhs) return else: self.caller.msg("You don't have that much downtime left!") return else: self.caller.msg("You must provide a reason for your downtime expenditure in order to spend it!") elif len(switches) > 0: if switches[0].lower() == "peek" and self.caller.IsAdmin(): timelog = [] if inherits_from(search.objects(arglist[0])[0],DefaultCharacter): try: for item in search.objects(arglist[0])[0].db.timelog: timelog.append(item) timebox = StatBlock(str(search.objects(arglist[0])[0])+"'s time log",False,timelog) timebox.SetColumns(1) self.caller.msg(timebox.Show()+timebox.Footer()) except AttributeError: self.caller.msg("Character not found!")
def func(self): "implements the actual functionality" bag = search.objects('bag1')[0] def exists(self, word): "check for words from centre, then words from players" if not Counter(word) - Counter(search.objects('bag1')[0].db.centre.replace(" ","")): return True def update(self, centre, word): "update the tiles in the centre after a word has been made" for i in range(len(word)): p = centre.index(word[i]) p1 = bytearray(centre) del p1[p] centre = str(p1) centre = centre.replace(" ","") temp_centre = "" for i in range(len(centre)): temp_centre = temp_centre + " " + centre[i] return temp_centre word = self.args.strip().rstrip().upper() if not search.objects('bag1'): self.caller.msg("(Only you can see this)") self.caller.msg("No tile bags exist. Create a bag using <start>") return if '?' not in word: if word in bag.db.csw15 and exists(self, word): self.caller.db.words += (word+" ") bag.db.centre = update(self, bag.db.centre, word) for acc in Character.objects.all(): acc.msg(self.caller.key + " made "+ word + "!") acc.msg("Tile(s) in the centre are: " + bag.db.centre) for acc1 in Character.objects.all(): acc.msg(acc1.key + "'s words: " + acc1.db.words) else: for acc in Character.objects.all(): acc.msg(self.caller.key + " attempted "+ word + " - which is not allowed.") else: if exists(self, word): for i in ascii_uppercase: if word.replace("?",i in bag.db.csw15): bag.db.centre = update(self, bag.db.centre, word) self.caller.db.words += (word+" ") for acc in Character.objects.all(): acc.msg(self.caller.key + " made "+ word + "!") acc.msg("Tile(s) in the centre are: " + bag.db.centre) for acc1 in Character.objects.all(): acc.msg(acc1.key + "'s words: " + acc1.db.words) break else: for acc in Character.objects.all(): acc.msg(self.caller.key + " attempted " + word + " - which is not allowed.")
def func(self): "implements the actual functionality" bag_obj = search.objects('bag1') if not bag_obj: self.caller.msg("(Only you can see this)") self.caller.msg("No tile bags exist. Create a bag using <start>") else: self.caller.msg("(Only you can see this)") self.caller.msg("Number of bags is: "+str(len(bag_obj)))
def func(self): "implements the actual functionality" bag_obj = search.objects('bag1') if not bag_obj: self.caller.msg("(Only you can see this)") self.caller.msg("No tile bags exist. Create a bag using <start>") else: bag_obj[len(bag_obj)-1].delete() for acc in Character.objects.all(): acc.msg("A tile bag was just killed because of "+self.caller.key+"'s whims.") acc.msg("Number of bags left: "+str(len(bag_obj)-1))
def ShowEquip(self): equiptable = evtable.EvTable("Name", "Dice Bonus", border="table", header_line_char="-") chargenref = search.objects("Chargen")[0] equiptable.hrules = 0 equiptable.vrules = 0 equipcount = 0 for item in self.db.equipinv: for ref in chargenref.db.equip.db.equipment: if item[0] == ref[0]: equiptable.add_row(item[0], item[1]) equipcount += 1 equiptable.width = 78 if equipcount == 0: equiptable = "" return equiptable
def func(self): "implements the actual functionality" bag_obj = search.objects('bag1') if not bag_obj: self.caller.msg("(Only you can see this)") self.caller.msg("No tile bags exist. Create a bag using <start>") else: bag = bag_obj[0] num = self.args.strip() valid0 = len(num) if valid0 == 0: self.caller.msg("(Only you can see this)") self.caller.msg("Enter the number of tiles to be drawn along with the command") return valid1 = num.isdigit() if not valid1: self.caller.msg("(Only you can see this)") self.caller.msg("Enter a valid integer") return valid2 = int(num) <= 7 and int(num) >= 1 if bag.check_bag_size() == 0: for acc in Character.objects.all(): acc.msg("Game over. The tile bag is now empty. Create a new bag using <start>") bag.delete() return if not valid2: self.caller.msg("(Only you can see this)") self.caller.msg("Enter a valid integer in the range [1,7]") return valid3 = int(num) <= bag.check_bag_size() if not valid3: self.caller.msg("(Only you can see this)") self.msg("Not enough tiles left, number of tiles left is: "+str(bag.check_bag_size())) return removed = ' '.join(bag.remove_tiles(int(num))) bag.db.centre = str(bag.db.centre) + " " + removed # DB centre reminds me of Nishit for acc in Character.objects.all(): for word in acc.db.words: pass for acc in Character.objects.all(): acc.msg(self.caller.key+" removed " + removed) acc.msg("Tile(s) in the centre are: " + bag.db.centre) for acc1 in Character.objects.all(): acc.msg(acc1.key + "'s words: " + acc1.db.words)
def at_initial_setup(): limbo = search.objects('Limbo')[0] limbo.db.desc = dedent(""" Welcome to {mAinneve{n, the example game for Evennia! The project is still in early development, and we welcome your contributions. {YDeveloper/Builder Resources{n * Issue tracking: https://github.com/evennia/ainneve/issues * Discussion list: https://groups.google.com/forum/?fromgroups#!categories/evennia/ainneve * Ainneve Wiki: https://github.com/evennia/ainneve/wiki * Evennia Developer IRC: http://webchat.freenode.net/?channels=evennia {YGetting Started{n As Player #1 you can use the {w@batchcmd{n or {w@batchcode{n commands to build components of Ainneve, or the entire world (once it has been created). Build scripts are in the {wworld/build/{n directory and have {w*.ev{n or {w*.py{n extensions. """)
def at_initial_setup(): limbo = search.objects('Limbo')[0] limbo.db.desc = dedent(""" Welcome to |mAinneve|n, the example game for Evennia! The project is still in early development, and we welcome your contributions. |YDeveloper/Builder Resources|n * Issue tracking: https://github.com/evennia/ainneve/issues * Discussion list: https://groups.google.com/forum/?fromgroups#!categories/evennia/ainneve * Ainneve Wiki: https://github.com/evennia/ainneve/wiki * Evennia Developer IRC: http://webchat.freenode.net/?channels=evennia |YGetting Started|n As Account #1 you can use the |w@batchcmd|n or |w@batchcode|n commands to build components of Ainneve, or the entire world (once it has been created). Build scripts are in the |wworld/content/{area name}/|n directories and have |w*.ev|n or |w*.py|n extensions. """)
def ShowArmor(self): armortable = evtable.EvTable("Name", "Armor", "Strength", "Defense", "Speed", "Coverage", border="table", header_line_char="-") chargenref = search.objects("Chargen")[0] armorcount = 0 for item in self.db.equipinv: for ref in chargenref.db.equip.db.armor: if item[0] == ref[0]: armortable.add_row(item[0], item[1], item[2], item[3], item[4], item[5]) armorcount += 1 armortable.width = 78 if armorcount == 0: armortable = "" return armortable
def at_initial_setup(): limbo = search.objects('Limbo')[0] # limbo.db.desc = dedent(""" # Welcome to |mCelestiaMUD|n, a game of crewing spaceships and stations! # The project is still in early development, and we welcome your contributions. # |YDeveloper/Builder Resources|n # * Issue tracking: https://github.com/evennia/ainneve/issues # * Discussion list: https://groups.google.com/forum/?fromgroups#!categories/evennia/ainneve # * Ainneve Wiki: https://github.com/evennia/ainneve/wiki # * Evennia Developer IRC: http://webchat.freenode.net/?channels=evennia # |YGetting Started|n # As Account #1 you can use the |w@batchcmd|n or |w@batchcode|n commands to # build components of Ainneve, or the entire world (once it has been created). # Build scripts are in the |wworld/content/{area name}/|n directories and have |w*.ev|n or |w*.py|n extensions. # """) limbo.db.desc = dedent(""" Welcome to |mCelestiaMUD|n, a game of crewing spaceships and stations! The project is still in early development, |YGetting Started|n TODO: Character screen here """)
def ShowVehicles(self): vehicletable = evtable.EvTable("Name", "Dice Modifier", "Size", "Speed", "Special", border="table", header_line_char="-") chargenref = search.objects("Chargen")[0] vehicletable.hrules = 0 vehicletable.vrules = 0 vehiclecount = 0 for item in self.db.equipinv: for ref in chargenref.db.equip.db.vehicles: if item[0] == ref[0]: vehicletable.add_row(item[0], item[1], item[2], item[3], item[4]) vehiclecount += 1 vehicletable.width = 78 if vehiclecount == 0: vehicletable = "" return vehicletable
def ShowWeapon(self): weapontable = evtable.EvTable("Name", "Damage", "Init", "Strength", "Size", "Tags", border="table", header_line_char="-") chargenref = search.objects("Chargen")[0] weapontable.hrules = 0 weapontable.vrules = 0 weaponcount = 0 for item in self.db.equipinv: for ref in chargenref.db.equip.db.weapons: if item[0].lower() == ref[0].lower(): weapontable.add_row(item[0], item[1], item[2], item[3], item[4], item[5]) weaponcount += 1 weapontable.width = 78 if weaponcount == 0: weapontable = "" return weapontable
def ShowExplosives(self): explosivetable = evtable.EvTable("Name", "Damage", "Init", "Area", "Force", "Strength", "Size", "Tags", header_line_char="-") chargenref = search.objects("Chargen")[0] explosivetable.hrules = 0 explosivetable.vrules = 0 explosivecount = 0 for item in self.db.equipinv: for ref in chargenref.db.equip.db.explosives: if item[0] == ref[0]: explosivetable.add_row(item[0], item[1], item[2], item[3], item[4], item[5], item[6], item[7]) explosivecount += 1 explosivetable.width = 78 if explosivecount == 0: explosivetable = "" return explosivetable
def func(self): boardsearch = search.scripts('BoardSystem') if not boardsearch: create_script("world.boardsystem.BBS", key="BoardSystem", persistent=True) self.caller.msg("Board system initialized.") boardsearch = search.scripts('BoardSystem')[0] else: boardsearch = boardsearch[0] if self.cmdstring == "+bbread": if not self.args: board_rows = "" boardmessage = "/" + "-" * 36 + "BBS" + "-" * 37 + "\\\n" if len(boardsearch.db.boardnames) == 0: board_rows = "||" + " " * 36 + "None" + " " * 36 + "||\n" else: hideboard = True boardrow = "" boardrow = "" boardmessage += "|| #" + " " + " " * 3 + " " * 5 + "Board Title" + " " * 6 + " Posts " + " " * 4 + "Last Poster" + " " * 4 + " " * 4 + "Last Post" + " " * 6 + "||\n" for name in boardsearch.db.boardnames.keys(): boardrow += "||" if boardsearch.db.boardnames[name] > 9: pass else: boardrow += " " boardrow += str(boardsearch.db.boardnames[name]) if len(boardsearch.db.boardperms[ int(boardsearch.db.boardnames[name]) - 1]) > 0: for lock in boardsearch.db.boardperms: if boardsearch.db.boardperms.index(lock) == ( boardsearch.db.boardnames[name] - 1): if "see" in lock: postlock = lock.split(":")[1] self.caller.msg(postlock) if self.caller.locks.check_lockstring( self, "dumm:" + postlock ) or self.caller.IsAdmin(): hideboard = False break if hideboard == True: hideboard = False continue try: for item in boardsearch.db.board[ boardsearch.db.boardnames[name] - 1]: if item[1] == self.caller.name: break elif len(self.caller.db.readmessages[ boardsearch.db.boardnames[name] - 1]) < len(boardsearch.db.board[ boardsearch.db.boardnames[name] - 1]): boardrow += " U " break elif not ( boardsearch.db.board[ boardsearch.db. boardnames[name]].index(item) in self.caller.db.readmessages[ boardsearch.db.boardnames[name]]): boardrow += " U " break if not ("U" in boardrow): boardrow += " " except IndexError: boardrow += " U " boardrow += " " * (10 - (len(name) / 2)) + name + " " * ( 10 - (len(name) / 2)) try: boardrow += " " * (5 - len(boardsearch.db.board[ boardsearch.db.boardnames[name] - 1])) + str( len(boardsearch.db.board[ boardsearch.db.boardnames[name] - 1])) boardrow += " " * (4 - len(boardsearch.db.board[ boardsearch.db.boardnames[name] - 1])) except IndexError: boardrow += " " * 4 + str(0) boardrow += " " * 4 try: boardrow += ( " " * (12 - (len(boardsearch.db.board[ boardsearch.db.boardnames[name] - 1][len(boardsearch.db.board) - 1][1]) / 2)) + str(boardsearch.db.board[ boardsearch.db.boardnames[name] - 1][len(boardsearch.db.board) - 1][1]) + " " * (12 - (len(boardsearch.db.board[ boardsearch.db.boardnames[name] - 1][len(boardsearch.db.board) - 1][1]) / 2)) ) except IndexError: boardrow += " " * 8 + "None" + " " * 12 try: boardrow += " " * ( 6 - (len(boardsearch.db.board[ boardsearch.db.boardnames[name] - 1][len(boardsearch.db.board) - 1][2]) / 2) ) + boardsearch.db.board[ boardsearch.db.boardnames[name] - 1][len(boardsearch.db.board) - 1][2] + " " * ( 10 - (len(boardsearch.db.board[ boardsearch.db.boardnames[name] - 1][len(boardsearch.db.board) - 1][2]) / 2)) except IndexError: boardrow += " " * 2 + "Never" + " " * 7 boardrow += "||\n" board_rows += boardrow boardrow = "" boardmessage += "+" + "-" * 76 + "+\n" boardfooter = "\\" + "-" * 76 + "/" self.caller.msg(boardmessage + board_rows + boardfooter) else: boardmessage = "" try: int(self.args) boardrow = "" board_rows = "" lockboard = True boardnamelist = list(boardsearch.db.boardnames.keys()) for name in boardnamelist: if len(boardsearch.db.boardperms[ int(boardsearch.db.boardnames[name]) - 1]) > 0: for lock in boardsearch.db.boardperms: if boardsearch.db.boardperms.index(lock) == ( boardsearch.db.boardnames[name] - 1): if "see" in lock or "post" in lock or "read" in lock: postlock = lock.split(":")[1] if self.caller.locks.check_lockstring( self, "dumm:" + postlock ) or self.caller.IsAdmin(): lockboard = False break if lockboard == True: self.caller.msg( "You can't read this board!") return try: boardnames = boardsearch.db.boardnames boardname = list( boardsearch.db.boardnames)[int(self.args) - 1] boardindex = boardnames[boardname] thisboard = boardsearch.db.board[boardnames[boardname] - 1] if len(boardname) % 2 == 0: boardmessage += "/" + "-" * ( 38 - len(boardname) / 2) + boardname + "-" * ( 38 - len(boardname) / 2) + "\\\n" else: boardmessage += "/" + "-" * ( 38 - len(boardname) / 2) + boardname + "-" * ( 37 - len(boardname) / 2) + "\\\n" boardmessage += "|| # " + " " * 13 + "Post Name" + " " * 13 + " " * 7 + "Poster" + " " * 7 + " " * 4 + "Date" + " " * 4 + "||\n" boardmessage += "+" + "-" * 76 + "+\n" try: for post in thisboard: boardrow += "|| " + str( boardindex) + "/" + str( thisboard.index(post) + 1) if thisboard.index( post ) + 1 in self.caller.db.readmessages[ boardindex - 1] or thisboard[thisboard.index( post)][1] == self.caller.name: boardrow += " " * (9 - len(boardrow)) else: boardrow += "U" + " " * (9 - len(boardrow)) if len(thisboard[thisboard.index(post)] [0]) % 2 == 0: boardrow += " " * (19 - len( thisboard[thisboard.index(post)][0] ) / 2) + thisboard[thisboard.index( post)][0] + " " * (16 - len(thisboard[ thisboard.index(post)][0]) / 2) else: boardrow += " " * (28 - len( thisboard[thisboard.index(post)][0] ) / 2) + thisboard[thisboard.index( post)][0] + " " * (16 - len(thisboard[ thisboard.index(post)][0]) / 2) if len(thisboard[thisboard.index(post)] [1]) % 2 == 0: boardrow += " " * (11 - len( thisboard[thisboard.index(post)][1] ) / 2) + thisboard[thisboard.index( post)][1] + " " * (9 - len(thisboard[ thisboard.index(post)][1]) / 2) else: boardrow += " " * (11 - len( thisboard[thisboard.index(post)][1] ) / 2) + thisboard[thisboard.index( post)][1] + " " * (8 - len(thisboard[ thisboard.index(post)][1]) / 2) if len(thisboard[thisboard.index(post)] [2]) % 2 == 0: boardrow += " " * (7 - len( thisboard[thisboard.index(post)][2] ) / 2) + thisboard[thisboard.index( post)][2] + " " * (4 - len(thisboard[ thisboard.index(post)][2]) / 2) else: boardrow += " " * (6 - len( thisboard[thisboard.index(post)][2] ) / 2) + thisboard[thisboard.index( post)][2] + " " * (4 - len(thisboard[ thisboard.index(post)][2]) / 2) boardrow += " ||\n" board_rows += boardrow boardrow = "" except IndexError: pass boardfooter = "\\" + "-" * 76 + "/" self.caller.msg(boardmessage + board_rows + boardfooter) except IndexError: self.caller.msg("Invalid board.") return except ValueError: if "/" in self.args: try: boardnames = boardsearch.db.boardnames boardlist = boardsearch.db.board boardkeys = list(boardnames.keys()) boardindex = int(self.args.split("/")[0]) - 1 postindex = int(self.args.split("/")[1]) - 1 postbody = "" try: posttitle = boardkeys[boardindex] posttext = wrap( boardlist[boardindex][postindex][3], 76) postauthor = boardlist[boardindex][postindex][ 1] postdate = boardlist[boardindex][postindex][2] if len(posttitle) % 2 == 0: postheader = "/" + "-" * (38 - len( posttitle) / 2) + posttitle + "-" * ( 38 - len(posttitle) / 2) + "\\\n" else: postheader = "/" + "-" * (37 - len( posttitle) / 2) + posttitle + "-" * ( 38 - len(posttitle) / 2) + "\\\n" postheader += "|| Post: " + str( boardindex + 1) + "/" + str(postindex + 1) if len(posttitle) % 2 == 0: postheader += " " * (9 - len( boardlist[boardindex][postindex] [0]) / 2) + "Title: " + boardlist[ boardindex][postindex][0] + " " * ( 11 - len(boardlist[boardindex] [postindex][0]) / 2) else: postheader += " " * (8 - len( boardlist[boardindex][postindex] [0]) / 2) + "Title: " + boardlist[ boardindex][postindex][0] + " " * ( 11 - len(boardlist[boardindex] [postindex][0]) / 2) if len(postauthor) % 2 == 0: postheader += " " * ( 4 - len(postauthor) / 2) + "Author: " + postauthor + " " * ( 7 - len(postauthor) / 2) else: postheader += " " * ( 4 - len(postauthor) / 2) + "Author: " + postauthor + " " * ( 7 - len(postauthor) / 2) postheader += "Date: " + postdate postheader += " " * (157 - len(postheader)) + "||\n" postheader += "+" + "-" * 76 + "+\n" for item in posttext: if len(item) == 76: postbody += "||" + item + "||\n" else: postbody += "||" + item + " " * ( 76 - len(item)) + "||\n" postfooter = "\\" + "-" * 76 + "/" self.caller.msg(postheader + postbody + postfooter) return except ValueError: self.caller.msg("Invalid message index.") return except ValueError: self.caller.msg( "Invalid board and message combination.") return else: self.caller.msg( "This isn't a valid number to search for.") return elif self.cmdstring == "+bbremove": if "/" in self.args: mainindex = int(self.args.split("/")[0]) - 1 boardlist = boardsearch.db.board try: postindex = int(self.args.split("/")[1]) - 1 charactersearch = search.objects( boardlist[mainindex][postindex][1])[0] if charactersearch.account == self.caller.account or self.caller.IsAdmin( ): self.caller.msg("The message titled " + boardlist[mainindex][postindex][0] + " has been removed.") del boardlist[mainindex][postindex] return else: self.caller.msg( "You can't remove a post you didn't create.") return except IndexError: self.caller.msg( "You need to select a post within a board, if you're going to remove it." ) return except ValueError: self.caller.msg("That's not a valid post to remove.") return elif self.cmdstring == "+bbpost": #Quick note. The posts are stored in the format as follows, within a tuple. Title,poster name,date,body. if "=" in self.args: if len(self.args.split("=")[1]) == 0: self.caller.msg("Your message can't be empty.") return if "/" in self.args: board = int(self.args.split("/")[0]) - 1 lockboard = True boardnames = list(boardsearch.db.boardnames.keys()) for name in boardnames: if len(boardsearch.db.boardperms[ int(boardsearch.db.boardnames[name]) - 1]) > 0: for lock in boardsearch.db.boardperms: if boardsearch.db.boardperms.index(lock) == ( boardsearch.db.boardnames[name] - 1): if "see" in lock or "post" in lock: postlock = lock.split(":")[1] if self.caller.locks.check_lockstring( self, "dumm:" + postlock ) or self.caller.IsAdmin(): lockboard = False break if lockboard == True: self.caller.msg( "You can't post to this board!") return date = time.strftime("%a") + " " + time.strftime( "%b") + " " + time.strftime("%d") try: boardsearch.db.board[board].append( tuple([ self.args.split("/")[1].split("=")[0], self.caller.name, date, self.args.split("/")[1].split("=")[1] ])) except IndexError: boardsearch.db.board.append([board].append( tuple([ self.args.split("/")[1].split("=")[0], self.caller.name, date, self.args.split("/")[1].split("=")[1] ]))) try: boardsearch.db.board[board].append( tuple([ self.args.split("/")[1].split("="), [0], self.caller.name, date, self.args.split("/")[1].split("=")[1] ])) except IndexError: self.caller.msg("Invalid board to post to.") return self.caller.msg( "Message posted to " + boardnames[int(self.args.split("/")[0]) - 1] + " as post number " + str(len(boardsearch.db.board[board]))) charlist = DefaultCharacter.objects.filter_family() for char in charlist: if char == self.caller: continue elif char.has_account: boardindex = int(self.args.split("/")[0]) - 1 if len(boardsearch.db.boardperms[boardindex] ) == 0: char.msg( self.caller.name + " has posted a new message to " + boardnames[boardindex] + " titled: " + self.args.split("/")[1].split("=")[0]) continue for lock in boardsearch.db.boardperms: if boardindex == boardsearch.db.boardperms.index( lock): if "see" in lock: lockeval = lock.split(":")[1] if char.locks.check_lockstring( self, "dumm:" + lockeval): char.msg( self.caller.name + " has posted a new message to " + boardnames[boardindex] + " titled: " + self.args.split( "/")[1].split("=")[0]) break elif "post" in lock: lockeval = lock.split(":")[1] if char.locks.check_lockstring( self, "dumm:" + lockeval): char.msg( self.caller.name + " has posted a new message to " + boardnames[boardindex] + " titled: " + self.args.split( "/")[1].split("=")[0]) break elif "read" in lock: lockeval = lock.split(":")[1] if char.locks.check_lockstring( self, "dumm:" + lockeval): char.msg( self.caller.name + " has posted a new message to " + boardnames[boardindex] + " titled: " + self.args.split( "/")[1].split("=")[0]) break return self.caller.msg("Message posted to " + boardnames[int(self.args.split("/")[0]) - 1] + " as post number " + str(len(boardsearch.db.board[board]))) charlist = DefaultCharacter.objects.filter_family() for char in charlist: if char == self.caller: continue elif char.has_account: boardindex = int(self.args.split("/")[0]) - 1 if len(boardsearch.db.boardperms[boardindex]) == 0: char.msg(self.caller.name + " has posted a new message to " + boardnames[boardindex] + " titled: " + self.args.split("/")[1].split("=")[0]) continue for lock in boardsearch.db.boardperms: if boardindex == boardsearch.db.boardperms.index( lock): if "see" in lock: lockeval = lock.split(":")[1] if char.locks.check_lockstring( self, "dumm:" + lockeval): char.msg( self.caller.name + " has posted a new message to " + boardnames[boardindex] + " titled: " + self.args.split( "/")[1].split("=")[0]) break elif "post" in lock: lockeval = lock.split(":")[1] if char.locks.check_lockstring( self, "dumm:" + lockeval): char.msg( self.caller.name + " has posted a new message to " + boardnames[boardindex] + " titled: " + self.args.split( "/")[1].split("=")[0]) break elif "read" in lock: lockeval = lock.split(":")[1] if char.locks.check_lockstring( self, "dumm:" + lockeval): char.msg( self.caller.name + " has posted a new message to " + boardnames[boardindex] + " titled: " + self.args.split( "/")[1].split("=")[0]) break return else: self.caller.msg( "You need to select a title for your message.") return else: self.caller.msg("You need to have a message in your post.") elif self.cmdstring == "+board" or self.cmdstring == "+boards": if self.switches: if self.caller.IsAdmin(): if self.switches[0] == "create": if self.args: try: boardtest = boardsearch.db.boardnames[ self.args] self.caller.msg( "A board with that name already exists.") return except KeyError: boardsearch.db.boardnames[self.args] = len( boardsearch.db.boardnames) + 1 boardsearch.db.boardperms.append([]) boardsearch.db.board.append([]) self.caller.msg( "A board with the name, '" + self.args + "' has been created as board number " + str(len(boardsearch.db.boardnames))) return else: self.caller.msg( "Please enter the name of the board you wish to create." ) return elif self.switches[0] == "delete" or self.switches[ 0] == "destroy": if self.args: try: del boardsearch.db.boardnames[self.args] del boardsearch.db.board[ boardsearch.db.boardnames[self.args]] self.caller.msg(self.args + " deleted.") return except KeyError: self.caller.msg( "There is no such board with that name.") return elif self.switches[0] == "desc": if "=" in self.args: try: boardsearch.db.boarddesc[self.lhs] = self.rhs self.caller.msg("Description for " + self.lhs + " set to " + self.rhs) except KeyError: self.caller.msg("That board doesn't exist.") return else: self.caller.msg( "Please enter a description for the board, after an equals sign." ) return elif self.switches[0] == "lock": if "=" in self.args: try: boardindex = int(self.args.split("=")[0]) boardsearch.db.boardperms[boardindex].append( self.args.split("=")[1]) self.caller.msg("Lock added. Format: " + self.args.split("=")[1]) return except IndexError: self.caller.msg( "You need to select a lock to add.") return except ValueError: self.caller.msg( "You need to select a valid board to lock." ) return else: self.caller.msg( "You need to select a lock to add.") return elif self.switches[0] == "unlock": if "=" in self.args: try: boardindex = int(self.args.split("=")[0]) - 1 removelock = str(self.args.split("=")[1]) boardnames = boardsearch.db.boardnames.keys() for perm in boardsearch.db.boardperms: if perm.lower().strip( ) == removelock.lower().strip(): if boardindex == boardsearch.db.boardperms.index( perm): boardsearch.db.boardperms[ boardindex].remove(perm) self.caller.msg(perm + " removed.") return self.caller.msg("Permission not found.") except IndexError: self.caller.msg( "You have to input a lock or locks to remove." ) return else: self.caller.msg( "You have to input a lock or locks to remove.") return
def func(self): "create the new character" player = self.player session = self.session if not self.args: self.msg("Usage: @charcreate <charname>") return key = self.args.strip() charmax = _MAX_NR_CHARACTERS if _MULTISESSION_MODE > 1 else 1 if not player.is_superuser and \ (player.db._playable_characters and len(player.db._playable_characters) >= charmax): self.msg("You may only create a maximum of {} characters.".format( charmax)) return # create the character from evennia.objects.models import ObjectDB start_location = ObjectDB.objects.get_id(settings.START_LOCATION) default_home = ObjectDB.objects.get_id(settings.DEFAULT_HOME) typeclass = settings.BASE_CHARACTER_TYPECLASS permissions = settings.PERMISSION_PLAYER_DEFAULT # check whether a character already exists new_character = None candidates = search.objects( key, typeclass='typeclasses.characters.Character') if candidates: for c in candidates: if c.access(player, 'puppet'): new_character = c break startnode = "menunode_welcome_archetypes" if not new_character: new_character = create.create_object(typeclass, key=key, location=None, home=default_home, permissions=permissions) # only allow creator (and immortals) to puppet this char new_character.locks.add( ("puppet:id({}) or pid({}) " "or perm(Immortals) or pperm(Immortals)").format( new_character.id, player.id)) player.db._playable_characters.append(new_character) else: if new_character.db.chargen_complete: self.msg( ("{name} has already completed character " "generation. Use @ic {name} to puppet.").format( name=new_character.key if ' ' not in new_character. key else '"{}"'.format(new_character.key))) return if new_character.db.archetype: startnode = "menunode_allocate_traits" if (new_character.db.focus or (not new_character.db.focus and validate_primary_traits(new_character.traits)[0])): startnode = "menunode_races" if new_character.db.race: startnode = "menunode_allocate_mana" if (new_character.traits.BM.base + new_character.traits.WM.base == new_character.traits.MAG.actual and len(new_character.skills.all) > 0): startnode = "menunode_allocate_skills" if ('escape' in new_character.skills.all and not hasattr( new_character.skills.escape, 'minus')): startnode = "menunode_equipment_cats" session.new_char = new_character def finish_char_callback(session, menu): char = session.new_char if char.db.chargen_complete: char.location = start_location player.puppet_object(session, char) EvMenu(session, "world.chargen", startnode=startnode, cmd_on_exit=finish_char_callback)
def exists(self, word): "check for words from centre, then words from players" if not Counter(word) - Counter(search.objects('bag1')[0].db.centre.replace(" ","")): return True
def func(self): "create the new character" player = self.player session = self.session if not self.args: self.msg("Usage: @charcreate <charname>") return key = self.args.strip() charmax = _MAX_NR_CHARACTERS if _MULTISESSION_MODE > 1 else 1 if not player.is_superuser and \ (player.db._playable_characters and len(player.db._playable_characters) >= charmax): self.msg( "You may only create a maximum of {} characters.".format( charmax)) return # create the character from evennia.objects.models import ObjectDB start_location = ObjectDB.objects.get_id(settings.START_LOCATION) default_home = ObjectDB.objects.get_id(settings.DEFAULT_HOME) typeclass = settings.BASE_CHARACTER_TYPECLASS permissions = settings.PERMISSION_PLAYER_DEFAULT # check whether a character already exists new_character = None candidates = search.objects(key, typeclass='typeclasses.characters.Character') if candidates: for c in candidates: if c.access(player, 'puppet'): new_character = c break startnode = "menunode_welcome_archetypes" if not new_character: new_character = create.create_object(typeclass, key=key, location=None, home=default_home, permissions=permissions) # only allow creator (and immortals) to puppet this char new_character.locks.add( ("puppet:id({}) or pid({}) " "or perm(Immortals) or pperm(Immortals)").format( new_character.id, player.id )) player.db._playable_characters.append(new_character) else: if new_character.db.chargen_complete: self.msg(("{name} has already completed character " "generation. Use @ic {name} to puppet.").format( name=new_character.key if ' ' not in new_character.key else '"{}"'.format(new_character.key))) return if new_character.db.archetype: startnode = "menunode_allocate_traits" if (new_character.db.focus or (not new_character.db.focus and validate_primary_traits(new_character.traits)[0])): startnode = "menunode_races" if new_character.db.race: startnode = "menunode_allocate_mana" if (new_character.traits.BM.base + new_character.traits.WM.base == new_character.traits.MAG.actual and len(new_character.skills.all) > 0): startnode = "menunode_allocate_skills" if ('escape' in new_character.skills.all and not hasattr(new_character.skills.escape, 'minus')): startnode = "menunode_equipment_cats" session.new_char = new_character def finish_char_callback(session, menu): char = session.new_char if char.db.chargen_complete: char.location = start_location player.puppet_object(session, char) EvMenu(session, "world.chargen", startnode=startnode, allow_quit=False, cmd_on_quit=finish_char_callback)
def func(self): "create the new character" account = self.account session = self.session if not self.args: self.msg("Usage: @charcreate <charname>") return key = self.args.strip() charmax = _MAX_NR_CHARACTERS if _MULTISESSION_MODE > 1 else 1 if not account.is_superuser and \ (account.db._playable_characters and len(account.db._playable_characters) >= charmax): self.msg("You may only create a maximum of {} characters.".format( charmax)) return # create the character from evennia.objects.models import ObjectDB start_location = search.objects('Limbo') start_location = start_location[0] if start_location \ else ObjectDB.objects.get_id(settings.START_LOCATION) home = search.objects('Limbo') home = home[0] if home \ else ObjectDB.objects.get_id(settings.DEFAULT_HOME) typeclass = settings.BASE_CHARACTER_TYPECLASS permissions = settings.PERMISSION_ACCOUNT_DEFAULT # check whether a character already exists new_character = None candidates = search.objects( key, typeclass='typeclasses.characters.Character') if candidates: for c in candidates: if c.access(account, 'puppet'): new_character = c break startnode = "menunode_chargen_welcome" if not new_character: new_character = create.create_object(typeclass, key=key, location=None, home=home, permissions=permissions) # only allow creator (and immortals) to puppet this char new_character.locks.add( ("puppet:id({}) or pid({}) " "or perm(Immortals) or pperm(Immortals)").format( new_character.id, account.id)) account.db._playable_characters.append(new_character) else: if new_character.db.chargen_complete: self.msg( ("{name} has already completed character " "generation. Use @ic {name} to puppet.").format( name=new_character.key if ' ' not in new_character. key else '"{}"'.format(new_character.key))) return session.new_char = new_character def finish_char_callback(session, menu): char = session.new_char if char.db.chargen_complete: char.location = start_location account.puppet_object(session, char) # self.execute_cmd("help getting started") EvMenu(session, "world.chargen", startnode=startnode, cmd_on_exit=finish_char_callback)
def func(self): arglist = self.arglist switches = self.switches if switches: if arglist: if switches[0] == "join": if self.caller.db.invitation: if self.caller.db.approved: if self.caller.db.invitation.db.name.lower() == self.args.lower(): self.caller.location.msg_contents(self.caller.name + " teleports away!") inviter = search.objects(self.caller.db.invitation.db.name)[0] self.caller.location = inviter.location self.caller.msg(self.caller.location.return_appearance(self)) else: self.caller.msg("You don't have an invitation to join that person.") return else: self.caller.msg('You have to be approved to use the +meet system.') return else: self.caller.msg("You have no invitations pending.") return else: self.caller.msg("Invalid switch.") return else: if arglist: if not self.caller.db.approved: self.caller.msg('You have to be approved to use the +meet system.') return for invite in arglist: inviteperson = search.objects(str(invite))[0] if inherits_from(inviteperson,DefaultCharacter): if inviteperson.has_player == True: invitation = "+" + "-" * 27 + "Meet" + "-" * 27 + "+\n" invitation += "||" + self.caller.name +" has requested you meet {o at " + self.caller.location.name invitation += " " * (120 - len(invitation)) + "||\n" invitation += "||To accept this invitation, use:" invitation += " " * (183 - len(invitation)) + "||\n" invitation += "||+meet/join "+ self.caller.name invitation += " " * (246 - len(invitation)) + "||\n" invitation += "||Within the next 10 minutes." invitation += " " * (309 - len(invitation)) + "||\n" invitation += "+" + "-" * 58 + "+" inviteperson.msg(invitation,from_obj=self.caller) inviteperson.db.invitation = create_script("world.travel.InvitationScript",key="Invitation",persistent=False) inviteperson.db.invitation.db.name = self.caller.name else: self.caller.msg(inviteperson.name + " is not online.") return else: self.caller.msg(inviteperson.name + " doesn't seem to exist.") return meetstring = "" for people in arglist: if people == arglist[len(arglist) - 1]: meetstring += str(people) else: meetstring += str(people) +", " self.caller.msg("You ask to meet with "+ meetstring)