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

Thema: Fragen zu Python

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

    Fragen zu Python

    Aus der G:\Strat\Sid Meier's Civilization 4\Warlords\Mods\Caesium v2.2\Assets\Python\ModComps\Autolog\AutologUtils.py :
    =====================================
    def write(self, type, message, year = 0, turn = 0):
    ## fix formatting of year
    if (year < 0):
    year = str(year)[1:] + " " + localText.getText("TXT_KEY_AUTOLOG_BC", ())
    else:
    year = str(year) + " " + localText.getText("TXT_KEY_AUTOLOG_AD", ())

    =====================================
    Sehe ich das richtig, daß die [1:] das Vorzeichen entfernt, also den negativen Wert in einen absoluten umwandelt?

    Habe schon im Internet geguckt, konnte aber nichts dazu finden...


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

    Und schon wieder ahnungslos....

    Zwei Zeilen später...
    =====================================
    elif (type == 1): ## no special formatting
    logMessage = message + "\n"

    =====================================
    + "\n" führt in der Ausgabe zu folgender Darstellung (Firefox 2.0.0.2):

    "Turn 111 (835 BC)\n"

    Mein erster Gedanke war, daß damit eine neue Zeile erzwungen werden soll, aber das scheint ja durch
    PHP-Code:
     BR 
    ("break" ???) in der erzeugten HTML-Datei schon zu geschehen.

    Wozu also das \n ?


  3. #3
    the cosmos rocks Avatar von Caesium
    Registriert seit
    08.12.03
    Ort
    Faerûn
    Beiträge
    9.104
    Zu 1: Ja, damit hast du voll und ganz recht.
    Zu 2: Herzlichen Glückwunsch, du hast einen Bug entdeckt

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

    Ob es wohl doch dumme Fragen gibt?

    Danke für die Antworten!

    Aber ich habe natürlich gleich die nächsten Fragen:
    Diesmal ist es die G:\Strat\Sid Meier's Civilization 4\Warlords\Mods\Caesium v2.2\Assets\Python\ModComps\Autolog\Autolog.py :
    ==================
    from CvPythonExtensions import *
    import CvUtil
    import CvScreensInterface
    import PyHelpers
    import Popup as PyPopup
    import sys
    import CvAdvisorUtils
    import AutologUtils

    ==================
    Die CvPythonExtensions gibt es nicht. Jedenfalls nicht in meinem Spielelaufwerk.
    Popup habe ich als Popup.py im Civilization4-Verzeichnis gefunden, sys fehlt mir ebenfalls

    Etwas weiter unten kommen dann diese Einträge:
    ==================
    # will log Debug messages
    # Default value is false
    self.LOG_DEBUG = false

    # will log improvement infos
    # Default value is false
    self.LOG_IMPROVEMENT = false

    # will log push missions
    # Default value is false
    self.LOG_PUSH_MISSION = false

    # will log unit movement
    # Default value is false
    self.LOG_MOVEMENT = false
    ==================
    Hier verstehe ich nicht, warum die Einheitenbewegungen mitgeschrieben werden, obwohl "false" gesetzt ist. Verbesserungen werden nicht nicht mitgeführt (IMPROVEMENT bedeutet doch Feldverbesserung, oder doch Bauvorhaben?)
    Da die eigenen Einträge als Debug messages angezeigt werden, dürften die eigentlich auch nicht geschrieben werden, das geschieht aber glücklicherweise dennoch.


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

    Dumm geboren, dumm gestorben, und dazwischen nichts gelernt...

    Und wieder die G:\Strat\Sid Meier's Civilization 4\Warlords\Mods\Caesium v2.2\Assets\Python\ModComps\Autolog\Autolog.py:

    def onCombatResult(self, argsList):

    führt dazu, daß die Kampfergebnisse geschrieben werden:
    Scout defeats (1.00/1): Barbarian Siberian Tiger
    oder
    Scout loses to: Barbarian Bear (0.60/3)

    Das ist prima und (bis auf die fehlende Einheitenbezeichnung, aber das hatten wir schon mal - muß ich noch ausprobieren) auch wie gewünscht.

    Problem:
    def onUnitKilled(self, argsList):
    def onUnitLost(self, argsList):


    Beide sind m.E. unnötig, wobei die onUnitLost eine Meldung schreiben will:
    message = localText.getText("TXT_KEY_AUTOLOG_UNIT_LOST" ....,
    die so gar nicht in der CaesiumMod_AutoLog.xml definiert ist.

    Dort gibt es nur die TXT_KEY_AUTOLOG_LOSE, und das scheint dazu zu führen, daß der nachfolgende Eintrag gewählt wird (~LOST <> ~LOSE): TXT_KEY_AUTOLOG_FINISH.

    Insgesamt führt das im Falle der Niederlage dazu, daß folgende Einträge in der Autolog stehen:
    1) Scout loses to: Barbarian Bear (0.60/3)
    2) Scout finishes: 18
    3) Player set unit to -2147483647, -2147483647
    4) Scout was lost

    > 1) Das ist ja ok, siehe oben
    > 2) Das ist unnötig, und von der Aussage her schon falsch. Die "18" ist übrigens die barbarische Nation
    > 3) Das ist die Meldung, daß eine Einheit irgendwo ins Nirwana verschoben wurde. Die könnte man eigentlich auch ausstellen, denke ich mir, ich habe nur noch nicht gefunden, wo das geschieht.
    > 4) Meldung, daß eine Einheit aufgelöst wurde (kommt z.B. auch bei Siedler und Arbeitsboot vor). Ist m.E. auch redundant.

    Also könnte man doch eigentlich die beiden
    def onUnitKilled(self, argsList):
    def onUnitLost(self, argsList):

    auskommentieren, oder nicht? (Natürlich die ganze.. ähm... Funktion(?))
    Geändert von Commander Bello (16. März 2007 um 16:53 Uhr) Grund: Mal wieder die Hälfte vergessen


  6. #6
    SDK-Gott Avatar von MatzeHH
    Registriert seit
    31.10.05
    Beiträge
    759
    Zitat Zitat von Commander Bello Beitrag anzeigen
    from CvPythonExtensions import *
    import CvUtil
    import CvScreensInterface
    import PyHelpers
    import Popup as PyPopup
    import sys
    import CvAdvisorUtils
    import AutologUtils

    ==================
    Die CvPythonExtensions gibt es nicht. Jedenfalls nicht in meinem Spielelaufwerk.
    Popup habe ich als Popup.py im Civilization4-Verzeichnis gefunden, sys fehlt mir ebenfalls
    Die angesprochenen Einträge sind Python Systemelemente, keine Dateien von Civ4. Damit werden einfach bestimmte Funktionen der Sprache Python freigeschaltet.

    Etwas weiter unten kommen dann diese Einträge:
    ==================
    # will log Debug messages
    # Default value is false
    self.LOG_DEBUG = false

    # will log improvement infos
    # Default value is false
    self.LOG_IMPROVEMENT = false

    # will log push missions
    # Default value is false
    self.LOG_PUSH_MISSION = false

    # will log unit movement
    # Default value is false
    self.LOG_MOVEMENT = false
    ==================
    Hier verstehe ich nicht, warum die Einheitenbewegungen mitgeschrieben werden, obwohl "false" gesetzt ist. Verbesserungen werden nicht nicht mitgeführt (IMPROVEMENT bedeutet doch Feldverbesserung, oder doch Bauvorhaben?)
    Da die eigenen Einträge als Debug messages angezeigt werden, dürften die eigentlich auch nicht geschrieben werden, das geschieht aber glücklicherweise dennoch.
    Das sind die Default-Werte, die verwendet werden, falls die ini-Datei nicht gefunden wird. Die Einträge werden durch die ini überschrieben.

    Problem:
    def onUnitKilled(self, argsList):
    def onUnitLost(self, argsList):

    Beide sind m.E. unnötig, wobei die onUnitLost eine Meldung schreiben will:
    message = localText.getText("TXT_KEY_AUTOLOG_UNIT_LOST" ....,
    die so gar nicht in der CaesiumMod_AutoLog.xml definiert ist.

    Dort gibt es nur die TXT_KEY_AUTOLOG_LOSE, und das scheint dazu zu führen, daß der nachfolgende Eintrag gewählt wird (~LOST <> ~LOSE): TXT_KEY_AUTOLOG_FINISH.
    Dann hast Du Dich verguckt. Der Key TXT_KEY_AUTOLOG_UNIT_LOST steht in Zeile 432.

    Zu der Sinnlosigkeit mancher Eintragungen magst Du Recht haben, ich benutze den Logger auch gar nicht. Ich habe vergleichsweise wenig Muse daran, mir das abgelaufene Spiel nochmal durchzulesen.

    Matze
    Bunt ist das Dasein und granatenstark...Und: Volle Kanne Hoschie!!!

  7. #7
    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 MatzeHH Beitrag anzeigen
    Die angesprochenen Einträge sind Python Systemelemente, keine Dateien von Civ4. Damit werden einfach bestimmte Funktionen der Sprache Python freigeschaltet.
    Ok, danke

    Zitat Zitat von MatzeHH Beitrag anzeigen
    Das sind die Default-Werte, die verwendet werden, falls die ini-Datei nicht gefunden wird. Die Einträge werden durch die ini überschrieben.
    Ok, danke

    Zitat Zitat von MatzeHH Beitrag anzeigen
    Dann hast Du Dich verguckt. Der Key TXT_KEY_AUTOLOG_UNIT_LOST steht in Zeile 432.

    Zu der Sinnlosigkeit mancher Eintragungen magst Du Recht haben, ich benutze den Logger auch gar nicht. Ich habe vergleichsweise wenig Muse daran, mir das abgelaufene Spiel nochmal durchzulesen.

    Matze
    Stimmt, ich hatte wohl nur noch TXT_KEY_AUTOLOG_LOST gesucht.
    Dennoch halte ich diesen Eintrag für redundant, aber nun gut.

    Den Logger finde ich dann interessant, wenn man ein öffentliches Spiel bestreiten will, und sich mal eben Notizen zwischendurch macht.
    Vielleicht begreife ich das alles ja irgendwann mal soweit, daß ich ihn (den Logger) soweit umfummeln kann, daß man quasi die automatisch erstellten Notizen verwenden kann.

    Aber ich habe natürlich immer noch dumme Fragen
    ## determine type of message
    if (type == 0): ## turn header
    logMessage = localText.getText("TXT_KEY_AUTOLOG_TURN", ()) ...
    elif (type == 1): ## no special formatting
    logMessage = message ## + "\n" <= unnötig!!!

    Mit dem rot markierten Eintrag versuchte ich, das \n in der autolog.htm wegzuschaffen. Was mir leider nicht gelang.
    Ich dachte, ich kommentiere es einfach aus, und gut ist. Darf man Kommentare in Python nur zu Zeilenbeginn anfangen lassen?
    Ich hatte hier nachgeguckt, und es schien mir so, als sollte es so funktionieren. Aber wie gesagt, es schien mir nur so...


  8. #8
    the cosmos rocks Avatar von Caesium
    Registriert seit
    08.12.03
    Ort
    Faerûn
    Beiträge
    9.104
    Das "\n" kann auch von ganz anderer Stelle stammen

    Btw, du kannst jede einzelne Benachrichtigung im Autologging per ini deaktivieren...

  9. #9
    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 Caesium Beitrag anzeigen
    Das "\n" kann auch von ganz anderer Stelle stammen

    Btw, du kannst jede einzelne Benachrichtigung im Autologging per ini deaktivieren...
    Ja, aber von welcher denn? Es würde sich ja aufdrängen, daß es von hier stammt:
    ## determine type of message
    if (type == 0): ## turn header
    logMessage = localText.getText("TXT_KEY_AUTOLOG_TURN", ()) ...
    elif (type == 1): ## no special formatting
    logMessage = message ## + "\n" <= unnötig!!!

    Die farbig markierten Stellen sind jeweils Kommentare; so weit, so gut.
    Der grüne Kommentar steht am Zeilenanfang, das ist völlig in Ordnung so und es ist ganz klar, daß er als Kommentar interpretiert wird.
    Die blauen Kommentare stehen nach meiner Interpretation hinter einem definierten Zeilenende, nämlich dem if(......):
    Lediglich der rote Kommentar steht einfach so in der Zeile. Das könnte darauf hindeuten, daß er darum nicht als Kommentar interpretiert wird. Auf der anderen Seite müsste sich der Python-Interpreter doch dann an den ## bzw. an dem "<= unnötig!!!" stoßen...

    Und schließlich möchte ich ja eigentlich gar nichts deaktivieren (außer den Einheitenbewegungen später einmal, die wahnsinnig viel Dateigröße kosten), weil die meisten Einträge für die Spielprotokollierung doch sehr nützlich sind.
    Muß nur noch für mein öffentliches Spiel die englischen Texte ins Deutsche übersetzen, resp. sie mit gescheiten deutschen Begriffen ersetzen...

    Käme das \n von einer anderen Stelle, drängt sich natürlich die Frage auf, warum es ursprünglich dort einmal gesetzt wurde (was ja scheinbar ohnehin ein Fehler oder mindestens unnötig war), und vor allem, warum es dann nur in dieser Zeile in der Autolog.htm geschrieben wird...


  10. #10
    the cosmos rocks Avatar von Caesium
    Registriert seit
    08.12.03
    Ort
    Faerûn
    Beiträge
    9.104
    Das liegt am Interpreter.
    "\n" wird von Python als Linefeed angesehen, für htm benötigt es aber z.b. <br>, usw...

  11. #11
    zack und weg
    Registriert seit
    24.02.06
    Beiträge
    1.086
    Zitat Zitat von Commander Bello Beitrag anzeigen
    Käme das \n von einer anderen Stelle, drängt sich natürlich die Frage auf, warum es ursprünglich dort einmal gesetzt wurde (was ja scheinbar ohnehin ein Fehler oder mindestens unnötig war), und vor allem, warum es dann nur in dieser Zeile in der Autolog.htm geschrieben wird...
    ICh denke das ist ganz einfach: Jede mEssage ist nur ein String, also ohne Linefeed. Jetzt gabs für die Ur-Version noch ein \n hintendran. Irgendwann wurde das aber an anderer Stelle gemacht (oder <br> an anderer Stelle hinzugefügt).

    Und damit nicht zwei Zeilenumbrüche reinkommen, ist das \n auskommentiert.

    Jedenfalls wäre das für mich schlüssig und entspräche meiner Programmiererfahrung

  12. #12
    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 DragonGreen Beitrag anzeigen
    ICh denke das ist ganz einfach: Jede mEssage ist nur ein String, also ohne Linefeed. Jetzt gabs für die Ur-Version noch ein \n hintendran. Irgendwann wurde das aber an anderer Stelle gemacht (oder <br> an anderer Stelle hinzugefügt).

    Und damit nicht zwei Zeilenumbrüche reinkommen, ist das \n auskommentiert.

    Jedenfalls wäre das für mich schlüssig und entspräche meiner Programmiererfahrung
    Das ist ja der Witz. Die Auskommentierung ist ja durch mich erfolgt, in der Autolog.htm wird das "\n" aber immer noch geschrieben...


  13. #13
    the cosmos rocks Avatar von Caesium
    Registriert seit
    08.12.03
    Ort
    Faerûn
    Beiträge
    9.104
    In der Autolog wird angefügt.
    Du solltest sie zuvor löschen

  14. #14
    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 Caesium Beitrag anzeigen
    In der Autolog wird angefügt.
    Du solltest sie zuvor löschen
    Jauuuuuuullllllll!

    Es tut einfach weh, wenn man so nebenbei erfährt, daß man für dxxf gehalten wird...

    Selbstverfreilich habe ich die alten Versionen unter anderem Namen weggespeichert.


  15. #15
    the cosmos rocks Avatar von Caesium
    Registriert seit
    08.12.03
    Ort
    Faerûn
    Beiträge
    9.104
    Nix für doof halten

    Typischer Anwendungsfehler

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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