Latest Posts

Topic: Frage - Gebäude Erweitern

Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 22:11
Posts: 221
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Widelands-Forum-Junkie
Location: Deutschland
Posted at: 2024-11-06, 20:30

Frage in der Widelands Dokumentation EN , steht das ein Gebäude NUR ZU EINEN weiteren Gebäude erweitert werden kann .
Dies spiegelt sich auch in der Struktur im LUA-Skript wieder durch die "{}" , als für ein Element steht und nicht für "[]" , als eine Liste die Elemente enthält .
Ich schätze daher schonmal und bedauere es zugleich , das es nicht möglich ist , für ein Gebäude mehrere mögliche Erweiterungen zu haben .

Veranschaulichung

Gebäude-A0 kann     zu Gebäude-B1 ODER Gebäude-C1 erweitert werden .
Gebäude-B1 kann nur zu Gebäude-B2                 erweitert werden .
Gebäude-C1 kann nur zu Gebäude-C2                 erweitert werden .

In Gebäude-A0 arbeiten ( Arbeiter-B0 oder Arbeiter-B1 ) und ( Arbeiter-C0 oder Arbeiter-C1 ) .
Arbeiter-B0 wird nach X-Leveln zu Arbeiter-B1 .
Arbeiter-C0 wird nach X-Leveln zu Arbeiter-C1 .
In Gebäude-B1 arbeiten ( Arbeiter-B1 oder Arbeiter-B2 ) und ( Arbeiter-B1 oder Arbeiter-B2 ) .
In Gebäude-C1 arbeiten ( Arbeiter-C1 oder Arbeiter-C2 ) und ( Arbeiter-C1 oder Arbeiter-C2 ) .
Arbeiter-B1 wird nach X-Leveln zu Arbeiter-B2 .
Arbeiter-C1 wird nach X-Leveln zu Arbeiter-C2 .
In Gebäude-B2 arbeiten ( Arbeiter-B1 oder Arbeiter-B2 ) und Arbeiter-B2 .
In Gebäude-C2 arbeiten ( Arbeiter-C1 oder Arbeiter-C2 ) und Arbeiter-C2 .

Code Beispiele

    enhancement=
    {
        name="empire_plus_building_shieldsmithy",
        enhancement_cost=
        {
            empire_plus_ware_marble=4
        },
        enhancement_return_on_dismantle=
        {
            empire_plus_ware_marble=4
        }
    }

enhancement=
     [
          {
               name="empire_plus_building_toolsmithy",
               enhancement_cost=
               {
                    empire_plus_ware_marble=4
               },
               enhancement_return_on_dismantle=
               {
                    empire_plus_ware_marble=4
               }
          },
          {
               name="empire_plus_building_shieldsmithy",
               enhancement_cost=
               {
                    empire_plus_ware_marble=4
               },
               enhancement_return_on_dismantle=
               {
                    empire_plus_ware_marble=4
               }
          }
     ]


Ich bin auf dieses Problem während einer Fehlerbehebung in meinen Addon gestoßen .
Der behobene Fehler war jedoch nicht dieser , sondern ein anderer , aber ich habe dieses mögliche Problem hier entdeckt .
Ich habe auch schon eine entsprechende Lösung für dieses Problem , sollte mehrere mögliche Erweiterungen für ein Gebäude nicht möglich sein .
Aufgrund von anderen Fehlermeldungen kann ich dies aber noch nicht testen .


Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 2745
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2024-11-06, 20:49

es gibt nur einen Enhancement Knopf, daher gibt es auch immer nur eine Erweiterung.
Die Erweiterung der Arbeiter ist aber unabhängig von den Gebäuden.


Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07
Posts: 2056
OS: Debian Testing
Version: Latest master
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2024-11-06, 20:56

In Lua gibt es keine []-Listen …
Was es in Lua gibt, sind Arrays, das sind Tables, in denen die Keys ausgelassen und implizit nummeriert werden. Die hypothetische Syntax sähe also folgendermaßen aus:

enhancements = {
   {
      name = "...",
      enhancement_cost = {...},
      enhancement_return_on_dismantle = {...},
   },
   {
      name = "...",
      enhancement_cost = {...},
      enhancement_return_on_dismantle = {...},
   },
   ...
},

Welche Arbeiter in jedem der unterschiedlichen Gebäude arbeiten, ist für die Ausbaustufen irrelevant.

Und nun zu deiner Frage:
Richtig, jedes Gebäude kann nur einen Ausbautyp haben. Mehrere Ausbaustufen umzusetzen, würde einige C++Änderungen mit sich ziehen. Das ist nicht trivial, allerdings würde ich die Behauptung wagen, dass man sich das als Good First Issue für den Einstieg in die Widelands-C++-Codebase vornehmen kann.
Die Umsetzung eines solchen Features müsste allerdings von Anfang an mit einem konkreten Anwendungsfall gekoppelt werden, denn so etwas wäre anfällig für Regressionen und sollte daher nur implementiert werden, wenn es auch regelmäßig genutzt wird, damit etwaige Probleme zeitnah auffallen.


Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 2745
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2024-11-06, 21:11

ich gebe zu bedenken, dass eine solche Änderung nicht nur Änderungen an der Spielmechanik c++ Code Basis benötigt, sondern auch eine Anpassung des KI Codes.


Top Quote
Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 22:11
Posts: 221
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Widelands-Forum-Junkie
Location: Deutschland
Posted at: 2024-11-06, 21:16

Ok das war irgendwie abzusehen , das es natürlich nicht geht .
Dann muss ich meine temporäre Lösung umsetzen und die Werkstatt als Gebäude duplizieren .
Werkstatt_1 wird zu Werkzeugschmiede wird zu Waffenschmiede .
Werkstatt_2 wird zu Schildschmiede wird zu Rüstungsschmiede .

Aber ich habe gerade ein weiteres gravierendes Problem entdeckt was möglicherweise erklärt
warum Widelands wenn ich es starte , sofort im Blackscreen ist , sobald mein Addon vollständig aktiviert ist .
Durch mein Transportmittel Konzept habe ich letzlich möglicherweise das gleiche Schleifen Problem wie bei den Mauern .
Bei den Mauern ist es eine transform-Schleife . Dadurch ist es nur möglich Mauern entweder nur aufzubauen exklusiv-oder nur abzubauen , beide transform-Richtungen gleichzeitig gehen nicht .
Und bei den Produktionsgebäuden ist es möglicherweise eine Waren-Abhängigkeiten-Schleife .
Um dies zu testen werde ich alle Gebäude bis auf zwei aus meinen Stamm herausnehmen und entsprechend in der units.lua die anderen Einträge temporär entfernen .
Sollte sich das gleiche Verhalten zeigen was ich schon bei den Mauern beobachtet habe ,
nähmlich das je mehr transform-Schleifen ich aktiviere desto langsamer läd das Spiel , expotenziell , bis hinzu einen Punkt wo es unendlich lang läd , beziehungsweise einfriert .
Das kann ich von außen aber nicht sehen .

Edited: 2024-11-06, 21:17

Top Quote