Seite 1 von 6 12345 ... LetzteLetzte
Ergebnis 1 bis 15 von 87

Thema: Thukydides' Peloponnesischer Krieg

  1. #1
    Keinpferd
    Gast

    MTW2 Thukydides' Peloponnesischer Krieg



    …demnächst



    Bild



    Thukydides' Peloponnesischer Krieg heißt dieses Szenario deshalb, weil nicht Diodor oder Guido Knopp Pate gestanden haben, sondern Thukydides, der selber eine Zeitlang auf Seiten der Athener das Strategenamt bekleidete. Er kannte Perikles vom Öl-Ringen und hatte Alkibiades vor Jahren seine Vespa abgekauft, war also Insider und schreibt anders als ein Historiker, der hundert Jahre nach den Ereignissen Quellen auswertet. Als Augenzeuge konnte er zu Geschehnissen, die er nicht selber miterlebt hatte, andere Augenzeugen persönlich befragen, und wo es verschiedene Darstellungsweisen gab, mit dem Blick des Zeitgenossen sich für die in seinen Augen wahrscheinlichere und wahrere Variante entscheiden. Also auf der einen Seite eine spitzenmäßige Quelle, auf der anderen Seite eine Antik-Mod mit Spitzen-Features. Beim Umblättern jeder Seite von Thukydides' Peloponnesischem Krieg, dem Buch, denkt man: das gibt's auch als Feature in dieser Form in PAE. Und es gibt eine wirklich gut gemachte, perfekt geeignete Karte von El Hidalgo, mit Sizilien, dem unteren Teil von Italien und genau dem richtigen Stück Kleinasien…

    Bild

    Die Karte ist zwar "Riesig", aber auch hier mit viel Wasser dabei, also nicht so rechenintensiven Wasser-Feldern. Die Zahl der Städte insgesamt auf der Karte ist aufs Nötigste reduziert. Dank hoher Kulturwerte "füllen" Städte an Nebenschauplätzen diesen Kartenbereich und halten ihn frei von Barbarenspawn. Die Spartaner haben zehn Städte, die Korinther sieben, um die Größe der beteiligten Fraktionen anzudeuten. Alle sind im Prinzip spielbar; empfohlen ist natürlich Sparta und Athen. Aber auch die Thebaner sind in PAE eine eigene Civ mit Spezialeinheiten! Auch Korinth oder Argos könnte eine Herausforderung sein. Wer gerne als Vasall startet, könnte sich für die Nord- oder Süd-Ionier interessieren, die entwickelte Städte haben und nicht viel weniger Landmasse als ihr Oberherr Athen.



    Bild
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Keinpferd (17. August 2014 um 11:19 Uhr)

  2. #2
    Keinpferd
    Gast


    Athen
    Sparta
    Korinth
    Argos
    Theben
    Freie Griechen
    Korkyra
    Epidamnos
    Illyrer
    Thessalien
    Makedonien
    Thraker
    Nord-Ionier
    Süd-Ionier
    Perser
    Magna Graecia
    Italiker
    Syrakus




    Bild



    Viele der 150 neuen PAE-Leader, zum Beispiel Alkibiades und Lysander, in ihrer historischen Rolle! Eine Übersicht der Leader und Allianzen zu Spielbeginn:

    Achtung Spoiler:
    Bild




    Auf der Karte zum Peloponnesischen Krieg sieht man Pfeile in alle Richtungen. Es fehlte auch wirklich eine zusammenhängende Strategie auf beiden Seiten. Das lag daran, daß Athen zwar die stärkste Flotte hatte, aber zulande gegen die spartanischen Hopliten chancenlos waren. Die Athener gingen also dem Landkrieg gegen die Spartaner aus dem Wege. Umgekehrt konnten die Spartaner Athen wegen der Hohen Mauern und der Seehoheit weder erobern noch aushungern. Also versuchte die athenische Flotte mit Überfällen von See her möglichst viel Schaden anzurichten, und die Anti-Athen-Allianz versuchte, die Athener an Schwachstellen zu treffen, ihnen Städte mit wichtigen Ressourcen wegzunehmen oder Bündnispartner auszuspannen. Einen systematischen, weitsichtigen Kriegsplan entwickelten sie dabei nicht. Man bewertete jeden Tag die Lage neu und handelte situationsbezogen. Darum das Gewirr aus Pfeilen auf der Karte, das Hin und Her zwischen Kriegsschauplätzen und Krisenherden. Der Krieg war ein reines Ergreifen von Gelegenheiten, aus dem Moment geboren; wenn man beim Vorbeisegeln erfuhr, daß eine dem Gegner zugetane Stadt schlecht verteidigt war, stieg man kurz aus und vergewaltigte die Mädchen.



    Bild




    Angehängte Grafiken Angehängte Grafiken
    Geändert von Keinpferd (17. August 2014 um 10:36 Uhr)

  3. #3
    Keinpferd
    Gast
    für weiteren späteren Gebrauch

  4. #4
    Keinpferd
    Gast
    Pie, ist eigentlich schon entschieden, wie mit den Revolten in Städten mit Provinzstatthaltergebäuden weiterverfahren wird? Wenn die Forderung der Statthalter wegfällt, soll doch auch weiterhin die Möglichkeit der Abspaltung bleiben, oder?

    Ich frag deshalb, weil Boggy und ich ein Event für dieses Szenario gemacht haben, das auf dem jetzigen Stand, in einigen – sehr unwahrscheinlichen – Fällen mit der alten Regelung der Provinzstatthalterforderungen kollidiert (leicht lösbar, aber im Wissen um eine künftige Regelung vielleicht gar kein Problem mehr und erübrigt sich, da sich die "Richtung" der Zahlungsforderung ja umkehren soll, wenn ich richtig verstehe).

    Python-Experten, alle: Wer Lust hat, an Events mitzuarbeiten, bitte melden! Vielleicht lassen sich manche Events so gestalten, daß man sie für mehrere Szenarien oder auch fürs PAE-Grundspiel, mit jeweils verändertem Text, verwenden kann.

    Ein Beispiel wäre der "Verrat des Seuthes." Seuthes war der Bruder des in diesem Szenario die Thraker anführenden Sitalkes. Als 429 v. Chr. Sitalkes in Makedonien einmarschierte, griff Perdikkas II., der König von Makedonien zu der List, seine Schwester Stratonike Seuthes anzubieten für den Fall, daß es ihm gelänge, seinen Bruder zum Abbruch des Feldzuges zu überreden. Seuthes überzeugte wirklich seinen Bruder, aus Makedonien abzuziehen und heiratete hinterher vereinbarungsgemäß die verführerische Stratonike.

    Dieses Ereignis könnte entweder ein globales Random-Event sein für alle Spieler, auf die die Bedingung zutrifft, daß sie im Krieg mit jemandem liegen, und das ein feindlicher Stack von einer Mindestgröße im eigenen Land steht. Mit fiktiven oder halbfiktiven Namen der beteiligten Charaktere. Oder auch ein rein makedonisches Event mit den Namen der historischen Beteiligten, Seuthes, Sitalkes, Perdikkas und Stratonike. Die Auswahlmöglichkeiten für den Spieler wären:

    A Stellt für Stratonike eine außerordentliche Mitgift aus unserer Schatzkammer zusammen, so daß Seuthes gar nicht nein sagen kann. (Hohe Kosten, passable Aussichten auf ein Ende der gegnerischen Invasion)
    B Seuthes ist bis über beide Ohren verliebt in Stratonike, er wird schon von alleine dafür sorgen, daß sein Bruder sich aus unserm Land zurückzieht. (Keine Kosten, ungewisse Aussichten auf ein Ende der gegnerischen Invasion)
    C Wer nicht blind ist, sieht ja, daß Stratonike keine Mitgift braucht, sondern Seuthes derjenige ist, der die Mitgift einbringen muß. (Spieler kriegt Gold, mäßige Aussichten auf ein Ende der gegnerischen Invasion)


    Ich nehme auch gerne Vorschläge für eine Sizilien-Quest an. Sizilien war zwar historisch Interessengebiet der Athener, die verhindern wollten, daß das mächtige Karthago in den Besitz der gesamten Insel kommt und von Sizilien aus Süditalien bedroht, aber als Spieler in diesem Szenario hat man bislang keinen echten Leidensdruck, als Athener unbedingt Sizilien besitzen zu wollen. Andrerseits war Sizilien das athenische Fiasko, der negative Höhepunkt des Kriegsverlaufes, aus Athener Sicht, das sie entscheidend geschwächt hat. Als Quest für den Athener Spieler fände ich es passend gelöst. Oder eine Quest für alle? Meine Frage wäre: Was soll die Belohnung für diese Quest sein?

  5. #5
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.445
    Um Athener Interesse an Sizilien zu stärken, müssen mehrere Bedingungen erfüllt sein:
    - Sizilien ist die einzige Möglichkeit der Küstenschifffahrt zwischen Afrika und Europa westlich der Levante und östlich von Gibraltar
    - Athen ist westorientiert, da entweder Sparta oder Korinth dazu gehören, oder Sparta keine Küsten kontrolliert (nur auf sehr großen Karten möglich), und damit Athen den Golf von Korinth oder die Küste der Peleponnes sauber halten mag.
    - Karthago ist tatsächlich ein ernstzunehmender Gegner - momentan nerven ägyptische, lydische und illyrische Piraten deutlich stärker.

    Apropos Küstenschifffahrt: ist es eigentlich realistisch, dass der Küstenzwang für Kriegsschiffe irgendwann wegfällt? Ich würd das auf Händler und Seevölker beschränken, wenns irgendwie geht.

    Seuthes:
    Zusätzlicher Effekt +X zwischen den Nationen bei Kriegsende.

  6. #6
    Keinpferd
    Gast
    Zitat Zitat von Flunky Beitrag anzeigen
    Um Athener Interesse an Sizilien zu stärken, müssen mehrere Bedingungen erfüllt sein:
    - Sizilien ist die einzige Möglichkeit der Küstenschifffahrt zwischen Afrika und Europa westlich der Levante und östlich von Gibraltar
    - Athen ist westorientiert, da entweder Sparta oder Korinth dazu gehören, oder Sparta keine Küsten kontrolliert (nur auf sehr großen Karten möglich), und damit Athen den Golf von Korinth oder die Küste der Peleponnes sauber halten mag.
    - Karthago ist tatsächlich ein ernstzunehmender Gegner - momentan nerven ägyptische, lydische und illyrische Piraten deutlich stärker.
    Den Kartenausschnitt des Szenarios siehst du auf dem letzten Bild im ersten Posting. Ich hab's aus optischen Gründen grau gemacht, fällt kaum auf. Das kann man sehr leicht übersehen. Also kein Afrika und kein Karthago. Der Westzipfel besteht aus einer Handvoll "barbarischen" Städten mit phönizischer Religion und karthagisch anmutenden Stadtverteidigern. Die stellen den karthagischen Einfluß auf Westsizilien da…

    Eine dieser Städte, Selinunt, verbündet sich im spätern Kriegsverlauf (in der Geschichte, nicht im Szenario) mit Athen gegen die Nachbarstadt Segesta. Auf der großen Karte im zweiten Posting sind die Städte im Westen verzeichnet. (Übrigens erschleicht sich Selinunt unter grandioser Vorspiegelung falscher Tatsachen die Hilfe Athens, auch was für ein Event.) Das Problem hierbei ist, für eine Dasrtellung im Szenario, die Fortbewegungsrate der Schiffe. Die schnellen Schiffe können sich nach dem Kampf in eine nahegelegene verbündete Stadt retten und "heilen." Die Fortbewegungsrate ist schon gut so. Aber es macht einen großen strategischen Unterschied, ob man bei einer Übersee-Invasion einen Stützpunkt am Zielort hat oder nicht, also ob man, im Civ-IV-Sinn, "heilen" kann oder nahezu gar nicht (nur mit Versorgungswagen auf fremdem Terrain). Besäße Athen eine Stadt in der Nähe von oder auf Sizilien – was sich geschichtlich rechtfertigen ließe, Selinunt und Rhegion dürften athenisch sein – kann die Flotte mitsamt der Invasionstruppe in der nah gelegenen Stadt Unterschlupf finden, heilen und neu angreifen. In der Geschichte hatten die Athener diese Möglichkeit gerade nicht. Im fernen Sizilien konnten sie nicht "heilen", besonders die Schiffe nicht. Aber das sind Details der Szenariengestaltung, die man schon irgendwie gelöst kriegt.

    Dein zweiter Punkt, daß Athen ein Interesse haben soll, auch im Westen die Seehoheit zu behalten, ist völlig richtig, aber Athen braucht nicht unbedingt Sizilien dazu. Die Syrakuser liefern später zwar auch Schiffe an die Anti-Athen-Allianz, aber erst nachdem die Athener sie angegriffen haben.

    Zitat Zitat von Flunky Beitrag anzeigen
    Apropos Küstenschifffahrt: ist es eigentlich realistisch, dass der Küstenzwang für Kriegsschiffe irgendwann wegfällt? Ich würd das auf Händler und Seevölker beschränken, wenns irgendwie geht.
    Im Moment liegt der Kompromiß ja etwa da, daß die Kriegsschiffe auf hoher See Schaden nehmen und am Zielpunkt ziemlich geschlaucht ankommen. Das wäre eigentlich sehr realistisch. Doch zuletzt, auf Boggys riesiger Ostmittelmeerkarte, zeigte sich wieder, in diesem Maßstab ist der Schaden auf hoher See zu groß. Denn mit dem Schaden verlieren die Schiffe Bewegungspunkte. Sie fahren dann Tempo 2,. Es dauert hundert bis zweihundert Jahre von der Kyrenaika bis Kreta. Möglich soll die Hochsee-Fahrt ja sein, zeitlich machbar auch, mit Poseidons Hilfe, nur eben auch gefährlich, ein echtes Risiko, das Schiff zu verlieren.

    Zitat Zitat von Flunky Beitrag anzeigen
    Seuthes: Zusätzlicher Effekt +X zwischen den Nationen bei Kriegsende.
    Guter Effekt. Flunky, ich fall mal mit der Tür ins Haus: Würdest du so ein Seuthes-Ereignis als Nicht-Random-Event, im Eventmanager, mit Python eigentlich hinkriegen?

  7. #7
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.445
    @Athen: ja gut, dann bleibt für diese Karte nur das Event. Sizilien an dieser Posi ist halt reichlich uninteressant. Gabs da historisch überhaupt nen Interessengrund außer der strategischen Lage?

    @Seuthes: Möglich, aber ich hab grad keine Zeit zu programmieren.

  8. #8
    Keinpferd
    Gast
    Zitat Zitat von Flunky Beitrag anzeigen
    @Athen: ja gut, dann bleibt für diese Karte nur das Event. Sizilien an dieser Posi ist halt reichlich uninteressant. Gabs da historisch überhaupt nen Interessengrund außer der strategischen Lage?

    @Seuthes: Möglich, aber ich hab grad keine Zeit zu programmieren.
    Es gibt die "Ehrgeiz-Theorie", nach der Alkibiades, der Anführer der Athener in diesem Szenario, mit seinen rhetorischen Künsten und seinem Olympiasieger- und antikem Popstar-Image die Athener dazu beredet hat, Sizilien als Ausgangsbasis für die Eroberung von Karthago und Italien zu benutzen und Athen zu der Art von Großmacht zu machen, wie's später die Römer in die Tat umgesetzt haben. Tatsächlich haben die Athener aber schon vor dem Sizilienfeldzug dort durch Patronage von einzelnen Städten, die antisyrakus waren, eine Einflußzone errichtet. Sizilien war zudem eine Alternative für die Getreideversorgung. Athen war nach dem Aufschwung unter Perikles zu einer viel größeren Stadt geworden, als die Nahrungsfelder um Athen hergaben und auf Lieferungen von den Verbündeten und aus den Kornkammern der heutigen Ukraine angewiesen. Sie konnten gar nicht anders, als den Korridor zum schwarzen Meer durch ein ziemlich heftiges, unterdrückerisches Regime gegen die ionischen "Vasallen" offen zu halten. Sizilien war die strategische Option, von diesen Zwängen loszukommen. Sizilien war in der Antike eine der "Kornkammern", wie Nordafrika oder Ägypten, und ernährte später auch Rom, als es die Millionenschwelle überschritten hatte.

    Man könnte natürlich radikal sein, und die Getreideressourcen extrem verknappen und Sizilien zum Getreideeldorado machen… Aber das wäre auch wieder zu forciert, mein ich.
    Geändert von Keinpferd (18. August 2014 um 23:45 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.445
    Zitat Zitat von Keinpferd Beitrag anzeigen
    Man könnte natürlich radikal sein, und die Getreideressourcen extrem verknappen und Sizilien zum Getreideeldorado machen… Aber das wäre auch wieder zu forciert, mein ich.
    Das nicht, aber was vielleicht gehen könnte (auch mit Blick auf freie Spiele):
    Getreidekarren notwendig machen -> dazu dürfen Städte > Pop10 sich nicht mehr selbst ernähren können.
    - Ist es möglich, dass Getreidekarren _nur_ mit Nahrung gebaut werden?
    - Ist es möglich, Hütten auf Grasland zu verbieten?
    - Ist es möglich, mittels Getreidelieferungen zu wachsen und die Pop zu halten?

    Damit könnte man nämlich echte Kornkammerstädte bauen, die praktisch nur auf Pop6 Getreidekarren pumpen. Wenn da statt der Farmen Hütten stehen könnten, wär das natürlich die bessere Alternative, aber diese flächendeckende Besiedelung mit Kleinstädten hat im mitteleuropäischen Graslandwald doch eigentlich garnichts verloren? Dann sind die großen Städte der Antike auf Getreidelieferungen angewiesen, aber auch die einzigen, die nennenswert produzieren und forschen können.

  10. #10
    Whovian Avatar von antriot
    Registriert seit
    30.09.12
    Ort
    TARDIS Type 40
    Beiträge
    2.641
    Zitat Zitat von Flunky Beitrag anzeigen
    Das nicht, aber was vielleicht gehen könnte (auch mit Blick auf freie Spiele):
    Getreidekarren notwendig machen -> dazu dürfen Städte > Pop10 sich nicht mehr selbst ernähren können. Da sehe ich zu viel Mikromanagement. Wenn das automatisch ablaufen würde ok, aber so...
    - Ist es möglich, dass Getreidekarren _nur_ mit Nahrung gebaut werden? nicht ohne SDK
    - Ist es möglich, Hütten auf Grasland zu verbieten? müsste sogar mit XML-Nitteln gehen. Ansonsten mit Python-Callbacks.
    - Ist es möglich, mittels Getreidelieferungen zu wachsen und die Pop zu halten? bin mir nicht sicher ob ich weiß was du meinst aber ich glaube dass das auch nicht ohne SDK funktioniert.

    Damit könnte man nämlich echte Kornkammerstädte bauen, die praktisch nur auf Pop6 Getreidekarren pumpen. Wenn da statt der Farmen Hütten stehen könnten, wär das natürlich die bessere Alternative, aber diese flächendeckende Besiedelung mit Kleinstädten hat im mitteleuropäischen Graslandwald doch eigentlich garnichts verloren? Dann sind die großen Städte der Antike auf Getreidelieferungen angewiesen, aber auch die einzigen, die nennenswert produzieren und forschen können.
    Antworten in rot
    Tick tock goes the clock...

  11. #11
    Keinpferd
    Gast
    Zitat Zitat von Flunky Beitrag anzeigen
    Das nicht, aber was vielleicht gehen könnte (auch mit Blick auf freie Spiele):
    Getreidekarren notwendig machen -> dazu dürfen Städte > Pop10 sich nicht mehr selbst ernähren können. Da sehe ich zu viel Mikromanagement. Wenn das automatisch ablaufen würde ok, aber so...
    - Ist es möglich, dass Getreidekarren _nur_ mit Nahrung gebaut werden? nicht ohne SDK
    Zitat Zitat von antriot Beitrag anzeigen
    Antworten in rot
    Mikromanagement: Wenn man ein ausgedehntes Reich mit vielen Städten hat, wird es wahrscheinlich zu viel. Aber Pie hat ja schon einen Button für Händler und Handelsschiffanakel gemacht, daß sie sich selber die nächste Stadt suchen. Wurde das eigentlich schon mal ausdrücklich gelobt?

    Hm, man kann doch auch Einheiten nur mit Nahrung bauen, warum keine Karren?

    Zitat Zitat von Flunky Beitrag anzeigen
    Wenn da statt der Farmen Hütten stehen könnten, wär das natürlich die bessere Alternative, aber diese flächendeckende Besiedelung mit Kleinstädten hat im mitteleuropäischen Graslandwald doch eigentlich garnichts verloren? Dann sind die großen Städte der Antike auf Getreidelieferungen angewiesen, aber auch die einzigen, die nennenswert produzieren und forschen können.
    Ja, Städte- und Hüttenspammen auf Gras macht mir als germanischer oder gallischer Spieler zwar durchaus schon Spaß, aber schön oder gar realistisch ist es nicht.



    Anderes Thema: Beim Szenarientesten geht es mir mal wieder auf den Sack, den Zeiger, die Eier, daß die dämlichen Civs in den ersten Runden wie bekloppt die Staatsformen ändern, manchmal alle oder fast alle, manchmal welche, die ihnen eigentlich gar nicht nützlich sind, die sie falsch bewerten. Vor allem: die historisch völlig daneben sind.

    Thorgal, ich kann mich nicht so genau erinnern, was das letzte Wort und der letzte Stand der Erkenntnis zu dieser Problematik war, aber ich weiß noch, daß du auch immer sehr unter dieser Szenarienverhunzung "gelitten" hast.

    Darum frage ich mal, ohne genau noch zu wissen, was da der Stand der Dinge war, ob man was gegen dieses Herumwechseln tun kann, in die Runde. Boggy, Flunky, antriot, Python-Beherrscher: Kann ich dem dem Szenario sagen, eingeleitet mit:

    # ------- Scenario PeloponnesianWarKeinpferd Event Poteidaia
    sScenarioScriptData = CyMap().plot(0, 0).getScriptData()
    if sScenarioScriptData == "PeloponnesianWarKeinpferd":



    Alkibiades, Lysander, und wie ihr alle heißt, laßt es doch einfach mal so, wie Keinpferd es treusorgend für euch eingestellt hat? Mindestens für x Runden! Wenn sie danach unbedingt wollen, ja, dann sollen sie halt, die Irren. Natürlich soll dem Humanplayer dabei nichts eingeschränkt werden. Und nebenbei bringen sich die wechselsüchtigen Civs auch in den ersten Runden, wenn Kriege ausbrechen und Überraschungscoups versucht werden, unnötig in Gefahr, weil die Wechselorgien in Unruhe verfallende Städte erzeugen, gerade wo am Anfang die Staatskassen leer sind und sie die Städte-Unruhen nicht durch Geldzahlungen abwenden können.

  12. #12
    Whovian Avatar von antriot
    Registriert seit
    30.09.12
    Ort
    TARDIS Type 40
    Beiträge
    2.641
    Man kann Einheiten mit Hämmern UND Nahrung bauen aber nicht nur mit Nahrung.
    Also z.B. eine Stadt hat Nahrungsüberschuss 3 und 5 Hämmer.
    Einheit wird mit Nahrung gebaut: 3 + 5 = 8
    normale Einheit: 8
    Aber 3 = 3 geht nicht.
    Tick tock goes the clock...

  13. #13
    Keinpferd
    Gast
    Ah, wußt ich nicht.

    Verbunden mit der Frage zwei Postings weiter oben: Wenn man den Bau bestimmter Einheiten an eine Civic knüpfen könnte, gerade die Spezialeinheiten einer Civ, würde die Sparta-KI sicher, um ihre Spezialeinheit weiter bauen zu können, in derjenigen Staatsform bleiben, die, in diesem Beispiel, die Einheit Spartiat erlaubt. Dazu bin ich auf diesen steinalten Code gestoßen:

    Achtung Spoiler:
    PHP-Code:
    ########################################################################################################
    ##                        zCivics                              ##
    ##                                                      ##
    ##    Created By:        Zebra 9                                      ##
    ##    Created:        5 / 21 / 07                                  ##
    ##        Updated:    5 /  5 / 08                                  ##
    ##            Added zConfig                                      ##
    ##            Added Civic prereqs for techs                              ##
    ##            Added Civic prereqs for projects                          ##
    ##            Added ability to allow continuation of unit and building production without   ##
    ##                correct civics                                  ##
    ########################################################################################################

    from CvPythonExtensions import *
    import zConfigParser
    import os
    import zConfig

    # globals
    gc CyGlobalContext()

    class 
    zCivics:
        
    def __init__(selfmanager):
            
    ## Read zCNFG Here
            
    path os.path.join("Assets""zConfig""zCivics.zcnfg")
            
    info zConfigParser.parse(pathmyZCnfgParserlog True)


            
    self.civics info.civics
            self
    .units info.units
            self
    .buildings info.buildings
            self
    .techs info.techs
            self
    .projects info.projects

            manager
    .addCallbackHandler("cannotDoCivic",    self.cannotDoCivic)
            
    manager.addCallbackHandler("cannotTrain",    self.cannotTrain)
            
    manager.addCallbackHandler("cannotConstruct",    self.cannotConstruct)
            
    manager.addCallbackHandler("cannotResearch",    self.cannotResearch)
            
    manager.addCallbackHandler("cannotCreate",    self.cannotCreate)

        
    # Logic Code Here
        
    def cannotDoCivic(selfargs):
            
    """See if we can adopt the civic"""
            
    iPlayer    args[0]
            
    iCivic    args[1]

            
    pCivic self.civics.get(gc.getCivicInfo(iCivic).getType(), None)
            if 
    pCivic:
                
    pPlayer gc.getPlayer(iPlayer)

                
    ## Make sure that the player's state religion permits this civic
                
    if pPlayer.getStateReligion() >= 0:
                    
    szReligionType gc.getReligionInfo(pPlayer.getStateReligion()).getType()
                else:
                    
    szReligionType "RELIGION_NO_State"

                
    ## If the religion isn't listed return True so this player can not recieve this civic
                
    if pCivic.religionPrereq != [] and szReligionType not in pCivic.religionPrereq:
                    return 
    True



                
    ## Make sure that the player's current civic isn't locked
                
    opt gc.getCivicInfo(iCivic).getCivicOptionType()
                
    curCivic self.civics.get(gc.getCivicInfo(pPlayer.getCivics(opt)).getType(), None)

                
    ## if curCivic is a lockable civic return True so that the player will not be able to change
                
    if curCivic and curCivic.isLock:
                    return 
    True



                
    ## Make sure that this civ can adopt this civic
                
    civ gc.getCivilizationInfo(pPlayer.getCivilizationType()).getType()

                
    ## if the civic is blocked return True so that the player can not adotp this civic
                
    if civ in pCivic.civBlock:
                    return 
    True



                
    ## Make sure that this leader can adopt this civic
                
    leader gc.getLeaderHeadInfo(pPlayer.getLeaderType()).getType()

                
    ## if the civic is blocked return True so that the player can not adotp this civic
                
    if leader in pCivic.leaderBlock:
                    return 
    True



                
    ## Make sure that the player has the correct civics
                
    if pCivic.civicPrereq != []:
                    for 
    i in range(gc.getNumCivicOptionInfos()):
                        if 
    gc.getCivicInfo(pPlayer.getCivics(i)).getType() not in pCivic.civicPrereq and i in pCivic.civicOptionPrereq:
                            return 
    True

            
    return False

        def cannotTrain
    (selfargs):
            
    """See if we can train the unit"""
            
    pCity        args[0]
            
    iUnit        args[1]
            
    bContinue    args[2]
            
    bTestVisible    args[3]
            
    bIgnoreCost    args[4]
            
    bIgnoreUpgrades    args[5]

            
    pUnit self.units.get(gc.getUnitInfo(iUnit).getType(), None)
            if 
    pUnit:
                
    pPlayer gc.getPlayer(pCity.getOwner())
                if 
    not bContinue or pUnit.bExtraValue:
                    for 
    i in range(gc.getNumCivicOptionInfos()):
                        if 
    gc.getCivicInfo(pPlayer.getCivics(i)).getType() not in pUnit.civicPrereq and i in pUnit.civicOptionPrereq:
                            return 
    True

            
    return False

        def cannotConstruct
    (selfargs):
            
    """See if we can construct the building"""
            
    pCity        args[0]
            
    iBuilding    args[1]
            
    bContinue    args[2]
            
    bTestVisible    args[3]
            
    bIgnoreCost    args[4]

            
    pBuilding self.buildings.get(gc.getBuildingInfo(iBuilding).getType(), None)
            if 
    pBuilding:
                
    pPlayer gc.getPlayer(pCity.getOwner())
                if 
    not bContinue or pBuilding.bExtraValue:
                    for 
    i in range(gc.getNumCivicOptionInfos()):
                        if 
    gc.getCivicInfo(pPlayer.getCivics(i)).getType() not in pBuilding.civicPrereq and i in pBuilding.civicOptionPrereq:
                            return 
    True

            
    return False

        def cannotResearch
    (selfargs):
            
    """See if we can research the tech"""
            
    iPlayer    args[0]
            
    iTech    args[1]
            
    bTrade    args[2]

            
    pTech self.techs.get(gc.getTechInfo(iTech).getType(), None)
            if 
    pTech:
                
    pPlayer gc.getPlayer(iPlayer)
                if 
    not bContinue or pTech.bExtraValue:
                    for 
    i in range(gc.getNumCivicOptionInfos()):
                        if 
    gc.getCivicInfo(pPlayer.getCivics(i)).getType() not in pTech.civicPrereq and i in pTech.civicOptionPrereq:
                            return 
    True

            
    return False

        def cannotCreate
    (selfargs):
            
    """See if we can create the project"""
            
    pCity        args[0]
            
    iProject    args[1]
            
    bContinue    args[2]
            
    bTestVisible    args[3]

            
    pProj self.projects.get(gc.getProjectInfo(iProject).getType(), None)
            if 
    pProj:
                
    pPlayer gc.getPlayer(iPlayer)
                if 
    not bContinue or pProj.bExtraValue:
                    for 
    i in range(gc.getNumCivicOptionInfos()):
                        if 
    gc.getCivicInfo(pPlayer.getCivics(i)).getType() not in pProj.civicPrereq and i in pProj.civicOptionPrereq:
                            return 
    True

            
    return False

    class civicInfo:
        
    def __init__(self):
            
    self.civicPrereq = []
            
    self.civicOptionPrereq = []
            
    self.religionPrereq = []
            
    self.leaderBlock = []
            
    self.civBlock = []
            
    self.isLock False

    class itemInfo:
        
    def __init__(self):
            
    self.civicPrereq = []
            
    self.civicOptionPrereq = []
            
    self.bExtraValue False

    class myZCnfgParser(zConfig.parser):
        
    civics dict()
        
    units dict()
        
    buildings dict()
        
    techs dict()
        
    projects dict()
        
    currentType ""
        
    currentName ""
        
    def createValue(selfnodevalue):
            
    name node.getName().lower()
            if 
    self.currentType == "civic":
                if 
    name == "type":
                    
    self.currentName value
                    self
    .civics[self.currentName] = civicInfo()
                
    elif name == "civic":
                    
    self.civics[self.currentName].civicPrereq.append(value)
                    
    self.civics[self.currentName].civicOptionPrereq.append(gc.getCivicInfo(gc.getInfoTypeForString(value)).getCivicOptionType())
                
    elif name == "religion":
                    
    self.civics[self.currentName].religionPrereq.append(value)
                
    elif name == "leader":
                    
    self.civics[self.currentName].leaderBlock.append(value)
                
    elif name == "civ":
                    
    self.civics[self.currentName].civBlock.append(value)
                
    elif name == "lock":
                    try:
                        
    val bool(value)
                    
    except:
                        
    val False
                    self
    .civics[self.currentName].lock val

            elif self
    .currentType == "unit":
                if 
    name == "type":
                    
    self.currentName value
                    self
    .units[self.currentName] = itemInfo()
                
    elif name == "civic":
                    
    self.units[self.currentName].civicPrereq.append(value)
                    
    self.units[self.currentName].civicOptionPrereq.append(gc.getCivicInfo(gc.getInfoTypeForString(value)).getCivicOptionType())
                
    elif name == "allow continue":
                    try:
                        
    val bool(value)
                    
    except:
                        
    val False
                    self
    .units[self.currentName].bExtraValue val

            elif self
    .currentType == "building":
                if 
    name == "type":
                    
    self.currentName value
                    self
    .buildings[self.currentName] = itemInfo()
                
    elif name == "civic":
                    
    self.buildings[self.currentName].civicPrereq.append(value)
                    
    self.buildings[self.currentName].civicOptionPrereq.append(gc.getCivicInfo(gc.getInfoTypeForString(value)).getCivicOptionType())
                
    elif name == "allow continue":
                    try:
                        
    val bool(value)
                    
    except:
                        
    val False
                    self
    .buildings[self.currentName].bExtraValue val

            elif self
    .currentType == "tech":
                if 
    name == "type":
                    
    self.currentName value
                    self
    .techs[self.currentName] = itemInfo()
                
    elif name == "civic":
                    
    self.techs[self.currentName].civicPrereq.append(value)
                    
    self.techs[self.currentName].civicOptionPrereq.append(gc.getCivicInfo(gc.getInfoTypeForString(value)).getCivicOptionType())
                
    elif name == "allow trade":
                    try:
                        
    val bool(value)
                    
    except:
                        
    val False
                    self
    .techs[self.currentName].bExtraValue val

            elif self
    .currentType == "project":
                if 
    name == "type":
                    
    self.currentName value
                    self
    .projects[self.currentName] = itemInfo()
                
    elif name == "civic":
                    
    self.projects[self.currentName].civicPrereq.append(value)
                    
    self.projects[self.currentName].civicOptionPrereq.append(gc.getCivicInfo(gc.getInfoTypeForString(value)).getCivicOptionType())
                
    elif name == "allow continue":
                    try:
                        
    val bool(value)
                    
    except:
                        
    val False
                    self
    .projects[self.currentName].bExtraValue val

            
    return

        
    def createEndTag(selfnode):
            
    name node.getName().lower()
            if 
    name in ["civic""unit""building""tech""project"] and self.currentType != "":
                
    self.currentType ""
            
    return

        
    def createStartTag(selfnode):
            
    name node.getName().lower()
            if 
    name in ["civic""unit""building""tech""project"] and self.currentType == "":
                
    self.currentType name
                self
    .currentName ""
            
    return

    def GameUtils(manager):
        
    civics zCivics(manager

    (geändert, danke für den Tip, Boggy)

    Kann man den PAE-kompatibel machen? Und natürlich: Ist es überhaupt erwünscht, Einheiten an Civics zu binden? Mir würden schon viele Einheiten und Sondereinheiten einfallen, bei denen das logisch wäre und historisch super passen würde: Alle Arten von Söldner - Söldnertum, Hoplit - Bürgerarmee, Hetairoi - Königtum, karthagische Heilige Schar - Dyarchie, Prätorianer - Kaiserkult, Gaufürst - Stammesräte, Hastakämpfer - Bauernmiliz, und so weiter. Es könnten natürlich mehrere Civics eine Einheit freischalten.
    Geändert von Keinpferd (19. August 2014 um 13:53 Uhr)

  14. #14
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.042
    Mit Python eine Staatsform zu erzwingen, dürfte nicht möglich sein, soweit ich das sehe. Schade eigentlich, denn prinzipiell gibt es diese Funktion ja - wenn die UNO einem z.B. Meinungsfreiheit als Staatsform aufzwingt, kann man nicht mehr aus dieser rauswechseln. Habe aber keine Python-Funktion gefunden, die das irgendwie beeinflussen kann.

    Edit: Hab mir deinen Code nicht angesehen ([CODE]-Blöcke wären super, gerade Python ist ohne Einrückungen furchtbar), aber über Python-Callbacks kann man Einheiten auf jeden Fall nur mit einer bestimmten Staatsform erlauben. Nur weiß die KI davon leider überhaupt nichts, weil es eben Python ist, und wird es in keinster Weise in ihren Überlegungen einbeziehen.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  15. #15
    Keinpferd
    Gast
    Ja, da sehe ich auch was von Callbacks. Das hätte dem Erschaffer dieses Codes doch auch irgendwie klar sein müssen, oder versteh ich da irgendwas nicht? Ganz schön doof, daß die KI nichts von alledem weiß. Ihr beim Erreichen der Tech TECH_MILIT_STRAT beibringen, geh in Staatsform CIVIC_DYARCHIE und baue deine Spezialeinheit Heilige Schar, du blöde Nuß?

Seite 1 von 6 12345 ... LetzteLetzte

Berechtigungen

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