Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 17

Thema: [Preview/Alpha] Civ 4 Mod Editor

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694

    [Preview/Alpha] Civ 4 Mod Editor

    Moin,

    gemäß der alten Weisheit "release early, release often" gibt's hier die allererste ALPHA (d.h. kein Installer, kein großer Komfort, nicht wirklich stabil, geschweige denn wirklich benutzbar) meines jungen (bisher ausschließlich XML-)Editors. Ich weiß, davon gibt's schon so einige. Der von General Tso ist sogar einigermaßen brauchbar, weil er als einziger einen relevanten Anteil aller XMLs schluckt. Trotzdem mach ich noch einen:
    Erstens, weil ich's kann Zweitens, weil ich hoffe, dass mein Design allgemeingültig genug ist um einen Großteil aller XMLs, die's nur gibt, vernünftig zu verarbeiten - ohne für jedes eine Sonderbehandlung hardzucoden. Drittens, weil mein Design darauf abzielt, diese völlig idiotische Entscheidung von Firaxis, XML als Datenbankformat zu benutzen, für den Endnutzer aufzuheben und ne nette, passendere Abstraktion anzubieten.

    Folglich gibt es einige Einschränkungen: C4me teilt ein XML-Dokument in Objekte auf, z.B. ein einzelnen Einheiten in der UnitInfos, und zeigt sie anhand ihres Infotypes (das Type tag) an. XMLs, die etwas beinhalten was nen Infotype hat, kann man aktuell noch nicht bearbeiten. Ausnahmen für z.B. GlobalDefines könnte man einarbeiten, aber das sind halt Ausnahmen. Trotzdem sollte es auch für die meisten Mod-spezifischen XMLs funktionieren (die SpellInfos.xml aus FfH2 klappt z.B.), solange es halt ungefähr in der Form ist die das Programm erwartet.
    Außerdem ist die ganze Sache komplett auf Englisch, i18n ist n höllischer Aufwand und für diese Art Programm eh wertlos (wer moddet schon, ohne min. Schulenglisch?).

    Anforderungen:
    Recht viel RAM (FfH2 braucht knapp 400 MB), und auch mit nem starken CPU wird die GUI beim öffnen größerer Mods deutlich spürbar einfrieren.
    Software-technisch braucht es Python 3.1 (ich hab 3.1.1, aber sollte auch mit 3.1.2 funktionieren.) und ne aktuelle Version von PyQt4 (4.7). Ich bundle es mit allem benötigten sobald die ganze Sache benutzbar ist, versprochen.

    Features:
    Nicht viele Aber man kann bereits sehr viele XMLs öffnen und alle Tags, die nur ein Textfeld enthalten (also nix verschachteltest wie z.B. UnitAIs), editieren und wieder abspeichern. Und das nicht besonders komfortabel. Aber immerhin schluckt es schon jetzt mehr XMLs als jeder andere XML-Editor da draußen, ausgenommen General Tsos.

    TODO / Geplante Features:
    Zu viele Aber wünschenswert wäre:
    • besser Bedienung... VIEL bessere Bedienung
    • weniger Speicherverbrauch (aktuell knapp 400 MB für FfH2, weil alle XMLs im RAM gehalten werden - ist nunmal das einfachste)
    • ein Mechanismus, um auch XML-Dateien ohne Type-Tag darstellen zu können, wohl ein eigenes Dateiformat samt Parser
    • Unterstützung für Tags, die mehr als ein einfaches Textfeld enthalten (UnitAIs z.B.), erfordert komplett neue (und kompliziertere) Visualisierung
    • Langfristig: Assistenten für z.B. Schema-Änderungen, Validierung aller Felder anhand der Schemata (damit man nicht erst Civ starten muss und nen hässlichen Fehler kriegt), Suchen & Ersetzen, usw. - ein Plugin-System ist schon angedacht und teilweise gecodet
    • Eventuell Civ5-Unterstützung (soll ja auch auf XML basieren ), wenn es raus ist und jemand ohne Steam-Aversion mir dabei hilft


    Link:
    http://www.mediafire.com/?iciod119l99b5qk
    (@J: Mal sehen, ob mediafire wirklich saugt oder ob du nur zu blöd bist )

    c4me.py ist das Hauptprogramm, build/ enthält größtenteils unfertige Skripte die irgendwann automatisch Installer+Source-Tarball erstellen sollen, Rest sind Module (teilweise noch garnicht benutzt).

    Ich bin sehr dankbar ggü Testern. Bugmeldungen, Verbesserungsvorschläge, Vorschusslorbeeren, Motivation, etc. werden mit Kusshand angenommen Und falls sich sogar jemand findet, der mitwirken will... einfach melden.

  2. #2
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    ...blöder Dienst, braucht Javascript UND Cookies...

    Bei der Installationsanleitung meint man gerade, du würdest unter Linux arbeiten, denn das sind meist die Leute, die sagen "Lade dir diese 200 Dinge runter und übersetze die Hälfte davon selbst, dann kann man das Ding zum laufen bringen" .

    Muss mal schauen, ob ich irgendwann in nächster Zeit (= 4 Wochen) mal zum ausprobieren komme (Chance liegt bei rund 20%, oder so ).
    Kann man eignetlich 2 Python-Versionen nebeneinander installieren? Hab' keine Lust Blender schon wieder neu zu installieren.
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  3. #3
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von The_J Beitrag anzeigen
    Kann man eignetlich 2 Python-Versionen nebeneinander installieren? Hab' keine Lust Blender schon wieder neu zu installieren.
    Ja, kann man.

  4. #4
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Zitat Zitat von The_J Beitrag anzeigen
    ...blöder Dienst, braucht Javascript UND Cookies...
    Okay, das ist ein Argument Das ich das ganze eh open source mache, könnt' ich eigentlich auch Sourceforge bemühen. Nur sind deren Server so arschlahm Erst recht, wenn man größere Mengen im SVN rumschiebt...

    Bei der Installationsanleitung meint man gerade, du würdest unter Linux arbeiten, denn das sind meist die Leute, die sagen "Lade dir diese 200 Dinge runter und übersetze die Hälfte davon selbst, dann kann man das Ding zum laufen bringen" .
    Ne, ich hab zwar nur ne VM mit Ubuntu, aber nur, um Kram zum Laufen zu bringen, der nur oder deutlich besser auf Unix-Verwandten läuft. Paket-Manager sind ein Segen - ganz ehrlich, die meiste Software installiert sich dort leichter als auf Windows - aber wehe, man muss den Kram selbst kompilieren... ich rechne auch nicht damit, dass viele sich das antun. Nur irgendwer muss ja das Skript schreiben, dass ne .exe ohne dependencies erstellt, und bei der allerersten Alpha lohnt sich das ja nicht wirklich

    Muss mal schauen, ob ich irgendwann in nächster Zeit (= 4 Wochen) mal zum ausprobieren komme (Chance liegt bei rund 20%, oder so ).
    Deinen Zeitplan will ich (immer noch ) nicht haben

    Kann man eignetlich 2 Python-Versionen nebeneinander installieren? Hab' keine Lust Blender schon wieder neu zu installieren.
    Ja, kann man. Ich hab auch 2.6 neben 3.1 laufen... einziges Ärgernis, man kann nur eins im PATH (außer man benennt den einen Interpreter um) haben und nur eins mit der Dateierweiterung verknüpfen.

  5. #5
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Nur irgendwer muss ja das Skript schreiben, dass ne .exe ohne dependencies erstellt [...]
    Mit cx_freeze ging das dann doch erstaunlich schnell... automatisierten build hab ich zwar immer noch nicht, aber jetzt gibt's die Alpha 1 (die Anwendung selbst ist noch auf dem gleichen Stand wie heutegestern Nachmittag, nur in build/ hat sich was getan) als Win32-exe:
    http://www.mediafire.com/?eku6bocwiw1cmvh
    Einfach in nen eigenen Ordner packen und c4me.exe starten. (<- sind die Installationsanweisungen jetzt einfach genug? )

    Und ich richte grad was bei Sourceforge ein, dann gibt's bald n Mirror - einen recht lahmen Mirror, aber einen der recht genügsam sein sollte.

  6. #6
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Sourceforge-Projekt steht. Es war ein harter Kampf und dank der unfassbar trägen Server eine echte Qual, aber jetzt ist die exe auch dort runterzuladen. Das SVN fülle ich dann morgen... oder so.

  7. #7
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Mal ein paar Anregungen/Vorschläge von meinerseits:

    Zitat Zitat von delnan Beitrag anzeigen
    [*]weniger Speicherverbrauch (aktuell knapp 400 MB für FfH2, weil alle XMLs im RAM gehalten werden - ist nunmal das einfachste)
    Hier böte sich doch ein Notebook an, ähnlich wie dass bei Codeblocks realisiert wurde.

    ein Mechanismus, um auch XML-Dateien ohne Type-Tag darstellen zu können, wohl ein eigenes Dateiformat samt Parser
    Kurze Frage: was meinst du mit Type-Tag
    Wenn du was parsen willst, dann schaue dir mal LEPL an.

    • Unterstützung für Tags, die mehr als ein einfaches Textfeld enthalten (UnitAIs z.B.), erfordert komplett neue (und kompliziertere) Visualisierung
    • Langfristig: Assistenten für z.B. Schema-Änderungen, Validierung aller Felder anhand der Schemata (damit man nicht erst Civ starten muss und nen hässlichen Fehler kriegt), Suchen & Ersetzen, usw. - ein Plugin-System ist schon angedacht und teilweise gecodet
    Du könntest dir einen Assistenten für Schema-Änderungen und Validierung der Felder schenken, wenn du schon bei Benutzereingaben dafür sorgst, dass korrekte Werte (im Sinne des Schemas) sichergestellt werden. Hierzu könntest du die GUI-Elemente (für die Benutzereingaben) dynamisch anhand des Schemas erzeugen: z.B. eine Tabelle für alle tags mit integern, eine CheckListbox für alle bool-tags (falls eine solche Listbox unterstützt wird), popup-list für tags, die eine bestimmte Auswahl von irgendwas verlangen, usw.

    Du müsstest nur sicherstellen, dass das Schema selbst gültig ist.

  8. #8
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Zitat Zitat von alpha civ Beitrag anzeigen
    Mal ein paar Anregungen/Vorschläge von meinerseits:
    Danke, grade auf dich hab ich gehofft

    Hier böte sich doch ein Notebook an, ähnlich wie dass bei Codeblocks realisiert wurde.
    Hilf mir auf die Sprünge, ich kenn Codeblocks nur als Benutzer (und das auch nicht besonders gut). Meinst du, nur die Dateien laden, die auch bearbeitet werden? Aktuell versuch ich nämlich was ähnliches: Ich bau es so um, dass nur die aktuelle XML geladen ist und beim welchseln der Datei die alte gespeichert und geschlossen und die neue geladen wird. Immer noch nicht ideal, aber schonmal 300 MB weniger Speicherverbrauch
    Langfristig sollte es wohl so laufen, dass eine Datei im Hintergrund geöffnet wird, sobald man sie im Editor öffnet, und geschlossen wird, wenn sie nicht mehr im Editor geöffnet ist und das gespeichert wird.
    Kurze Frage: was meinst du mit Type-Tag
    Na genau das: Das XML-Tag &lt;Type&gt;. Der Krieger hat Type (im SDK und Python heißt's InfoType) UNIT_WARRIOR, und in der XML steht irgendwo &lt;Type&gt;UNIT_WARRIOR&lt;/Type&gt;. Den benutz ich, um ganz unabhängig vom sonstigen Format der XML festzustellen, wo ein(e) ArtDef/Buildung/.../whatever anfängt und die nächste aufhört. Klappt ganz gut (selbst bei vielen FfH2-XMLs). Nur funktioniert das nicht bei XMLs, die kein &lt;Type&gt; beinhalten.
    Wenn du was parsen willst, dann schaue dir mal LEPL an.
    Eigentlich will ich ja nicht Aber wenn ich Unterstützung für z.B. GlobalDefines haben will (da gibt's kein InfoType, die kriegen werden anders gehändelt), und nix hardcoden will, dann braucht es ein Format, um sowas zu kodieren.
    für den Link, sieht sehr cool aus.

    Du könntest dir einen Assistenten für Schema-Änderungen und Validierung der Felder schenken, wenn du schon bei Benutzereingaben dafür sorgst, dass korrekte Werte (im Sinne des Schemas) sichergestellt werden. Hierzu könntest du die GUI-Elemente (für die Benutzereingaben) dynamisch anhand des Schemas erzeugen: z.B. eine Tabelle für alle tags mit integern, eine CheckListbox für alle bool-tags (falls eine solche Listbox unterstützt wird), popup-list für tags, die eine bestimmte Auswahl von irgendwas verlangen, usw.

    Du müsstest nur sicherstellen, dass das Schema selbst gültig ist.
    Ja ja ja, könnte... aber hast du nen Plan, wie komplex das ist, dynamisch ne GUI zu generieren?
    Ne, ich werde demnächst den ganzen XML-Code über den Haufen werfen, DOM nicht mehr im Speicher behalten sondern bei Bedarf neu erstellen, den XmlObj-Instanzen das generieren ihrer GUI-Darstellung übertragen, etc... da kann ich genauso gut noch zum Schema passende Eingabe-Widgets dazutun
    Geändert von delnan (17. August 2010 um 22:39 Uhr)

  9. #9
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von delnan Beitrag anzeigen
    Na genau das: Das XML-Tag &lt;Type&gt;. Der Krieger hat Type (im SDK und Python heißt's InfoType) UNIT_WARRIOR, und in der XML steht irgendwo &lt;Type&gt;UNIT_WARRIOR&lt;/Type&gt;. Den benutz ich, um ganz unabhängig vom sonstigen Format der XML festzustellen, wo ein(e) ArtDef/Buildung/.../whatever anfängt und die nächste aufhört. Klappt ganz gut (selbst bei vielen FfH2-XMLs). Nur funktioniert das nicht bei XMLs, die kein &lt;Type&gt; beinhalten.
    Womit tust du XML-Files parsen?


    Ja ja ja, könnte... aber hast du nen Plan, wie komplex das ist, dynamisch ne GUI zu generieren?
    Hängt vermutlich vom verwendeten GUI-Toolkit ab. Bei wxPython geht sowas relativ leicht.

  10. #10
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Zitat Zitat von alpha civ Beitrag anzeigen
    Womit tust du XML-Files parsen?
    Aktuell mit xml.dom.minidom, weil ich ja lxml und Python 3 nicht zusammenkriege. Ich überlege, auf ElementTree umzustellen - aber das letzte mal, als ich Civ4-XMLs und ElementTree kombinieren wollte, hat irgendwas nicht gefunzt
    Hängt vermutlich vom verwendeten GUI-Toolkit ab. Bei wxPython geht sowas relativ leicht.
    PyQt. Gut, Widget erstellen und konfigurieren sollte in je 5-10 Zeilen machbar sein, aber dann muss das ganze auch (in ner sinnigen Reihenfolge) in Layout rein, und wahrscheinlich muss ich mich noch selbst um den Scrollbalken beim TableLayout kümmern

  11. #11
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von delnan Beitrag anzeigen
    Aktuell mit xml.dom.minidom, weil ich ja lxml und Python 3 nicht zusammenkriege. Ich überlege, auf ElementTree umzustellen - aber das letzte mal, als ich Civ4-XMLs und ElementTree kombinieren wollte, hat irgendwas nicht gefunzt
    Hier kannst du die Version 2.2.4 holen. Es gibt zwar neuere Versionen, diese laufen aber noch nicht unter Python 3.1.

    PyQt. Gut, Widget erstellen und konfigurieren sollte in je 5-10 Zeilen machbar sein, aber dann muss das ganze auch (in ner sinnigen Reihenfolge) in Layout rein, und wahrscheinlich muss ich mich noch selbst um den Scrollbalken beim TableLayout kümmern
    Gibt es keine Sizer (oder äquivalentes)?

  12. #12
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Zitat Zitat von alpha civ Beitrag anzeigen
    Hier kannst du die Version 2.2.4 holen. Es gibt zwar neuere Versionen, diese laufen aber noch nicht unter Python 3.1.
    Du rettest meine geistige Gesundheit
    Gibt es keine Sizer (oder äquivalentes)?
    Schon wieder bin ich nicht ganz sicher, was du meinst - einer von uns muss das GUI-Toolkit des anderen lernen, sonst bringt das nix Ich denke schon, dass QTableLayout widgets ordentlich aufreihen kann, aber vermutlich ohne Scrollbalken. Müsste ich erst testen...

    Edit: QBox schaut eig. noch besser aus... nur das will wohl auch alle Widgets auf einmal anzeigen
    Edit2: QScrollArea macht genau das Preiset Qt
    Geändert von delnan (18. August 2010 um 17:29 Uhr)

  13. #13
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von delnan Beitrag anzeigen

    Schon wieder bin ich nicht ganz sicher, was du meinst - einer von uns muss das GUI-Toolkit des anderen lernen, sonst bringt das nix
    Mit Sizer kann man das Layout steuern, außerdem sorgen die dafür, dass die Widgets ihre Größe automatisch anpassen, wenn die Größe des Fensters verändert wird, so dass man sich selbst darum kümmern muss.

  14. #14
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Ach so. Zum steuern der Widget-Größen hat Qt sogenannte "SizePolicies", die ich mir nochmal genauer anschauen muss. Die Splitter (reihen Widgets horizontal oder vertikal auf und lassen den Benutzer die Grenzen verschieben; die benutz ich für alles bisherige Layout) machen das automatisch.

  15. #15
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Im übrigen war ich nicht (völlig) untätig, kleiner Statusreport:
    1. Der Speicherverbrauch ist (schon länger) auf zivilie Maße runter - XMLs werden nur noch geladen, wenn sie auch bearbeitet werden, und danach so bald wie möglich wieder geschlossen. Ist noch ein böser Bug drin, der gerne den unterliegende DOM-Baum schrottet. Aber der nächste Schritt ist eh, kein DOM mehr zu benutzen - das sollte dann verschwinden (und zig neuen Bugs Platz machen ).
    2. Schemata werden jetzt in einen einfach zu naivigierende, minimalistische (= speicherschonende) Baum geparst Geprettyprintes Schema zu den EventTriggerInfos (x - None times = min. x mal, keine Grenze nach oben):
    Achtung Spoiler:
    Code:
    [EventTriggerInfo] 1 - 1 times:
        [Type] 1 - 1 times string
        [WorldNewsTexts] 1 - 1 times:
            [Text] 0 - None times string
        [TriggerTexts] 1 - 1 times:
            [TriggerText] 1 - None times:
                [Text] 1 - 1 times string
                [Era] 1 - 1 times string
        [bSinglePlayer] 1 - 1 times boolean
        [iPercentGamesActive] 1 - 1 times int
        [iWeight] 1 - 1 times int
        [bProbabilityUnitMultiply] 1 - 1 times boolean
        [bProbabilityBuildingMultiply] 1 - 1 times boolean
        [Civic] 1 - 1 times string
        [iMinTreasury] 1 - 1 times int
        [iMinPopulation] 1 - 1 times int
        [iMaxPopulation] 1 - 1 times int
        [iMinMapLandmass] 1 - 1 times int
        [iMinOurLandmass] 1 - 1 times int
        [iMaxOurLandmass] 1 - 1 times int
        [MinDifficulty] 1 - 1 times string
        [iAngry] 1 - 1 times int
        [iUnhealthy] 1 - 1 times int
        [UnitsRequired] 1 - 1 times:
            [UnitClass] 0 - None times string
        [iNumUnits] 1 - 1 times int
        [iNumUnitsGlobal] 1 - 1 times int
        [iUnitDamagedWeight] 1 - 1 times int
        [iUnitDistanceWeight] 1 - 1 times int
        [iUnitExperienceWeight] 1 - 1 times int
        [bUnitsOnPlot] 1 - 1 times boolean
        [BuildingsRequired] 1 - 1 times:
            [BuildingClass] 0 - None times string
        [iNumBuildings] 1 - 1 times int
        [iNumBuildingsGlobal] 1 - 1 times int
        [iNumPlotsRequired] 1 - 1 times int
        [bOwnPlot] 1 - 1 times boolean
        [iPlotType] 1 - 1 times int
        [FeaturesRequired] 1 - 1 times:
            [FeatureType] 0 - None times string
        [TerrainsRequired] 1 - 1 times:
            [TerrainType] 0 - None times string
        [ImprovementsRequired] 1 - 1 times:
            [ImprovementType] 0 - None times string
        [BonusesRequired] 1 - 1 times:
            [BonusType] 0 - None times string
        [RoutesRequired] 1 - 1 times:
            [RouteType] 0 - None times string
        [ReligionsRequired] 1 - 1 times:
            [ReligionType] 0 - None times string
        [iNumReligions] 1 - 1 times int
        [CorporationsRequired] 1 - 1 times:
            [CorporationType] 0 - None times string
        [iNumCorporations] 1 - 1 times int
        [bPickReligion] 1 - 1 times boolean
        [bStateReligion] 1 - 1 times boolean
        [bHolyCity] 1 - 1 times boolean
        [bPickCorporation] 1 - 1 times boolean
        [bHeadquarters] 1 - 1 times boolean
        [Events] 1 - 1 times:
            [Event] 0 - None times string
        [PrereqEvents] 1 - 1 times:
            [Event] 0 - None times string
        [bPrereqEventPlot] 1 - 1 times boolean
        [OrPreReqs] 1 - 1 times:
            [PrereqTech] 0 - None times string
        [AndPreReqs] 1 - 1 times:
            [PrereqTech] 0 - None times string
        [ObsoleteTechs] 1 - 1 times:
            [ObsoleteTech] 0 - None times string
        [bRecurring] 1 - 1 times boolean
        [bTeam] 1 - 1 times int
        [bGlobal] 1 - 1 times boolean
        [bPickPlayer] 1 - 1 times boolean
        [bOtherPlayerWar] 1 - 1 times boolean
        [bOtherPlayerHasReligion] 1 - 1 times boolean
        [bOtherPlayerHasOtherReligion] 1 - 1 times boolean
        [bOtherPlayerAI] 1 - 1 times boolean
        [iOtherPlayerShareBorders] 1 - 1 times int
        [OtherPlayerHasTech] 1 - 1 times string
        [bPickCity] 1 - 1 times boolean
        [bPickOtherPlayerCity] 1 - 1 times boolean
        [bShowPlot] 1 - 1 times boolean
        [iCityFoodWeight] 1 - 1 times int
        [PythonCanDo] 1 - 1 times string
        [PythonCanDoCity] 1 - 1 times string
        [PythonCanDoUnit] 1 - 1 times string
        [PythonCallback] 1 - 1 times string
        [iPrereqCrime] 1 - 1 times int
        [iPrereqGlobalCounter] 1 - 1 times int
        [PrereqAlignment] 1 - 1 times string
        [PrereqCivilizationPleased] 1 - 1 times string
        [PrereqLeader] 1 - 1 times string
        [PrereqTrait] 1 - 1 times string

    3. Das benutz ich jetzt, um dynamisch ne (validiernde) passende Eingabemaske zu generieren

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •