Example #1
0
 def __str__(self):
     s = colorfy("    Turn Order    \n", "green")
     s += "------------------\n"
     for entry in self.queue:
         s += entry[0] 
         if entry[0] == self.peek():
             s += colorfy("  <--- Current Turn", "bred")
         s += "\n"
     return s
Example #2
0
def fudge():
    results = [random.randint(-1, 1) for _ in range(4)]
    chars = {-1: '-', 0: '=', 1: '+'}
    tones = {-1: 'bred', 0: 'default', 1: 'bgreen'}
    result = sum(results)
    if result > 0:
        result = colorfy(str(result), "bgreen")
    elif result == 0:
        result = colorfy(str(result), "default")
    else:
        result = colorfy(str(result), "bred")
    return result, " ".join([colorfy(chars[x], tones[x]) for x in results])
Example #3
0
def resolve(token):
    bits = token.split("d")
    r = 0
    msg = ""
    try:
        if len(bits) != 2:
            r = int(token)
            return int(token), token
        num = int(bits[0])
        sides = int(bits[1])
        if sides > 100 or sides < 2 or num < 1 or num > 20:
            raise DiceException(str(token))
        dice = []
        for i in range(num):
            d = random.randint(1, sides)
            r += d
            dice.append(str(d))
        msg = colorfy("(" + " + ".join(dice) + ")", "green")
    except:
        raise DiceException(str(token))
    return r, msg
Example #4
0
    def run(self):
        try:
            player = None
            self.running = True
            reconnected = False
            username = ""
            self.socket.send("-- Welcome to Mushy --\n")
            while len(username) < 1 or len(username.split()) != 1:
                self.socket.send("What will you use for a name?\n")
                username = self.socket.recv(4096).strip()
                self.socket.send("\n")
                # validate username
                if len(username) < 1:
                    self.socket.send("Choose a REAL name!\n")
                if len(username.split()) > 1:
                    self.socket.send("Only use your first name!\n")

            username = username[0].upper() + username[1:]

            # see if it is a new user or not
            already_exists = persist.profileExists(username)

            # Grab the password
            password = ""

            # player already has a profile
            if already_exists:
                tries = 0
                self.socket.send("Enter in your password:\n")
                validated = False
                while tries < 3 and not validated:
                    password = self.socket.recv(4096).strip()
                    self.socket.send("\n")
                    validated = persist.validate(username, password)
                    if not validated and tries < 2:
                        self.socket.send("Incorrect, try again:\n")
                        tries += 1
                if not validated:
                    self.socket.send("Tried too many times. Disconnected.\n")
                    self.kill()
                    return

                # sanity check to make sure the player is not already connected
                if username in self.session:
                    choice = ''
                    while not choice in ('y', 'n'):
                        self.socket.send("Another instance of you is already connected. Kick it and take its place? (y/n)\n")
                        choice = self.socket.recv(4096).strip()
                        self.socket.send("\n")

                        if choice.lower() == 'y':
                            reconnected = True
                            self.killClone(username)
                        elif choice.lower() == 'n':
                            self.kill()
                            self.socket.send("Disconnecting.\n")
                            return

                self.socket.send("Welcome back, " + username + ".\n")
                player = persist.loadEntity(username)

            # player does not have a profile
            else:
                self.socket.send("User " + username + " does not yet exist, creating a new user.\n")
                while len(password) < 4:
                    self.socket.send("Enter in your password:\n")
                    password = self.socket.recv(4096).strip()
                    self.socket.send("\n")

                    # length check
                    if len(password) < 4:
                        self.socket.send("Passwords must be at least 4 characters long.\n")
                        continue
                    repeat = ""
                    self.socket.send("Enter again to verify:\n")
                    repeat = self.socket.recv(4096).strip()
                    self.socket.send("\n")

                    # repeat check
                    if repeat != password:
                        self.socket.send("Password mis-match. Reconnect and try again.\n")
                        self.kill()
                        return

                # create a new entity and save it
                salt, hcode = persist.hashPassword(password)
                player = entity.Entity(name=username, hcode=hcode, salt=salt)

                self.socket.send("Are you the DM for the group (y if yes)?\n")
                choice = self.socket.recv(4096).strip()
                self.socket.send("\n")
                dm = False
                if choice.lower() == 'y':
                    dm = True

                player.dm = dm

                self.socket.send("Are you a spectator (y if yes)?\n")
                choice = self.socket.recv(4096).strip()
                self.socket.send("\n")
                spectator = False
                if choice.lower() == 'y':
                    spectator = True

                player.spectator = spectator

                self.socket.send("Profile created. Saving...\n")
                persist.saveEntity(player)

            # hook up the proxy stuff
            proxy = entity.ClientProxy(self.socket)
            player.hookProxy(proxy)

            # connect player to the session
            player.session = self.session
            self.session.add(player)

            # start the proxy and notify everyone of the new connection
            player.proxy.start()
            player.sendMessage("")

            if reconnected:
                self.session.broadcastExclude(colorfy("[SERVER] " + player.name + " has reconnected.", "bright yellow"), player)
                player.sendMessage(colorfy("[SERVER] You have reconnected.", "bright yellow"))
            else:
                self.session.broadcastExclude(colorfy("[SERVER] " + player.name + " has joined the session.", "bright yellow"), player)
                player.sendMessage(colorfy("[SERVER] You have joined the session.", "bright yellow"))
                player.sendMessage(colorfy("[SERVER] You may type 'help' at any time for a list of commands.", 'bright green'))
                
                # Send them the newest changes as dictaded by the banner.txt file
                try:
                    banner_file = open("banner.txt")
                    banner = banner_file.read()
                    if banner:
                        player.sendMessage(colorfy("*"*80, "bright yellow"))
                        player.sendMessage(wrap(banner))
                        player.sendMessage(colorfy("*"*80, "bright yellow"))
                        banner_file.close()
                except IOError:
                    pass
        except:
            exc_type, exc_value, exc_traceback = sys.exc_info()
            traceback.print_exception(exc_type, exc_value, exc_traceback, limit=None, file=sys.stdout)
            self.running = False
            self.socket.close()
            print "Server: Client connection closed. Exception during login."
        finally:
            if self in self.proxy_pool:
                self.proxy_pool.remove(self)