Dev-Blog

Hier kann alles rund um Freewar diskutiert werden.
Antworten
jSnax7
Wächter des Vulkans
Beiträge: 381
Registriert: 9. Sep 2022, 10:10

Dev-Blog

Beitrag von jSnax7 » 25. Jun 2025, 14:59

Hi zusammen,
Dieser Post hat mich motiviert, etwas mehr als bisher über hintergründige Änderungen in Freewar zu informieren. Erwartet hier nicht tägliche oder wöchentliche Updates, aber wann immer ein größerer technischer Change im Hintergrund stattfindet, welcher keine Auswirkungen auf das Gameplay haben sollte, aber möglicherweise Bugs produziert, schreib ich hier ein paar Sätze darüber. Die Idee ist, ein wenig Verständnis zu schaffen, wenn temporär Dinge buggen,die jahrelang problemlos funktioniert haben. Das wirkt dann natürlich sinnlos, warum wir überhaupt etwas ändern, aber es hilft uns auf lange Sicht, Features bugfrei rauszubringen.
Ihr könnt diesen Thread auch benutzen, um technische Fragen zu stellen, die euch schon immer interessiert haben und die nur Entwickler beantworten können.

Anpassungen an IDs und Keys
Aktuell läuft ein mehrstufiger Plan, um Items in Freewar besser identifizierbar zu machen. Dazu zunächst ein paar Hintergrund-Infos:

Jedes Item hat eine abstrakte "Dummy-ID". Diese ID ist identisch für jedes Item desselben Typos, so hat zum Beispiel jeder Heilzauber die Dummy-ID 1 und jede Larafblüte die Dummy-ID 100. Diese ID wird genutzt, um ein neues Item aus dem Nichts zu erzeugen, also z.B. wenn ihr einen Heilzauber im Shop kauft oder einen Hasen tötet, wobei ein Hasenfell entsteht.
Jedes Item hat außerdem einen Item-Key. Auch dieser ist identisch für jedes Item desselben Typs. Der Unterschied zur Dummy-ID ist eigentlich nur, dass der Item-Key bei tatsächlich existierenden Items vorhanden ist, während die Dummy-ID nur für die theoretische Definition eines Items existiert. Stand jetzt ist nicht garantiert, dass der Item-Key identisch mit der Dummy-ID ist - dazu später mehr.
Zuletzt hat noch jedes Item eine ID. Die könnt ihr sogar ingame sehen, z.B. wenn ihr euch den Link betrachtet, der beim Klick auf den Button "Anschauen" im Inventar entsteht: ...item.php?action=watch&act_item_id=308305893. Diese ID ist ein eindeutiger Wert, der ein Item in der Datenbank identifiziert. Items gleichen Typs haben NICHT dieselbe ID.

Darüber hinaus haben Items natürlich noch eine Menge mehr Attribute, nach denen sie unterschieden werden. Der Zustand und die Stärke einer Waffe, der Verkaufspreis im Shop und - ganz wichtig - der Itemname.

Nun denkt mal an ein komplexes Feature in Freewar wie z.B. die Inventar-Filter. Wie werden dort wohl hintergründig Items identifiziert, die im Filter angezeigt bzw. ausgeblendet werden sollen? Geht es nur über den Namen? Das kann nicht funktionieren, denn es gibt ja Items wie Gewebeproben, Puppen, grüne [eingestellte] Zauberkugeln oder (starke) Rückangriffszauber, die variable Namen aufweisen. Geht es nur über den Item-Key? Das wäre schön, aber auch das ist leider nicht ganz so einfach. Manche Leute wollen ja z.B. einen Unique-Schlüssel der Festung besitzen, aber alle anderen Schlüssel der Festung im Shop verkaufen. Was daher im Hintergrund passiert ist, dass in euren Filtern sowohl der gewünschte Itemname als auch der zugehörige Itemkey hinterlegt ist. Für die normalen Filter klappt das so auch ganz gut, denn deren Logik ist relativ simpel: Wenn ein Item im Inventar, im Shop oder an der Bank sowohl im Namen als auch im Item-Key einem Eintrag im Filter entspricht, wird es angezeigt. Ansonsten nicht. Es braucht nur noch ein wenig magic zum Identifizieren von Items, die einen variablen Namen haben.

Bei dem Mindestmengen-Filter wurde es jedoch um einiges komplexer. Hier war nicht nur wichtig, dass die entsprechenden Items angezeigt wurden, sondern auch die vorhandenen Mengen waren relevant. Das führte zu komplexem Code, denn es sind die folgenden Edge-Cases zu beachten:
  • Items mit gleichem Namen und gleichen Key, die nicht gruppiert werden [z.B. Zauber der Erfahrung mit anderem Tali-Träger im Itemtext oder grüne eingestellte Zauberkugeln für unterschiedliche Zielorte]
  • Items mit unterschiedlichem Namen und gleichem Key, die aber dieselbe Dummy-ID haben und somit gruppiert betrachtet werden sollten [Gewebeproben etc]
  • Items mit unterschiedlichem Namen und gleichem Key, die NICHT dieselbe Dummy-ID haben [Charaspezifische Wissenszauber]
Wenn der letzte Punkt dieser Liste euch überrascht, dann geht es euch so wie mir :D Tatsächlich waren Charaspezifische Wissenszauber ein Sonderfall in Freewar, wo mehrere unterschiedliche Items (daher unterschiedliche Dummy-ID) denselben Item-Key besitzen. Als damals die ersten Wissenszauber eingebaut wurden hat man das wohl so eingestellt, um sie leicht filtern zu können, aber es stellt einen Bruch der sonstigen internen Freewar-Logik dar und hat den Mindestfilter-Code komplexer gemacht, als er sein müsste.

Das wird nun angepasst. Im ersten Schritt habe ich am Sonntag die Wissenszauber angepasst, sodass jeder von ihnen nun einen eigenen Key hat. Das hatte den Nebeneffekt - wie von Strohhut Ruffy gemeldet - dass sie nicht mehr korrekt in Filtern auftauchen, da dort noch der alte Key hinterlegt ist. Sie müssen also manuell entfernt und wieder hinzugefügt werden - das geht z.B. ganz einfach, indem man den Filter exportiert und direkt wieder importiert. In einem zweiten, weniger invasiven, aber deutlich umfangreicherem Schritt hat bwoebi dafür gesorgt, dass alle hardcodierten Referenzen auf Item-Keys durch Referenzen auf Konstanten ersetzt wurden. In einem dritten Schritt wollen wir nun anpassen, dass für jedes in Freewar existierende Item die Dummy-ID identisch mit dem Item-Key ist. Zusammengenommen werden diese Änderungen uns erlauben, ähnlichen Code wie bei den Filtern zukünftig kürzer, einfacher und damit bugfreier zu schreiben als bisher.

Takeya
Feuerwolf
Beiträge: 72
Registriert: 22. Mär 2020, 16:59

Re: Dev-Blog

Beitrag von Takeya » 25. Jun 2025, 19:28

danke für die transparents und die vielen infos die hier geteilt werden :)

da es hier um das thema items und ihre filter geht hab ich direkt eine frage zu den items ansich
warum passiert es bei manchen items das sie plötzlich 2 verschiedene stapel bilden?
und selbst wenn man einen stapel komplett aus dem schließfach nimmt ist immernoch ein zweiter stapel vorhanden, nur ist eben der stapel der eigentlich vollständig bleiben sollte nun kleiner?
manche items sind auch plötzlich auf 2 stapel aufgeteilt, man kann aber einen vollständig rausnehmen und diesen dann aktiv verbrauchen damit eben nurnoch ein stapel vorhanden ist

ein beispiel:
Propellerblatt / 1 aus dem Schließfach holen
Propellerblatt / 27 aus dem Schließfach holen

hier wird beispielsweiße das einzelne propellerblatt nichtmal angezeigt wenn ich es einzeln aus dem schließfach nehme, beschreibung und bild sind bei den zwei stapeln gleich
bei manchen teilungen wird dann zb einfach nur die schrift in unterschiedlichen größen angezeigt

jSnax7
Wächter des Vulkans
Beiträge: 381
Registriert: 9. Sep 2022, 10:10

Re: Dev-Blog

Beitrag von jSnax7 » 25. Jun 2025, 20:54

Die Stapel liegen daran, dass die Items an irgendeiner Stelle einen Unterschied haben. Das können unterschiedlich viele Anwendungen sein (gzk), ein behobener Typo (kürzlich Puzzleteile) oder ein unterschiedlicher Shoppreis. Praktisch alles, was ein Item definiert, muss identisch sein, damit es einen Stapel bildet.
Wenn du jetzt aber Items aus dem Schließfach holst, läuft das über den zuvor erwähnten Item-Key. Dann werden einfach x Items mit Key y aus deinem SF in dein Inventar gelegt. Deswegen kannst du z.B. auch in deinem Beispiel im 1er-Stapel eine 28 eintragen und bei Klick sämtliche Propellerblätter aus dem SF holen.

Takeya
Feuerwolf
Beiträge: 72
Registriert: 22. Mär 2020, 16:59

Re: Dev-Blog

Beitrag von Takeya » 25. Jun 2025, 21:09

