Skip to content

Commit

Permalink
Show which script is causing the error if one is triggered
Browse files Browse the repository at this point in the history
  • Loading branch information
brzGatsu committed Apr 30, 2024
1 parent fbf1aa0 commit a71e4f6
Show file tree
Hide file tree
Showing 12 changed files with 50 additions and 23 deletions.
4 changes: 2 additions & 2 deletions src/Sephrasto/Charakter.py
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ def heimat(self, heimat):

self.charakterScriptAPI["heimatAlt"] = self._heimat
self._heimat = heimat
exec( Wolke.DB.einstellungen["Heimaten: Heimat geändert Script"].wert, self.charakterScriptAPI)
Wolke.DB.einstellungen["Heimaten: Heimat geändert Script"].executeScript(self.charakterScriptAPI)
del self.charakterScriptAPI["heimatAlt"]

def API_getWaffeValue(self, index, attrib):
Expand Down Expand Up @@ -615,7 +615,7 @@ def aktualisieren(self):
ab.aktualisierenFinal() #WS*, GS*, DH*, SchiP*

# Execute global script. It is responsible for calculating the final weapon stats.
exec(Wolke.DB.einstellungen["Charakter aktualisieren Script"].wert, self.charakterScriptAPI)
Wolke.DB.einstellungen["Charakter aktualisieren Script"].executeScript(self.charakterScriptAPI)

EventBus.doAction("post_charakter_aktualisieren", { "charakter" : self })
self.epZaehlen()
Expand Down
4 changes: 2 additions & 2 deletions src/Sephrasto/CharakterBeschreibungWrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ def update(self):

eigenheitenNeu = []
for i in range(8):
text = eval("self.ui.editEig" + str(i+1) + ".text()")
eigenheitenNeu.append(text)
lineEdit = getattr(self.ui, "editEig" + str(i+1))
eigenheitenNeu.append(lineEdit.text())

#Preserve the position of actual elements but remove any trailing empty elements
#This is needed for ArrayEqual later to work as intended
Expand Down
2 changes: 1 addition & 1 deletion src/Sephrasto/CharakterPrintUtility.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def groupVorteile(char, vorteile, link = True):
name = vorteil.anzeigenameExt

scriptAPI.update({ "name" : vorteil.name, "kategorie" : vorteil.kategorie, "mergeTo" : 0 })
exec(Wolke.DB.einstellungen["Charsheet: Vorteile Mergescript"].wert, scriptAPI)
Wolke.DB.einstellungen["Charsheet: Vorteile Mergescript"].executeScript(scriptAPI)
if scriptAPI["mergeTo"] == 0:
vorteileAllgemein.append(name)
elif scriptAPI["mergeTo"] == 1:
Expand Down
2 changes: 1 addition & 1 deletion src/Sephrasto/CheatsheetGenerator.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ def generateRules(self):
scriptAPI["hasVorteil"] = lambda name: name in Wolke.Char.vorteile
for i in range(numRegelKategorien):
scriptAPI.update({ "kategorie" : i, "mergeTo" : i })
exec(Wolke.DB.einstellungen["Regelanhang: Regel Mergescript"].wert, scriptAPI)
Wolke.DB.einstellungen["Regelanhang: Regel Mergescript"].executeScript(scriptAPI)
mergeTo = scriptAPI["mergeTo"]
if mergeTo >= numRegelKategorien:
mergeTo = i
Expand Down
19 changes: 14 additions & 5 deletions src/Sephrasto/Core/AbgeleiteterWert.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,22 @@ def sortorder(self):
def aktualisieren(self):
self.mod = 0
self.finalwert = 0
self.basiswert = eval(self.definition.scriptCompiled, self.charakter.charakterScriptAPI)
try:
self.basiswert = eval(self.definition.scriptCompiled, self.charakter.charakterScriptAPI)
except Exception as e:
raise type(e)(f"\nScriptfehler in Abgeleiteter Wert \"{self.name}\". Vermutlich hast du hier Änderungen in den Hausregeln vorgenommen, die das Problem verursachen.\n\nFehler: {str(e)}")

