Seite 2 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 16 bis 30 von 70

Thema: Übersetzungstool - Konzepte, Zivilopädie, Sonstiges

  1. #16
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    Zitat Zitat von BoggyB Beitrag anzeigen
    Achso, du überprüfst ja schon alle vier Runden für... Sklavensterben, oder? Dann ist natürlich sinnvoll so.
    Welcher Wert wirds nun? Dann trag ich das ein. 10% find ich zu hoch, 5% sorgt dafür, dass nach 100 Runden ~75% der Städte christlich sind.

    Es gab doch auch vorher schon irgendwas, das die Verbreitung des Christentums beschleunigt hat, ist das nun raus? Bringt ja nichts, zwei solcher Sachen zu haben.
    Sind eigentlich Städte mit Judentum, Hinduismus und Buddhismus (und Jainismus?) auch davon ausgeschlossen? War bei der Christenverbreitung vorher jedenfalls auch so, glaub ich...
    Theokratie, das ja eigentlich die Verbreitung nichtstaatlicher Relis unterbindet, wird wahrscheinlich ignoriert? Wobei ich sagen würde, dass das die Wahrscheinlichkeit halbieren könnte, irgendwas sollte das schon bringen.
    Dann halt 5%

    In der TXT_KEY_CONCEPT_CHRISTEN_PEDIA steht die Überprüfung ist alle 5 Runden. Bin ich da falsch oder ist das nicht alle 4 Runden?

    Ja es gibt Dinge, die so Sklavenrebellionen beeinflussen:
    Stadt ist unglücklich: +25%
    Jede Militäreinheit: -2%
    Jeder in der Stadt stehende Held: -25%
    Jeder in der Stadt stehende Sklave: +2%
    usw... meinst du das?

    Bei diesem neuen Feature ist die Staatsreligion vollkommen egal. Es geht um Sklaven. Wenn du also in einer hinduistischen Stadt Sklaven hältst, kannst du dort christlich werden.

    Ich würd nichts extra wegen der Civic machen. Eine Rebellion vielleicht eher, aber dass Sklaven christlich wurden, hängt von der Lehre ab. Egal. Ich lass mal so Berechnungen lieber sein. Ist ja kein Feature, was verkompliziert werden sollte.
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  2. #17
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Zitat Zitat von Pie Beitrag anzeigen
    Dann halt 5%


    Zitat Zitat von Pie Beitrag anzeigen
    In der TXT_KEY_CONCEPT_CHRISTEN_PEDIA steht die Überprüfung ist alle 5 Runden. Bin ich da falsch oder ist das nicht alle 4 Runden?
    Hm, in der Christenpädie steht alle fünf Runden, in der Sklavenpädie (steht da auch drin, weil der Christenaufstand ja auch ein Sklavenaufstand ist) alle drei Runden. Es sind alle 12 Runden Ist aber ziemlich sicher ein Fehler. Erst kommt der if-Block, in dem das Sklavensterben, Sklavenaufstände etc. geregelt werden. Der wird alle vier Runden ausgeführt. In diesem Block findet sich aber auch noch der Block für Christenaufstände, und der wird alle drei Runden ausgeführt Daher insgesamt nur alle 12 Runden, da kgV(3,4)=12. Die Bedingung, dass der Christenaufstand nur alle drei Runden kommt, muss also raus. Die Zeile, damit du's leichter findest:

    Code:
              if not bRevolt and gc.getGame().isReligionFounded(iReligion) and gc.getGame().getGameTurn() % 3 == 0:
    Ich werd das dann im Christenkonzept verbessern und im Sklavenkonzept nur noch darauf verweisen (mit Link), dass das im Christenkonzept steht, damit es nicht wieder passiert, dass wir irgendwo zwei widersprüchliche Informationen haben.

    Zitat Zitat von Pie Beitrag anzeigen
    Ja es gibt Dinge, die so Sklavenrebellionen beeinflussen:
    Stadt ist unglücklich: +25%
    Jede Militäreinheit: -2%
    Jeder in der Stadt stehende Held: -25%
    Jeder in der Stadt stehende Sklave: +2%
    usw... meinst du das?
    Äh, ne, meint ich nicht. Weiß auch grad nicht, mit was ich das hätte gemeint haben soll. Egal, vergessen wir's

    Zitat Zitat von Pie Beitrag anzeigen
    Bei diesem neuen Feature ist die Staatsreligion vollkommen egal. Es geht um Sklaven. Wenn du also in einer hinduistischen Stadt Sklaven hältst, kannst du dort christlich werden.
    Ok.
    Aber das Feature hier kommt dann raus?

    PHP-Code:
        # Christentum und Haeresie (Heresy) ----------------------------
        
    iTech gc.getInfoTypeForString("TECH_HERESY")
        if 
    not bRevolt and not pTeam.isHasTech(iTech) and gc.getGame().getGameTurn() % == 0:
          
    iReligion gc.getInfoTypeForString("RELIGION_CHRISTIANITY")
          if 
    gc.getGame().isReligionFounded(iReligion):
            
    # zum Christentum konvertieren
            
    if not pCity.isHasReligion(iReligion):

              
    # nicht bei Judentum, Hindu, Buddh und Jain
              
    if not pCity.isHasReligion(gc.getInfoTypeForString("RELIGION_JUDAISM")) and not \
                     
    pCity.isHasReligion(gc.getInfoTypeForString("RELIGION_HINDUISM")) and not \
                     
    pCity.isHasReligion(gc.getInfoTypeForString("RELIGION_BUDDHISM")) and not \
                     
    pCity.isHasReligion(gc.getInfoTypeForString("RELIGION_JAINISMUS")):

                if 
    pCity.isCapital(): iChance 40 # 2.5%
                
    elif pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_PROVINZPALAST")): iChance 50 # 2%
                
    elif pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_STADT")):
                  if 
    pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_SKLAVENMARKT")): iChance 50 # 2%
                  
    else: iChance 75 # 1.5%
                
    else:
                  if 
    pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_SKLAVENMARKT")): iChance 40 # 2.5%
                  
    else: iChance 75 # 1.5%

                # bei folgenden Civics Chance verringern
                
    if pPlayer.isCivic(gc.getInfoTypeForString("CIVIC_THEOCRACY")): iChance += 25
                
    if pPlayer.isCivic(gc.getInfoTypeForString("CIVIC_AMPHIKTIONIE")): iChance += 25

                
    if == self.myRandom(iChanceNone):
                  
    pCity.setHasReligion(iReligion100)
                  if 
    gc.getPlayer(iPlayer).isHuman():
                    
    iRand self.myRandom(3None)
                    
    CyInterface().addMessage(iPlayerTrue10CyTranslator().getText("TXT_KEY_MESSAGE_HERESY_2CHRIST_"+str(iRand),(pCity.getName(),0)), None2,"Art/Interface/Buttons/Actions/button_kreuz.dds"ColorTypes(11), pCity.getX(), pCity.getY(), TrueTrue
    Hat ja denselben Effekt, Christentum zu verbreiten. Ist eigentlich genau dasselbe, nur etwas komplizierter mit verschiedenen Chancen je nach Situation. Und hier sind Juden, Hindus, Buddhas und Jainis auch ausgeschlossen. Aber egal, mach das, wie du willst.

    Zitat Zitat von Pie Beitrag anzeigen
    Ich würd nichts extra wegen der Civic machen. Eine Rebellion vielleicht eher, aber dass Sklaven christlich wurden, hängt von der Lehre ab. Egal. Ich lass mal so Berechnungen lieber sein. Ist ja kein Feature, was verkompliziert werden sollte.
    Ok.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  3. #18
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    Zitat Zitat von BoggyB Beitrag anzeigen
    Hm, in der Christenpädie steht alle fünf Runden, in der Sklavenpädie (steht da auch drin, weil der Christenaufstand ja auch ein Sklavenaufstand ist) alle drei Runden. Es sind alle 12 Runden Ist aber ziemlich sicher ein Fehler. Erst kommt der if-Block, in dem das Sklavensterben, Sklavenaufstände etc. geregelt werden. Der wird alle vier Runden ausgeführt. In diesem Block findet sich aber auch noch der Block für Christenaufstände, und der wird alle drei Runden ausgeführt Daher insgesamt nur alle 12 Runden, da kgV(3,4)=12. Die Bedingung, dass der Christenaufstand nur alle drei Runden kommt, muss also raus. Die Zeile, damit du's leichter findest:

    Code:
              if not bRevolt and gc.getGame().isReligionFounded(iReligion) and gc.getGame().getGameTurn() % 3 == 0:
    Ja, das ist mir auch aufgefallen, dass da ne modulo in einer modulo ist und somit der kgT greift
    War nicht beabsichtigt. Aber ist auch egal. Wurde ja niemand verletzt

    Ok, und was soll ich dann rausnehmen? die % 3 Überprüfung ? Könnt ich ja trotzdem so drin lassen, oder nicht?

    Zitat Zitat von BoggyB Beitrag anzeigen
    Ich werd das dann im Christenkonzept verbessern und im Sklavenkonzept nur noch darauf verweisen (mit Link), dass das im Christenkonzept steht, damit es nicht wieder passiert, dass wir irgendwo zwei widersprüchliche Informationen haben.
    Jep

    Zitat Zitat von BoggyB Beitrag anzeigen
    Aber das Feature hier kommt dann raus?

    PHP-Code:
        # Christentum und Haeresie (Heresy) ----------------------------
        
    iTech gc.getInfoTypeForString("TECH_HERESY")
        if 
    not bRevolt and not pTeam.isHasTech(iTech) and gc.getGame().getGameTurn() % == 0:
          
    iReligion gc.getInfoTypeForString("RELIGION_CHRISTIANITY")
          if 
    gc.getGame().isReligionFounded(iReligion):
            
    # zum Christentum konvertieren
            
    if not pCity.isHasReligion(iReligion):

              
    # nicht bei Judentum, Hindu, Buddh und Jain
              
    if not pCity.isHasReligion(gc.getInfoTypeForString("RELIGION_JUDAISM")) and not \
                     
    pCity.isHasReligion(gc.getInfoTypeForString("RELIGION_HINDUISM")) and not \
                     
    pCity.isHasReligion(gc.getInfoTypeForString("RELIGION_BUDDHISM")) and not \
                     
    pCity.isHasReligion(gc.getInfoTypeForString("RELIGION_JAINISMUS")):

                if 
    pCity.isCapital(): iChance 40 # 2.5%
                
    elif pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_PROVINZPALAST")): iChance 50 # 2%
                
    elif pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_STADT")):
                  if 
    pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_SKLAVENMARKT")): iChance 50 # 2%
                  
    else: iChance 75 # 1.5%
                
    else:
                  if 
    pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_SKLAVENMARKT")): iChance 40 # 2.5%
                  
    else: iChance 75 # 1.5%

                # bei folgenden Civics Chance verringern
                
    if pPlayer.isCivic(gc.getInfoTypeForString("CIVIC_THEOCRACY")): iChance += 25
                
    if pPlayer.isCivic(gc.getInfoTypeForString("CIVIC_AMPHIKTIONIE")): iChance += 25

                
    if == self.myRandom(iChanceNone):
                  
    pCity.setHasReligion(iReligion100)
                  if 
    gc.getPlayer(iPlayer).isHuman():
                    
    iRand self.myRandom(3None)
                    
    CyInterface().addMessage(iPlayerTrue10CyTranslator().getText("TXT_KEY_MESSAGE_HERESY_2CHRIST_"+str(iRand),(pCity.getName(),0)), None2,"Art/Interface/Buttons/Actions/button_kreuz.dds"ColorTypes(11), pCity.getX(), pCity.getY(), TrueTrue
    Hat ja denselben Effekt, Christentum zu verbreiten. Ist eigentlich genau dasselbe, nur etwas komplizierter mit verschiedenen Chancen je nach Situation. Und hier sind Juden, Hindus, Buddhas und Jainis auch ausgeschlossen. Aber egal, mach das, wie du willst.
    Oh, stimmt! Ja, das kann ich eigentlich raustun!

    Das hab ich total vergessen. Was da für Schätze begraben sind im EventManager.....
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  4. #19
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    Nö, das lass ich drin. Es gäbe ja ne Wahrscheinlichkeit, dass eine phönizisch-religiöse Stadt keine Sklaven hat und sonst nie christlich werden kann, nach der Häresie. Sicher ist sicher.
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  5. #20
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Zitat Zitat von Pie Beitrag anzeigen
    Nö, das lass ich drin. Es gäbe ja ne Wahrscheinlichkeit, dass eine phönizisch-religiöse Stadt keine Sklaven hat und sonst nie christlich werden kann, nach der Häresie. Sicher ist sicher.
    Also ich finde, es ist redundant, beide drinnen zu haben. Wenn du willst, dass auch Städte ohne Sklaven das Christentum kriegen können, würd ich eher das alte behalten, vielleicht anpassen und das neue weglassen. Sonst wird's unübersichtlich.

    Nach Häresie ist sowieso egal, da du in der Runde der Erforschung der Häresie aus allen Städten (der Civ, die die Tech erforscht) alle Kulte (außer Indra) und alle Relis (außer Jaini, Buddha, Hindu, Juden) mit zugehörigen Gebäuden rauswirfst. Find ich ja etwas heftig Wobei man es natürlich auch umgekehrt sehen kann: Bis man so weit fortgeschritten ist, dass man Häresie forschen kann, ist das Christentum bereits weit verbreitet und unbesiegbar. Man kommt kaum noch umhin, sich dem zu beugen, und akzeptiert es als Staatsreli. Sobald das der Fall ist, will man alle anderen Relis loswerden, da sie für Unzufriedenheit sorgen - und deshalb erforscht man aus freiem Willen Häresie, um das in einer Runde ohne weiteren Aufwand zu erledigen. Dass dabei alle Kulte draufgehen, ist ein unschöner Nebeneffekt, aber es ist ja bereits so, dass Kulte wie auch Relis langsam entfernt werden, wenn die Stadt christlich ist - auf Dauer kann man die also auch kaum halten.

    Auch wenn es natürlich ein bisschen unrealistisch ist, auf einen Schlag alles mit der Häresie zu vernichten. Ist vielleicht ne Sache, der man sich später annehmen kann, aber das kommt ja so spät, dass es für gewöhnlich keine Relevanz hat, da ist das nicht so dringlich.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  6. #21
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Wir hatten ja mal diesen Bug im Versorgungsfeature, wenn ich beispielsweise zehn Druiden auf einem Feld hab, die alle voll (mit Versorgungstickets ) sind, und >100 Einheiten (ich lass mal außer Acht, dass man ja ab jetzt 19 Freieinheiten hat, ändert nichts am Prinzip). Sind z.B. 120 Einheiten auf dem Feld, werden nicht einfach 100 Versorgungstickets aus dem ersten und 20 aus dem zweiten Druiden genommen, sondern es sind auf einmal alle Druiden leer und die Einheiten nehmen trotzdem Schaden. Ganz einfach das Problem, dass nur der erste Versorgungswagen beachtet wird.
    Kann natürlich auch bei viel weniger Einheiten passieren: Wenn ich nur 30 Einheiten auf dem Feld habe, aber im ersten Versorgungswagen sind nur noch 10 Tickets, sind trotzdem auf einmal alle Druiden leer und die Einheiten nehmen Schaden.
    Ich meine, es hieß mal, dieser Fehler wäre behoben. Wie auch immer, als ich das mit meiner Testversion ausprobiert hab, war er noch da. Und jedenfalls ist hier die Stelle, die ich für dafür verantwortlich halte:

    PHP-Code:
             # Inits for Supply Units (nur notwendig, wenns Versorger gibt)
             
    if len(lHealer) > 0:

               
    # 2. Versorgen
               
    for loopUnit in lHealer:
                 if 
    iMounted <= and iMelee <= 0: break
                 if 
    loopUnit.getScriptData() == "" or loopUnit.getScriptData() == "0"iSupplyValue 0
                 
    else: iSupplyValue int(loopUnit.getScriptData())

                 
    # ***TEST***
                 #CyInterface().addMessage(gc.getGame().getActivePlayer(), True, 10, CyTranslator().getText("TXT_KEY_MESSAGE_TEST",("Supply Unit init "+str(loopUnit.getID()),iSupplyValue)), None, 2, None, ColorTypes(10), 0, 0, False, False)

                 
    if iSupplyValue 0:
                   
    # Mounted Units
                   
    if bDesert:
                     if 
    iSupplyValue iMounted 2:
                       
    iSupplyValue -= iMounted 2
                       iMounted 
    0
                     
    else:
                       
    iCalc iSupplyValue 2
                       iSupplyValue 
    -= iCalc 2
                       iMounted 
    -= iCalc
                   
    else:
                     
    iSupplyValue -= iMounted
                     
    if iSupplyValue 0:
                       
    iMounted -= iSupplyValue #<--
                       
    iSupplyValue 0
                     
    else: iMounted 0

                   
    # Melee Units
                   
    iSupplyValue -= iMelee
                   
    if iSupplyValue 0:
                     
    iMelee -= iSupplyValue #<--
                     
    iSupplyValue 0
                   
    else: iMelee 0

                   loopUnit
    .setScriptData(str(iSupplyValue))

                   
    # ***TEST***
                   #CyInterface().addMessage(gc.getGame().getActivePlayer(), True, 10, CyTranslator().getText("TXT_KEY_MESSAGE_TEST",("Supply Unit changed",iSupplyValue)), None, 2, None, ColorTypes(10), 0, 0, False, False)

             # 3. Units verletzen
             
    iSum iMounted iMelee
             
    if iSum 0:
                
    #[Einheiten verletzen...] 
    Hab die zwei Zeilen mit Pfeilen #<-- markiert. iMounted -= iSupplyValue und iMelee -= iSupplyValue; irgendwie finde ich, da müsste viel eher iMounted = -iSupplyValue und iMelee = -iSupplyValue stehen.
    [Ich analysier das mal kurz zur Erläuterung des Problems durch, falls es noch nicht klar ist; mir ist natürlich bewusst, dass du das alles selbst mal geschrieben hast und weißt, wofür der ganze Kram gut ist ]
    Hier werden ja alle Healer durchgeloopt, iMelee speichert die Zahl der noch zu versorgenden Nicht-Reiter (Plänkler z.B. zählen hier auch zu Melee), iMounted die der noch zu versorgenden Reiter.

    PHP-Code:
                   # Melee Units
                   
    iSupplyValue -= iMelee
                   
    if iSupplyValue 0:
                     
    iMelee -= iSupplyValue #<--
                     
    iSupplyValue 0
                   
    else: iMelee 
    Es wird vom Versorgungskonto des Heilers die Zahl der noch zu versorgenden Melees/Reiter (der Unterschied ist nur in Wüsten relevant und da die korrekt funktionieren, ist es egal) abgezogen; wenn das Konto ausreicht, ist alles gut; wenn nicht, sollte das Konto des Heilers auf 0 und die Zahl der noch zu versorgenden Einheiten um die Anzahl der verbrauchten Tickets reduziert werden. So. Stünde da nun iMelee = -iSupplyValue, wäre es richtig, denn: iSupplyValue = iSupplyValue - iMelee, also -SupplyValue = iMelee - Supplyvalue; also die vorher noch zu versorgenden Einheiten minus die, die durch die Tickets des Heilers versorgt wurden. Würde also passen.
    Das Problem an dem Code, wie er im Moment ist, ist, dass sich der Grundwert von iSupplyValue ja verändert hat: Du hast schon iMelee davon abgezogen. Nun subtrahierst du von iMelee einen negativen Wert (da die Bedingung ja ist, dass iSupply < 0 ist), iMelee (und damit die Anzahl der Einheiten, die noch versorgt werden müssen) wird immer größer. Deshalb leeren sich alle Versorgungswägen, weil jeder zwar geleert wird, aber das Futter quasi nicht ankommt, sondern stattdessen immer mehr Leute Hunger haben Wenn man Glück hat, kommt rechtzeitig ein voller Versorgungswagen, der alles abfängt, aber ist iMelee erst mal über 200 (für Druiden und Brahmanen nur 100) hinaus, ist alles verloren, das gesamte Futter ist weg und trotzdem nimmt man Schaden, da noch hungrige Einheiten übrig sind.
    Also entweder iMelee -= iSupplyValue zu iMelee = -iSupplyValue ändern (dasselbe auch für Mounted) oder das

    PHP-Code:
                   iSupplyValue -= iMelee
                   
    if iSupplyValue 0
    dazu

    PHP-Code:
                   if iSupplyValue iMelee
    ändern (so wie es auch in der Wüste gemacht wird), dadurch wird der Grundwert von iSupplyValue nicht geändert und iMelee -= iSupplyValue würde richtig funktionieren.

    Ich konnt das jetzt allerdings auch nicht testen, aufgrund meiner im Faden nebenan nachzulesenden Python-Probleme. Sieht für mich aber so richtig aus...

    Ach, und außerdem würd ich iStackLimit1 auf 20 (statt 19) erhöhen. Im Moment hat man 19 Einheiten, die frei mit Nahrung versorgt werden, mit 20 könnte man besser rechnen. Vorher war es ja 19, weil damit das Limit, ab dem man versorgen muss, 20 war und damit einen schönen Wert hatte; aber da wir ja jetzt statt dem Limit quasi eine Freiversorgung für x Einheiten haben, find ich den Wert wichtiger und würd ihn deshalb auf 20 festlegen. Dann müsste man ab 21 Einheiten einen Versorgungswagen in Stacks haben.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  7. #22
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    Stimmt! An das hab ich gar net gedacht! Ein typischer Denkfehler des Programmierers
    Werd ich jetzt ausbessern. DANKE!
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  8. #23
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Fürs Protokoll: Funktioniert
    Ich denke, ich schaff das Versorgungs-Konzept dann heute noch. Wenn das geschafft es, wäre für die Veröffentlichung von PAE V vonseiten der Konzepte alles fertig (zumindest im Deutschen und Englischen). Die andern Konzepte werd ich auch noch durchgehen, aber ich geh davon aus, dass die weitgehend richtig sind bzw. sind sie zu wenig bedeutend, um die Veröffentlichung deshalb zu verzögern. Patches wird es ja ohnehin geben.
    Dazu nur noch eine Sache: Bleibt die Anzahl versorgungsfreier Einheiten bei 19 oder wird sie auf 20 erhöht?

    Aber irgendwie... Mir fällt grade auf, außer durch Plünderung von Modernisierungen funktioniert bei mir das Aufladen von Versorgern überhaupt nicht. Kann das jemand bestätigen? Finde aber auch keinen Fehler im Code.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  9. #24
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Des Weiteren...

    PHP-Code:
        iFactor 1
        iMaintainUnits 
    pCity.getYieldRate(0) * iFactor iCityUnits

        
    if iMaintainUnits 0:

          
    # choose units
          # calculate food supply from SUPPLY_WAGON
          
    iExtraSupply 0
          lUnitsAll 
    = []
          
    iRange pCityPlot.getNumUnits()
          for 
    i in range (iRange):
              if 
    pCityPlot.getUnit(i).getUnitCombatType() != -1:
                if 
    pCityPlot.getUnit(i).getUnitCombatType() == gc.getInfoTypeForString("UNITCOMBAT_HEALER"):
                   if 
    pCityPlot.getUnit(i).getScriptData() != "":
                     
    iExtraSupply += int(pCityPlot.getUnit(i).getScriptData())
                else:
                  
    lUnitsAll.append(pCityPlot.getUnit(i))

          if 
    iExtraSupply <= and len(lUnitsAll) > 0:
             [
    Einheiten beschädigenSeuche etc.] 
    Geht um die Versorgung von Einheiten in einer Stadt. Wenn die Stadt nicht genügend Nahrung für alle Einheiten produziert, werden die Versorgungswägen genutzt. An sich ne tolle Sache. Nur zwei Dinge:
    1. Wenn iExtraSupply > 0 ist, ist die Versorgung ausreichend, es passiert nichts weiter (das letzte if hat kein else). Das heißt: Wenn in der Stadt nur ein Versorgungswagen steht, der auch nur ein Versorgungsticket hat, ist die Versorgung ausreichend, auch wenn in der Stadt 100 Einheiten stehen und sie nur 10 produziert. Ich denke, da hast du vergessen, iExtraSupply und iMaintainUnits miteinander zu addieren, also if iExtraSupply + iMaintainUnits < 0 (wieso es <= und nicht < sein sollte, versteh ich auch nicht).
    2. Nehmen wir mal an, Problem 1 wäre gelöst und die Versorgung wird nur als ausreichend gewertet, wenn auch genügend Versorgungstickets da sind. Dann sollten diese Tickets auch verbraucht und aus dem Versorgungswagen entfernt werden, oder? Das geschieht nämlich nicht, der Inhalt des Wagens bleibt unangetastet.

    Ich würde das also so machen (man behalte im Hinterkopf, dass iMaintainUnits immer <= 0 ist... Fast hätt ich alles falsch gemacht ):

    PHP-Code:
          for i in range (iRange):
              if 
    pCityPlot.getUnit(i).getUnitCombatType() != -1:
                if 
    pCityPlot.getUnit(i).getUnitCombatType() == gc.getInfoTypeForString("UNITCOMBAT_HEALER"):
                   if 
    pCityPlot.getUnit(i).getScriptData() != "":
                     if 
    iMaintainUnits 0:
                         
    iExtraSupply int(pCityPlot.getUnit(i).getScriptData())
                         if 
    iExtraSupply >= -iMaintainUnits:
                             
    iMaintainUnits 0
                             iExtraSupply 
    += iMaintainUnits
                         
    else:
                             
    iMaintainUnits += iExtraSupply
                             iExtraSupply 
    0
                         pCityPlot
    .getUnit(i).setScriptData(str(iExtraSupply))
                else:
                  
    lUnitsAll.append(pCityPlot.getUnit(i))

          if 
    iMaintainUnits and len(lUnitsAll) > 0
    Und noch zum Aufladen eines Versorgers in Städten: Hast du bei

    iSupplyChange += pCity.getYieldRate(0) - loopPlot.getNumDefenders(iPlayer)

    auch bedacht, dass pCity.getYieldRate(0) - loopPlot.getNumDefenders(iPlayer) auch negativ sein kann? Wenn die Stadt gar nicht alle Einheiten versorgen kann? Ich denke, es sollte vorher erst geprüft werden, ob pCity.getYieldRate(0) - loopPlot.getNumDefenders(iPlayer) > 0, und dann sollte es dazu addiert werden. Wenn iSupplyChange negativ wird, verliert der Versorger ja Tickets; das ist aber nicht nötig/wäre doppelt, da das ja bereits in obigem Code geschieht.
    Und nein, bevor jemand fragt, das negative iSupplyChange ist nicht der Ausgleich dafür, dass im anderen Code (oben) den Versorgern keine Tickets weggenommen werden Angenommen, man lässt es, wie es ist, und man hätte eine Stadt mit 50 Einheiten, die 30 produziert, und zwei vollen Versorgern. Dann würden beiden Versorgern 20 Tickets abgezogen, es sollten aber nur einem 20 abgezogen werden. Die Änderungen sind also, denk ich, beide notwendig.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  10. #25
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    Wiedermal ein großes von mir!
    Ich bin total vergesslich. An das Entladen hab ich nicht gedacht.
    Und beim anderen hab ich bestimmt das eine ein andermal geschrieben, sodass ich das andere schon längst vergessen hatte

    Und um mich zu rechtfertigen:
    <= hatte den Grund, da ja, wenn kein Versorger drin steht is der Wert 0. Bei < 0 würde das Feature also nicht greifen.

    also ich hab das ganze jetzt so ähnlich eingebettet (du hast nen kleinen Gedankenfehler bei if iExtraSupply >= -iMaintainUnits: du setzt iMain auf 0 und addierst sie nachher) und das ganze sieht jetzt so aus:
    (ich hab auch ein break reingemacht, um das ganze zu beschleunigen, wenn alle Einheiten versorgt wurden)

    PHP-Code:
        iFactor 1
        iMaintainUnits 
    iCityUnits pCity.getYieldRate(0) * iFactor

        
    if iMaintainUnits 0:

          
    # choose units
          # calculate food supply from SUPPLY_WAGON
          
    iExtraSupply 0
          lUnitsAll 
    = []
          
    iRange pCityPlot.getNumUnits()
          for 
    i in range (iRange):
              if 
    pCityPlot.getUnit(i).getUnitCombatType() != -1:
                if 
    pCityPlot.getUnit(i).getUnitCombatType() == gc.getInfoTypeForString("UNITCOMBAT_HEALER"):
                   if 
    pCityPlot.getUnit(i).getScriptData() != "":
                     
    iExtraSupply int(pCityPlot.getUnit(i).getScriptData())
                     if 
    iExtraSupply iMaintainUnits:
                       
    iMaintainUnits -= iExtraSupply
                       iExtraSupply 
    0
                     
    else:
                       
    iExtraSupply -= iMaintainUnits
                       iMaintainUnits 
    0
                     
    # set new supply tickets
                     
    pCityPlot.getUnit(i).setScriptData(iExtraSupply)
                else:
                  
    lUnitsAll.append(pCityPlot.getUnit(i))

              if 
    iMaintainUnits == 0: break

          if 
    iMaintainUnits and len(lUnitsAll) > 0:
            
    lUnits = []
            while 
    iMaintainUnits 0:
              
    iRand self.myRandom(len(lUnitsAll), None)
              
    lUnits.append(lUnitsAll[iRand])
              
    lUnitsAll.remove(lUnitsAll[iRand])
              
    iMaintainUnits -= 
    Und beim 2ten Punkt - dem Aufladen - überprüf ich jetzt auf > 0. Sonst wärs doppelt. Danke!
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  11. #26
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Zitat Zitat von Pie Beitrag anzeigen
    <= hatte den Grund, da ja, wenn kein Versorger drin steht is der Wert 0. Bei < 0 würde das Feature also nicht greifen.
    Oh, ja, hast Recht, das wär Käse. iExtraSupply < 0 wär totaler Quatsch, das ist ja nie der Fall

    Zitat Zitat von Pie Beitrag anzeigen
    (du hast nen kleinen Gedankenfehler bei if iExtraSupply >= -iMaintainUnits: du setzt iMain auf 0 und addierst sie nachher)
    Argh Ja, Zeilen falschrum.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  12. #27
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Noch eine Kleinigkeit. Wirklich ne Kleinigkeit. Eigentlich find ich es ja ok so, wie es ist, aber es klingt bescheuert, wenn man das in der Zivilopädie beschreibt.

    PHP-Code:
              for unit in lUnits:
                 
    # Unit nicht mehr killen (Weihnachtsbonus :D ab 7.12.2012)
                 
    iDamage unit.getDamage()
                 if 
    iDamage 70:
                   
    unit.changeDamage(30,False)
                   if 
    gc.getPlayer(unit.getOwner()).isHuman():
                       
    CyInterface().addMessage(unit.getOwner(), True5CyTranslator().getText("TXT_KEY_MESSAGE_NOSUPPLY_CITY",(pCity.getName(),unit.getName(),30)), None2NoneColorTypes(12), unit.getX(), unit.getY(), TrueTrue)
                 else:
                   
    iJumpedOut += 1
                   
    if unit.getDamage() < 85unit.setDamage(85,unit.getOwner())
                   
    unit.jumpToNearestValidPlot()
                   if 
    gc.getPlayer(unit.getOwner()).isHuman():
                     
    CyInterface().addMessage(unit.getOwner(), True5CyTranslator().getText("TXT_KEY_MESSAGE_CITY_UNITS_STARVATION_4",(pCity.getName(),unit.getName())), None2unit.getButton(), ColorTypes(12), unit.getX(), unit.getY(), TrueTrue)

              
    # Wenn die Stadt durch Buildings stark heilt
              
    if iJumpedOut == 0:
                   
    # Chance rauszuwerfen 33%
                   
    if == self.myRandom(3None):
                     
    Einheiten self.myRandom(len(lUnits), None)
                     while 
    unit in lUnits and Einheiten 0:
                       
    Einheiten -= 1
                       iRandUnit 
    self.myRandom(len(lUnits), None)

                       
    lUnits[iRandUnit].jumpToNearestValidPlot()
                       if 
    pPlayer.isHuman():
                         
    CyInterface().addMessage(pCity.getOwner(), True10CyTranslator().getText("TXT_KEY_MESSAGE_CITY_UNITS_STARVATION_4",(pCity.getName(),lUnits[iRandUnit].getName())), "AS2D_STRIKE"2lUnits[iRandUnit].getButton(), ColorTypes(7), lUnits[iRandUnit].getX(), lUnits[iRandUnit].getY(), TrueTrue)
                        
    # Einheit aus dem Array werfen
                       
    lUnits.remove(lUnits[iRandUnit]) 
    Ist eine Einheit so stark geschwächt, dass sie durch die Verletzung sterben würde, muss sie die Stadt verlassen. Müssen keine Einheiten die Stadt verlassen, gibt es trotzdem eine Chance von 33%, dass welche die Stadt verlassen müssen.
    Mir ist schon klar, dass du das machst, damit es immer eine Chance gibt, dass Einheiten aus der Stadt fliegen, speziell wenn in der Stadt so viele heilende Gebäude (Apotheke etc.) stehen, dass kaum eine Einheit so stark geschwächt ist, dass sie rausgeworfen wird. Aber es ist einfach komisch, den Spieler dafür zu bestrafen, dass seine Einheiten gesund sind. Vor allem kann es dadurch viel schlimmer kommen: Wenn das zweite eintritt, wird durchschnittlich die Hälfte aller nicht versorgten Einheiten aus der Stadt geworfen; während normalerweise nur die ganz schwachen rausgeworfen werden. So kann es kommen, dass man besser dran ist, wenn man in der Stadt ein paar schwache Einheiten hat, als wenn alle gesund sind. Stattdessen würd ich zusätzlich dazu, dass jede Einheit mit iDamage>=70 rausgeworfen wird, für jede andere Einheit eine Chance von, sagen wir, 10% einbauen, dass sie rausgeworfen wird (und Generäle sollten vielleicht nicht rausgeworfen werden können - find ich nicht unbedingt realistisch, dass bei einer Nahrungsknappheit der General vor die Tür gesetzt wird, während andere drinnenbleiben können ). Erscheint mir sinnvoller und für den Spieler nachvollziehbarer. Aber wie gesagt, nur ein Vorschlag, ist deine Sache.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  13. #28
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    Das könnt aber kritisch werden mit dem while. Endlosschleife möglich!
    hm.. besser dran mit verletzen einheiten? wie willst du denn verletzte einheiten in die stadt setzen, die verletzt bleiben?
    Dass Helden und Generäle nicht rausgeworfen werden sollten, lass ich mir noch einreden. Dann dürfen sie halt nicht in lUnits zugewiesen werden.
    Aber die Überprüfung mag ich so belassen, weil es die rundenzeitfreundlichste ist. sonst bräuchte man eine 2te Liste, die man als Priorität setzt.
    Also ich würds lassen wie es ist, aber wenn du magst, verhindere, dass Generäle und Helden in die lUnits kommen.
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  14. #29
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Zitat Zitat von Pie Beitrag anzeigen
    hm.. besser dran mit verletzen einheiten? wie willst du denn verletzte einheiten in die stadt setzen, die verletzt bleiben?
    Ja, stimmt schon, man kann nur schwierig selbst dafür sorgen, dass immer verletzte Einheiten in der Stadt stehen. Ich mein auch nur, dass es komisch ist, dass man Nachteile hat, wenn alle Einheiten gesund sind; auch wenn man darauf selbst nicht so viel Einfluss nehmen kann (wenn man nicht wirklich will).

    Generäle und Helden:

    PHP-Code:
          if iMaintainUnits and len(lUnitsAll) > 0:
            
    lUnits = []
            
    iPromoLeader gc.getInfoTypeForString('PROMOTION_LEADER')
            
    iPromoHero gc.getInfoTypeForString('PROMOTION_HERO')
            while 
    iMaintainUnits 0:
              
    iRand self.myRandom(len(lUnitsAll), None)
              if 
    not (lUnitsAll[iRand].isHasPromotion(iPromoLeader) or lUnitsAll[iRand].isHasPromotion(iPromoHero)):
                  
    lUnits.append(lUnitsAll[iRand])
              
    lUnitsAll.remove(lUnitsAll[iRand])
              
    iMaintainUnits -= 
    MaintainUnits wird trotzdem auch bei Generälen/Helden um eins reduziert, da man ja sonst in eine Endlosschleife käme, wenn in der Stadt nur Generäle und Helden stehen.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  15. #30
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    Stimmt auch wieder
    Lass ma so.

    Ausserdem: was ist das für ein asoziales Gedankengut, nur kranke und wehrlose aus Städte zu verbannen!?!?
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

Seite 2 von 5 ErsteErste 12345 LetzteLetzte

Berechtigungen

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