Seite 3 von 180 ErsteErste 12345671353103 ... LetzteLetzte
Ergebnis 31 bis 45 von 2699

Thema: Der SDK-Fragen-Thread

  1. #31
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Zitat Zitat von deepwater Beitrag anzeigen
    Weiß nicht wofür das Makro GET_PLAYER steht, evt. bezieht es sich auch auf CvPlayerAi, Glaubs aber eher nicht.
    GET_PLAYER(getOwnerINLINE) ist der Stadtbesitzer. Im Originalcode ist das ja auch schon drin.



    Zitat Zitat von Cybah Beitrag anzeigen
    Ich hab mir jetzt die Arbeit gemacht und in CIV4TraitInfos.xml TradeYieldChanges eingebaut. Jetzt muss ich im SDK darauf zugreifen, damit ich den Wert (bei dir 5) nicht immer im SDK ändern muss, wenn ich mal was ändern will.
    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)

  2. #32
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.405
    Bei den Fanatics gibt's ein Tutorial wie man XML Werte in das SDK einbaut. da könntest du beim Trait das Ding einbauen.

  3. #33
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Ich hab ja schon alles. Ich muss nur noch an der richtigen Stelle auf die Trait Änderung zugreifen.
    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)

  4. #34
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Irgendwie so muss das hinterher aussehen, wenn das ans updateTradeRoutes drankommt:

    PHP-Code:
        //Traits with trade routes yields 
        
    for (int iTrait 0iTrait GC.getNumTraitInfos(); iTrait++) 
        { 
            
    TraitTypes eTrait = (TraitTypes)iTrait
            if (
    GET_PLAYER(getOwnerINLINE()).hasTrait(eTrait)) 
            { 
                for (
    int iYieldLoop 0iYieldLoop NUM_YIELD_TYPESiYieldLoop++) 
                {
                    
    setTradeYield(((YieldTypes)iYieldLoop), GC.getTraitInfo(eTrait).getTradeRouteYieldChanges(iYieldLoop));
                }
            }
        } 


    Edit: Wohl eher in den Teil vom Original mit einbauen:

    PHP-Code:
        for (iI 0iI NUM_YIELD_TYPESiI++)
        {
            
    setTradeYield(((YieldTypes)iI), calculateTradeYield(((YieldTypes)iI), iTradeProfit)); // XXX could take this out if handled when CvPlotGroup changes...

            //Traits with trade routes yields 
            
    for (int iTrait 0iTrait GC.getNumTraitInfos(); iTrait++) 
            { 
                
    TraitTypes eTrait = (TraitTypes)iTrait
                if (
    GET_PLAYER(getOwnerINLINE()).hasTrait(eTrait)) 
                { 
                    
    setTradeYield( ((YieldTypes)iI), GC.getTraitInfo(eTrait).getTradeRouteYieldChanges((YieldTypes)iI) );
                }
            }
        } 
    Geändert von Cybah (02. August 2011 um 17:14 Uhr)
    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. #35
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von Cybah Beitrag anzeigen
    edit:

    PHP-Code:
    1>CvCity.cpp(9239) : error C2039'getTradeYieldChange' is not a member of 'CvPlayerAI' 
    was hat die AI jetzt damit zu tun?
    Die ganzen Klassen wie "CvPlayer", "CvCity", "CvUnit" usw. sind abstrakte Klassen, und "CvPlayerAI", "CvCityAI", "CvUnitAI" sind konkrete Implementierungen.
    Im Code merkt man davon meist nichts, da man auf Polymorphismus setzt.

  6. #36
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Es geht nicht verdammte Sch......

    Jetzt werde ich mal deepwaters Vorschlag ausprobieren. Wenn der so geht, dann liegts daran, dass er die Werte nicht vernünftig aus der TraitInfos ausliest.
    Geändert von Cybah (02. August 2011 um 17:28 Uhr)
    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. #37
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Dein Vorschlag geht auch nicht... kommt zwar wie bei mir keine Fehlermeldung, aber es wird keine Produktion hinzugefügt.

    Testcode:

    PHP-Code:
        if (GET_PLAYER(getOwnerINLINE()).hasTrait((TraitTypes)GC.getInfoTypeForString("TRAIT_CHARISMATIC")))
        { 
            
    setTradeYield((YieldTypes)GC.getInfoTypeForString("YIELD_PRODUCTION"), 5); 
        } 
    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. #38
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Zitat Zitat von alpha civ Beitrag anzeigen
    Die ganzen Klassen wie "CvPlayer", "CvCity", "CvUnit" usw. sind abstrakte Klassen, und "CvPlayerAI", "CvCityAI", "CvUnitAI" sind konkrete Implementierungen.
    Im Code merkt man davon meist nichts, da man auf Polymorphismus setzt.
    häh??
    Zitat Zitat von Cybah Beitrag anzeigen
    Irgendwie so muss das hinterher aussehen, wenn das ans updateTradeRoutes drankommt:

    PHP-Code:
        //Traits with trade routes yields 
        
    for (int iTrait 0iTrait GC.getNumTraitInfos(); iTrait++) 
        { 
            
    TraitTypes eTrait = (TraitTypes)iTrait
            if (
    GET_PLAYER(getOwnerINLINE()).hasTrait(eTrait)) 
            { 
                for (
    int iYieldLoop 0iYieldLoop NUM_YIELD_TYPESiYieldLoop++) 
                {
                    
    setTradeYield(((YieldTypes)iYieldLoop), GC.getTraitInfo(eTrait).getTradeRouteYieldChanges(iYieldLoop));
                }
            }
        } 


    Edit: Wohl eher in den Teil vom Original mit einbauen:

    PHP-Code:
        for (iI 0iI NUM_YIELD_TYPESiI++)
        {
            
    setTradeYield(((YieldTypes)iI), calculateTradeYield(((YieldTypes)iI), iTradeProfit)); // XXX could take this out if handled when CvPlotGroup changes...

            //Traits with trade routes yields 
            
    for (int iTrait 0iTrait GC.getNumTraitInfos(); iTrait++) 
            { 
                
    TraitTypes eTrait = (TraitTypes)iTrait
                if (
    GET_PLAYER(getOwnerINLINE()).hasTrait(eTrait)) 
                { 
                    
    setTradeYield( ((YieldTypes)iI), GC.getTraitInfo(eTrait).getTradeRouteYieldChanges((YieldTypes)iI) );
                }
            }
        } 
    Weiß nicht, warums nicht funktioniert, ich bin mir nicht sicher, ob man bei Zeigern (was GC.getTraitInfo(eTrait) zurückliefert) den Punktoperator benutzen darf, oder ob man da diesen Pfeil nehmen muss. (->)

  9. #39
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    In meinem letzten Posting steht der richtige Code, trotzdem gehts nicht.
    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)

  10. #40
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Zitat Zitat von Cybah Beitrag anzeigen
    Dein Vorschlag geht auch nicht... kommt zwar wie bei mir keine Fehlermeldung, aber es wird keine Produktion hinzugefügt.

    Testcode:

    PHP-Code:
        if (GET_PLAYER(getOwnerINLINE()).hasTrait((TraitTypes)GC.getInfoTypeForString("TRAIT_CHARISMATIC")))
        { 
            
    setTradeYield((YieldTypes)GC.getInfoTypeForString("YIELD_PRODUCTION"), 5); 
        } 
    Doch, das wird schon hinzugefügt, nur nirgends angezeigt. Oben in der Leiste sieht man dann, dass unter Grundwert 5 ominöse neue Schilde auftauchen.
    Geändert von deepwater (02. August 2011 um 17:57 Uhr)

  11. #41
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    sicher? dann muss meins doch auch irgendwie gehen. grrrr.
    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. #42
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    simple Frage, der leader ist schon charismatisch?
    Ist die Test Stadt die Hauptstadt, besitzt sie einen oben links angezeigten Handelsweg? Ich kann dir mal meine Test-Karte schicken, musst halt nur den ModPfad ändern. Achja, ich glaube, man muss auch noch eine Resource handeln, damit ein Handelsweg entsteht. (Macht ja auch Sinn.)
    Auf der Karte ist Justinian, musst du halt verändern, in einen mit charismatisch.
    Angehängte Dateien Angehängte Dateien
    Geändert von deepwater (02. August 2011 um 18:33 Uhr)

  13. #43
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Klar isser das.

    Das ist aber nur einmal 5, in meinem BASE Spiel mit 3 Handelswegen sinds trotzdem nur 5.

    Habs jetzt mal testweise auf 100 erhöht, 300 werdens auch nicht. setTradeYield scheint bereits die Summe aller Handelswege zu sein.

    Abfragen aus den Traitinfos funktioniert übrigens. Habs mit nem TXT Link getestet.
    Geändert von Cybah (02. August 2011 um 19:57 Uhr)
    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. #44
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von deepwater Beitrag anzeigen
    häh??
    Abstrakte Klassen sind Klassen, die mindestens eine Methode enthalten, die zwar eine Deklaration besitzt, aber keine Implementierung hat.
    Beispiel:
    PHP-Code:
    virtual void AI_chooseFreeTech() = 0
    Diese Methode ist abstrakt (wegen = 0) und virtuell. Virtuelle Methoden sind für den Polymorphismus wichtig (wird hier gut erklärt).

    Weiß nicht, warums nicht funktioniert, ich bin mir nicht sicher, ob man bei Zeigern (was GC.getTraitInfo(eTrait) zurückliefert) den Punktoperator benutzen darf, oder ob man da diesen Pfeil nehmen muss. (->)
    Bei Zeigern muss man immer den "->"-Operator verwenden. Damit Dereferenziert man, d.h. man arbeitet mit dem Objekt, auf das gezeigt wird und nicht mit dem Zeiger. Zeiger haben keine Methoden, sondern die Objekte, auf die gezeigt wird.

  15. #45
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Habs hinbekommen, war eigentlcih gar nicht so schwierig im Nachhinein:

    PHP-Code:
    // Cybah - BASE: TradeRouteYieldChange START
        
    int iTraitYield 0;
        for (
    iI 0iI NUM_YIELD_TYPESiI++)
        {
            
    //Trait yields, and traits with trade routes yields
            
    for (int iTrait 0iTrait GC.getNumTraitInfos(); iTrait++)
            {
                
    TraitTypes eTrait = (TraitTypes)iTrait;
                if (
    GET_PLAYER(getOwnerINLINE()).hasTrait(eTrait))
                {
                    for (
    int iTradeCity 0iTradeCity getTradeRoutes(); iTradeCity++)
                    {
                        
    CvCitypTradeCity getTradeCity(iTradeCity);
                        if (
    pTradeCity != NULL)
                        {
                            
    iTraitYield += GC.getTraitInfo(eTrait).getTradeRouteYieldChanges(iI);
                        }
                    }
                }
            }

            
    setTradeYield( ((YieldTypes)iI), (calculateTradeYield(((YieldTypes)iI), iTradeProfit) + iTraitYield) ); // XXX could take this out if handled when CvPlotGroup changes...
    // Cybah - BASE: TradeRouteYieldChange END 
    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)

Seite 3 von 180 ErsteErste 12345671353103 ... LetzteLetzte

Berechtigungen

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