Example #1
0
 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!")
Example #2
0
    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.")
Example #3
0
 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)))
Example #4
0
 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
Example #6
0
 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.

        """)
Example #8
0
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
Example #10
0
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
Example #14
0
    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
Example #15
0
    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)
Example #16
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
Example #17
0
    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)
Example #18
0
    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)
Example #19
0
 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)