コード例 #1
0
    def appendVorteile(self, strList, lineCounts, category, vorteile):
        if not vorteile or (len(vorteile) == 0):
            return
        strList.append(category + "\n\n")
        lineCounts.append(self.getLineCount(strList[-1]))
        count = 0
        for vor in vorteile:
            vorteil = Wolke.DB.vorteile[vor]
            if not vorteil.cheatsheetAuflisten or self.isLinkedToAny(vorteil):
                continue

            beschreibung = CharakterPrintUtility.getLinkedDescription(
                Wolke.Char, vorteil)
            if not beschreibung:
                continue
            if "\n" in beschreibung:
                beschreibung = "- " + beschreibung.replace("\n", "\n- ")

            count += 1
            result = []
            result.append(
                CharakterPrintUtility.getLinkedName(Wolke.Char, vorteil))
            result.append("\n")
            result.append(beschreibung)
            result.append("\n\n")
            strList.append("".join(result))
            lineCounts.append(self.getLineCount(strList[-1]))

        if count == 0:
            strList.pop()
            lineCounts.pop()
コード例 #2
0
ファイル: pdfMeister.py プロジェクト: Aeolitus/Sephrasto
    def pdfVierterBlock(self, fields):
        logging.debug("PDF Block 4")
        # Freie Fertigkeiten
        freieFerts = CharakterPrintUtility.getFreieFertigkeiten(Wolke.Char)
        count = 1
        for fert in freieFerts:
            if ('Frei' + str(count)) in fields:
                fields['Frei' + str(count)] += ", " + fert
            else:
                fields['Frei' + str(count)] = fert
            count += 1
            if count > self.CharakterBogen.maxFreie:
                count = 1

        fertigkeiten = CharakterPrintUtility.getFertigkeiten(Wolke.Char)
        if self.CharakterBogen.kurzbogenHack:
            standardFerts = [
                "Handgemenge", "Hiebwaffen", "Klingenwaffen", "Stangenwaffen",
                "Schusswaffen", "Wurfwaffen", "Athletik", "Heimlichkeit",
                "Selbstbeherrschung", "Wahrnehmung", "Autorität",
                "Beeinflussung", "Gebräuche", "Derekunde", "Magiekunde",
                "Mythenkunde", "Überleben", "Alchemie", "Handwerk",
                "Heilkunde", "Verschlagenheit"
            ]

            self.printFertigkeiten(fields, None, standardFerts)
            self.printFertigkeiten(
                fields, "Indi",
                [f for f in fertigkeiten if not f in standardFerts])
        else:
            self.printFertigkeiten(fields, "Fertigkeit", fertigkeiten)
コード例 #3
0
    def appendManöver(self, strList, lineCounts, category, manöverList):
        if not manöverList or (len(manöverList) == 0):
            return
        strList.append(category + "\n\n")
        lineCounts.append(self.getLineCount(strList[-1]))
        count = 0
        for man in manöverList:
            manöver = Wolke.DB.manöver[man]
            if not Wolke.Char.voraussetzungenPrüfen(manöver.voraussetzungen):
                continue
            count += 1
            result = []
            if manöver.name.endswith(" (M)") or manöver.name.endswith(
                    " (L)") or manöver.name.endswith(" (D)"):
                result.append(manöver.name[:-4])
            elif manöver.name.endswith(" (FK)"):
                result.append(manöver.name[:-5])
            else:
                result.append(manöver.name)
            if manöver.probe:
                result.append(" (" + manöver.probe + ")")
            result.append("\n")
            if manöver.gegenprobe:
                result.append("Gegenprobe: " + manöver.gegenprobe + "\n")

            result.append(manöver.text)

            for vor in Wolke.Char.vorteile:
                vorteil = Wolke.DB.vorteile[vor]
                if CharakterPrintUtility.isLinkedTo(
                        Wolke.Char, vorteil, VorteilLinkKategorie.ManöverMod,
                        man):
                    beschreibung = CharakterPrintUtility.getLinkedDescription(
                        Wolke.Char, vorteil)
                    if not beschreibung:
                        continue
                    result.append("\n=> ")
                    result.append(
                        CharakterPrintUtility.getLinkedName(
                            Wolke.Char, vorteil))
                    result.append(": ")
                    result.append(beschreibung.replace("\n", " "))

            result.append("\n\n")
            strList.append("".join(result))
            lineCounts.append(self.getLineCount(strList[-1]))

        if count == 0:
            strList.pop()
            lineCounts.pop()
