Exemple #1
0
 def show_visible_exists():
     show_room(None)
     out(
         FToken.wrap('<br>Mögliche Werte für einen neue Ausgang:',
                     FToken.text))
     occ_dirs = [a.direction for a in exist_list]
     directions = [
         (" - ".join([FToken.wrap("{0}".format(a[0]), FToken.enum), a[1]]))
         for a in Room.DIRECTION_NAMES.items() if a[0] not in occ_dirs
     ]
     out(
         FToken.wrap('<br>{}<br>'.format("<br>".join(directions)),
                     FToken.text))
def set_avatar_name(cmd: str, ask: Callable[[str], None], store: Callable[[str], None]):
    if not cmd:
        text = (
            'Denk Dir jetzt bitte einen Namen für Deinen neuen Charakter aus.<br>'
            '<br>'
            'Der Name sollte mindestens drei und höchstens 15 Buchstaben lang sein.<br>'
            'Bedenke: Nachträglich kann Dein Name nicht mehr geändert werden!<br>'
            'Wie möchtest Du in diesem Spiel heissen?<br>'
            'Name:')
        ask(text)
    elif cmd in ['neu', 'admin']:
        raise Exception(FToken.wrap('Dieser Name ist nicht zulässig.<br><br>', FToken.error))
    elif len(cmd) < 3:
        raise Exception(FToken.wrap('%s ist zu kurz.<br>' % cmd, FToken.error))
    else:
        store(cmd)
Exemple #3
0
def get_by_name(name: str) -> Avatar:
    from ..repository import AvatarModel
    try:
        name = name.strip().title()
        entity = AvatarModel.get(AvatarModel.name == name)
        return Avatar(entity)
    except AvatarModel.DoesNotExist as e:
        raise Exception(
            FToken.wrap("Avatar %s existiert nicht" % name, FToken.error))
Exemple #4
0
def show_room(cmd: str, get_avatar: Callable[[None], Avatar],
              get_room: Callable[[int, int], Room],
              get_exists: Callable[[int, int],
                                   List[Exit]], out: Callable[[str], None]):
    avatar = get_avatar()
    room = get_room(avatar.id, avatar.position)
    name = room.name if not room.zone else room.name + ' - ' + room.zone

    out(
        FToken.wrap('{} ({})'.format(name, room.id), FToken.room_name) +
        '<br>')
    out(FToken.line)
    out(FToken.wrap('{}<br>'.format(room.description), FToken.room_desc))

    exists = [a.title for a in get_exists(avatar.id, room.id)]
    if exists:
        out(FToken.wrap('<br>Sichtbare Ausgänge:<br>', FToken.exit_title))
        for ex in exists:
            out(FToken.wrap('  {}<br>'.format(ex), FToken.exit_object))
def set_avatar_password(cmd: str, ask: Callable[[str], None], store: Callable[[str], None]):
    if not cmd:
        text = (
            'Wähle ein Passwort:<br>'
            'Dein Passwort muss wenigstens 6 Zeichen lang sein.<br>'
            'Bitte gib jetzt ein Passwort an:<br>')
        ask(text)
    elif len(cmd) < 6:
        raise Exception(FToken.wrap('Dein Passwort ist zu kurz.<br><br>', FToken.error))
    else:
        store(cmd)
Exemple #6
0
def create_exit(cmd: str, get_avatar: Callable[[None], Avatar],
                show_room: Callable[[None], None],
                get_room: Callable[[int, int],
                                   Room], get_exists: Callable[[int, int],
                                                               List[Exit]],
                store: Callable[[int, int], None], out: Callable[[str], None]):
    avatar = get_avatar()
    room = get_room(avatar.id, avatar.position)
    exist_list = get_exists(avatar.id, room.id)

    def show_visible_exists():
        show_room(None)
        out(
            FToken.wrap('<br>Mögliche Werte für einen neue Ausgang:',
                        FToken.text))
        occ_dirs = [a.direction for a in exist_list]
        directions = [
            (" - ".join([FToken.wrap("{0}".format(a[0]), FToken.enum), a[1]]))
            for a in Room.DIRECTION_NAMES.items() if a[0] not in occ_dirs
        ]
        out(
            FToken.wrap('<br>{}<br>'.format("<br>".join(directions)),
                        FToken.text))

    if not cmd:
        show_visible_exists()
    else:
        if not cmd in Room.DIRECTIONS:
            show_visible_exists()
            out(FToken.wrap('<br>Unbekannter Ausgang', FToken.error))
            return

        directions = [a.direction for a in exist_list]
        if cmd in directions:
            show_visible_exists()
            out(
                FToken.wrap('<br>Ausgang "{0}" existiert bereits'.format(cmd),
                            FToken.error))
            return

        store(avatar.id, room.id, cmd)
