Seite 6 von 180 ErsteErste ... 23456789101656106 ... LetzteLetzte
Ergebnis 76 bis 90 von 2699

Thema: Der SDK-Fragen-Thread

  1. #76
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von deepwater Beitrag anzeigen
    huuuuuiiiii, peinlich, Sorry, war ne blöde Frage.
    Echt, ist mir nie aufgefallen, dass die Abstrakt war, aber was hat das für einen Sinn, wahrscheinlich zur Moddingfreundlichkeit.
    Man hat die Ai in eine eigene, von CvCity abgeleiteten Klasse gekapselt. Deswegen ist es wenig sinnvoll, CvCity als eigenständige Klasse einzusetzen (ohne Ai wenig sinnvoll). Dank Polymorphie merkt man aber im Code wenig davon. Überall im Code enthält eine mit Variable mit Typ CvCity keine Objekt der Klasse CvCity (was auch nicht gehen kann, da CvCity abstrakt), sondern CvCityAi. Theoretisch (wenn auch praktisch kompliziert) wäre es möglich, eigene Ai-Klassen zuschreiben (die von CvCity erben) und diese zu verwenden statt CvCityAi. Man könnte das auch zur Laufzeit tun.

  2. #77
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Naja, nicht unbedingt zur Laufzeit, so high-level ist C++ leider nicht Aber ja, man kann ne ganz neue Subklasse schreiben, sie kompilieren und das mit dem monate vorher kompilierten Rest der .o-Dateien zusammenlinken

    Was ist denn nun aus dem Fehler geworden? Hast du mal meinen Lösungsansatz versucht?

  3. #78
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Ja, ich frag einfach vorher noch ab, ob der Zeiger null ist. In dem Fall hat das Feld halt keine Stadt, die es bearbeitet.

    ...too old...

  4. #79
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  5. #80
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    In welcher Zeile taucht der Fehler auf?
    Sieht mir irgendwie danach aus, als ob du versuchst, ein Array mit Größe 0 zu initialisieren.

    Edit:

    Eine mögliche Fehlerquelle ist die Variable k. In den if's fragst du ab, ob k > -1 sein soll. Es muss aber k > 0 sein, wenn du Array's mit der Länge k initialisieren willst. Ein Array kann nicht die Länge 0 haben:
    PHP-Code:
    CvTraitInfo::read
    (...)
      

       [...]
                for(
    j=0;j<iNumChildren;j++)
                {
                    
    pXML->GetChildXmlValByName(szTextVal"SpecialistType");
                    
    pXML->FindInInfoClass(szTextVal);
                    if (
    > -1// !!!!
                    
    {
                        
    // delete the array since it will be reallocated
                        
    SAFE_DELETE_ARRAY(m_ppaiSpecialistCommerceChange[k]);  // Gefährlich, k kann 0 sein!
                        
    if (gDLL->getXMLIFace()->SetToChildByTagName(pXML->GetXML(),"CommerceChanges"))
                        {
                            
    // call the function that sets the yield change variable
                            
    pXML->SetCommerce(&m_ppaiSpecialistCommerceChange[k]);
                            
    gDLL->getXMLIFace()->SetToParent(pXML->GetXML());
                        }
                        else
                        {
                            
    pXML->InitList(&m_ppaiSpecialistCommerceChange[k], NUM_COMMERCE_TYPES);
                        }
                    }

                    if (!
    gDLL->getXMLIFace()->NextSibling(pXML->GetXML()))
                    {
                        break;
                    }
                }

                
    // set the current xml node to it's parent node
                
    gDLL->getXMLIFace()->SetToParent(pXML->GetXML());
            }

            
    // set the current xml node to it's parent node
            
    gDLL->getXMLIFace()->SetToParent(pXML->GetXML());
        } 
    Geändert von alpha civ (24. August 2011 um 21:46 Uhr)

  6. #81
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    also ich hab das 1:1 aus ner anderen mod rauskopiert. und dort funktionierts. hab vorhin noch gesehen, dass er in der cvplayer.cpp einige stellen zu traitboni auskommentiert hat, möglicherweise hat er die reihenfolge so irgendwie umgangen.

    der fehler tritt beim starten von civ4 auf, debugging ist praktisch nicht möglich.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  7. #82
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  8. #83
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Vermutlich muss man auch noch alle Zivilisationen durchgehen, damit es nur false ist, wenn alle unique buildings der buildingclass nicht drin sind oder so.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  9. #84
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.405
    PHP-Code:
    bool CvCity::canConstruct(BuildingTypes eBuildingbool bContinuebool bTestVisiblebool bIgnoreCost) const
    {
    ...


            for (
    iI 0iI GC.getNumBuildingClassInfos(); iI++)
            {
                if (
    GC.getBuildingInfo(eBuilding).isBuildingClassNeededInCity(iI))
                {
                    
    ePrereqBuilding = ((BuildingTypes)(GC.getCivilizationInfo(getCivilizationType()).getCivilizationBuildings(iI))); [B]<<< Das sieht auch interessant aus :gruebel: [/B]

                    if (
    ePrereqBuilding != NO_BUILDING)
                    {
                        if (
    == getNumBuilding(ePrereqBuilding) [B] or HIER NOCH HINZUFÜGEN DAS ES ÜBERPRÜFEN SOLL OB DA EIN UB STEHT DAS DEN DIE VORRAUSSETZUNG ERFÜLLT[/B/* && (bContinue || (getFirstBuildingOrder(ePrereqBuilding) == -1))*/)
                        {
                            return 
    false;
                        }
                    }
                }
            } 

  10. #85
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    die frage ist, warum er überhaupt mit dem buildingtype arbeitet... man kann doch sowieso nicht mehr als ein buildingtype einer buildingclass bauen.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  11. #86
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Ich versuchs mal zu übersetzen:

    1.Gehe alle Gebäudeklassen durch

    2. Wenn ein Gebäude einer Gebäudeklasse entspricht, die benötigt wird

    3. Gucke nach, ob für das Gebäude ein UB in der eigenen Ziv existiert

    4. Wenn ein UB für die benötigte Gebäudeklasse vorhanden ist

    5. Und dieses UB nicht vorhanden ist

    6. Verbiete den Bau des geplanten Gebäudes



    Frage: Wo werden da die Gebäude, die kein UB sind, abgearbeitet?



    Edit:

    Kann es sein, dass wenn kein UB existiert, das CivilizationBuilding dann einfach das standard Gebäude ist?

    Das würde heißen, dass jede Ziv ne Gebäudeliste hat und bei den Mali taucht dann die Münzanstalt anstelle der Schmiede auf. Damit hat sichs Firaxis natürlich einfach gemacht, wie kann man da jetzt die fremden Gebäude mit einbeziehen?
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  12. #87
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.405
    PHP-Code:
                    ePrereqBuilding = ((BuildingTypes)(GC.getCivilizationInfo(getCivilizationType()).getCivilizationBuildings(iI))); [B]<<< Das sieht auch interessant aus :gruebel: [/B
    Wenn ich das richtig sehe dann hier. Es wird überprüft ob ein UB existiert und dann wird es überschrieben, existiert keins bleibt wird der Eingabe Wert zurückgegeben.

  13. #88
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Also wie mein Edit.... habs befürchtet. Hm.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  14. #89
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Also im Python gibts sowas hier:

    gc.getBuildingClassInfo(iBuilding).getDefaultBuildingIndex()

    aber das bringt mir nix, es muss ja die UB der anderen miteinbeziehen und nicht das defaultbuilding.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  15. #90
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.405
    Zitat Zitat von Cybah Beitrag anzeigen
    Also wie mein Edit.... habs befürchtet. Hm.
    Im Grunde musst du untendrunter eine Forschleife machen die die alle anderen möglichen UB überprüft.

    Statt return false kommt da dalso ein bool: found = false rein

    Vor der Vorschleife kommt ein if false ...
    forschleife
    Jedes UB überprüfen
    Falls UB in der Stadt vorhanden
    return true
    }}}}
    return found

    oder so

Seite 6 von 180 ErsteErste ... 23456789101656106 ... LetzteLetzte

Berechtigungen

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