コード例 #4
0
ファイル: pdfMeister.py プロジェクト: Aeolitus/Sephrasto
    def pdfDritterBlock(self, fields):
        logging.debug("PDF Block 3")
        vorteile = CharakterPrintUtility.getVorteile(Wolke.Char)
        (vorteileAllgemein, vorteileKampf,
         vorteileUeber) = CharakterPrintUtility.groupVorteile(Wolke.Char,
                                                              vorteile,
                                                              link=True)

        # Move vorteile to the next category if there is overflow
        maxVort = self.CharakterBogen.maxVorteile * self.MergePerLineCount
        if len(vorteileAllgemein) > maxVort:
            vorteileKampf.extend(vorteileAllgemein[maxVort:])
            del vorteileAllgemein[maxVort:]

        maxVort = self.CharakterBogen.maxKampfVorteile * self.MergePerLineCount
        if len(vorteileKampf) > maxVort:
            vorteileUeber.extend(vorteileKampf[maxVort:])
            del vorteileKampf[maxVort:]

        self.printVorteile(fields, vorteileAllgemein, vorteileKampf,
                           vorteileUeber)
        # return uebervorteile - they need to go on extra page if any are left
        return vorteileUeber
コード例 #5
0
ファイル: pdfMeister.py プロジェクト: Aeolitus/Sephrasto
    def printFertigkeiten(self, fields, baseStr, fertigkeitenNames):
        count = 1
        for el in fertigkeitenNames:
            if el not in Wolke.Char.fertigkeiten:
                continue
            fertigkeit = Wolke.Char.fertigkeiten[el]

            if baseStr:
                base = baseStr + str(count)
                fields[base + "NA"] = fertigkeit.name
                fields[base + "FA"] = fertigkeit.steigerungsfaktor
                fields[base + "AT"] = \
                    fertigkeit.attribute[0] + '/' + \
                    fertigkeit.attribute[1] + '/' + \
                    fertigkeit.attribute[2]
            else:
                base = el[0:5]
                # Fix Umlaute
                if el == "Gebräuche":
                    base = "Gebra"
                elif el == "Überleben":
                    base = "Ueber"

            if fertigkeit.basiswertMod == 0:
                fields[base + "BA"] = fertigkeit.basiswert
            else:
                fields[base + "BA"] = str(fertigkeit.basiswert) + "*"

            fields[base + "FW"] = fertigkeit.wert
            fields[base + "TA"] = ", ".join([
                t.anzeigeName for t in CharakterPrintUtility.getTalente(
                    Wolke.Char, fertigkeit)
            ])
            fields[base + "PW"] = fertigkeit.probenwert
            fields[base + "PWT"] = fertigkeit.probenwertTalent
            count += 1
        fertigkeitenNames.clear()