def diffBasiswert(self, attribute):
return eval(self.definition.scriptCompiled, self.charakter.charakterScriptAPI) - self.basiswert
def diffBasiswert(self, attribute):
try:
return eval(self.definition.scriptCompiled, self.charakter.charakterScriptAPI) - self.basiswert
except Exception as e:
raise type(e)(f"\nScriptfehler in Abgeleiteter Wert \"{self.name}\". Vermutlich hast du hier Änderungen in den Hausregeln vorgenommen, die das Problem verursachen.\n\nFehler: {str(e)}")

def aktualisierenFinal(self):
if not self.finalscript:
self.finalwert = self.wert
return
self.finalwert = eval(self.definition.finalscriptCompiled, self.charakter.charakterScriptAPI)
return
try:
self.finalwert = eval(self.definition.finalscriptCompiled, self.charakter.charakterScriptAPI)
except Exception as e:
raise type(e)(f"\nScriptfehler in Abgeleiteter Wert \"{self.name}\". Vermutlich hast du hier Änderungen in den Hausregeln vorgenommen, die das Problem verursachen.\n\nFehler: {str(e)}")
2 changes: 1 addition & 1 deletion src/Sephrasto/Core/Attribut.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def sortorder(self):
def aktualisieren(self):
scriptAPI = Hilfsmethoden.createScriptAPI()
scriptAPI['getWert'] = lambda: self.wert
self.probenwert = eval(Wolke.DB.einstellungen["Attribute: PW Script"].wert, scriptAPI)
self.probenwert = Wolke.DB.einstellungen["Attribute: PW Script"].evaluateScript(scriptAPI)

def steigerungskosten(self, numSteigerungen = 1):
if numSteigerungen == 0:
Expand Down
12 changes: 12 additions & 0 deletions src/Sephrasto/Core/DatenbankEinstellung.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,18 @@ def finalize(self, db):
def details(self, db):
return f"{self.text}\n{self.beschreibung}"

def executeScript(self, api):
try:
exec(self.wert, api)
except Exception as e:
raise type(e)(f"\nScriptfehler in Einstellung \"{self.name}\". Vermutlich hast du hier Änderungen in den Hausregeln vorgenommen, die das Problem verursachen.\n\nFehler: {str(e)}")

def evaluateScript(self, api):
try:
return eval(self.wert, api)
except Exception as e:
raise type(e)(f"\nScriptfehler in Einstellung \"{self.name}\". Vermutlich hast du hier Änderungen in den Hausregeln vorgenommen, die das Problem verursachen.\n\nFehler: {str(e)}")

def serialize(self, ser):
ser.set('name', self.name)
ser.set('text', self.text)
Expand Down
10 changes: 5 additions & 5 deletions src/Sephrasto/Core/Fertigkeit.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ def diffBasiswert(self, attribute):
attributswerte.append(attribute[attribut].wert)
scriptAPI = Hilfsmethoden.createScriptAPI()
scriptAPI['getAttribute'] = lambda: attributswerte
basiswert = eval(Wolke.DB.einstellungen["Fertigkeiten: BW Script"].wert, scriptAPI)
basiswert = Wolke.DB.einstellungen["Fertigkeiten: BW Script"].evaluateScript(scriptAPI)
return basiswert - self.basiswert

def aktualisieren(self):
Expand All @@ -172,13 +172,13 @@ def aktualisieren(self):
scriptAPI = Hilfsmethoden.createScriptAPI()
scriptAPI['getAttribute'] = lambda: self.attributswerte

self.maxWert = eval(Wolke.DB.einstellungen["Fertigkeiten: Maximalwert Script"].wert, scriptAPI)
self.basiswert = eval(Wolke.DB.einstellungen["Fertigkeiten: BW Script"].wert, scriptAPI)
self.maxWert = Wolke.DB.einstellungen["Fertigkeiten: Maximalwert Script"].evaluateScript(scriptAPI)
self.basiswert = Wolke.DB.einstellungen["Fertigkeiten: BW Script"].evaluateScript(scriptAPI)
self.wert = min(self.wert, self.maxWert)
scriptAPI['getWert'] = lambda: self.wert
scriptAPI['getBasiswert'] = lambda: self.basiswert
self.probenwert = eval(Wolke.DB.einstellungen["Fertigkeiten: PW Script"].wert, scriptAPI)
self.probenwertTalent = eval(Wolke.DB.einstellungen["Fertigkeiten: PWT Script"].wert, scriptAPI)
self.probenwert = Wolke.DB.einstellungen["Fertigkeiten: PW Script"].evaluateScript(scriptAPI)
self.probenwertTalent = Wolke.DB.einstellungen["Fertigkeiten: PWT Script"].evaluateScript(scriptAPI)

@staticmethod
def getHöchsteKampffertigkeit(fertigkeiten):
Expand Down
6 changes: 3 additions & 3 deletions src/Sephrasto/Core/Ruestung.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,13 +164,13 @@ def __getScriptAPI(self, abgeleiteteWerte, zone = -1):
return scriptAPI

def getRSFinal(self, abgeleiteteWerte, zone = -1):
return eval(Wolke.DB.einstellungen["Rüstungen: RS Script"].wert, self.__getScriptAPI(abgeleiteteWerte, zone))
return Wolke.DB.einstellungen["Rüstungen: RS Script"].evaluateScript(self.__getScriptAPI(abgeleiteteWerte, zone))

def getBEFinal(self, abgeleiteteWerte):
return eval(Wolke.DB.einstellungen["Rüstungen: BE Script"].wert, self.__getScriptAPI(abgeleiteteWerte))
return Wolke.DB.einstellungen["Rüstungen: BE Script"].evaluateScript(self.__getScriptAPI(abgeleiteteWerte))

def getWSFinal(self, abgeleiteteWerte):
return eval(Wolke.DB.einstellungen["Rüstungen: WSStern Script"].wert, self.__getScriptAPI(abgeleiteteWerte))
return Wolke.DB.einstellungen["Rüstungen: WSStern Script"].evaluateScript(self.__getScriptAPI(abgeleiteteWerte))

def serialize(self, ser):
ser.set('name', self.name)
Expand Down
5 changes: 4 additions & 1 deletion src/Sephrasto/Core/Vorteil.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,10 @@ def finalize(self, db):
self.querverweiseResolved["Statusse"] = db.einstellungen["Statusse: Beschreibung"].wert

def executeScript(self, api):
exec(self.scriptCompiled, api)
try:
exec(self.scriptCompiled, api)
except Exception as e:
raise type(e)(f"\nScriptfehler in Vorteil \"{self.name}\". Vermutlich hast du hier Änderungen in den Hausregeln vorgenommen, die das Problem verursachen.\n\nFehler: {str(e)}")

def kategorieName(self, db):
kategorie = min(self.kategorie, len(db.einstellungen['Vorteile: Kategorien'].wert) - 1)
Expand Down
5 changes: 4 additions & 1 deletion src/Sephrasto/Core/Waffeneigenschaft.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ def finalize(self, db):
self.scriptCompiled = compile_restricted(self.script or "", self.name + " Script", "exec")

def executeScript(self, api):
exec(self.scriptCompiled, api)
try:
exec(self.scriptCompiled, api)
except Exception as e:
raise type(e)(f"\nScriptfehler in Waffeneigenschaft \"{self.name}\". Vermutlich hast du hier Änderungen in den Hausregeln vorgenommen, die das Problem verursachen.\n\nFehler: {str(e)}")

def details(self, db):
if self.script:
Expand Down
2 changes: 1 addition & 1 deletion src/Sephrasto/Sephrasto.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def sephrasto_excepthook(exc_type, exc_value, tb):
logging.critical(exception + "\n".join(traceback))

#Try to show message box, hopefully its not a crash in Qt
text = exception + "\nBei Fragen zum diesem Fehler bitte sephrasto.log aus dem Installationsordner mitsenden."
text = exception + "\n\nBei Fragen zum diesem Fehler bitte sephrasto.log aus dem Installationsordner mitsenden."
if Wolke.Settings['Pfad-Plugins'] in filename:
splitPath = os.path.split(os.path.relpath(filename, Wolke.Settings['Pfad-Plugins']))
if len(splitPath) > 0:
Expand Down

0 comments on commit a71e4f6

Please sign in to comment.