Exemple #7
0
def run(cmd: str,
        show_room: Callable[[str], None],
        move_avatar: Callable[[str], None],
        out: Callable[[str], None]):
    cmd = cmd.lower()
    if cmd in Room.DIRECTIONS:
        move_avatar(cmd)
    elif not cmd or cmd == 'schau':
        show_room(cmd)
    else:
        show_room('')
        out(FToken.wrap('<br>Das kenne ich nicht!', FToken.error))
Exemple #8
0
def get_by_id(avatar_id: str) -> Avatar:
    from ..repository import AvatarModel
    try:
        try:
            entity = AvatarModel.get(AvatarModel.id == avatar_id)
            return Avatar(entity)
        except AvatarModel.DoesNotExist as e:
            return None
    except Exception as ex:
        raise Exception(
            FToken.wrap("Der Avatar mit der ID %s existiert nicht" % avatar_id,
                        FToken.error))
def set_avatar_sex(cmd: str, ask: Callable[[str], None], store: Callable[[str], None]):
    if not cmd:
        text = 'Bist du männlich oder weiblich?<br>'
        ask(text)
    elif cmd not in ['m', 'w', 'männlich', 'weiblich']:
        raise Exception(FToken.wrap('Die Eingabe war ungültig.<br><br>', FToken.error))
    else:
        if cmd == 'm':
            cmd = 'männlich'
        if cmd == 'w':
            cmd = 'weiblich'
        store(cmd)
Exemple #10
0
def store_password(password: str, get_avatar_id: Callable[[None], None],
                   stored: Callable[[str], None], out: Callable[[str], None]):
    from ..repository import AvatarModel
    try:
        avatar = AvatarModel.get(AvatarModel.id == get_avatar_id())
        avatar.password = password
        AvatarModel.save(avatar)
        out('Password wurde festgelegt.<br><br>')
        stored('')
    except AvatarModel.DoesNotExist as e:
        raise Exception(
            FToken.wrap("Der Avatar konnte nicht gefunden werden.<br><br>",
                        FToken.error))
Exemple #11
0
def store_sex(sex: str, stored: Callable[[str], None],
              get_avatar_id: Callable[[None], None], out: Callable[[str],
                                                                   None]):
    from ..repository import AvatarModel
    try:
        avatar = AvatarModel.get(AvatarModel.id == get_avatar_id())
        avatar.sex = sex
        AvatarModel.save(avatar)
        out('%s wurde festgelegt.<br><br>' % sex.title())
        stored('')
    except AvatarModel.DoesNotExist as e:
        raise Exception(
            FToken.wrap("Der Avatar konnte nicht gefunden werden.<br><br>",
                        FToken.error))
def set_avatar_race(cmd: str, ask: Callable[[str], None], store: Callable[[str], None]):
    if not cmd:

        def races_to_text():
            return "<br>".join([str(a[0]) + ". " + a[1] for a in Race.races])

        text = (
            'Welcher Rasse möchtest du in dieser Welt angehören?<br>'
            'Eine Rasse kann jederzeit gewechselt werden.<br>'
            'Derzeit stehen folgende Rassen zur Auswahl:<br><br>'
            '%s<br><br>'
            'Durch Eingabe einer Ziffer wählst Du die Rasse aus.<br>' % races_to_text())
        ask(text)
    elif cmd not in [a[0] for a in Race.races]:
        raise Exception(FToken.wrap('Die Eingabe war ungültig.<br><br>', FToken.error))
    else:
        store(Race.races[int(cmd) - 1][1])
Exemple #13
0
def store_name(name: str, stored: Callable[[str], None],
               set_avatar_id: Callable[[int], None], out: Callable[[str],
                                                                   None]):
    from ..repository import AvatarModel
    name = name.strip().title()
    try:
        AvatarModel.get(AvatarModel.name == name)
        raise Exception(
            FToken.wrap(
                "Ein Avatar mit dem Namen %s existiert bereits.<br><br>" %
                name, FToken.error))
    except AvatarModel.DoesNotExist as e:
        avatar = Avatar(
            AvatarModel.create(name=name,
                               race=Avatar.DEFAULT_RACE,
                               guild=Avatar.DEFAULT_GUILD))
        set_avatar_id(avatar.id)
        out('Ein Avatar mit den Namen %s wurde erstellt...<br><br>' % name)
        stored('')