コード例 #6
0
    def prepareRules(self):
        self.updateFontSize()
        self.RuleCategories = []
        sortV = Wolke.Char.vorteile.copy()
        sortV = sorted(sortV, key=str.lower)

        sortM = list(Wolke.DB.manöver.keys())
        sortM = sorted(sortM, key=str.lower)

        waffeneigenschaften = {}
        for waffe in Wolke.Char.waffen:
            for el in waffe.eigenschaften:
                try:
                    we = Hilfsmethoden.GetWaffeneigenschaft(el, Wolke.DB)
                    if not we.name in waffeneigenschaften:
                        waffeneigenschaften[we.name] = [waffe.anzeigename]
                    else:
                        waffeneigenschaften[we.name].append(waffe.anzeigename)
                except WaffeneigenschaftException:
                    pass

        fertigkeitsTypen = Wolke.DB.einstellungen[
            "Fertigkeiten: Typen übernatürlich"].toTextList()
        talentboxList = CharakterPrintUtility.getÜberTalente(Wolke.Char)
        (zauber, liturgien,
         anrufungen) = CharakterPrintUtility.groupUeberTalente(talentboxList)

        rules = []
        ruleLineCounts = []

        manöverMergeScript = Wolke.DB.einstellungen[
            "Regelanhang: Manöver Mergescript"].toText()
        vorteilTypen = Wolke.DB.einstellungen["Vorteile: Typen"].toTextList()
        manöverTypen = Wolke.DB.einstellungen["Manöver: Typen"].toTextList()

        vorteileGruppiert = []
        for i in range(len(vorteilTypen)):
            vorteileGruppiert.append(
                [el for el in sortV if Wolke.DB.vorteile[el].typ == i])

        manöverGruppiert = []
        for i in range(len(manöverTypen)):
            manöverGruppiert.append([])
        for i in range(len(manöverTypen)):
            scriptVariables = {"char": Wolke.Char, "typ": i, "mergeTo": i}
            exec(manöverMergeScript, scriptVariables)
            mergeTo = scriptVariables["mergeTo"]
            if mergeTo >= len(manöverTypen):
                mergeTo = i
            empty = len(manöverGruppiert[mergeTo]) == 0
            manöverGruppiert[mergeTo].extend(
                [el for el in sortM if (Wolke.DB.manöver[el].typ == i)])
            if not empty:
                manöverGruppiert[mergeTo] = sorted(manöverGruppiert[mergeTo])

        for r in self.reihenfolge:
            if r[0] == "V":
                typ = int(r[1:])
                if typ >= len(vorteileGruppiert):
                    continue
                self.RuleCategories.append(
                    self.formatCategory(vorteilTypen[typ]))
                self.appendVorteile(rules, ruleLineCounts,
                                    self.RuleCategories[-1],
                                    vorteileGruppiert[typ])
            elif r[0] == "M":
                typ = int(r[1:])
                if typ >= len(manöverGruppiert):
                    continue
                self.RuleCategories.append(
                    self.formatCategory(manöverTypen[typ]))
                self.appendManöver(rules, ruleLineCounts,
                                   self.RuleCategories[-1],
                                   manöverGruppiert[typ])
            elif r[0] == "W":
                self.RuleCategories.append(
                    self.formatCategory("Waffeneigenschaften"))
                self.appendWaffeneigenschaften(rules, ruleLineCounts,
                                               self.RuleCategories[-1],
                                               waffeneigenschaften)
            elif r[0] == "Z":
                self.RuleCategories.append(self.formatCategory("Zauber"))
                self.appendTalente(rules, ruleLineCounts,
                                   self.RuleCategories[-1], zauber)
            elif r[0] == "L":
                self.RuleCategories.append(self.formatCategory("Liturgien"))
                self.appendTalente(rules, ruleLineCounts,
                                   self.RuleCategories[-1], liturgien)
            elif r[0] == "A":
                self.RuleCategories.append(self.formatCategory("Anrufungen"))
                self.appendTalente(rules, ruleLineCounts,
                                   self.RuleCategories[-1], anrufungen)

        return rules, ruleLineCounts
コード例 #7
0
    def appendTalente(self, strList, lineCounts, category, talente):
        if not talente or (len(talente) == 0):
            return
        strList.append(category + "\n\n")
        lineCounts.append(self.getLineCount(strList[-1]))
        count = 0
        for tal in talente:
            result = []
            if not tal.cheatsheetAuflisten or not tal.text:
                continue
            count += 1
            result.append(tal.anzeigeName)
            result.append(" (PW " + str(tal.pw) + ")")
            result.append("\n")
            text = tal.text

            #Remove everything from Sephrasto on
            index = text.find('\nSephrasto')
            if index != -1:
                text = text[:index]

            #Remove everything from Anmerkung on but keep the text and append it later
            index = text.find('\nAnmerkung')
            anmerkung = ""
            if index != -1:
                anmerkung = text[index:]
                text = text[:index]

            #Remove everything from Fertigkeiten on
            index = text.find('\nFertigkeiten')
            if index != -1:
                text = text[:index]

            #Remove everything from Erlernen on (some talents don't have a Fertigkeiten list)
            index = text.find('\nErlernen')
            if index != -1:
                text = text[:index]

            result.append(text)
            if anmerkung:
                result.append(anmerkung)

            for vor in Wolke.Char.vorteile:
                vorteil = Wolke.DB.vorteile[vor]
                if CharakterPrintUtility.isLinkedTo(
                        Wolke.Char, vorteil, VorteilLinkKategorie.ÜberTalent,
                        tal.na):
                    beschreibung = CharakterPrintUtility.getLinkedDescription(
                        Wolke.Char, vorteil)
                    if not beschreibung:
                        continue
                    result.append("\n=> ")
                    result.append(
                        CharakterPrintUtility.getLinkedName(
                            Wolke.Char, vorteil))
                    result.append(": ")
                    result.append(beschreibung.replace("\n", " "))

            result.append("\n\n")
            strList.append("".join(result))
            lineCounts.append(self.getLineCount(strList[-1]))

        if count == 0:
            strList.pop()
            lineCounts.pop()