Seite 1 von 4 1234 LetzteLetzte
Ergebnis 1 bis 15 von 50

Thema: [Modmod für TAC] CB-Mod - Technik: Wissenslücken, Fragen und vielleicht Antworten

  1. #1
    Ein Platz an der Sonne Avatar von Commander Bello
    Registriert seit
    05.06.05
    Ort
    Nähe Koblenz
    Beiträge
    6.209

    [Modmod für TAC] CB-Mod - Technik: Wissenslücken, Fragen und vielleicht Antworten

    Dieser Thread soll mir dienen, schamhaft meine Wissenslücken zu offenbaren, Fragen zu äußern und - hoffentlich - die eine oder andere Antwort zu erhalten.


  2. #2
    Ein Platz an der Sonne Avatar von Commander Bello
    Registriert seit
    05.06.05
    Ort
    Nähe Koblenz
    Beiträge
    6.209

    FEATURE_IMPASSABLE

    Mein erstes (aber wahrlich nicht mein einziges) Problem ist ab hier beschrieben.
    Ich möchte Berge (für alle Einheitentypen/Berufe bis auf den Kühnen Pionier im Beruf Pionier) unpassierbar machen.

    Koma13 hat in einer ersten Nothilfe-Aktion Pythonroutinen zur Verfügung gestellt, die den erwünschten Effekt erzielen, allerdings (weil es eine Methode "auf die Schnelle" war) ist diese Lösung noch sehr "unperformant", um es vorsichtig auszudrücken.

    Das stellt keine Kritik an Koma13 dar, dem ich für seine Unterstützung sehr dankbar bin , sondern dient lediglich der Problembeschreibung!

    Nach der kurzen Schilderung des Performance-Problems hat Koma13 hier weitere Lösungsansätze skizziert, auf die ich mich im folgenden beziehen möchte.

    Zitat Zitat von koma13 Beitrag anzeigen
    Das war zu erwarten. Wir kommen hier aber langsam an einen Punkt, wo Hilfe zur Selbsthilfe das Ziel sein sollte.
    Da sind wir auf einer Linie
    Natürlich wäre es schneller und bequemer für mich, wenn mir irgendeine "gute Fee" die Dinge mundgerecht servierte, aber das hilft mir dann beim nächsten Problem nicht weiter.

    Allerdings frage ich mich gerade, warum ich den Event-Manager verwenden sollte, wenn ich doch gleich die Kartenskripte anpassen kann?

    Ich sehe da z.B. im FaireWeather-Skript die Funktion "addFeatures()".

    Wenn ich die richtig interpretiere, dann tut sie genau das, was der Name verrät, fügt nämlich die Features (in TAC: Dschungel, Wald, Buschland), Eis, Vulkan) hinzu.

    Mein Ansatz wäre nun folgender:
    Da das Kartenskript ja ohnehin aufgerufen und durchlaufen werden muss, lasse ich das (noch von mir zu erstellende) FEATURE_IMPASSABLE an dieser Stelle in die Karte einfügen.
    Der Weg über den Event-Manager im ersten Spielzug würde m.E. einen unnötigen Rechenaufwand beinhalten und damit den Spielstart verzögern.

    Ich würde die Funktion "addFeatures()" also folgendermaßen verändern:
    Code:
    def addFeatures():
        NiTextOut("Generating Features  ...")
        print "Adding Features"
        gc = CyGlobalContext()
        mmap = gc.getMap()
        featureIce = gc.getInfoTypeForString("FEATURE_ICE")
        featureJungle = gc.getInfoTypeForString("FEATURE_JUNGLE")
        featureForest = gc.getInfoTypeForString("FEATURE_FOREST")
        featureLightForest = gc.getInfoTypeForString("FEATURE_LIGHT_FOREST")
    ## CB: neue Feature-Art IMPASSABLE einfügen
        featureImpassable = gc.getInfoTypeForString("FEATURE_IMPASSABLE")
    ## CB: Ende
    # neue Terrain start
        featureVulcano = gc.getInfoTypeForString("FEATURE_VOLCANO")
    # neue Terrain ende
        FORESTLEAFY = 0
        FORESTEVERGREEN = 1
        FORESTSNOWY = 2
        #Ice must be created later because it is overwritten by the addEurope
        #function that is not exposed to python.
    ##    CB: Auskommentierte Funktionen wg. Leserlichkeit gelöscht
    ## 
        for y in range(mc.height):
            for x in range(mc.width):
                i = GetIndex(x,y)
                plot = mmap.plot(x,y)
                # CB start: FEATURE_IMPASSABLE
                if plot.isPeak() == TRUE
                      plot.setFeatureType(featureImpassable,0)
                # CB end 
                #forest and jungle
                if plot.isWater() == False and sm.terrainMap[i] != mc.DESERT and\
                plot.isPeak() == False:
                    if sm.rainFallMap[i] > sm.plainsThreshold*1.5:#jungle
                        if sm.averageTempMap[i] > mc.JungleTemp:
                            if sm.terrainMap[i] == mc.PLAINS:
                                plot.setFeatureType(featureForest,FORESTLEAFY)
                            else:
                                plot.setFeatureType(featureJungle,0)
                        elif sm.averageTempMap[i] > mc.ForestTemp:
                            plot.setFeatureType(featureForest,FORESTLEAFY)
                        elif sm.averageTempMap[i] > mc.TundraTemp:
                            plot.setFeatureType(featureForest,FORESTEVERGREEN)
                        elif sm.averageTempMap[i] > mc.SnowTemp:
                            plot.setFeatureType(featureForest,FORESTSNOWY)
                    elif sm.rainFallMap[i] > sm.desertThreshold:#forest
                        if sm.rainFallMap[i] > PRand.random() * sm.plainsThreshold * 1.5:
                            if sm.averageTempMap[i] > mc.ForestTemp:
                               plot.setFeatureType(featureForest,FORESTLEAFY)
                            elif sm.averageTempMap[i] > mc.TundraTemp:
                                plot.setFeatureType(featureForest,FORESTEVERGREEN)
                            elif sm.averageTempMap[i] > mc.SnowTemp * 0.8:
                                plot.setFeatureType(featureForest,FORESTSNOWY)
    
                if plot.isPeak() == False and plot.isWater() == False:
                    if sm.terrainMap[i] == mc.PLAINS and PRand.random() < mc.chanceForLightForest:
                        plot.setFeatureType(featureLightForest,0)
                    if sm.terrainMap[i] == mc.MARSH and PRand.random() < mc.chanceForTreelessMarsh:
                        plot.setFeatureType(FeatureTypes.NO_FEATURE,0)
    # neue Terrain start
                    else:
                        if PRand.random() == 1:
                    plot.setFeatureType(featureVulcano,0)
    # neue Terrain ende
                    
        return
    Bin ich da auf einem richtigen Wege oder bin ich völlg vom Wege ab?


  3. #3
    Registrierter Benutzer
    Registriert seit
    30.11.08
    Beiträge
    1.563
    Allerdings frage ich mich gerade, warum ich den Event-Manager verwenden sollte, wenn ich doch gleich die Kartenskripte anpassen kann?

    Ich sehe da z.B. im FaireWeather-Skript die Funktion "addFeatures()".
    Weil du so nur eine Lösung für das FaireWeather-Skript hast, die sobald ein anderes Kartenskript oder eine Szenariokarte verwendet wird, nicht mehr funktioniert.

    Code:
    # CB start: FEATURE_IMPASSABLE
                if plot.isPeak() == TRUE
                      plot.setFeatureType(featureImpassable,0)
                # CB end
    Da fehlt ein Doppelpunkt hinter der Bedingung.

  4. #4
    Ein Platz an der Sonne Avatar von Commander Bello
    Registriert seit
    05.06.05
    Ort
    Nähe Koblenz
    Beiträge
    6.209
    Zitat Zitat von koma13 Beitrag anzeigen
    Weil du so nur eine Lösung für das FaireWeather-Skript hast, die sobald ein anderes Kartenskript oder eine Szenariokarte verwendet wird, nicht mehr funktioniert.
    Ja, das ist wahr. Ich müsste natürlich die Kartenskripte anpassen.
    Zitat Zitat von koma13 Beitrag anzeigen
    Code:
    # CB start: FEATURE_IMPASSABLE
                if plot.isPeak() == TRUE
                      plot.setFeatureType(featureImpassable,0)
                # CB end
    Da fehlt ein Doppelpunkt hinter der Bedingung.
    Danke für den Hinweis.

    In einem ersten "quick and dirty"-Versuch hat es schon mal insoweit geklappt, als dass Berge nun (wenn sie denn an der Küste liegen) mit Eis bedeckt werden.

    Jetzt muss ich nur noch das Feature_IMPASSABLE stricken.


  5. #5
    Talking Bull Avatar von Writing Bull
    Registriert seit
    01.10.08
    Beiträge
    21.376
    Zitat Zitat von Commander Bello Beitrag anzeigen
    Jetzt muss ich nur noch das Feature_IMPASSABLE stricken.
    Ich habe das Feature bereits in "Werewolves" hineingebastelt.

    CIV4FeatureInfos:
    Achtung Spoiler:
    PHP-Code:
            <FeatureInfo>
                <
    Type>FEATURE_IMPASSABLE</Type>
                <
    Description>TXT_KEY_FEATURE_IMPASSABLE</Description>
                <
    Civilopedia>TXT_KEY_FEATURE_IMPASSABLE_PEDIA</Civilopedia>
                <
    ArtDefineTag>ART_DEF_FEATURE_IMPASSABLE</ArtDefineTag>
                <
    YieldChanges/>
                <
    RiverYieldIncreases/>
                <
    iMovement>0</iMovement>
                <
    iSeeThrough>0</iSeeThrough>
                <
    iDefense>0</iDefense>
                <
    iAppearance>0</iAppearance>
                <
    iDisappearance>0</iDisappearance>
                <
    iGrowth>0</iGrowth>
                <
    bNoCoast>0</bNoCoast>
                <
    bNoRiver>0</bNoRiver>
                <
    bNoAdjacent>0</bNoAdjacent>
                <
    bRequiresFlatlands>0</bRequiresFlatlands>
                <
    bRequiresRiver>0</bRequiresRiver>
                <
    bImpassable>1</bImpassable>
                <
    bNoCity>1</bNoCity>
                <
    bNoImprovement>0</bNoImprovement>
                <
    bVisibleAlways>0</bVisibleAlways>
                <
    OnUnitChangeTo/>
                <
    TerrainBooleans/>
                <
    FootstepSounds/>
                <
    WorldSoundscapeAudioScript>ASSS_OASIS_SELECT_AMB</WorldSoundscapeAudioScript>
                <
    EffectType>NONE</EffectType>
                <
    iEffectProbability>0</iEffectProbability>
                <
    iAdvancedStartRemoveCost>0</iAdvancedStartRemoveCost>
            </
    FeatureInfo
    Beliebige Datei im Unterordner Text:
    Achtung Spoiler:
    PHP-Code:
        <TEXT>
            <
    Tag>TXT_KEY_FEATURE_IMPASSABLE</Tag>
            <
    English>Impassable</English>
            <
    French>Impassable</French>
            <
    German>Unpassierbar</German>
            <
    Italian>Impassable</Italian>
            <
    Spanish>Impassable</Spanish>
        </
    TEXT>
        <
    TEXT>
            <
    Tag>TXT_KEY_FEATURE_IMPASSABLE_PEDIA</Tag>
            <
    English>The mountains are impassable.</English>
            <
    French></French>
            <
    German>Die hohen Berge sind unpassierbar.</German>
            <
    Italian></Italian>
            <
    Spanish></Spanish>
        </
    TEXT
    CIV4ArtDefines_Feature:
    Achtung Spoiler:
    PHP-Code:
            <FeatureArtInfo>
                <
    Type>ART_DEF_FEATURE_IMPASSABLE</Type>
                <
    bAnimated>0</bAnimated>
                <
    TileArtType>TILE_ART_TYPE_HALF_TILING</TileArtType>
                <
    fScale>1.0</fScale>
                <
    fInterfaceScale>1.0</fInterfaceScale>
                <
    Button>,Art/Interface/Buttons/baseterrain_terrainfeatures_atlas_custom.dds,6,2</Button>
                <
    FeatureVariety>
                    <
    FeatureArtPieces>
                        <
    FeatureArtPiece>
                            <
    ModelFile>Art/Terrain/Features/impassable/sopka7.nif</ModelFile>
                            <
    Connections></Connections>
                        </
    FeatureArtPiece>
                    </
    FeatureArtPieces>
                    <
    iModelCopies>1</iModelCopies>
                    <
    VarietyButton>Art/Terrain/Features/impassable/impassable_Btn.dds</VarietyButton>
                </
    FeatureVariety>
            </
    FeatureArtInfo
    Das leere nif-Modell hatte melcher ja schon zur Verfügung gestellt. Die Buttons hänge ich dir an.
    Angehängte Dateien Angehängte Dateien

  6. #6
    Ein Platz an der Sonne Avatar von Commander Bello
    Registriert seit
    05.06.05
    Ort
    Nähe Koblenz
    Beiträge
    6.209
    Erst einmal vielen Dank für deine Unterstützung!

    Und dann... *seufz* ... wie soll ich sagen...

    Ich habe natürlich schon wieder Probleme

    Und zwar modifiziere ich (nach Einfügen aller obigen xml-Definitionen, der Buttons, der Atlas-Datei usw.) das FaireWeather-Skript.

    Das habe ich ja auch vorher schon getan, um die Wirkungsweise meiner Vorstellung mit Hilfe des Features ICE grob zu überprüfen.
    Dabei gab es keine Probleme.

    Nun jedoch wird beim Einfügen neuer Codezeilen immer eine Verschachtelung erzeugt (als solche in Notepad++ angezeigt), die dann zu einem Syntaxfehler im Python-Interpreter führt.
    Das Ende vom Lied ist, dass der Fehler vom Interpreter 5mal angezeigt wird, das "Python-module CB_Mod06b_FaireWeather.py" als nicht zu laden erklärt wird und Col nicht startet.

    Entsprechende Screenshots sind unten angefügt.
    Die Differenz zwischen den Zeilenangaben in der Fehlermeldung und in der Darstellung liegt darin, dass ich versucht habe, durch Einfügen/Löschen von Kommentarzeilen, weiteres Einrücken "meiner" Zeile, geringeres Einrücken, Änderung der Kommentarzeile und sonstigen Verlegenheitsversuchen, die Verschachtelung aufzuheben. Was mir nicht gelungen ist.

    Hat jemand eine Idee?
    Ich habe probehalber auch mal die Codierung von Notepad++ geändert (s. Screenshot), aber ohne Resultat.






    asfs

    Nachtrag:
    Das Problem der entstehenden Verschachtelung besteht auch schon beim Original der von mir benutzten FaireWeather-Variante.
    Ich kann eine neue Zeile hinter featureLightForest = gc.getInfoTypeForString("FEATURE_LIGHT_FOREST") einfügen, aber sobald die erste Tastatureingabe erfolgt, wird die Verschachtelung angelegt.

    Eine weitere Einrückung nach rechts ändert daran nichts, wenn ich nach links "entrücke", dann wird in Notepad++ nur angezeigt, dass die defAddFeatures(): beendet ist.

    Ich bin ratlos.

    Weiterer Nachtrag:

    Ich habe das "MOD" aus dem Dateinamen entfernt, was dazu führte, dass Col gestartet wird. Allerdings tauchen die Python-Fehler nun im Spielmenü auf.
    Weiterhin habe ich das Skript mit Hilfe von Notepad (also nicht Notepad++) geändet - gleiches Ergebnis, d.h. Fehlermeldung im Spiel.
    Ruft man diese Datei dann in Notepad++ auf, wird wieder die Verschachtelung angezeigt
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Commander Bello (18. November 2011 um 08:51 Uhr) Grund: Ergänzung


  7. #7
    Col-Modder Avatar von raystuttgart
    Registriert seit
    19.03.10
    Ort
    Stuttgart
    Beiträge
    4.585
    Hast du ein Python-Plugin für Notepad++ installiert ?
    Schick mal einen Screenshot, wie ein Python-File bei dir in Notepad++ aussieht.
    (Daran sollte man es sofort erkennen. In den neueren Notepad++ Versionen kommt das glaub ich auch mit.)

    Falls das bei dir noch nicht drin ist:
    Ich glaube das hier ist ganz gut.

    Wenn es nicht daran liegt, hast du wahrscheinlich eher einen Fehler im Skript selber.
    (Doppelpunkt vergessen oder wie du schon selber sagst eine falsche Verschachtelung oder irgendwas in der Art.)

    Ohne den entsprechenden Auszug aus deinem Skript wird man dir da nur schwer helfen können.
    (Was du da geschickt hast ist bei weitem nicht genug um irgendwas am Skript zu erkennen ...)
    Geändert von raystuttgart (18. November 2011 um 11:57 Uhr)
    Teammitgleid dieses Projekt für Colonization:
    [Mod] We The People
    (Nachfolgerprojekt von Religion and Revolution)

    Davor Teammitgleid dieses Projekt für Colonization:
    [Mod] Religion and Revolution

    Vor-Vorheriges Projekt für Colonization:
    [ModMod] ray's Wunschliste

    Und wiederum davor Teammitglied von:
    [Mod] The Authentic Colonization (TAC)

  8. #8
    Talking Bull Avatar von Writing Bull
    Registriert seit
    01.10.08
    Beiträge
    21.376
    Zitat Zitat von raystuttgart Beitrag anzeigen
    Hast du ein Python-Plugin für Notepad++ installiert ?
    Interessant, das kannte ich noch gar nicht. Inwiefern ist das wichtig? Ist das z.B. so intelligent, dass es Formatierungsfehler zeigt oder sogar korrigiert?

  9. #9
    Col-Modder Avatar von raystuttgart
    Registriert seit
    19.03.10
    Ort
    Stuttgart
    Beiträge
    4.585
    Zitat Zitat von Writing Bull Beitrag anzeigen
    Interessant, das kannte ich noch gar nicht. Inwiefern ist das wichtig? Ist das z.B. so intelligent, dass es Formatierungsfehler zeigt oder sogar korrigiert?
    Wie gesagt, in neuen Versionen von Notepad++ kommt ein Python Plugin glaub ich auch mit.
    Das ist dann normalerweise auch aktiviert.

    Kann man übrigens auch über den Plugin-Manager von Notepad++ erkennen ob eines da ist und gegebenenfalls auch nachinstallieren ...

    Edit:
    Kann sein, dass es zum normalen Editieren gar keine Vorteile bringt.
    Ich hab mir das damals direkt installiert und bin mir nicht sicher, was Notepad++ bereits ohne das Plugin bezüglich Highlighting, Kommentierung, Einrückung, ... kann.

    Einfach mal ausprobieren.
    Geändert von raystuttgart (18. November 2011 um 11:57 Uhr)
    Teammitgleid dieses Projekt für Colonization:
    [Mod] We The People
    (Nachfolgerprojekt von Religion and Revolution)

    Davor Teammitgleid dieses Projekt für Colonization:
    [Mod] Religion and Revolution

    Vor-Vorheriges Projekt für Colonization:
    [ModMod] ray's Wunschliste

    Und wiederum davor Teammitglied von:
    [Mod] The Authentic Colonization (TAC)

  10. #10
    Registrierter Benutzer
    Registriert seit
    30.11.08
    Beiträge
    1.563
    Nun jedoch wird beim Einfügen neuer Codezeilen immer eine Verschachtelung erzeugt (als solche in Notepad++ angezeigt), die dann zu einem Syntaxfehler im Python-Interpreter führt.
    Das Ende vom Lied ist, dass der Fehler vom Interpreter 5mal angezeigt wird, das "Python-module CB_Mod06b_FaireWeather.py" als nicht zu laden erklärt wird und Col nicht startet.
    Faireweather nutzt als Whitespaces keine Tabs sondern Leerzeichen. Geh in Notepad++ mal auf: Ansicht->nichtdruckbare Zeichen->Leerzeichen und Tabulatoren anzeigen. Da siehst du dann das Elend.

  11. #11
    Ein Platz an der Sonne Avatar von Commander Bello
    Registriert seit
    05.06.05
    Ort
    Nähe Koblenz
    Beiträge
    6.209
    Zitat Zitat von koma13 Beitrag anzeigen
    Faireweather nutzt als Whitespaces keine Tabs sondern Leerzeichen. Geh in Notepad++ mal auf: Ansicht->nichtdruckbare Zeichen->Leerzeichen und Tabulatoren anzeigen. Da siehst du dann das Elend.


    Das war es!
    Abermals (wie oft eigentlich schon ) vielen, vielen Dank!

    Es funktioniiiihiert!

    Jetzt muss ich gleich mal ein Testspielchen ansetzen....

    Nachtrag:
    Geschieht das mit den Tabulatoren und Leerzeichen nur bei FaireWeather, und wenn ja, wo stellt man das ein?
    Ich wäre da vermutlich so schnell nicht drauf gekommen...

    Zweiter Nachtrag:
    Dank natürlich auch an Ray und W.B.!

    Dritter Nachtrag:
    Der Witz ist, und darum bin ich auch gar nicht auf den Gedanken gekommen, dass meine bisherigen Modifikationen mit Verwendung des Tabs funktionierten (allerdings gibt es auch Dinge, die ich in eine Zeile quetschen musste, weil es plötzlich nicht mehr anders ging - nun weiß ich wohl, woran das lag).
    Schon komisch: manchmal akzeptiert das Skript es, manchmal nicht....
    Geändert von Commander Bello (18. November 2011 um 13:24 Uhr)


  12. #12
    Talking Bull Avatar von Writing Bull
    Registriert seit
    01.10.08
    Beiträge
    21.376
    Zitat Zitat von Commander Bello Beitrag anzeigen
    Es funktioniiiihiert!
    Na, Glückwunsch!
    Könntest du das modifizierte FW-Skript mal anhängen? Das kann ja auch für andere Modder mal sehr nützlich sein. (Für mich zum Beispiel. )

  13. #13
    Ein Platz an der Sonne Avatar von Commander Bello
    Registriert seit
    05.06.05
    Ort
    Nähe Koblenz
    Beiträge
    6.209
    Zitat Zitat von Writing Bull Beitrag anzeigen
    Na, Glückwunsch!
    Könntest du das modifizierte FW-Skript mal anhängen? Das kann ja auch für andere Modder mal sehr nützlich sein. (Für mich zum Beispiel. )
    Aber klar doch!

    Aufpassen: es ist noch nicht "bereinigt", d.h. die Einstellung "riesig" erzeugt die von mir bevorzugten "über-riesigen" Karten.
    Auch die Komposition der "tektonische Platten" hatte ich mal verändert und die Änderung bislang nie herausgenommen... Funktioniert aber mit ansprechenden Ergebnissen, wie ich finde.

    Um meine Änderungen zu finden: nach dem Begriff "CB" suchen. Ich habe alles dokumentiert (hoffe ich).

    Solltest du (oder andere) bei geringerer Kartengröße Unannehmlichkeiten erleben, bin ich natürlich über jede Rückmeldung dankbar.

    19.11.:
    Ich hatte versehentlich eine falsche Version angehängt. Die korrigierte Version findet sich hier.
    Geändert von Commander Bello (19. November 2011 um 01:10 Uhr) Grund: Fehlerhafte Version entfernt u. Link zur neuen Version


  14. #14
    Col-Modder Avatar von raystuttgart
    Registriert seit
    19.03.10
    Ort
    Stuttgart
    Beiträge
    4.585
    @W.B.:

    Was ich übrigens bei dem Python Plugin, dass über Plugin Manager angeboten wird, auch ganz nett finde ist,
    dass es in seiner Doku auch ein paar Grundlagen und Zusammenhänge erklärt.
    (Beispielsweise hab ich dort ein wenig über "Boost" erfahren.)

    Ausserdem verlinkt es auch auf gute Tutorials.

    Achtung Spoiler:


    Angehängte Grafiken Angehängte Grafiken
    Teammitgleid dieses Projekt für Colonization:
    [Mod] We The People
    (Nachfolgerprojekt von Religion and Revolution)

    Davor Teammitgleid dieses Projekt für Colonization:
    [Mod] Religion and Revolution

    Vor-Vorheriges Projekt für Colonization:
    [ModMod] ray's Wunschliste

    Und wiederum davor Teammitglied von:
    [Mod] The Authentic Colonization (TAC)

  15. #15
    Registrierter Benutzer
    Registriert seit
    30.11.08
    Beiträge
    1.563
    Nachtrag:
    Geschieht das mit den Tabulatoren und Leerzeichen nur bei FaireWeather, und wenn ja, wo stellt man das ein?
    Ich wäre da vermutlich so schnell nicht drauf gekommen...
    Das wird nicht eingestellt, sondern hängt immer davon ab, was der Author verwendet hat. Üblich bei Python sind wohl Leerzeichen, Firaxis verwendet Tabulatoren.

Seite 1 von 4 1234 LetzteLetzte

Berechtigungen

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