Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] Sonderfertigkeiten mit Attributen #14

Open
Starjon opened this issue Jul 14, 2024 · 7 comments
Open

[Feature Request] Sonderfertigkeiten mit Attributen #14

Starjon opened this issue Jul 14, 2024 · 7 comments

Comments

@Starjon
Copy link

Starjon commented Jul 14, 2024

Einige Sonderfertigkeiten, z.B. Talentspezialisierungen, haben zusätzliche Attribute (z.B. das Talent und die Spezialrichtung). Wäre es möglich, diese in die Erweiterungen mit einzubeziehen? Sowohl für neue Sonderfertigkeiten, als auch für Bedingungen?

Das wäre mega, kann mir aber auch vorstellen, dass das etwas aufwändiger sein könnte. So oder so, vielen Dank für das Tool! Das macht sehr viele Hausregeln erst praktikabel, die man sonst gar nicht erst einführen würde, weil man nicht auf die Unterstützung durch die Helden-Software verzichten möchte.

@MarkusBauer
Copy link
Owner

Hab mir das System mal etwas näher angesehen. Sonderfertigkeiten mit Varianten lassen sich noch einigermaßen einfach implementieren.

{
    "sonderfertigkeiten": [
        {"name": "Gesegnet", "kosten":  200, "varianten": ["Zwölfgötter", "Halbgott", "Namenloser"]}
    ]
}

grafik

In Bedingungen greift dann die SF, ohne dass die Variante beachtet wird. Würde sich anders nur unvollständig umsetzen lassen. Abhängigkeiten wie bspw. Scharfschütze => Meisterschütze sind in der Software alle hardcodet.

Zauberspezialisierungen (für eigene Zauber) sind bereits implementiert, Talentspezialisierungen für eigene Talente nicht ohne Weiteres möglich.

Erstaunlich kompliziert wären Sonderfertigkeiten mit Freitext oder mehreren Auswahlfeldern (wie bspw. bei den Wahren Namen). Dazu müssten wir zur Laufzeit Bytecode produzieren, und das wäre ein anders wildes Gefrickel.


Was möchtest du denn konkret umsetzen? Vielleicht gibt's ja andere Wege?
Ansonsten würde ich die Tage mal ne Version veröffentlichen, die das Beispiel-JSON oben möglich macht.

@Starjon
Copy link
Author

Starjon commented Jan 3, 2025

Kann man eine Sonderfertigkeit mit Auswahl dann auch mehrfach mit verschiedenen Auswahlen kaufen? So oder so, das wäre natürlich immerhin schon mal etwas. Zur Laufzeit Bytecode injecten klingt in der Tat nicht so spaßig. :D Ka, ob das mit JEP 484 vlt. besser wird (https://openjdk.org/jeps/484), aber wirklich hübsch wird es bestimmt nicht. Das wäre natürlich eigentlich super, aber ich verstehe absolut, wenn du/ihr da keine Lust drauf habt. :D

Wir haben in unserer Runde diverse SFs für Geweihte eingeführt, teilweise übernommen von DSA 5, teilweise Eigenkreationen. Dazu gehören zum Beispiel Spezialisierungen auf bestimmte Liturgien, die man so möglicherweise schöner umsetzen könnte. Bisher nutze ich spezielle Annotationen für das JSON, die ich dann mit einem kleinen Skript übersetzen lasse, um z.B. automatisch eine passende Spezialisierung für jede existierende Liturgie anzulegen. Führt dann natürlich zu einer entsprechend langen SF-Liste.

Zugriff auf die Varianten in Bedingungen wäre z.B. für eine Eigenkreation nützlich, die wir für Alchimisten eingeführt haben. Die erfordert TaW Alchimie (Laborpraxis) 15, sprich entweder TaW Alchimie 15 oder TaW Alchimie 13 mit TS Laborpraxis. Aktuell lässt sich die Bedingung soweit ich weiß nicht abbilden. In der Praxis ist das nicht schlimm, weil man notfalls halt über den Editor gehen kann, aber es wäre natürlich "cleaner", das korrekt hinterlegen zu können.

@MarkusBauer
Copy link
Owner

Ja, die Sonderfertigkeit lässt sich dann mehrfach kaufen (je einmal pro Auswahlmöglichkeit).

Der Part mit den Liturgien ließe sich dann ja bspw. umsetzen, vor Allem wenn du eh schon ein Script mit Listen hast. Dann muss man nur darauf vertrauen, dass die Spieler die SF nur aktivieren, wenn sie auch die passende Liturgie haben. Aus Neugier: woher ziehst du diese Listen?

JEP484 sieht interessant aus, hilft hier aber nicht wirklich weiter. Einen Java-Bytecode-Patcher gibt's sogar schon in dem Projekt. Hier müsste man eigene Klassen schreiben können, die von nicht verfügbaren Klassen aus dem Generator erben. Dabei kann sich der Klassen-Name in der Helden-Jar jederzeit ändern, und in den Quellcode schreiben lässt der sich auch nicht. D.h. man müsste erstmal Infrastruktur bauen, um gegen unbekannte Klassen compilen und linken zu können. Nicht unmöglich, aber verdammt viel Arbeit.
Der Part mit den Bedingungen scheitert mehr daran, dass mir die Funktionsweise der gefühlt 5000 SF-Unterklassen noch nicht 100% klar ist. Und man nochmal 10 Methoden dynamisch aus den obfuscated Klassen fischen müsste. Auch nicht unmöglich, aber viel Arbeit für ein kleines Feature.

@MarkusBauer
Copy link
Owner

Release ist da: https://github.com/MarkusBauer/helden-software-loader/releases/tag/v1.7.2

@Starjon
Copy link
Author

Starjon commented Jan 3, 2025

Das ist der Code des Scripts: https://cpaste.de/hogeyeqayo.java Die für unsere Gruppe notwendigen Liturgien sind einfach hardcoded eingetragen... nicht hübsch (das ist das Ding insgesamt nicht), aber tuts. :D Im JSON sieht das dann z.B. so aus:

		// Liturgiespezialisierungen
		{"per liturgy":
			{"name": "Liturgiespezialisierung I: {liturgy short name}", "kosten": {liturgy computation ((({liturgy degree}+1)^2)*5)}, "kategorie": "Geweiht", "bedingungen": [
				{"type": "MagieLevel", "name": "Geweihter"},
				{"type": "Sonderfertigkeit", "name": "{liturgy full name}"},
				{"type": "LKW", "value": {liturgy computation (3+(({liturgy degree}+1)*2))}}
			]}
		}

Die Kosten lassen sich wahrscheinlich nicht so direkt mit den Auswahl-SFs umsetzen, oder?

@MarkusBauer
Copy link
Owner

Die Kosten hab ich sogar gefunden, kommt irgendwann...

@MarkusBauer
Copy link
Owner

Kosten pro Variante in JSON:

{"name": "Gesegnet II", "kosten":  200, "varianten": ["Zwölfgötter", "Halbgott", {"name": "Namenloser", "kosten": 300}]}

Oder im neuen YAML-Format:

sonderfertigkeiten:
  - name: Göttliche Berührung
    kosten: 300
    varianten:
      - Praios
      - Rondra
      - Namenloser
      # Kosten können pro Variante überschrieben werden:
      - name: Swafnir
        kosten: 200

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants