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()
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)
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()
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
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()
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
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()