ok, das wusste ich zb noch nicht, ich finde es dennoch etwas supoptimal dass das genannte item für mich keinen sichtbaren unterschied hat und dennoch nicht auf einem stapel liegt
hab auch eben extra den shoppreis noch mit angeschaut, der ist auch exakt gleich
gerade bei items die man mal häufiger hat, wie zb hochenergetschie beschwörungen, sieht man so halt nicht mehr auf einmal wieviele man davon hat (bank nach menge sortieren)
heißt also das man alle items die man auf mehren stapeln hat aktiv wegschmeißen/verbrauchen muss damit sie nicht mehr doppelt aufgeführt werden?
ein geänderter shoppreis wird ja zb nur sehr wenige items betreffen, der einzige unterschied der mit bei mehreren doppelten items auffällt ist eben die schriftart

jSnax7
Wächter des Vulkans
Beiträge: 381
Registriert: 9. Sep 2022, 10:10

Re: Dev-Blog

Beitrag von jSnax7 » 25. Jun 2025, 22:32

Naja, ohne DB-Rechte kann ich das nicht einwandfrei sagen, aber ich vermute anhand der Code-Historie, dass das einzelne Propellerblatt sehr alt ist und hinter dem letzten "." noch ein Leerzeichen hat.

Benutzeravatar
Artemisjünger
Wächter des Vulkans
Beiträge: 300
Registriert: 17. Mai 2008, 11:21

Re: Dev-Blog

Beitrag von Artemisjünger » 26. Jun 2025, 00:42

Mal dumm gefragt: Ich habe (mindestens) zwei Items die ich nicht zu Itemfiltern hinzufügen kann, einfach weil sie nie zur Auswahl stehen und auch wenn ich deren exakten Namen angebe, werden sie mir nur rot unterlegt angezeigt. Es handelt sich dabei um Uniques die ich vor einem Weltenwechsel erstellen ließ ("kleine, weiße Fahne" und "glücklicher Goldfisch"). Haben diese eine fehlerhafte ID erhalten (Grunditem für beide sollte ein roter Hering sein), dass Filter sie nicht erkennen?

jSnax7
Wächter des Vulkans
Beiträge: 381
Registriert: 9. Sep 2022, 10:10

Re: Dev-Blog

Beitrag von jSnax7 » 26. Jun 2025, 01:07

Ob das am Weltenwechsel liegt kann ich nicht sagen. Kann es auf meinem Hauptaccount reproduzieren mit einem Unique (das möglicherweise auch vor Weltenwechsel erstellt wurde, nicht sicher), aber wenn ich es mit einem frischen Hering teste klappt alles, wie es soll. Müsste ein Admin mal reingucken, aber der Grund ist sehr sicher, dass der Item-Key vom roten Hering nicht mehr zum Key deines Uniques passt. Was die Ursache davon ist, kann ich nur spekulieren.

Benutzeravatar
Artemisjünger
Wächter des Vulkans
Beiträge: 300
Registriert: 17. Mai 2008, 11:21

Re: Dev-Blog

Beitrag von Artemisjünger » 26. Jun 2025, 01:42

Wie funktioniert das mit den Item-IDs eigentlich bei anwendbaren Items? War die Funktionalität früher direkt an das einzelne Item gebunden und mittlerweile wird es zentral über die dummy-ID geregelt? Da es afaik keine neuen Antiken anwendbaren Items mehr gibt, aber es früher immer ein großer Akt war bestehende zu ändern?

Und habt ihr vor, es auch bei Questitems anzupassen, sodass zB auch ein Unique Taucheranzug funktionieren würde?

Nyrea
Administrator
Beiträge: 2468
Registriert: 19. Sep 2010, 13:09

Re: Dev-Blog

Beitrag von Nyrea » 26. Jun 2025, 02:18

Früher hat man für Updates an bestehenden Items auf sowas wie die Zauberstufe und den Verkaufspreis gesetzt. Das läuft aber extrem langsam, im Vergleich zu jetzt mit dem Itemkey, weshalb man das lieber nicht getan hat.

Und Unique-Taucheranzüge funktionieren seit dem Einbau des Seetangwaldes.
"Ich denke wir werden noch dieses Jahr A:500 Schwerter von unglaublicher Macht sehen." - Sotrax, 2007

cable
Kopolaspinne
Beiträge: 708
Registriert: 30. Jun 2011, 17:59

Re: Dev-Blog

Beitrag von cable » 26. Jun 2025, 10:18

...und alte Relikte sind dann ein Sonderfall? Die sind als ein Stapel angezeigt, obwohl sie meist verschiedene Werte haben. Sortieren lassen sie sich durch die "Wert anzeigen" Option aber wunderbar.

jSnax7
Wächter des Vulkans
Beiträge: 381
Registriert: 9. Sep 2022, 10:10

Re: Dev-Blog

Beitrag von jSnax7 » 26. Jun 2025, 10:35

Guter Punkt. Die Relikte sind kein Sonderfall, aber der Verkaufspreis ist es. Der wird zur Stapelbildung nur beachtet, wenn man ihn anzeigt an der Bank. Im Shop wird er standardmässig benutzt.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste